Bonjour,
Je fais appel à vous pour résoudre un problème.
Je rempli ma listview et je souhaite copier la liste entière de ma listview sur ma feuille historique
dans un tableau structuré nommé Tableau1.
Merci de m'aider
Voici ci-dessous le code ;

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
Sub ListView_vers_Feuille()
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim l As Integer 'déclare la variable I(Incrément)
Dim lg As Long, cl As Long, i As Long, j As Long
Dim T As Variant
 
Set OB = Worksheets("Bilan") 'définit l'onglet OB
Set TSB = OB.ListObjects("Tableau1")
 
Set R = TSB.ListColumns(1).Range.Find("")
If R Is Nothing Or TSB.ListRows.Count = 0 Then
    TSB.ListRows.Add 'ajoute une ligne à TSB
    LI = TSB.ListRows.Count  'définit la ligne LI (dernière ligne de TSB)
Else
    LI = R.Row - TSB.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée moins la ligne de en-têtes de TSB)
End If
 
    With UserFormFiltre.ListView1
        lg = .ListItems.Count
        cl = .ColumnHeaders.Count
        ReDim T(1 To lg, 1 To cl + 1)
        For i = 1 To lg
            T(i, 1) = .ListItems(i).Text
            For j = 1 To cl - 1
                T(i, j + 1) = .ListItems(i).ListSubItems(j).Text
            Next j
           Next i
        End With
For l = 1 To lg ' boucle sur les lignes du tableau
TSB.DataBodyRange(LI, 1 + l) = T(i, 1)
TSB.DataBodyRange(LI, 2 + l) = T(i, 2)
TSB.DataBodyRange(LI, 3 + l) = T(i, 3)   
TSB.DataBodyRange(LI, 4 + l) = T(i, 4) 
TSB.DataBodyRange(LI, 5 + l) = T(i, 5)   
TSB.DataBodyRange(LI, 6 + l) = T(i, 6)
TSB.DataBodyRange(LI, 7 + l) = T(i, 7)
TSB.DataBodyRange(LI, 8 + l) = T(i, 8)
TSB.DataBodyRange(LI, 9 + l) = T(i, 9)
Next
End Sub