Poblèmes Combobox en cascade et listbox
bonjour,
J'ouvre une nouvelle discussion concernant les ComboBox en cascade et une ListBox de résultat dans un USERFORM
Car étant assez novice en vba, j'ai consulter les tutos de SilkyRoad et les différentes discussions je n'arrive toujours pas à avancer.
Pour pouvoir avancer pas à pas, MON FICHIER ET uSERfORM SE PR2SENTE COMME CE6CI/
onglet source: shtDb (matrice)
onglet pour le bouton d'accès au UserForm: shtConsult (RECHERCHE)
données du combobox1: concerne la colonne D
données du combobox2: concerne la colonne E
données du combobox3: concerne la colonne F
données à afficher dans la Listbox1: concerne la colonne C (liens hypertexte que je veux rendre actif par la suite avec un ListBox1_Click)
ci-dessous mon code complet de l'USERFORM:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| Option Explicit
Dim f, a()
Private Sub UserForm_Initialize()
Set f = Sheets("matrice")
Set mondico = CreateObject("Scripting.Dictionary")
a = f.Range("C2:F" & f.[C65000].End(xlUp).Row).Value
For i = LBound(a, 1) To UBound(a, 1)
mondico(a(i, 1)) = ""
Next i
Me.ComboBox1.List = mondico.keys
End Sub
Private Sub ComboBox1_click()
Me.ComboBox2.Clear
Me.ComboBox3.Clear
Me.ComboBox4.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For i = LBound(a, 1) To UBound(a, 1)
If a(i, 1) = Me.ComboBox1 Then mondico(a(i, 2)) = ""
Next i
Me.ComboBox2.List = mondico.keys
Me.ListBox1 = Me.ComboBox1
End Sub
Private Sub ComboBox2_click()
Me.ComboBox3.Clear
Me.ComboBox4.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For i = LBound(a, 1) To UBound(a, 1)
If a(i, 1) = Me.ComboBox1 And a(i, 2) = Me.ComboBox2 Then mondico(a(i, 3)) = ""
Next i
Me.ComboBox3.List = mondico.keys
Me.ListBox1 = Me.ComboBox2
End Sub
Private Sub ComboBox3_click()
Me.TextBox1 = Me.ComboBox3
End Sub |
Pour commencer simple mon premier problème est dès que je lance l'USERFORM, il bloque sur:
Set mondico dans l'UserForm_Initialize
et le message est: "erreur de compilation:variable non définie"
merci beaucoup pour votre aide j'ai à cœur d'apprendre le vba pour me simplifier la vie
[XL-2007] Poblèmes Combobox en cascade et listbox
ok merci
j'ai déclaré toutes mes variables
et maintenant mon blocage provient dès l'ouverture du UserForm.
Code:
1 2 3
| Sub CommandButton1_Click()
UserForm19.Show 0
End Sub |
UserForm19.Show 0 est en surbrillance et le message d'erreur est: erreur d'execution '70': Permission refusée
quel est le problème?
[XL-2007] Poblèmes Combobox en cascade et listbox
c'est bon j'ai trouvé mon erreur!
dans les propriétés du combobox1 j'avais inséré des données dans la partie Rowsource!:scarymov:
Mon nouveau soucis est plus complexe!
Quand je sélectionne dans mon combobox3 la donnée j'ai un message d'erreur: Erreur d'execution '380': impossible de définir la propriété value. valeur de propriété non valide
Me.ListBox1 = Me.ComboBox3 est en surbrillance et quand je passe sur Me.ListBox1, il me met: Me.ListBox1 = Me.ComboBox3 = Null.
pour rappel mon code complet et la donnée que je veux afficher dans la listbox se situe en colonne C:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Option Explicit
Dim f, a()
Dim mondico As Object
Dim i
Private Sub UserForm_Initialize()
Set f = Sheets("matrice")
Set mondico = CreateObject("Scripting.Dictionary")
a = f.Range("D2:F" & f.[D65000].End(xlUp).Row).Value
For i = LBound(a, 1) To UBound(a, 1)
mondico(a(i, 1)) = ""
Next i
Me.ComboBox1.List = mondico.keys
End Sub
Private Sub ComboBox1_click()
Me.ComboBox2.Clear
Me.ComboBox3.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For i = LBound(a, 1) To UBound(a, 1)
If a(i, 1) = Me.ComboBox1 Then mondico(a(i, 2)) = ""
Next i
Me.ComboBox2.List = mondico.keys
End Sub
Private Sub ComboBox2_click()
Me.ComboBox3.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For i = LBound(a, 1) To UBound(a, 1)
If a(i, 1) = Me.ComboBox1 And a(i, 2) = Me.ComboBox2 Then mondico(a(i, 3)) = ""
Next i
Me.ComboBox3.List = mondico.keys
End Sub
Private Sub ComboBox3_click()
Me.ListBox1 = Me.ComboBox3
End Sub |
Merci
[XL-2007] Poblèmes Combobox en cascade et listbox
Merci pour ta réponse, mais ça ne fonctionne pas.
Est-ce que ça ne vient pas du fait que dans les combo précédentes je ne fait jamais référence à la colonne C ?
Donc il ne trouve pas le lien entre le résultat du click de la combobox3 et ce qu'il faut afficher en ListBox1?
merci
[XL-2007] Poblèmes Combobox en cascade et listbox
bonjour,
Après plusieurs recherches et jours d'intense réflexion j'ai réussi à me dépatouiller!
Il me reste un dernier soucis:
Lorsque je déplace mon bouton pour ouvrir mon UserForm, je n'ai plus aucunes données dans celui-ci quel est le problème?
Pour info, mes données sont dans l'onglet: shtDb(matrice) et je veux mettre le bouton d'ouverture de l'UserForm dans l'onglet: shtConsult(RECHERCHE)
Mon code d'initialisation et de tri:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| Dim f
Private Sub UserForm_Initialize()
Set f = Sheets("matrice")
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
mondico(c.Value) = ""
Next c
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub |
Mes combobox1 ,2 ,3 et listbox1:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Private Sub ComboBox1_Click()
Me.ComboBox2.Clear
Me.ComboBox3.Clear
Me.ListBox1.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
If c = Me.ComboBox1 Then mondico(c.Offset(0, 1).Value) = ""
Next c
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox2.List = temp
End Sub
Private Sub ComboBox2_click()
Me.ComboBox3.Clear
Me.ListBox1.Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range("F2:F" & [F65000].End(xlUp).Row)
If c.Offset(, -2) = Me.ComboBox1 And c.Offset(, -1) = Me.ComboBox2 Then mondico(c.Value) = ""
Next c
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Me.ComboBox3.List = temp
End Sub
Private Sub ComboBox3_click()
Me.ListBox1.Clear
i = 0
For Each c In Range("C2:C" & [C65000].End(xlUp).Row)
If c.Offset(, 1) = Me.ComboBox1 And c.Offset(, 2) = Me.ComboBox2 And c.Offset(, 3).Value = Me.ComboBox3 Then
Me.ListBox1.AddItem c
Me.ListBox1.List(i, 1) = c.Offset(, 1)
i = i + 1
End If
Next c
End Sub |
Merci d'avance pour vos réponse
lien hypertexte dans listbox
A quel niveau manque le f. ? car je ne comprend pas trop.
Au lieu de:
Code:
1 2
| For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
mondico(c.Value) = "" |
je dois mettre:
Code:
1 2
| For Each c In f.Range("D2:D" & [D65000].End(xlUp).Row)
mondico(c.Value) = "" |
Et de telle manière à chaque combobox ou juste pour l'initialisation?
Merci
[XL-2007] Poblèmes Combobox en cascade et listbox