Question récurrente : comment remplir une listbox multi-colonnes.
L'aide donne bien des exemples mais pas tous...

Un travail sur les listbox m'a montré qu'il n'était pas toujours évident de renseigner des listbox ou comboBox selon ce qu'on voulait placer "dedans".
Le code suivant ne se veut pas exhaustif mais devrait renseigner sur certaines de ces méthodes.
Pierre Fauconnier et SilkyRoad m'ont aidé à retrouver le nord, DarkVader a ajouté une méthode que je n'ai pas jugé utile d'ajouter parce, bien que différente, celle-ci faisait doublon avec les précédentes. Quand à bbil, il ne sait même pas qu'un code donné pour VB m'a également été utile...

Le code suivant est à placer dans un userform comportant 5 listbox et un bouton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Dim FL1 As Worksheet
 
Private Sub CommandButton1_Click()
    Unload Me
End Sub
 
Private Sub UserForm_Initialize()
    Set FL1 = Worksheets("Feuil1")
 
'*** Déclarations pour partie communes aux quatre premiers exemples *********
Dim DerLigne As Long, DerCol As Byte
    DerLigne = FL1.Range("A65535").End(xlUp).Row 'DerLigne de la plage
    DerCol = FL1.Range("IV1").End(xlToLeft).Column   'Dernière colonne
'****************** Peuvent être placées en paramètres ****************
'*** Auquel cas, dans les procédures appelées, supprimer ces lignes ***
'********************** et ajouter les paramètres *********************
 
    '                                Les mêmes avec paramètres
    PrésentationEnLignes            'PrésentationEnLignes DerLigne DerCol
    PresentationEnColonnes          'PresentationEnColonnes DerLigne DerCol
    PresentationEnLignesAvecAddItem 'PresentationEnLignesAvecAddItem DerLigne
    AfficherCertainesCellules       'AfficherCertainesCellules DerLigne
    ListerUnRépertoireAvecAddItem
End Sub
 
'*******************  METHODE CLASSIQUE ********************
'************ Affichage en lignes d'une plage de données ************
 
Sub PrésentationEnLignes() 
Dim DerLigne As Long, DerCol As Byte
    DerLigne = FL1.Range("A65535").End(xlUp).Row 'Dernière ligne de la plage
    DerCol = FL1.Range("IV1").End(xlToLeft).Column   'Dernière colonne
 
    Me.ListBox1.ColumnCount = DerCol
    Me.ListBox1.RowSource = _
    FL1.Range(Cells(1, 1), Cells(DerLigne, DerCol)).Address(False, False)
End Sub
 
'*********** Affichage en colonnes d'une plage de données ***********
 
Sub PresentationEnColonnes() 'Affichage en colonnes
Dim DerLigne As Long, DerCol As Byte
    DerLigne = FL1.Range("A65535").End(xlUp).Row 'Dernière ligne de la plage
    DerCol = FL1.Range("IV1").End(xlToLeft).Column   'Dernière colonne
 
    Dim Tableau(), NoLigne As Long
    ReDim Tableau(DerLigne, DerCol)
 
    Me.ListBox2.ColumnCount = DerLigne 'On fixe le nbre de colonnes de la liste
    'Création du tableau : Pour chaque ligne, toutes les colonnes
    For NoLigne = 1 To DerLigne
        For NoCol = 1 To DerCol  '(NoLigne-1 et NoCol-1) l'index commençant à 0
            Tableau(NoLigne - 1, NoCol - 1) = FL1.Cells(NoLigne, NoCol).Value
        Next
    Next
    Me.ListBox2.Column() = Tableau()
End Sub
 
'************* Affichage en lignes de certaines colonnes ************
 
Sub PresentationEnLignesAvecAddItem()
Dim Liste
Dim DerLigne As Long, DerCol As Byte
    DerLigne = FL1.Range("A65535").End(xlUp).Row 'Dernière ligne de la plage
 
    Liste = Array(1, 3, 5, 7) 'liste des colonnes ds la feuille de calculs
    DerCol = UBound(Liste)
    Me.ListBox3.ColumnCount = DerCol + 1
    'On remplit la première colonne
    For NoLigne = 1 To DerLigne
        Me.ListBox3.AddItem FL1.Cells(NoLigne, Liste(0)).Value
    Next
    For NoCol = 1 To DerCol
        For NoLigne = 0 To DerLigne - 1
            Me.ListBox3.Column(NoCol, NoLigne) = _
            FL1.Cells(NoLigne + 1, Liste(NoCol)).Value
        Next
    Next
End Sub
 
'************* Affichage en lignes de certaines cellules ************
 
Sub AfficherCertainesCellules() 'sur une seule colonne
Dim Tableau()
Dim NoCol As Byte, NoLigne As Byte
    NoCol = 5 'Colonne unique
    ListLignes = Array(6, 9, 15) 'Listes des No de lignes
    ReDim Tableau(UBound(ListLignes))
    For NoLigne = 0 To UBound(ListLignes)
        Debug.Print ListLignes(NoLigne)
        Tableau(NoLigne) = _
        FL1.Cells(ListLignes(NoLigne), NoCol).Value
    Next
    'Me.ListBox4.ColumnCount = 1 '(valeur par défaut donc inutile ici)
    Me.ListBox4.List() = Tableau()
End Sub
 
'************* Affichage en lignes sur deux colonnes ************
 
Sub ListerUnRépertoireAvecAddItem()
Dim Chemin As String, NomFich As String
Dim i As Integer
    Me.ListBox5.ColumnCount = 2
    Me.ListBox5.ColumnWidths = "45;60" 'dimensionne les colonnes de la liste
    Chemin = "C:\"
    NomFich = Dir(Chemin)
 
    'Ligne d'en-tête
    Me.ListBox5.AddItem "Répertoire"
    Me.ListBox5.Column(1, 0) = "Nom du fichier"
 
    'Chargement de la listbox
    While NomFich <> ""
        i = i + 1
        Me.ListBox5.AddItem Chemin, i
        Me.ListBox5.Column(1, i) = NomFich
        NomFich = Dir
    Wend
End Sub
A toutes fins utiles, je joins un fichier utilisant ces cinq méthodes Listbox multi-colonnes.zip

NB - Le code concernant les plages de cellules peut naturellement se simplifier et les DerLigne = ... et DerCol = ... n'ont qu'une raison didactique.

Second problème :
Comment remplir une listbox des résultats de calculs divers :
Dans un userform, placer deux listbox et placer ce code dans la feuille de code de l'userform.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub UserForm_Initialize()
Dim Tableau(), i As Integer, NoCol As Byte
Dim NbrElements As Integer
    NbrElements = 1000
    Me.ListBox1.ColumnCount = 5
    ReDim Tableau(NbrElements, 4)
 
    'Simulation des calculs effectués pour renseigner un tableau
    For i = 0 To NbrElements
        For NoCol = 0 To 4
            Tableau(i, NoCol) = Int(1000 * Rnd) + 1
        Next
    Next
    'Affichage en lignes sur 5 colonnes
    ListBox1.List() = Tableau()
 
    'Affichages en colonnes sur 5 lignes
    Me.ListBox2.ColumnCount = NbrElements + 1 'commence à zéro (!)
    ListBox2.Column() = Tableau()
End Sub