Cascade à 22 niveaux et affichage dans une listbox

MaximeRoth

XLDnaute Junior
Bonjour,

Je réalise actuellement un outil pour compléter/consulter une base de données.
La partie complétion est viable, cependant la partie consultation ne fonctionne pas très bien.
J'ai essayé d'adapter un Liste en Cascade à ma partie consultation, code provenant du site de Jacques BOISGONTIER (encore une fois merci à lui). Grâce à Excel Downloads j'ai élaboré un proto qui était une liste Cascade à 5 niveaux.
Le proto était parfaitement fonctionnel, mais pour les besoins du projet j'ai du passer à une cascade à 22 niveaux.
J'ai déjà remarqué que le choix de la plage ne peut dépasser l'alphabet (ex: E9:Z reconnu E9:AA non reconnu).

Je pense avoir fait tous les autres changements (listbox, déclaration combobox...) pour passer à une liste cascade 22 niveaux mais rien à faire j'ai une erreur d'exécution 380:
"Impossible de définir la propriété List. Valeur de propriété non valide"
Ce message apparaît lorsque j'essaye de faire un choix dans l'une des 17 nouvelles comboboxes.
Je tourne en rond depuis 2 jours en ne trouvant pas de solution et je ne crains que ce ne sois une erreur vraiment stupide.

Si quelqu'un pouvait me débloquer se serait vraiment génial :eek:.

Merci d'avance

Max
 

Pièces jointes

  • Numéro de Série Proto V14 01062012.zip
    148.5 KB · Affichages: 65

pyfux

XLDnaute Occasionnel
Re : Cascade à 22 niveaux et affichage dans une listbox

Bonjour,

Il me semble qu'il y ait un bug VBA sur le Me.ListBox1.Clear.
Aussi je te propose un "clear manuel".

De plus le passage par un array (Elmt) semble poser moins de problème :


Sub filtre()

Dim Elmt() As String
ReDim Elmt(0 To [Ma_Plage].Columns.Count - 1)

Dim i As Long
For i = 0 To Me.ListBox1.ListCount - 1
Me.ListBox1.RemoveItem (i)
Next

ligne = 0

For i = 1 To [Ma_Plage].Rows.Count
ok = True
For n = 1 To [Ma_Plage].Columns.Count
If Not Range("Ma_Plage").Cells(i, n) Like Me("comboBox" & n) Then ok = False
Next n
If ok Then

Me.ListBox1.AddItem

For k = 1 To [Ma_Plage].Columns.Count
Elmt(k - 1) = Range("Ma_Plage").Cells(i, k).Value
Next k

Me.ListBox1.Column() = Elmt()

Me.ListBox1.List(ligne, 5) = i 'récupère le numéro de la ligne i(-1)
ligne = ligne + 1
End If
Next i
On Error Resume Next
' ActiveSheet.ShowAllData
' [A1].AutoFilter Field:=1, Criteria1:=Me.ComboBox1
' If Me.ComboBox2 <> "*" Then [A5].AutoFilter Field:=2, Criteria1:=Me.ComboBox2
' [A1].AutoFilter Field:=3, Criteria1:=Me.ComboBox3
' [A1].AutoFilter Field:=4, Criteria1:=Me.ComboBox4

End Sub

Ce bout de code semble fonctionner.

pyfux
 

MaximeRoth

XLDnaute Junior
Re : Cascade à 22 niveaux et affichage dans une listbox

Merci de ton aide.
Malheureusement ça ne marche toujours pas pour moi j'ai la même erreur quelques lignes plus bas au niveau du :
"Me.ListBox1.List(ligne, 5) = i 'récupère le numéro de la ligne i(-1)"

A+
Max
 

pyfux

XLDnaute Occasionnel
Re : Cascade à 22 niveaux et affichage dans une listbox

Exact, le problème est double: l'affectation par List ne marche pas et si plusieurs lignes à afficher elle s'écrasent.

Donc tout mettre dans un tableau à 2 axes:

Sub filtre()

Dim Elmt() As String
ReDim Elmt(0 To Sheets("Numero_de_Serie").Cells(Application.Rows.Count, 2).End(xlUp).Row, 0 To [Ma_Plage].Columns.Count - 1)

Me.ListBox1.Clear

ligne = 0

For i = 1 To [Ma_Plage].Rows.Count
ok = True
For n = 1 To [Ma_Plage].Columns.Count
If Not Range("Ma_Plage").Cells(i, n) Like Me("comboBox" & n) Then ok = False
Next n
If ok Then

Me.ListBox1.AddItem
Me.ListBox1.ListIndex = Me.ListBox1.ListCount - 1

For k = 1 To [Ma_Plage].Columns.Count
Elmt(ligne, k - 1) = Range("Ma_Plage").Cells(i, k).Value
If (k - 1) = 5 Then
Elmt(ligne, k - 1) = i
End If
Next k

ligne = ligne + 1

End If

Next i

Me.ListBox1.List = Elmt()

On Error Resume Next
' ActiveSheet.ShowAllData
' [A1].AutoFilter Field:=1, Criteria1:=Me.ComboBox1
' If Me.ComboBox2 <> "*" Then [A5].AutoFilter Field:=2, Criteria1:=Me.ComboBox2
' [A1].AutoFilter Field:=3, Criteria1:=Me.ComboBox3
' [A1].AutoFilter Field:=4, Criteria1:=Me.ComboBox4

End Sub

La on se rend compte de la limite du champ List pour l'affichage en grille de données.

N'est il pas nécessaire puisque vous parlez de "base de données" d'utiliser Access ou un RAD comme Windev ?

pyfux
 

MaximeRoth

XLDnaute Junior
Re : Cascade à 22 niveaux et affichage dans une listbox

Merci je vais essayé ça.
Sinon je vais séparer ou réduire la cascade.
Sinon je suis plutôt débutant sur vba, et je n'ai jamais entendu parlé de Windev connais tu un site comme Excel Download pour Windev ?

A+
Max
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 417
Membres
103 204
dernier inscrit
alaa20dine01