Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA - Liste de choix - DECALER

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Denouche

XLDnaute Nouveau
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 :
Code:
=DECALER(Feuil2!A1;1;0;3;1)

La liste est bien créée, et est fonctionnelle.

J'arrête l'enregistrement de ma macro, le code source suivant à été généré :

Code:
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

Sans rien changer au code généré par Excel, je sélectionne une autre cellule, et je lance ma macro.
J'obtiens alors une belle erreur :
Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet

Je clique sur "débogage", et la ligne en cause est la suivante :
Code:
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"

Alors que ce code a lui même été généré par Excel !

Après des heures de recherche, j'ai essayé de remplacer DECALER par OFFSET, ça ne marche pas.

J'ai aussi essayé cette syntaxe :
Code:
Selection.Validation.Delete 
Selection.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
Qui ne fonctionne pas non plus...

Par contre, en remplaçant la ligne en cause par :
Code:
.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 !
 
Dernière édition:
Re : VBA - Liste de choix - DECALER

Résolu
J'avais essayé de mettre offset au lieu de décalage, mais je ne savais pas que les formules en anglais attendent des virgules au lieu des point virgules !
il faut donc mettre :
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=offset(Feuil2!A1,1,0,3,1)"

à la place de :

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…