Formulaire avec listes en cascade

Résolu/Fermé
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 - Modifié par Koalacid le 8/03/2016 à 12:01
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 8 mars 2016 à 15:32
Bonjour,

Je rencontre actuellement le problème suivant. J'ai un code lié à un userform qui me permet via la sélection de choix dans une listbox de faire apparaître en cascade un ensemble de choix dans la liste suivante.

Cependant ce code ne fonctionne pas toujours sans que ni les éléments de liste, ni le code ou ni le userform n'aient changé.

Après plusieurs essais, j'ai remarqué que lq gestion des espaces était la source du problème. Mais je ne peux pas à chaque fois qu'il y a un bug faire la conversion des " " en "_".

Je viens vers vous pour savoir si vous avez une meilleure facon de rédiger ce code qui permettra d#éviter ce bug récurrent.


Private Sub UserForm_Initialize()

' First two Lists and Combobox

Dim Ws As Worksheet
Dim J As Long
Dim I As Integer

' First two Lists
Me.StartUpPosition = 2
ComboBox1.Clear
ListBox4.Clear
ListBox1.Clear
ListBox2.Clear
ListBox3.Clear
Set Ws = Sheets("Central Lists")
Me.ComboBox1.List = Ws.Range("D136:D" & Ws.Range("D" & Rows.Count).End(xlUp).Row).Value
Me.ListBox4.List = Ws.Range("A136:A" & Ws.Range("A" & Rows.Count).End(xlUp).Row).Value
Me.ListBox1.List = Ws.Range("J2:J" & Ws.Range("J" & Rows.Count).End(xlUp).Row).Value



End Sub

' ********************** CASCADE1 *********************
' Cascade Lists 2
Private Sub ListBox1_Change()
Dim derlgn As Byte, TInfos

If ListBox1.ListIndex = -1 Then Exit Sub
ListBox2.Clear
'Column Letter
LCol2 = Split(Cells(8, ListBox1.ListIndex + 2).Address, "$")(1)
derlng = Sheets("Lists").Range(LCol2 & "3").End(xlDown).Row
With ListBox2
If derlng <> 4 Then
.List = Sheets("Lists").Range(LCol2 & "4:" & LCol2 & derlng).Value
Else
.AddItem Sheets("Lists").Range(LCol2 & "4")
End If
.ListIndex = 0
End With
End Sub

' ********************** CASCADE2 *********************
' Cascade Lists 3
Private Sub ListBox2_Change()
Dim derlgn As Byte

If ListBox2.ListIndex = -1 Then Exit Sub
ListBox3.Clear
dercol = Sheets("Lists").Cells(9, Columns.Count).End(xlToLeft).Column
'Column Letter
LCol = Split(Cells(8, dercol).Address, "$")(1)
Set Plage = Sheets("Lists").Range("B9:" & LCol & "9")
Col = WorksheetFunction.Match(ListBox2.Text, Plage, 0) + 1
'Column Letter
LCol = Split(Cells(8, Col).Address, "$")(1)
derlng = Sheets("Lists").Range(LCol & "9").End(xlDown).Row
With ListBox3
If derlng <> 10 Then
.List = Sheets("Lists").Range(LCol & "10:" & LCol & derlng).Value
Else
.AddItem Sheets("Lists").Range(LCol & "10")
End If
.ListIndex = 0
End With
End Sub


En gras, c'est la ligne qui bug avec le message suivant: "Unable to get the match property of the worcksheetfunction class.

EDIT: En faisant des tests plus précis, je viens de me rendre compte que je ne peux pas cliquer sur un élélement de la listbox1, de ce fait la worksheetFunction.Match ne peut pas fonctionner puisqu'elle cherche un vide (""). Source, le moniteur pas à pas de VBA.

Par avance, je vous remercie du temps que vous accorderez à mon problème,


Sincèrement,


1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 8/03/2016 à 15:33
Bonjour,

Avec votre fichier et des donnees non sensibles ce serait plus facile!!!!!!!!
Comment entrez-vous dans Private Sub ListBox2_Change() si vous ne cliquer pas dans ListBox1
0