Création liste (validation de donnée) en VBA

Bonjour,

J'arrive à créer sans problème plusieurs liste de validation donnée en fonction du nombre que je souhaite.

Mon problème , je n'arrive pas à insérer en VBA ma formule auquel fait référence mes données de la liste.

Voici le code qui me pose problème :

ActiveWorkbook.Names.Add Name:="Liste", RefersToR1C1:="=DECALER(liste_benchmark2;;EQUIV(R4C4;liste_benchmark;0)-1;NBVAL(DECALER(liste_benchmark2;;EQUIV(R4C4;liste_benchmark;0)-1)))"

liste_benchmark et liste_benchmark2 font référence à des NOMS dans Excel.

J'obtient une erreur d’exécution 1004 comme message d'erreur.

If someone can help me

Good day

Bonjour

Pourquoi passer par VBA et ne pas créer le nom LISTE via un nom dans le fichier ?

Sinon essaie en remplaçant R4C4 par D4

Crdlt

Bonjour,

Comme Dan, je ne vois pas vraiment l'utilité de mettre à contribution VBA lorsqu'on peut faire autrement...

Mais lorsqu'on veut utiliser VBA pour concocter des formules qu'il serait 10 fois plus simple de taper simplement, et en anglais, on n'ignore pas que le séparateur n'est pas le point-virgule...

Cordialement.

En fait ces listes déroulantes change de valeur en fonction de la valeur d'une autre liste déroulante (fixe en cellule D4). D'ou l'utilisation de ma formule qui fonctionne très bien quand je la tape à la main dans validation de donnée et Liste.

J'ai tester avec ce code changement de virgule et nom des fonctions en anglais toujours l erreur 1004, erreur définie par l'application ou par l'objet

   With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=DECALER(liste_benchmark2,,EQUIV(D4,liste_benchmark;0)-1,NBVAL(DECALER(liste_benchmark2,,EQUIV(D4,liste_benchmark,0)-1)))"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=OFFSET(liste_benchmark2,,MATCH(D4,liste_benchmark;0)-1,COUNTA(OFFSET(liste_benchmark2,,MATCH(D4,liste_benchmark,0)-1)))"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

Merci de votre aide

Je crois que tu fais un joyeux meli-melo !

Mets donc ta formule à la main, ça aboutira plus vite.

Sinon prends le temps d'étudier la syntaxe Excel de ce que tu utilises et comment la transposer en VBA.

Cordialement.

Je comprend pas trop le méli - mélo

Le code que j'ai mis permet de créer une liste déroulante (validation) en vba qui fonctionne.

Dans la partie

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=

tu ajoutes ta formule pour lui dire vers quelle données tu souhaite affiché dans ta liste déroulante.

Le problème viens de ma syntaxe de la formule je pense, mais je ne trouve pas d'ou proviens le problème.

Sub test()
    With Selection.Validation
        .Delete
        .Add xlValidateList, , , "=OFFSET(liste_benchmark2,,MATCH(D4,liste_benchmark,0)-1,COUNTA(OFFSET(liste_benchmark2,,MATCH(D4,liste_benchmark,0)-1)))"
    End With
End Sub

Si ta formule est bonne, ceci doit fonctionner.

Il faut apprendre à éviter de suivre l'enregistreur et traîner tous les paramètres facultatifs laissés à leur valeur par défaut...

On gagne aussi un peu de place en passant les arguments par position.

Maintenant, si une erreur 1004 persiste c'est que ta formule n'est pas acceptée par la validation, il faudra donc t'y repencher.

Parfait sa fonctionne !

Merci pour ton aide MFerrand.

Rechercher des sujets similaires à "creation liste validation donnee vba"