Afficher plusieur colonnes dans une liste

Résolu
mathide87 Messages postés 5 Statut Membre -  
mathide87 Messages postés 5 Statut Membre -
Bonjour,
J'ai besoin d'afficher dans une liste déroulante le contenu d'un tableau qui est sur une feuille. Ce tableau de 6 colonnes est d'une longueur variable. En fouillant dans des supports de cours j'ai trouvé et adapté ce code mais toutes les infos du tableau sont affichées en une seule colonne mois je voudrais que chaque colonne du tableau soit dans une colonne de la liste.
Voici le code :

Private Sub CommandButton2_Click()

Dim rng As Range
Dim ligne As Range

With ThisWorkbook.Worksheets("GAE")
    .Activate
    Set rng = .Range("X4").CurrentRegion
    Set rng = .Range("X5:AC" & rng.Rows.Count + 5)
    lstMatériel.Clear
    For Each ligne In rng.Rows
        If Cells(ligne.Row, 24) <> "" Then
            lstMatériel.AddItem Cells(ligne.Row, 24) & " " & Cells(ligne.Row, 25)
        Else
            Exit For
        End If
    Next ligne
End With

End Sub


Merci pour votre aide :)

4 réponses

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Bonjour,

    Il faut utiliser une Listbox, commence par la dessiner sur ta feuille à partir de la barre ActiveX

    dans les propriétés de ta feuille colle ce code qui affichera le contenu des colonnes A à F, à adapter

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    k = 0
    With Sheets("GAE")
    For I = 2 To .[A65000].End(xlUp).Row
    If .Cells(I, 13) < 1 Then
    Me.ListBox1.AddItem
    Me.ListBox1.List(k, 0) = .Cells(I, 1)
    Me.ListBox1.List(k, 0) = .Cells(I, 2)
    Me.ListBox1.List(k, 0) = .Cells(I, 3)
    Me.ListBox1.List(k, 0) = .Cells(I, 4)
    Me.ListBox1.List(k, 1) = .Cells(I, 5)
    Me.ListBox1.List(k, 2) = .Cells(I, 6)
    k = k + 1
    End If
    Next I
    End With
    End Sub

    ou celui ci en fonction du choix donné à l'actualisation

    Private Sub Worksheet_Activate()
    k = 0
    With Sheets("GAE")
    For I = 2 To .[A65000].End(xlUp).Row
    If .Cells(I, 13) < 1 Then
    Me.ListBox1.AddItem
    Me.ListBox1.List(k, 0) = .Cells(I, 1)
    Me.ListBox1.List(k, 0) = .Cells(I, 2)
    Me.ListBox1.List(k, 0) = .Cells(I, 3)
    Me.ListBox1.List(k, 0) = .Cells(I, 4)
    Me.ListBox1.List(k, 1) = .Cells(I, 5)
    Me.ListBox1.List(k, 2) = .Cells(I, 6)
    k = k + 1
    End If
    Next I
    End With
    End Sub
    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
  2. mathide87 Messages postés 5 Statut Membre
     
    Bonjour Mike31,

    J'ai essayé ton code mais je ne sais pas si ca marche. La liste ne se remplie pas. Peux tu me dire ce qu'il faux que j'adapte pour lui dire que la liste commence en X5 et ce finie en colonne AC ligne indéterminée.
    Petite précision cette liste est dans un UserForm qui est ouvert par un bouton à partir de la feuille Excel. Le code pour remplir la liste est exécuté lorsque je click sur un bouton de la UserForm. J'envisage ensuite de faire écrire le contenu de la liste sélectionnée dans un endroit de la feuille Excel.

    A+
    0
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    on va faire plus simple en programmant uniquement le nombre de colonne à prendre en compte et la matrice
    code dans les propriétés de l'USERFORM

    Private Sub UserForm_Initialize()
    ListBox1.ColumnCount = 6
    ListBox1.RowSource = "X5:AC" & [X65000].End(xlUp).Row
    End Sub

    https://www.cjoint.com/c/DJnow26nIMm

    0
  4. mathide87 Messages postés 5 Statut Membre
     
    Merci Mike-31 tu es formidable ça marche du toner et désolé pour les cafouillages de ce matin j'étais un peu stressé. :-)
    0