Remplir une Listbox à partir d'un tableau Excel (avec variable)

Bonjour,

Je souhaiterais remplir une ListBox présente sur un UserForm à partir d'un tableau excel.

J'ai essayé avec RowSource, mais le problème étant que le tableau est amené à être complété et donc, des lignes supplémentaires seront ajoutées. Il faudrait alors pouvoir intégrer une variable dans l'initialisation mais je ne sais pas comment...

J'ai fait plusieurs tentatives mais rien ne fonctionne, je vous joins tout de même le doc en question.

15modele-ter.xlsm (27.92 Ko)

Merci d'avance !

Bonjour Mm_b, bonjour le forum,

Essaie comme ça :

Private Sub UserForm_Initialize()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)

Set O = Worksheets("Source") 'définit l'onglet O
Set TS = O.ListObjects("Source") 'définit le tableau TS
Me.ListBox1.ColumnCount = TS.ListColumns.Count 'définit le nombre de colonne de la ListBox1 (autant que TS)
Me.ListBox1.List = TS.DataBodyRange.Value 'alimente la ListBox1
End Sub

Bonjour,

Merci beaucoup pour ta réponse !

Comment faire pour que seule les deux premières colonnes s'affichent dans la ListBox ?

Encore merci d'avance !

Bonjour Thauthème,

Tu peux éviter 2 lignes d'instruction sans faire référence à la feuille :

Private Sub UserForm_Initialize()
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)

Set TS = [Source].ListObject  'définit le tableau TS
Me.ListBox1.ColumnCount = TS.ListColumns.Count 'définit le nombre de colonne de la ListBox1 (autant que TS)
Me.ListBox1.List = TS.DataBodyRange.Value 'alimente la ListBox1
End Sub

Bonjour le fil, bonjour le forum,

@Mm_b

Private Sub UserForm_Initialize()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)

Set O = Worksheets("Source") 'définit l'onglet O
Set TS = O.ListObjects("Source") 'définit le tableau TS
Me.ListBox1.ColumnCount = 2 <------ ici
Me.ListBox1.List = TS.DataBodyRange.Value 'alimente la ListBox1
End Sub

@Thev

C'est tout à fait juste mais j'ai pris l'habitude de toujours déclarer l'onglet car souvent j'en ai besoin par la suite...

Merci pour vos réponses,

Je rencontre désormais un problème lorsque j'active la macro.

J'ai créé un bouton sur la feuille "Tableau de Bord" qui active le formulaire avec la ListBox. Le problème étant que la boucle se réalise sur la feuille "tableau de bord" et non sur la feuille "Source" (ce sont test 1 et test 2 qui apparaissent dans ma liste box, et non les projets).

La fonction Worksheet("Source").Activate ne me convient pas car je souhaiterais que l'utilisateur reste sur la feuille "tableau de bord"...

Avez-vous des suggestions ?

Encore merci d'avance !

10modele-v3.xlsm (33.74 Ko)

Re,

Essaie comme ça :

Private Sub TextBox1_Change()
Dim NbLigne As Integer
Dim Ligne As Variant
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)
Dim I As Integer

Set O = Worksheets("Source") 'définit l'onglet O
Set TS = O.ListObjects("Source") 'définit le tableau TS
ListBox1.Clear
If TextBox1 <> "" Then
For I = 1 To TS.ListRows.Count
    If UCase(TS.DataBodyRange(I, 1).Value) Like "*" & UCase(TextBox1) & "*" Then
        ListBox1.AddItem TS.DataBodyRange(I, 1).Value
    End If
Next I
ElseIf TextBox1 = "" Then
    Me.ListBox1.ColumnCount = 3
    Me.ListBox1.List = TS.DataBodyRange.Value 'alimente la ListBox1
End If
End Sub

Lorsque j'applique ce code et que j'effectue une recherche, seule la première colonne s'affiche.

Or je souhaiterais que toute la ligne s'affiche (4 colonnes). Voici mon code actuel, avec quelques modifs depuis la dernière fois :

Private Sub TextBox1_Change()

Dim L As Integer
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)
Dim I As Integer

Set O = Worksheets("Source") 'définit l'onglet O
Set TS = O.ListObjects("Source") 'définit le tableau TS

ListBox1.Clear

If TextBox1 <> "" Then

    For I = 1 To TS.ListRows.Count
        If UCase(TS.DataBodyRange(I, 1).Value) Like "*" & UCase(TextBox1) & "*" Then
        ListBox1.AddItem TS.DataBodyRange(I, 1).Value '====> Le problème doit venir de cette ligne mais je ne sais pas comment la modifier, malgré plusieurs tentatives...

        For L = 0 To Me.ListBox1.ListCount - 1
            Me.ListBox1.List(L, 3) = Format(Me.ListBox1.List(L, 3), "### ### ### €")
        Next L
    End If
    Next I

ElseIf TextBox1 = "" Then

Set O = Worksheets("Source") 'définit l'onglet O
Set TS = O.ListObjects("Source") 'définit le tableau TS

Me.ListBox1.ColumnCount = 4
Me.ListBox1.List = TS.DataBodyRange.Value 'alimente la ListBox1
For L = 0 To Me.ListBox1.ListCount - 1
    Me.ListBox1.List(L, 3) = Format(Me.ListBox1.List(L, 3), "### ### ### €")
Next L

End If

End Sub

Merci d'avance !

Re,

Difficile de comprendre ce que tu veux !?... Au premier post je t'ai fait une proposition avec toutes la ligne. Puis tu as demandé seulement deux colonnes et maintenant tu voudrais à nouveau toutes la ligne... J'attends que tu changes encore d'avis pour envisager une réponse...

Rechercher des sujets similaires à "remplir listbox partir tableau variable"