Combobox cascade- Adaptation formule

pochoco

XLDnaute Nouveau
Bonjour a tous,

Je tente de faire des Combobox en cascade sur 5 niveaux. J'ai trouve la methode de remplissage de combobox grace au dictionnaire. Je souhaiterai conserver cette methode (sur mon vrai fichier, c'est la seule qui fonctionne). Apres plusieurs tentatives, j'ai reussi a remplir la deuxieme Combo en fonction de la premiere:
Le probleme survient a la fin du code de la deuxieme Combo a Me.ComboBox3.List = MonDico : le message d'erreur est 424 - object required



Dim f


Private Sub UserForm_Initialize()
Set f = Sheets("DB")
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)
MonDico(c.Value) = ""
Next c
Me.ComboBox1.List = MonDico.keys
End Sub
Private Sub ComboBox1_click()
Set f = Sheets("DB")
Me.ComboBox2.Clear
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)
If c = Me.ComboBox1 Then MonDico(c.Offset(, 1).Value) = ""
Next c
Me.ComboBox2.List = MonDico.keys
End Sub
Private Sub ComboBox2_click()
Set f = Sheets("DB")
Me.ComboBox3.Clear
For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row) ' on explore la colonne de niveau 1
If c = Me.ComboBox1 And c.Offset(, 1) = Me.ComboBox2 Then Me.ComboBox2 = c.Offset(, 1) ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
Next c
Me.ComboBox3.List = MonDico.keysEnd Sub


Quelqu'un peut m'aider sur ce point? je pense que c'est une erreur d'adaptation de code (nom/numero de colonne etc...). Pouvez-vous eventuellement en meme temps expliquer le raisonnement, pour que je puisse aussi adapter seule les etapes 4 et 5 ensuite?

Merci beaucoup pour votre aide
 

Pièces jointes

  • essai combobox.xlsm
    32.4 KB · Affichages: 53

Paf

XLDnaute Barbatruc
Re : Combobox cascade- Adaptation formule

Bonjour

Dans Private Sub ComboBox2_click() on tente de renseigner ComboBox3 par MonDico qui n'existe pas parce que:

on n'a pas de déclaration de variable dictionnaire (éventuellement )

on n'a pas créer l'objet dictionnaire Set MonDico = CreateObject("Scripting.Dictionary")

on n'a pas rempli le dictionnaire:
If c = Me.ComboBox1 And c.Offset(, 1) = Me.ComboBox2 Then Me.ComboBox2 = c.Offset(, 1)
au lieu de
If c = Me.ComboBox1 And c.Offset(, 1).Value = Me.ComboBox2 Then MonDico(c.Offset(, 2).Value) = ""

de plus c est une cellule de la colonne B; c.Offset(, 1) est donc une cellule de la colonne C, mais pour la Combobox3, il faut les valeurs de la colonne D alors: c.Offset(, 2)

Bon Courage

A+
 

pochoco

XLDnaute Nouveau
Re : Combobox cascade- Adaptation formule

Bonjour,

Un grand merci a tous les deux. En fonction de vos commentaires et grace au lien de JB, j'ai modifie un peu mes formules et j'arrive a tout avoir... sauf la toute derniere Combo (Reach, qui s'appelle ComboBox 5 dans le fichier). Qu'ais-je oublie? J'ai essaye plusieurs codes presents sur ce site mais aucun de fonctionnait non plus, et j'ai la meme erreur sur mon fichier original. Pas de code d'erreur ou de debug propose, simplement rien ne s'affiche dans la derniere ComboBox.

Autre chose, pour faire d'une pierre 2 coups: Comment puis-je:
- soit filtrer au fur et a mesure les resultats de ces choix,
- soit qu'avec les informations trouvees, l'application me trouve le produit associe aux criteres que j'ai choisi via les comboBox ?

Serit-ce possible avec une formule associee a un bouton de commande? peut-on faire une recherche en une seule fois mais prenant en compte les criteres des 5 ComboBox ?

Un grand Merci pour votre aide
 

Pièces jointes

  • essai comboboxv2.xlsm
    33.3 KB · Affichages: 44

Paf

XLDnaute Barbatruc
Re : Combobox cascade- Adaptation formule

re Bonjour

Pour le premier point:
a priori les valeurs a faire afficher en combo 5 proviennent de la colonne F.

Quand vous chargez votre tableau vous ne prenez que les colonnes B à E !! :
a = f.Range("B2:E" & f.[A65000].End(xlUp).Row).Value


Par ailleurs dans Private Sub ComboBox4_click(), le test entre la combo 4 et a(i,4) n'est jamais vrai puis l'un est numérique et l'autre de type string. Donc:

If a(i, 1) = Me.ComboBox1 And a(i, 2) = Me.ComboBox2 And a(i, 3) = Me.ComboBox3 And a(i, 4) = Val(Me.ComboBox4) Then mondico(a(i, 5)) = ""

A+


Edit : il n'y avait pas d'erreur sur a(i, 5) qui n'existait pas puisque le test étant toujours faux l'instruction mondico(a(i, 5)).... n'était jamais exécutée
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Combobox cascade- Adaptation formule

Bonsoir.
Voulez vous de ma solution, plus facile à mettre en place et au point, avec possibilité de faire les choix en ordre quelconque ?

Alors la voici.
 

Pièces jointes

  • CbxLiésPococho.xls
    234.5 KB · Affichages: 49
Dernière édition:

Discussions similaires

Réponses
12
Affichages
243

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 007
dernier inscrit
salma_hayek