Liste en cascade 5 niveaux

Bonjour,

j'aimerai faire une liste déroulante en cascade de mes produits en plusieurs niveaux, je m'explique:

lorsque je choisis le parfum d'une savonnette (voir en pièce jointe): j'aimerai qu'on me propose une nouvelle liste "coloré oui/non" puis qu'on me propose la liste "broyé oui/non" puis la liste "forme" et enfin la liste "poids".

me suis-je bien exprimé ? merci d'avance pour votre aide

Bonjour,

Dis moi si ça te convient comme cela (va sur l'onglet BD).

Bonjour Look, Matimat.

Une proposition par formules en pj.

Matimat quand je clique sur Go l'userform s'affiche pas : que faut-il faire ?

Cordialement

34lookass.xlsx (13.76 Ko)

Bonjour Look,

Sorry j’ai du oublier d’associer le bouton à l’useform.

Juste mettre dans un module :

Sub test ()
Userform1.show
End sub

Puis sur le bouton « go », clique droit, affecter macro, la tu cliques sur le nom test et le tour est joué

salut matimatfr avec le code ça marche mais serait-il possible d'afficher un code en fonction de ce que j'ai choisis:

par exemple si je chois "algues" ça m'affiche "ALG" dans la case E1

faut-il faire un formule SI ?

merci pour ton aide

Oui c'est possible. Regardes le fichier joint et dis moi si ça te convient.

Re c'est exactement ce que je veux mais pourrai tu m'expliquer comment t'as fais stp ?

merci

Bien sûr, je peux t'expliquer.

Déjà, es tu allé voir dans l'éditeur vba voir les procédures de l'userform ?

Si tu vas dessus, en cliquant sur l'userform, fais F7 et tu auras le détail suivant (les explications sont dans le code )

Dim f
Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      Set d1 = CreateObject("Scripting.Dictionary") 'on stocke les données dans un dictionnaire
      For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row) 'on définit la plage de données
       If c <> "" Then d1(c.Value) = ""
      Next c
      Me.ComboBox1.List = d1.Keys 'on attribue la liste à la combobox1
End Sub
Private Sub ComboBox1_click()

'ici, une fois que l'on clique sur la combobox1, on relance la procédure pour charger la combobox2

       Set d1 = CreateObject("Scripting.Dictionary")
       For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)
        If c <> "" Then d1(c.Value) = ""
       Next c
       Me.ComboBox2.List = d1.Keys

       Sheets("BD").Range("E1") = ComboBox1.List(ComboBox1.ListIndex) 'là, ce que l'on choisit dans la liste va se reporter en cellule E1

       If Sheets("BD").Range("E1") = "ALGUES" Then Sheets("BD").Range("E1") = "ALG" 'formule conditionnelle (SI) pour transposer ALGUES en ALG

End Sub
Private Sub ComboBox2_click()
       Set d1 = CreateObject("Scripting.Dictionary")
       For Each c In f.Range("C2:C" & f.[C65000].End(xlUp).Row)
        If c <> "" Then d1(c.Value) = ""
       Next c
       Me.ComboBox3.List = d1.Keys
End Sub
Private Sub ComboBox3_click()
       Set d1 = CreateObject("Scripting.Dictionary")
       For Each c In f.Range("D2:D" & f.[D65000].End(xlUp).Row)
        If c <> "" Then d1(c.Value) = ""
       Next c
       Me.ComboBox4.List = d1.Keys
End Sub

ah merci je savais pas qu'on pouvais faire ça j'ai regardé un peu et j'ai une dernière question :

Private Sub ComboBox1_click()

Set d1 = CreateObject("Scripting.Dictionary")

For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)

If c <> "" Then d1(c.Value) = ""

Next c

Me.ComboBox2.List = d1.Keys

Sheets("BD").Range("E1") = ComboBox1.List(ComboBox1.ListIndex)

If Sheets("BD").Range("E1") = "ALGUES" Then Sheets("BD").Range("E1") = "ALG"

End Sub

Si je sélectionne "Algues" ça notera "ALG" dans la cellule E1

mais j'aimerai mettre des codes personnalisés (par exemple "ALG" pour algues ect...) pour chaque produits

peux-tu me dire comment faire ?

merci

faut-il que je réécrive cette ligne :

If Sheets("BD").Range("E1") = "ALGUES" Then Sheets("BD").Range("E1") = "ALG"

End Sub

pour chaque produit ?

En effet si tu veux des codes à chaque entrées. Sinon c'est au niveau de ta base de données qu'il faut le faire.

comment dois-je l'écrire ? Est-ce que c'est bon?

Private Sub ComboBox1_click()

Set d1 = CreateObject("Scripting.Dictionary")

For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)

If c <> "" Then d1(c.Value) = ""

Next c

Me.ComboBox2.List = d1.Keys

Sheets("BD").Range("E1") = ComboBox1.List(ComboBox1.ListIndex)

If Sheets("BD").Range("E1") = "ALGUES" Then Sheets("BD").Range("E1") = "ALG"

If Sheets("BD").Range("E1") = "ALOE VERRA" Then Sheets("BD").Range("E1") = "ALOE"

If Sheets("BD").Range("E1") = "AMANDE AMERE" Then Sheets("BD").Range("E1") = "AMAM"

End SuB

je crois qu'il faut mettre des "and if" ou un truc comme ça non ?

mais je ne sais pas faire

peux tu m'aider ?

As tu testé en mettant les lignes comme tu l'as écris ?

Car c'est la bonne solution et ça fonctionne très bien comme ça

ah oui c'est que j'avais marqué au mauvais endroit

et comment je dois faire si je veux que les autres choix (rectangle, coloré, broyé...) s'affichent aussi dans les cases (F1,G1...) ?

fichier joint à jour

3liste-cascade.xlsm (29.81 Ko)

Avec un peu de temps, (désolé boulot oblige), voici un fichier joint où je t'ai mis les procédures pour ce que tu veux sous le bouton "ok"

merci t'es vraiment super c'est ce que je voulais

Parfait ! Oublies pas de mettre le sujet en résolu

Rechercher des sujets similaires à "liste cascade niveaux"