Microsoft 365 Problème d'organisation des colonnes dans une ListBox en VBA Excel

eCHO

XLDnaute Junior
Bonjour à tous,

Je suis actuellement en train de travailler sur un projet en VBA Excel où j'utilise une ListBox pour afficher des données à partir d'une feuille de calcul. J'ai réussi à récupérer les données et à les afficher dans la ListBox, cependant, j'ai un problème d'organisation des colonnes.

Mon ListBox comporte 7 colonnes, mais les données s'affichent de manière désordonnée. Les colonnes semblent être inversées, et les données de chaque ligne sont décalées. J'aimerais organiser les colonnes de manière à ce que les données correspondent aux bonnes colonnes, et qu'elles s'affichent correctement.

J'ai essayé de définir les largeurs des colonnes à l'aide de la propriété ColumnWidths, mais cela n'a pas fonctionné comme prévu. Les données continuent de s'afficher de manière désordonnée.

Je poste ici une partie de mon code pour référence :

VB:
Private Sub CIN_Change()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim searchValue As String
    Dim i As Long
    Dim rowIndex As Long
    Dim listBoxData As String
    Dim listBoxArray() As String
    
    ' Spécifiez la feuille de travail "DATABASE"
    Set ws = ThisWorkbook.Sheets("DATABASE")
    
    ' Obtenez la dernière ligne de données dans la colonne C de la feuille "DATABASE"
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' Obtenez la valeur du TextBox "CIN"
    searchValue = Me.CIN.Value
    
    ' Effacez le contenu actuel de ListBox3
    Me.ListBox3.Clear
    
    ' Parcourez les lignes de la feuille "DATABASE" pour trouver les correspondances
    For i = 2 To lastRow ' Commencez à la ligne 2 (en supposant que la première ligne contient des en-têtes)
        If ws.Cells(i, "C").Value = searchValue Then
            ' Créez un tableau pour stocker les données de chaque colonne
            ReDim listBoxArray(1 To 7)
            
            ' Remplissez le tableau avec les données de chaque colonne
            listBoxArray(1) = ws.Cells(i, "B").Value ' Colonne B
            listBoxArray(2) = ws.Cells(i, "C").Value ' Colonne C
            listBoxArray(3) = ws.Cells(i, "F").Value ' Colonne F
            listBoxArray(4) = ws.Cells(i, "G").Value ' Colonne G
            listBoxArray(5) = ws.Cells(i, "I").Value ' Colonne I
            listBoxArray(6) = ws.Cells(i, "L").Value ' Colonne L
            listBoxArray(7) = ws.Cells(i, "M").Value ' Colonne M
            
            ' Créez une chaîne de données à partir du tableau
            listBoxData = Join(listBoxArray, vbTab)
            
            ' Ajoutez la chaîne de données à ListBox3
            Me.ListBox3.AddItem listBoxData
        End If
    Next i
    
     Dim total As Double
    Dim i2 As Integer
    
    ' Initialisez la variable total à zéro
    total = 0
    
    ' Parcourez tous les éléments de ListBox3
    For i2 = 0 To ListBox3.ListCount - 1
        ' Ajoutez la valeur de la colonne M (index 6) à la somme
        total = total + CDbl(Split(ListBox3.List(i2), vbTab)(6)) ' 6 correspond à la 7e colonne (M) dans la chaîne
    Next i2
    
    ' Affichez la somme totale dans TextBox6
    Me.TextBox6.Value = total
End Sub

Je vous remercie d'avance pour toute aide ou suggestion que vous pourriez me fournir pour résoudre ce problème d'organisation des colonnes dans ma ListBox en VBA Excel. Si vous avez besoin de plus de détails ou de code supplémentaire, n'hésitez pas à me le demander.

Cordialement,
 
Solution
Bonsoir eCHO
Pourquoi n'approvisionnes tu pas directement ta listbox
Exemple.
Code:
With Me.ListBox3
        .Clear 
    ' Parcourez les lignes de la feuille "DATABASE" pour trouver les correspondances
For i = 2 To lastRow ' Commencez à la ligne 2 (en supposant que la première ligne contient des en-têtes)
If ws.Cells(i, "C").Value = searchValue Then
.AddItem ws.Cells(i, "B").Value ' Colonne B
.List(.Listcount-1,1)= ws.Cells(i, "C").Value ' Colonne C
 .List(.Listcount-1,2)= ws.Cells(i, "F").Value ' Colonne F
 .List(.Listcount-1,3) =ws.Cells(i, "G").Value ' Colonne G
  List(.Listcount-1,4) ws.Cells(i, "I").Value ' Colonne I
    Etc = ws.Cells(i, "L").Value ' Colonne L
    Etc= ws.Cells(i, "M").Value ' Colonne M
End If
Next ki
End With[...

ChTi160

XLDnaute Barbatruc
Bonsoir eCHO
Pourquoi n'approvisionnes tu pas directement ta listbox
Exemple.
Code:
With Me.ListBox3
        .Clear 
    ' Parcourez les lignes de la feuille "DATABASE" pour trouver les correspondances
For i = 2 To lastRow ' Commencez à la ligne 2 (en supposant que la première ligne contient des en-têtes)
If ws.Cells(i, "C").Value = searchValue Then
.AddItem ws.Cells(i, "B").Value ' Colonne B
.List(.Listcount-1,1)= ws.Cells(i, "C").Value ' Colonne C
 .List(.Listcount-1,2)= ws.Cells(i, "F").Value ' Colonne F
 .List(.Listcount-1,3) =ws.Cells(i, "G").Value ' Colonne G
  List(.Listcount-1,4) ws.Cells(i, "I").Value ' Colonne I
    Etc = ws.Cells(i, "L").Value ' Colonne L
    Etc= ws.Cells(i, "M").Value ' Colonne M
End If
Next ki
End With[ /Code]
Depuis mon téléphone
Jean marie
 

eCHO

XLDnaute Junior
Bonsoir eCHO
Pourquoi n'approvisionnes tu pas directement ta listbox
Exemple.
Code:
With Me.ListBox3
        .Clear
    ' Parcourez les lignes de la feuille "DATABASE" pour trouver les correspondances
For i = 2 To lastRow ' Commencez à la ligne 2 (en supposant que la première ligne contient des en-têtes)
If ws.Cells(i, "C").Value = searchValue Then
.AddItem ws.Cells(i, "B").Value ' Colonne B
.List(.Listcount-1,1)= ws.Cells(i, "C").Value ' Colonne C
 .List(.Listcount-1,2)= ws.Cells(i, "F").Value ' Colonne F
 .List(.Listcount-1,3) =ws.Cells(i, "G").Value ' Colonne G
  List(.Listcount-1,4) ws.Cells(i, "I").Value ' Colonne I
    Etc = ws.Cells(i, "L").Value ' Colonne L
    Etc= ws.Cells(i, "M").Value ' Colonne M
End If
Next ki
End With[ /Code]
Depuis mon téléphone
Jean marie
merci :)
 

Statistiques des forums

Discussions
312 207
Messages
2 086 237
Membres
103 162
dernier inscrit
fcfg