Bonjour,
Dans une UserForm j'ai 2 combo cboGrp et cboRech
Ils sont définis dans Initialize par
et...
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
jusque là ça baigne...
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
Là ou ça se corse c'est :
Bon... de toute façon je ne suis pas fan de cette soluce à cause du nombre de champs dans la BD
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
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 :
j'ai alors essayé :
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 '...
Grave !
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
Avez vous une solution ?
A+
Partager