J'ai mi les explications dans la macro :
Private Sub CommandButton1_Click()
Dim C As Range, Col As Integer, I As Integer, J As Integer
'initialisation de la listbox
Me.ListBox1.Clear
'décompte des colonnes affichées
'boucle sur les cellules A1:G1
For Each C In [A1:G1]
'si la colonne est affichée, incrément de "col"
If C.EntireColumn.Hidden = False Then
Col = Col + 1
End If
Next C
With Me.ListBox1
'on définit le nombre de colonnes de la listbox
.ColumnCount = Col
'boucle sur les noms de la colonne A
For Each C In Range("A2", Cells(Rows.Count, 1).End(xlUp))
J = 0
'ajout du nom (colonne A) dans la listbox
.AddItem C
'ajout des autres colonnes
'"I" représente le décalage par rapport à la colonne A
'si I = 1, C.Offset(, I) représente un décalage de 1 par rapport à C
'par exemple, si C est A2, C.Offset(, I) représente B2
For I = 1 To 7 '"7" est le nombre maximum de colonnes
If C.Offset(, I).EntireColumn.Hidden = False Then
'si la colonne est affichée, incrément de 1
J = J + 1
'méthode standard pour remplir les autres colonnes
'"List" est la table des données d ela listbox
'"Listcount" est le nommbre de lignes
.List(.ListCount - 1, J) = C.Offset(, I)
End If
Next I
Next C
End With
End Sub