Remplir listbox en lignes et colonnes à partir de cellules

Fermé
kiwish Messages postés 4 Date d'inscription vendredi 4 novembre 2022 Statut Membre Dernière intervention 15 février 2023 - 10 févr. 2023 à 14:04
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 15 févr. 2023 à 14:10

Bonjour à tous, 

J'ai une ComboBox dans un UserForm qui me sert à lister des clients. Chaque client possède un ID client.

Mon objectif est d'afficher dans une ListBox l'ensemble des devis liés à ce client. Un devis est composé d'un ensemble de cellule d'une même ligne (de la colonne A à O) et la colonne A correspond à l'ID client.

J'aimerai trouver une solution me permettant, au changement de client, d'afficher un devis par ligne dans la ListBox.

J'ai essayé avec .AddItem (limité à 10 éléments alors que j'en ai 14 à rentrer), avec .List en déclarant le nombre de colonne, avec un tableau mais rien ne fonctionne. Je me suis alors lancé par dépit dans la méthode bourrin en stockant l'ensemble du devis dans une variable que j'affiche ensuite dans la ListBox. Cependant, vu que le texte des cellules n'est pas de la même longueur, rien n'est aligné.

Voici le code à l'heure actuelle :

Code: 

Private Sub ComboBox_nom_Change()

Dim derniereligne As Integer
Dim client As String
Dim ID_client As Integer
Dim devis As String

ListBox_historique.Clear
Worksheets("Partie Client").Activate
derniereligne = Cells(Rows.Count, 2).End(xlUp).Row
client = TextBox_nom.Text

For i = 2 To derniereligne
    If Range("B" & i).Value = client Then
        ID_client = Range("A" & i).Value
    End If
Next

Worksheets("Partie Devis").Activate
derniereligne = Cells(Rows.Count, 2).End(xlUp).Row

For i = 2 To derniereligne
    If Range("A" & i).Value = ID_client Then
        devis = 0
        devis = devis + Range("B" & i).Text & "  " & Range("C" & i).Text & " " & Range("D" & i).Text & " " 'etc jusqu'à la clonne O'
        ListBox_historique.AddItem (devis)
    End If
Next
End Sub

Je recevrai volontier toute remarque, conseil ou astuce.

Merci d'avance pour vos retours.

Cordialement, Kiwish.

A voir également:

2 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
10 févr. 2023 à 16:18

Bonjour,

Une astuce pour avoir plus de 10 colones dans une listbox:

'listbox plus de 10 colonnes
Dim t(14)   '0 a 13     pour 14 colonnes
Me.ListBox2.Column = t
ListBox2.ColumnCount = 14
ListBox2.BoundColumn = 14
ListBox2.ColumnWidths = "40;40;40;40;40;40;40;40;40;40;40;40;40;40"
Me.ListBox2.Clear
Me.ListBox2.AddItem "COL1"
Me.ListBox2.List(0, 1) = "COL2"
Me.ListBox2.List(0, 2) = "COL3"
Me.ListBox2.List(0, 3) = "COL4"
Me.ListBox2.List(0, 4) = "COL5"
Me.ListBox2.List(0, 5) = "COL6"
Me.ListBox2.List(0, 6) = "COL6"
Me.ListBox2.List(0, 7) = "COL7"
Me.ListBox2.List(0, 8) = "COL8"
Me.ListBox2.List(0, 9) = "COL9"
Me.ListBox2.List(0, 10) = "COL10"
Me.ListBox2.List(0, 11) = "COL11"
Me.ListBox2.List(0, 12) = "COL12"
Me.ListBox2.List(0, 13) = "COL13"
Me.ListBox2.List(0, 14) = "COL14"

Par contre, comprends pas vraiment votre remplissage

0
kiwish Messages postés 4 Date d'inscription vendredi 4 novembre 2022 Statut Membre Dernière intervention 15 février 2023
15 févr. 2023 à 10:23

Bonjour merci pour cette réponse, 

J'ai essayé la méthode mais je retrouve le même problème que précédemment. Je souhaite boucler ce bout de code afin de remplir plusieurs lignes dans la ListBox. Cependant, avec .List(0, 13) (par exemple) il n'est possible de remplir que la première ligne. J'ai alors essayé de boucler avec .List(i, 13) mais la propriété de la fonction .List n'est pas valable. J'imagine qu'il est alors impossible de rentrer une variable en guise de ligne.

S'il existe une méthode je suis preneur :)

0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
Modifié le 15 févr. 2023 à 14:12

Bonjour,

J'imagine qu'il est alors impossible de rentrer une variable en guise de ligne.

Ah que si:

Private Sub CommandButton1_Click()
'listbox plus de 10 colonnes
Dim t(14)   '0 a 13     pour 14 colonnes
Me.ListBox1.Column = t
ListBox1.ColumnCount = 14
ListBox1.BoundColumn = 14
ListBox1.ColumnWidths = "40;40;40;40;40;40;40;40;40;40;40;40;40;40"
Me.ListBox1.Clear
For n = 0 To 20
    Me.ListBox1.AddItem "COL1"
    Me.ListBox1.List(n, 1) = "COL2"
    Me.ListBox1.List(n, 2) = "COL3"
    Me.ListBox1.List(n, 3) = "COL4"
    Me.ListBox1.List(n, 4) = "COL5"
    Me.ListBox1.List(n, 5) = "COL6"
    Me.ListBox1.List(n, 6) = "COL6"
    Me.ListBox1.List(n, 7) = "COL7"
    Me.ListBox1.List(n, 8) = "COL8"
    Me.ListBox1.List(n, 9) = "COL9"
    Me.ListBox1.List(n, 10) = "COL10"
    Me.ListBox1.List(n, 11) = "COL11"
    Me.ListBox1.List(n, 12) = "COL12"
    Me.ListBox1.List(n, 13) = "COL13"
    Me.ListBox1.List(n, 14) = "COL14"
Next n
End Sub
0