• Initiateur de la discussion Initiateur de la discussion joums
  • Date de début Date de début

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 !

joums

XLDnaute Occasionnel
Bonjour,

je souhaite réaliser un fichier avec plusieurs userform
et dans chaque d'entre eux, il y aurait 3 combobox en cascade

Comment je pourrais faire pour les lier? je pensais nommer les listes mais ensuite ?
voici un fichier pour mieux comprendre ce que je souhaite
merci
 

Pièces jointes

Re : combobox en cascade


Bonjour,
merci pour ce lien, j'ai pu effectivement réaliser mes menus en cascade
cependant je ne comprends pas toute la structure de la macro 😱
par exmple Set MonDico = CreateObject("Scripting.Dictionary")
veut dire quoi ?

j'ai un problème de lenteur lorsque les combobox se mettent à jour est-ce normal ? (5 à 6s avant que la combobox ne se remplisse)

Merci de votre aide
 
Re : combobox en cascade

Voir PJ

Catégorie =DECALER(base!$A$6;;;NBVAL(base!$A:$A)-1)
Couleur =DECALER(base!$C$6;;;NBVAL(base!$C:$C)-1)
NbPorte =DECALER(base!$B$6;;;NBVAL(base!$B:$B)-1)

Code:
Private Sub UserForm_Initialize()
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In Range("catégorie")
    MonDico(c.Value) = c.Value
  Next c
  Me.ComboBox1.List = MonDico.items
End Sub

Private Sub ComboBox1_Change()
  Set MonDico = CreateObject("Scripting.Dictionary")
  a = [catégorie]       [B]' recherche dans un tableau + rapide[/B]
  For i = 1 To Range("NbPorte").Count
    If a(i, 1) = Me.ComboBox1 Then
      temp = Range("NbPorte")(i)
      MonDico(temp) = temp
    End If
  Next i
  Me.ComboBox2.List = MonDico.items
  Me.ComboBox2.ListIndex = -1
  Me.ComboBox3.ListIndex = -1
End Sub

Private Sub ComboBox2_Change()
  Set MonDico = CreateObject("Scripting.Dictionary")
  a = [catégorie]
  b = [nbPorte]
  For i = 1 To Range("Couleur").Count
    If b(i, 1) = Val(Me.ComboBox2) And a(i, 1) = Me.ComboBox1 Then
       temp = Range("Couleur")(i)
       MonDico(temp) = temp
    End If
  Next i
  Me.ComboBox3.List = MonDico.items
  Me.ComboBox3.ListIndex = -1
End Sub

JB
 

Pièces jointes

Dernière édition:
Re : combobox en cascade

Merci pour ces précisions,
je vais essayer cela,
Mais dans le cas où j'ai plusieurs userform (au moins 6) qui utilisent tous les même base de données, est-ce que cela va ralentir la recherche.
Faut il nommer différemment la base ?

A quoi correspond "scripting.Dictionary" ?

Merci de votre aide
 
Re : combobox en cascade

Re bonjour,

pour continuer mon code VBA, je souhaite imbriquer plusieurs menu en cascade.
A savoir un menu en cacade à trois 3 niveaux => combobox1, combobox2, combobox3 (c'est ok merci JB)
Le combobox4 serai lié selon le résultat du combobox2 => ca je coince dessus
les résultats obtenu ne vont pas

Merci de votre aide
ci joint un fichier test
 

Pièces jointes

Re : combobox en cascade

Je pense avoir trouvé la solution 😀
mon erreur était de vouloir mettre du code dans le "userform initialize"


finalement voici le code mis dans le combobox2
Code:
 Set MonDico2 = CreateObject("Scripting.Dictionary")
  a = [nom2]       ' recherche dans un tableau + rapide
  For i = 1 To Range("cv").Count
    If a(i, 1) = Me.ComboBox2 Then
      temp = Range("cv")(i)
      MonDico2(temp) = temp
    End If
  Next i
  Me.ComboBox4.List = MonDico2.items
  Me.ComboBox4.ListIndex = -1

Si je me suis trompé ou si vous avez des corrections n'hésitez pas
 
Re : combobox en cascade

Bonsoir,

merci pour votre réponse
il y a une chose que je ne comprends pas ...
pour quelle raison le code que j'ai mis fonctionne également ?

Code:
 Set MonDico2 = CreateObject("Scripting.Dictionary")
  a = [nom2]       ' recherche dans un tableau + rapide
  For i = 1 To Range("cv").Count '**** vous avez inscrit Range("nom2") ?
    If a(i, 1) = Me.ComboBox2 Then
      temp = Range("cv")(i)
      MonDico2(temp) = temp
    End If
  Next i
  Me.ComboBox4.List = MonDico2.items
  Me.ComboBox4.ListIndex = -1

Encore merci pour vos explication,
je prefere bien comprendre les choses plutôt que de faire du copier/coller
 
Re : combobox en cascade

Bonjour,

Etant retraité, je bricole un peu en informatique. je sollicite votre aide pour trouver une solution suite à des recherches infructueuses sur le net. Ayant juste quelque notion en VBA, je travaille sur mes anciens fichiers. je voudrai faire un USF avec combobox en cascade comme les exemples de ce fil. sauf que dans le 1er combobox on sélectionne une date. j'ai consulté les fichiers attachés (ils fonctionnent très bien), mais je suis pas parvenu à l'adapter. Je peux sélectionne une date (combobox1), mais pour les 2 combobox suivants rien ne se passe (les combobox sont vides, pourquoi?).
Je vous remercie. Bravo et bonne continuation.
 
- 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
40
Affichages
2 K
  • Question Question
Microsoft 365 bonjour
Réponses
1
Affichages
533
Retour