Bonjour à tous,

Après avoir passé plusieurs jours sur une boucle que je ne comprends et ayant lu et relu le forum et le didacticel de Silkyroad
https://silkyroad.developpez.com/VBA/ListView/
je reste perplexe sur une boucle For Each pour alimenter une listeview.
Le tableau source est un tableau trés simple (x lignes et 5 colonnes) filtré dont des lignes sont masqués à partir d'un filtre.

Pour résumer, la boucle For Each ci dessous s'execute autant de fois qu'il y'a de ligne dans le range multiplié par le nombre de ligne non masquée.
Par exemple :
J'ai 3 lignes non masqués dans mon tableau de données
Mon range affiche une plage de 2 lignes.
Au lieu de faire apparaitre 2 lignes dans ma listview, j'ai 2x3=6 lignes qui apparaissent.
Idem si range = 3 et 3 lignes non masquée, j'ai 3x3=9 lignes qui apparaissent.

Je ne comprends pas pourquoi j'ai ce doublement ou triplement de ligne.

Mes cheveux et moi même vous remercions beaucoup

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
Private Sub maj_liste_view1()

    Dim num_ligne_cell_haute As Integer
    Dim num_ligne_cell_basse As Integer
    Dim cell As Range
    
'J'active ma feuille
    Worksheets("Feuille1").Activate
 
' Je récupère les données des cellules
    num_ligne_cell_haute = Worksheets("Feuille2").Range("A1").Value
    num_ligne_cell_basse = Worksheets("Feuille2").Range("A1").Value
   
' Si il n'y a pas de da alors je lance la macro suivante sinon je poursuis la macro
If num_ligne_cell_basse < 150 Then
    Exit Sub
    Else
' Je cree les entête de la listview
    With listeview1
        With .ColumnHeaders
            .Clear
            .Add , , "Num da", 60
            .Add , , "Date émission", 35
            .Add , , "Commentaire", 35
        End With
                       
'C'est ici que ça tourne autant de fois que j'ai de ligne dans mon range.
    For Each cell In Worksheets("Feuille1").Range("A" & num_ligne_cell_haute & ":A" & num_ligne_cell_basse)
            If cell.EntireRow.Hidden = False Then
            .ListItems.Add , , cell.Offset(0, 1)
            .ListItems(i).ListSubItems.Add , , cell.Offset(0, 2)
            .ListItems(i).ListSubItems.Add , , cell.Offset(0, 3)
            End If
        Next
    End With

' fin de if pour la condition num_ligne_cell_basse = 4
End If
   
'Spécifie l'affichage en mode "Détails"
    liste_da.View = lvwReport

End Sub