XL 2016 Liste déroulantes dépendantes dans un UserForm

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 !

julien6337

XLDnaute Nouveau
Bonjour, je relance une discussion sur le thème cité en objet car j'ai l'impression que la discussion initiale n'est plus suivie.

le fichier joint est issu de la discussion initiale et je cherche à faire évoluer cette programmation afin que le choix 3 soit dépendant du choix 2 et du choix 1, car dans l'exemple, le choix 3 ne dépend que du 2. Je m'explique: Si par exemple , si on avait comme présenté ci dessous, dans l'onglet BD, 3 pays proposé pour choix 1 Europe et choix 2 Nord , et 2 pays proposés pour choix 1 Amérique et Choix 2 Nord, je ne voudrais avoir présenté que les 3 pays d'Europe Nord lorsque que j'ai choisi Europe. Or actuellement le code me permet de choisir parmi tous les pays dont le choix 2 est Nord, indépendamment du choix 1 (voir imprim écran suivant.)
j'ai essayé de modifier le code mais ensuite ça ne marche plus du tout.



D'avance merci pour votre retour

1611857869853.png



1611858009587.png




Voici le code de l'User Form

Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
mondico(c.Value) = c.Value
Next c
Me.ListBox1.List = mondico.items
Me.ListBox1.MultiSelect = fmMultiSelectMulti
End Sub
Private Sub ListBox1_Change()
Me.ListBox3.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.[A2], f.[A65000].End(xlUp))
For k = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(k) = True Then
If c = Me.ListBox1.List(k, 0) Then
temp = c.Offset(, 1)
mondico(temp) = temp
End If
End If
Next k
Next c
Me.ListBox2.List = mondico.items
End Sub
Private Sub ListBox2_Change()
Me.ListBox3.Clear
For Each c In Range(f.[B2], f.[B65000].End(xlUp))
For k = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(k) = True Then
If c = Me.ListBox2.List(k, 0) Then Me.ListBox3.AddItem c.Offset(, 1)
End If
Next k
Next c
End Sub
Private Sub b_ok_Click()
temp = ""
For k = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(k) = True Then temp = temp & Me.ListBox1.List(k, 0) & " "
Next k
ActiveCell = temp
'--
temp = ""
For k = 0 To Me.ListBox2.ListCount - 1
If Me.ListBox2.Selected(k) = True Then temp = temp & Me.ListBox2.List(k, 0) & " "
Next k
ActiveCell.Offset(, 1) = temp
temp = ""
For k = 0 To Me.ListBox3.ListCount - 1
If Me.ListBox3.Selected(k) = True Then temp = temp & Me.ListBox3.List(k, 0) & " "
Next k
ActiveCell.Offset(, 2) = temp
Unload Me
End Sub
 

Pièces jointes

Bonsoir.
Vous dites toujours 'le choix' alors que de toute évidence c'est un système à choix multiples.
Pour des choix uniques je préfère des ComboBox, et il existe une ressource à télécharger garantissant de ne proposer dans les listes des ComboBox non renseignées que les possibilités compatibles avec les choix déjà effectués dans les autres.
 
Oui, c'est un classeur xlsm précurseur pourvu d'une procédure d'installation en xlam dans votre dossier de compléments. Aussitôt après cette installation (c'est le plus simple) vous pouvez cocher son nom de projet CLsCAs dans les références du projet VBA de votre classeur d'application.
 
- 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
8
Affichages
233
Réponses
3
Affichages
665
Réponses
4
Affichages
177
Réponses
8
Affichages
466
Réponses
4
Affichages
505
Réponses
10
Affichages
281
Réponses
3
Affichages
504
Réponses
2
Affichages
201
Retour