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 :
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)
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
- 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
Partager