Bonjour à tous,

Je me lance dans la manipulation de tableaux excel via des macros et les objets ListObject.
J'ai réalisé le code ci-dessous qui fonctionne mais qui à mon avis est loin d'être optimal (et surtout j'ai utilisé des solutions de contournement pour ce que je ne savais pas faire)

Si vous pouviez m'aider sur les points "pas propres" de mon code je suis preneur.

Le besoin :
- j'ai un onglet "Suivi" avec des lignes (j'ai déclaré un tableau "Suivi" pour ces lignes)
- j'ai un onglet "archivage" avec le même format de lignes (j'ai déclaré un tableau "Archive" pour ces lignes)
- l'idée est que quand je lance ma macro, elle boucle sur toutes les lignes du tableau "Suivi" et si le statut de la ligne est "ARCHIVE" alors je déplace la ligne dans le tableau "Archive"

Mon 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
Sub Lecture_tableau()
    ' Déclaration des variables
    Dim TableauSuivi, TableauArchive As ListObject
    Dim LignesTableauSuivi, LignesTableauArchive As ListRows
 
    ' Définit les tableaux dans la feuille de calcul
    Set TableauSuivi = Worksheets("SUIVI").ListObjects("Suivi")
    Set LignesTableauSuivi = TableauSuivi.ListRows
 
    Set TableauArchive = Worksheets("archivage").ListObjects("Archive")
    Set LignesTableauArchive = TableauArchive.ListRows
 
    ' Compte le nombre de lignes dans le tableau Suivi pour calculer la fin de boucle
    finBoucle = LignesTableauSuivi.Count
 
    ' Boucle sur toutes les lignes du tableau
    For i = 1 To finBoucle
        ' Si le statut de la ligne est "ARCHIVE"
        ' =>> comment travailler sur le nom de la colonne qui est "Resultat final" et non son numéro ?
        If TableauSuivi.Range(i, 6).Value = "ARCHIVE" Then
            ' Déplacer la ligne dans l'onglet archive
            ' =>> comment insérer dans TableauArchive et non sur la feuille "archivage" ?
            Sheets("archivage").Rows(4).Insert
            ' =>> comment copier/coller directement d'un tableau à l'autre sans travailler sur onglet excel ?
'            LignesTableauArchive(1)= LignesTableauSuivi(i - 1)
            Sheets("SUIVI").Rows(i + 2).EntireRow.Copy Sheets("archivage").Rows(4)
            LignesTableauSuivi(i - 1).Delete
        End If
    Next
End Sub
Les questions qui me restent après avoir fait pas mal de tests et recherches infructueuse (elles sont aussi notées dans le code en commentaire)
- comment travailler sur le nom de la colonne ("Resultat final") de mon tableau "Suivi" et non son numéro (6)
- comment insérer une ligne dans le tableau "Archive" sans devoir faire cette insertion dans excel (en gros remplacer le Sheets("archivage").Rows(4).Insert par un LignesTableauArchive.Insert
- comment copier une ligne de mon tableau "TableauSuivi" dans mon tableau "TableauArchive", quelque chose du style LignesTableauArchive(1)= LignesTableauSuivi(i - 1)

Questions subsidiaires :
- quand je travaille sur ma collection LignesTableauSuivi je suis obligé de faire i-1 sur mon indice pour être sur la bonne ligne, est-ce parce que mon indice i (utilisé dans la méthode Range) compte aussi les titres alors que la collection LignesTableauSuivi n'a pas les titres d'où le décalage de 1 ?
- pourquoi est-on obligé de préciser la worksheet dans l'instruction "Worksheets("SUIVI").ListObjects("Suivi")" puisque le tableau "Suivi" est déclaré dans tout le classeur (pas spécifiquement dans la feuille)

Merci pour toute élément de réponse que vous pourrez m'apporter