XL 2013 Listes déroulantes en VBA

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 !

Maya1966

XLDnaute Nouveau
Bonjour à tous,

je dois créer un fichier avec les colonnes suivantes:
  1. colonne type d'enveloppe (Feuil2 colonne A)
  2. colonne Direction (Feuil2 colonne B)
  3. colonne service (Feuil2 colonne C,D,E,F,G,H)
Chaque direction est rattachée à 6 services

dans le Feuil1:

la colonne A a sa propre liste déroulante
le colonne B et C une liste déroulante en cascade.

est-il possible de faire les listes déroulante en VBA mais sans utiliser le gestionnaire des noms ?

merci d'avance pour votre aide
Cordialement
Maya1966
 

Pièces jointes

Bonjour Maya, Vgendron,
Possible en VBA avec :
VB:
Sub ListeDéroulante()
    With Range("A2:A100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="=Feuil2!$A$2:$A$7"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("B2:B100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="=Feuil2!$B$2:$B$7"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("C2:C100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="=Feuil2!$C$2:$C$7"              ' Mettre la plageliste où la liste est présentedésirée
    End With
End Sub
En allant prendre les données en feuille 2.

On peut aussi mettre les valeurs des listes en "dur" dans le VBA avec :
Code:
Sub ListeDéroulante()
    With Range("A2:A100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="Test1,Test2,Test3,Test4,Test5,Test6"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("B2:B100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="Direction 1,Direction 2,Direction 3,Direction 4,Direction 5,Direction 6"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("C2:C100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="Service 1,Service 2,Service 3,Service 4,Service 5,Service 6"               ' Mettre la plageliste où la liste est présentedésirée
    End With
End Sub
 
Bonjour Maya, Vgendron,
Possible en VBA avec :
VB:
Sub ListeDéroulante()
    With Range("A2:A100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="=Feuil2!$A$2:$A$7"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("B2:B100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="=Feuil2!$B$2:$B$7"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("C2:C100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="=Feuil2!$C$2:$C$7"              ' Mettre la plageliste où la liste est présentedésirée
    End With
End Sub
En allant prendre les données en feuille 2.

On peut aussi mettre les valeurs des listes en "dur" dans le VBA avec :
Code:
Sub ListeDéroulante()
    With Range("A2:A100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="Test1,Test2,Test3,Test4,Test5,Test6"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("B2:B100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="Direction 1,Direction 2,Direction 3,Direction 4,Direction 5,Direction 6"              ' Mettre la plageliste où la liste est présentedésirée
    End With
    With Range("C2:C100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
        Formula1:="Service 1,Service 2,Service 3,Service 4,Service 5,Service 6"               ' Mettre la plageliste où la liste est présentedésirée
    End With
End Sub
Hello Sylvanu,

merci pour ton aide.

j'ai collé la premier macro Sub ListeDéroulante() dans la feuille mais ça ne fonctionne pas !
ou dois-je coller la macro ?

Cordialement
 
Bonjour,

est-il possible de faire les listes déroulante en VBA mais sans utiliser le gestionnaire des noms ?
Hélas ma réponse ne va pas t'aider, mais ta question m'intrigue...

Pourquoi veux-tu créer les listes déroulantes en VBA ?

Pourquoi veux-tu ne pas utiliser de Noms, donc pas de tableaux structurés qui généralement simplifient pas mal la vie pour les listes déroulantes ?
 
Dernière édition:
Re,
Exact, j'aurais du tester, je ne l'ai fait que pour la version en dur. Sorry.
Une liste ne peut pas être remplie à partir d'une palge d'une autre feuille.
Donc cela revient à devoir la nommer .... où créer la liste comme :
VB:
Sub ListeDéroulante()
    Plage = ""
    For i = 2 To 7
        Plage = Plage & "," & Sheets("Listes déroulantes").Cells(i, "A")
    Next i
    Plage = Mid(Plage, 2)
    With Range("A2:A100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete: .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Plage
    End With
    Plage = ""
    For i = 2 To 7
        Plage = Plage & "," & Sheets("Listes déroulantes").Cells(i, "B")
    Next i
    Plage = Mid(Plage, 2)
    With Range("B2:B100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete: .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Plage
    End With
    Plage = ""
    For i = 2 To 7
        Plage = Plage & "," & Sheets("Listes déroulantes").Cells(i, "C")
    Next i
    Plage = Mid(Plage, 2)
    With Range("C2:C100").Validation             ' Ajuster plage où la liste doit être présente
        .Delete: .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Plage
    End With
End Sub
 
et ma proposition en #2 ??

@sylvanu hello
ta proposition ne tient pas compte du choix en B pour établir la liste de la colonne C..
ok. dans le fichier donné en exemple: les listes de services sont identiques pour toutes les directions..
mais je présume qu'elles sont amenées à diverger.. sinon. aucun intéret d'avoir 6 listes....
 
Bonjour,


Hélas ma réponse ne va pas t'aider, mais ta question m'intrigue...

Pourquoi veux-tu créer les listes déroulantes en VBA ?

Pourquoi veux-tu ne pas utiliser de Noms, donc pas de tableaux structurés qui généralement simplifient pas mal la vie pour les listes déroulantes ?
@TooFatBoy, je ne veux pas utiliser les listes déroulantes car je dois faire du copier/coller dans un autre fichier identique est lors du coller le système m'indique que les listes existe déjà !
@sylvanu, c'est tous bon, le code fonctionne très bien. j'avais un débogage car le nom de ma feuille comportait un espace

merci à vous tous pour votre aide.

Cordialement
Maya1966
 
@TooFatBoy, je ne veux pas utiliser les listes déroulantes car je dois faire du copier/coller dans un autre fichier identique est lors du coller le système m'indique que les listes existe déjà !
Peut-être cela vient-il d'un mauvais copier/coller.

Peut-être même que si tu utilisais justement les listes déroulantes basées sur des tableaux structurés, tu n'aurais plus de problème. 😉
 
- 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

Réponses
26
Affichages
1 K
Réponses
17
Affichages
1 K
Réponses
36
Affichages
3 K
Réponses
8
Affichages
898
Retour