Bonjour,

Je suis en train de coder 2 ComboBox en cascade, je suis parti de ce code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim f
Private Sub UserForm_Initialize()
  Set f = Sheets("base")
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)   ' on explore la colonne de niveau 1
    MonDico(c.Value) = ""                                    ' on ajoute l'élément de la famille au dictionnaire
  Next c
  Me.Famille.List = MonDico.keys
End Sub
Private Sub Famille_click()
  Me.SousFamille.Clear
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("B2:B" & f.[B65000].End(xlUp).Row)      ' on explore la colonne de niveau 1
     If c = Me.Famille Then MonDico(c.Offset(, 1).Value) = ""   ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
  Next c
  Me.SousFamille.List = MonDico.keys
 
End Sub
Je l'ai bien entendu adapté à mon projet, j'ai donc changé:
-la référence de la feuille utilisée Sheets("base") devient Sheets("databasenoms")
-Famille devient ComboBox1
-SousFamille devient ComboBox2
-MonDico devient nom
-Range("B2:B" & f.[B65000].End(xlUp).Row) devient Range("A2:A" & f.[A65000].End(xlUp).Row) puisque le code d'origine fait référence à une plage différente de la mienne

J'obtiens donc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 Dim f
Private Sub UserForm_Initialize()
  Set f = Sheets("databasenoms")
  Set nom = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)   ' on explore la colonne de niveau 1
    nom(c.Value) = ""                                    ' on ajoute l'élément de la famille au dictionnaire
  Next c
  Me.ComboBox1.List = nom.keys
End Sub
 
Private Sub ComboBox1_click()
  Me.ComboBox2.Clear
  Set nom = CreateObject("Scripting.Dictionary")
  For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)      ' on explore la colonne de niveau 1
     If c = Me.ComboBox1 Then nom(c.Offset(, 1).Value) = ""   ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
  Next c
  Me.ComboBox2.List = nom.keys
End Sub
En "fonctionnement", je peux sélectionner une valeur dans ma ComboBox1, cependant une erreur Objet requis apparaît ici dans Private Sub ComboBox1_click():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 For Each c In f.Range("A2:A" & f.[A65000].End(xlUp).Row)      ' on explore la colonne de niveau 1
Je tourne en rond depuis ce matin et je commence à perdre patience espoir... Si vous pouviez me dire d'où cela peut venir je vous en serez éternellement reconnaissant