Liste en cascade combobox vers listbox
Bonsoir à tous,
Quelqu'un serait'il comment dans un userform,
depuis une liste déroulante d'une combobox qui renvoie à la colonne A d'une base de données situé dans une feuille nommée (Feuil1), faire apparaître dans un textbox à multicolonne, les résultats en cascade pour les colonnes de A à AX
J'ai bien trouvé les super macros de boisgontier jacques (voir le fichier joint), mais je ne sais pas comment l'adapter à quelques choses de "plus simple".
Merci beaucoup pour votre aide.
Petite correction, la colonne référence de la combobox est la colonne E et non la A
Bonne soirée à tous
Bonjour
De la colonne A à la colonne AX, il y a 50 colonnes sur une feuille de calcule Excel.
Or, à ma connaissance, dans une listbox multicolonnes de UserForm, on ne peut en avoir que 10 au maximum.
Ta question ne me semble donc pas avoir de réponse positive.
Désolé.
Bye !
Merci gmb pour ta réponse. En effet tu as raison, si l'on utilise la méthode additem, on est limité à 10 colonnes. Cela n'est pas le cas si l'on utilise la propriété RowSource ou list pour remplir une Listbox.
Dans tous les cas, parce que je ne trouvais pas de solution avec les autres méthodes, j'ai utilisé la propriété additem et j'ai limité ma listbox à moins de 10 colonnes, en utilisant une autre listbox et des textbox pour receuillir les données essentielles. J'ai donc utilisé la macro suivante, si elle peut servir à d'autre.
Je mets ma question en résolue, bien que si quelqu'un à une idée pour faire cela dans une listbox, je suis preneur.
Très bonne journée.
Private Sub ComboBox1_Change()
Me.ListBox1.Clear
Me.ListBox2.Clear
Set C = Sheets("import").Range("e:e").Find(Me.ComboBox1.Value, LookIn:=xlValues)
If Not C Is Nothing Then
premier = C.Address
i = 0
Do
Me.TextBox1 = C.Offset(0, -3).Value & " / " & C.Offset(0, -2).Value & " / " & C.Offset(0, -1).Value & " / " & C.Value
Me.TextBox3 = C.Offset(0, 4).Value
Me.TextBox4 = C.Offset(0, 12).Value
Me.ListBox1.AddItem
Me.ListBox1.List(0, 0) = C.Offset(0, -4).Value
Me.ListBox1.List(0, 1) = C.Offset(0, 1).Value
Me.ListBox1.List(0, 2) = C.Offset(0, 2).Value
Me.ListBox1.List(0, 3) = C.Offset(0, 3).Value
Me.ListBox1.List(0, 4) = C.Offset(0, 5).Value & " " & C.Offset(0, 6).Value
Me.ListBox1.List(0, 5) = C.Offset(0, 11).Value
Me.ListBox1.ColumnWidths = "60;80;80;120;60;100"
Me.ListBox2.AddItem
Me.ListBox2.List(i, 0) = C.Offset(0, 15).Value
Me.ListBox2.List(i, 1) = C.Offset(0, 14).Value
Me.ListBox2.List(i, 2) = C.Offset(0, 19).Value
Me.ListBox2.List(i, 3) = C.Offset(0, 20).Value
Me.ListBox2.List(i, 4) = C.Offset(0, 22).Value & " " & C.Offset(0, 23).Value
Me.ListBox2.List(i, 5) = C.Offset(0, 16).Value
Me.ListBox2.List(i, 6) = C.Offset(0, 17).Value
Me.ListBox2.List(i, 7) = C.Offset(0, 18).Value
Me.ListBox2.ColumnWidths = "20;120;30;60;60;60"
Set C = Sheets("import").Range("e:e").FindNext(C)
i = i + 1
Loop While Not C Is Nothing And C.Address <> premier
End If
End SubBonjour à tous,
Petite avancée.
L'idée m'est venue d'utiliser les filtres automatiques. Résultat, un filtre selon la combobox1 pour une listbox à 50 colonnes.
Par contre, un listbox1.clear en début de Private Sub ComboBox1_Change, ne fonctionne pas. Du coup les résultats viennent s'ajoutaient l'un à la suite de l'autre selon les choix faits dans la combobox1.
Dim f
Private Sub ComboBox1_Change()
Dim plg As Range
With Worksheets("import")
If Not .AutoFilterMode Then .Range("E2").AutoFilter
End With
Range("E2").AutoFilter Field:=5, Criteria1:=ComboBox1
Set plg = Sheets("import").Range("A3:AX" & Range("E65536").End(xlUp).Row)
With ListBox1
.ColumnCount = plg.Columns.Count
.RowSource = plg.Address
End With
Worksheets("import").AutoFilterMode = False
Call UserForm_Initialize
End Sub
Private Sub UserForm_Initialize()
Set f = Sheets("import")
Set mondico = CreateObject("Scripting.Dictionary")
For Each C In f.Range("E3:E" & f.[E65000].End(xlUp).Row) '
mondico(C.Value) = "" ' on ajoute l'élément de la famille au dictionnaire
Next C
Me.ComboBox1.List = mondico.keys
End SubEn fait, il suffit de remplacer ce bout de code
Set plg = Sheets("import").Range("A3:AX" & Range("E65536").End(xlUp).Row)par
Set plg = Sheets("import").Range("A3:AX" & Range("E65536").End(xlUp).Row).SpecialCells(xlVisible)