Bonjour,
Je vous écris concernant une erreur VBA que je recontre, lors de la création par une macro d'une liste de choix déroulante.
Explication :
Je commence l'enregistrement de ma macro, je vais successivement dans :
Données / validation des données /
Dans l'onglet Options, j'autorise Liste, et dans la textbox Source, je met le code suivant :
La liste est bien créée, et est fonctionnelle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part =DECALER(Feuil2!A1;1;0;3;1)
J'arrête l'enregistrement de ma macro, le code source suivant à été généré :
Sans rien changer au code généré par Excel, je sélectionne une autre cellule, et je lance ma macro.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Sub Macro5() ' ' Macro5 Macro ' ' With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With End Sub
J'obtiens alors une belle erreur :
Je clique sur "débogage", et la ligne en cause est la suivante :Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet
Alors que ce code a lui même été généré par Excel !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
Après des heures de recherche, j'ai essayé de remplacer DECALER par OFFSET, ça ne marche pas.
J'ai aussi essayé cette syntaxe :
Qui ne fonctionne pas non plus...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Selection.Validation.Delete Selection.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
Par contre, en remplaçant la ligne en cause par :
,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=A1:C1"
Alors là ça fonctionne, donc le problème doit venir de ma formule.
Mais je ne vois pas d'où, car quand je met la même formule dans la source de Données de validation, sans passer par une macro, la formule fonctionne parfaitement.
Ce qui ne va pas, c'est l'utilisation de la formule, au sein du VBA.
J'en perd mon latin, merci de m'aider !
Partager