cathodique
XLDnaute Barbatruc
Bonjour,
Suite à une discussion Boisgontier m'avait donné une solution. Je l'en remercie aussi d'avoir mis mon fichier sur son site.
http://boisgontierjacques.free.fr/fichiers/Formulaire/FormComboboxCascadeListBox.xls
Maintenant ma question est la suivante, comment simplifier le code. En effet, les données des différents objets (combobox) sont extraites d'une même source (plage de la feuille). Cette plage a été mise dans un tableau.
Dim f est déclaré en global, désigne la feuille, mais pourquoi étant obligé de faire un set f= sheets("notre_feuille") et il en va de même pour la dernière ligne non vide et le tableau.
Dlg est la dernière ligne de ma même feuille et Tbl représente la même plage de la même feuille.
Autrement, peut-on mettre les lignes de code signalées avec astérisques (***) en commun aux différentes procédures?
En vous remerciant. Bonne journée à tous.
Suite à une discussion Boisgontier m'avait donné une solution. Je l'en remercie aussi d'avoir mis mon fichier sur son site.
http://boisgontierjacques.free.fr/fichiers/Formulaire/FormComboboxCascadeListBox.xls
Maintenant ma question est la suivante, comment simplifier le code. En effet, les données des différents objets (combobox) sont extraites d'une même source (plage de la feuille). Cette plage a été mise dans un tableau.
Dim f est déclaré en global, désigne la feuille, mais pourquoi étant obligé de faire un set f= sheets("notre_feuille") et il en va de même pour la dernière ligne non vide et le tableau.
Dlg est la dernière ligne de ma même feuille et Tbl représente la même plage de la même feuille.
Autrement, peut-on mettre les lignes de code signalées avec astérisques (***) en commun aux différentes procédures?
VB:
Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("BD")
Set MonDico = CreateObject("Scripting.Dictionary")
Dlg = f.Range("A" & Rows.Count).End(xlUp).Row '***
Tbl = f.Range("A2:J" & Dlg).Value '***
For i = LBound(Tbl) To UBound(Tbl)
If Tbl(i, 3) <> "" Then MonDico(Tbl(i, 3)) = Tbl(i, 3)
Next i
Me.Cb1.List = MonDico.items
End Sub
Private Sub Cb1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
Dlg = f.Range("A" & Rows.Count).End(xlUp).Row '***
Tbl = f.Range("A2:J" & Dlg).Value '***
For i = LBound(Tbl) To UBound(Tbl)
If Tbl(i, 3) = Me.Cb1 Then MonDico(Tbl(i, 4)) = Tbl(i, 4)
Next i
Me.Cb2.List = MonDico.items
Me.Cb2.ListIndex = -1
End Sub
Private Sub Cb2_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
Dlg = f.Range("A" & Rows.Count).End(xlUp).Row '***
Tbl = f.Range("A2:J" & Dlg).Value '***
Me.ListBox1.Clear
j = 0
For i = LBound(Tbl) To UBound(Tbl)
If Tbl(i, 3) = Me.Cb1 And Me.Cb2 = Tbl(i, 4) Then
Me.ListBox1.AddItem
For k = 0 To 1
Me.ListBox1.List(j, k) = Tbl(i, k + 1)
Next k
For k = 4 To 8
Me.ListBox1.List(j, k - 2) = Tbl(i, k + 1)
Next k
j = j + 1
End If
Next i
End Sub
Private Sub ListBox1_Click()
Dim lig, k
lig = Me.ListBox1.ListIndex
For k = 1 To 7
Me("t" & k) = Me.ListBox1.List(lig, k - 1)
Next k
End Sub
Dernière édition: