probleme avec InCellDropDown

andsim34

XLDnaute Nouveau
Bonjour à tous.

Voila, j'ai un soucis avec une macro qui marché très bien avant, qui permettais d'afficher ou non un liste de validation dans des cases en sous conditions.

Cijoint.fr - Service gratuit de dépôt de fichiers

Il s'agit de la macro commander par le CommandButton4.
J'ai une erreur "La méthode 'InCellDropDown de l'objet 'validation' a échoué".

Code:
Private Sub CommandButton4_Click() 'Worksheet_Change(ByVal Target As Range)
Dim nm As Object, n As Integer
For Each nm In Application.Names
  If nm.Name Like "diam*" Then 'recherche les noms commençant par diam
    n = Replace(nm.Name, "diam", "")
    With Range(nm.Name)
      .Validation.InCellDropdown = Range("D35") = "non" And Range("puiss" & n) <> 0
      If Range("D35") = "oui" Then .FormulaR1C1 = "=IF(puiss" & n & "=0,""pas de débit"",IF(R35C4=""non"",""rentrer un diametre"",IF(AND(R35C4=""oui"",R34C4=""cuivre""),INDEX(Tabl_Cu,MATCH(debit" & n & ",Q_Cu,1),1),IF(AND(R35C4=""oui"",R34C4=""acier""),INDEX(Tabl_Ac,MATCH(debit" & n & ",Q_Ac,1),1),IF(AND(R35C4=""oui"",R34C4=""PE""),INDEX(Tabl_PE,MATCH(debit" & n & ",Q_PE,1),1),"""")))))"
    End With
  End If
Next

End Sub

D'où vient cette erreur ? (sur le fichier, ce sont les cellules nommé "diamX", X étant un chiffre, qui contiennent la validation)

Merci d'avance.
 

mromain

XLDnaute Barbatruc
Re : probleme avec InCellDropDown

bonjour andsim34,

je ne comprend pas tout a fait la macro, mais je pense que le problème vient de cette ligne :
Code:
.Validation.InCellDropdown [COLOR=Black]=[/COLOR] Range("D35") [COLOR=Black]=[/COLOR] "non" And Range("puiss" & n) <> 0

essaye avec cette ligne :
Code:
.Validation.InCellDropdown [COLOR=Black]=[/COLOR] [B](([/B]Range("D35") [COLOR=Black]=[/COLOR] "non"[B])[/B] And[B] ([/B]Range("puiss" & n) <> 0[B]))[/B]
a+
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : probleme avec InCellDropDown

Bonjour,

Je ne comprends pas tres bien le probleme mais j'ai trouvé une solution en rajoutant la ligne en bleu :

Private Sub CommandButton4_Click()
Range("A1").Select

ou en affectant la macro à un bouton formulaire dans la feuille.

Le fait que le bouton soit un bouton Vba il semble qu'on "ne soit pas dans la feuille" au moment de l'execution et ça plante ...

Su on clique sur une cellule de la feuille et qu'on execute le code dans la macro, ça fontionne ...
 

andsim34

XLDnaute Nouveau
Re : probleme avec InCellDropDown

Merci ça marche ;)

Cependant, j'aimerais bien comprendre pourquoi on est obligé de faire comme ça ?
Avant, ça marché parfaitement, puis je ne pense pas avoir toucher quoi que ce soit, j'ai n'avais plus que la cellule diam1 qui marchait (la boucle s'arreté à n = 10). J'ai regardé au niveau des validations, du format de cellule...mais je n'ai trouvé aucune differences. mais excel voyait une difference entre les validations (il me disait que ce n'étais pas les meme). Enfin je suis pas très clair là, désolé.

Bref, est ce que quelqu'un sait d'ou cela peut provenir ?
 

job75

XLDnaute Barbatruc
Re : probleme avec InCellDropDown

Bonjour Andsim34, Catrice, mromain,

La macro marche sans problème si c'est une Worksheet_Change (comme c'était au début...) au lieu d'une CommanButton4_Click.

A noter que vous avez mis Application.EnableEvents = True en commentaire ! Il faut impérativement que cette instruction s'exécute en fin de macro pour que les évènements redeviennent actifs.

A force de bricoler, il y a évidemment des problèmes...

A+
 

job75

XLDnaute Barbatruc
Re : probleme avec InCellDropDown

Bonjour le fil, le forum,

Ca n'explique cependant pas pourquoi ça plante ;) ...

Voici l'explication.

Quand on cliquait sur CommandButton4, celui-ci prenait le focus, qui n'était donc plus sur la feuille.

InCellDropdown n'aime pas du tout ça, normal non ?

J'ai donc mis la propriété TakeFocusOnClick de ce bouton à False :

Cijoint.fr - Service gratuit de dépôt de fichiers

On devrait faire cela chaque fois que l'on crée un bouton ActiveX.

A+
 

Statistiques des forums

Discussions
312 391
Messages
2 087 954
Membres
103 683
dernier inscrit
Cescodelvar