Bonjour,
Dans une UserForm j'ai 2 combo cboGrp et cboRech
Ils sont définis dans Initialize par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Private Sub InitComboBox()
With Me.cboGrp
.ColumnHeads = False: .ColumnCount = 1: .ColumnWidths = "200"
End With
 With Me.cboRech
 .ColumnHeads = False: .ColumnCount = 9: .ColumnWidths = "0;0;200;0;;;;;"
 End With
 InitRowSource '
End Sub
et...
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
19
Private Sub InitRowSource()
Dim Dico, Arr, Tbl, i
   TriBD 'algo quick sort
   DoEvents
   With Me.cboGrp
   Arr = [BDSh].Value
   Set Dico = CreateObject("Scripting.Dictionary")
   For i = 1 To UBound(Arr) ' on explore la colonne de niveau 1
      Dico(Arr(i, 2)) = ""  ' on ajoute l'élément de la famille au dictionnaire
   Next i
   Tbl = Dico.keys
   TriX Tbl, LBound(Tbl), UBound(Tbl)
   .List = Tbl
   End With
   With Me.cboRech
      .RowSource = [BD].Address(external:=True)
      .ListIndex = -1
   End With
End Sub
jusque là ça baigne...
Là ou ça se corse c'est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Private Sub cboGrp_Click()
Dim Dico, i, Arr
  Me.cboRech.Clear 'Cette ligne provoque une erreur d'exécution -2147467259(80004005) Erreur non répertoriée
  Set Dico = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(Arr)                               ' on explore la colonne de niveau 1
    If Arr(i, 1) = Me.cboGrp Then Dico(Arr(i, 2)) = ""   ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
  Next i
  Me.cboRech.List = Dico.keys
End Sub
Bon... de toute façon je ne suis pas fan de cette soluce à cause du nombre de champs dans la BD
Je préfèrerai redéfinir cboRech avec le contenu de la BD filtrée. (Donc avec List et non pas par RowSource)

C'est possible ?

Le RowSource étant modifié avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
'...
   With Me.cboRech
      .List = [BDSh].Value
      .ListIndex = -1 ' Force affichage vide
   End With
'...
j'ai alors essayé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Private Sub cboGrp_Click()
Dim Dico, i, Arr
  Me.cboRech.Clear
  Arr = [BDSh].Value
  Set Dico = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(Arr)                               ' on explore la colonne de niveau 1
    If Arr(i, 2) = Me.cboGrp Then Dico(Arr(i, 3)) = ""   ' C'est là que ça coince je ne sais pas définir mon Dico pour récupérer toute la ligne de Arr
'Je suppose qu'un Array est nécessaire mais là je plafonne...
  Next i
  Me.cboRech.List = '( ?? Dico.keys ??) Récupérer les valeurs du Dico dans un Tableau ???
End Sub
Grave !

Avez vous une solution ?
A+