XL 2013 Listes déroulantes en VBA

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

  • Liste déroulante en VBA.xlsx
    9.2 KB · Affichages: 8

vgendron

XLDnaute Barbatruc
Hello
sans VBA ni gestionnaire de nom MAIS avec une table structurée (que j'ai appelée Listes)
-->pour l'entete type d'enveloppe, il ne faut pas d'espace==> j'ai juste mis "Type"
ensuite, pour les validations de données, à base de indirect
 

Pièces jointes

  • Liste déroulante en VBA.xlsx
    10.4 KB · Affichages: 15

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

Maya1966

XLDnaute Nouveau
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
 

TooFatBoy

XLDnaute Barbatruc
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:

Maya1966

XLDnaute Nouveau
1670841111309.png

c'est bizzare non !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

vgendron

XLDnaute Barbatruc
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....
 

Maya1966

XLDnaute Nouveau
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

XLDnaute Barbatruc
@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. ;)
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 172
Membres
112 676
dernier inscrit
little_b