Dans Excel, il est fortement conseillé de travailler avec des données structurées pour pouvoir les manipuler plus facilement (sans faire d’erreurs). Mettre des donnés dans un tableau correspond à cette methodologie (via « Mettre sous forme de tableau ») : un nom de tableau est à donner, chaque variable (champ du tableau) doit avoir un nom unique.
Ce format de tableau correspond à l’objet VBA ListObject. Il est à distinguer des objets Array qui sont à construire et à définir en VBA (par exemple, Dim MaListe(4,2) fait un tableau de 5 lignes et 3 colonnes) et qui n’ont pas toutes les propriétés de la mise sous forme de tableau (souvent les array n’ont pas d’intitulés de colonnes).
Pour travailler avec la mise sous forme de tableau, beaucoup de propriétés et fonctionnalités sont disponibles sous VBA. Pour faire référence à un tableau,il n’est pas nécessaire de le construire en VBA. Il s’agit simplement de préciser la feuille contenant le tableau, ainsi que le nom du tableau : ActiveSheet.ListObjects(« MonTableau »)
Et pour sélectionner le tableau entier, il existe la propriété : ActiveSheet.ListObjects(« MonTableau »).Range.Select
Pour ne prendre que les données: ActiveSheet.ListObjects(« MonTableau »).DataBodyRange.Select
Pour ajouter une nouvelle colonne en position 2 : ActiveSheet.ListObjects(« MonTableau »).ListColumns.Add Position:=2
Ci-dessous une liste de propriétés de ListObject :
Partie du tableau à sélectionner | VBA |
---|---|
Tout le tableau | ActiveSheet.ListObjects(« Table1 »).Range.Select |
La ligne des intitulés de colonne (header) | ActiveSheet.ListObjects(« Table1 »).HeaderRowRange.Select |
Les données du tableau | ActiveSheet.ListObjects(« Table1 »).DataBodyRange.Select |
La 3eme colonne | ActiveSheet.ListObjects(« Table1 »).ListColumns(3).Range.Select |
Les données de la 3eme colonne (sans l’intitulé de colonne) | ActiveSheet.ListObjects(« Table1 »).ListColumns(3).DataBodyRange.Select |
La 4eme ligne des données | ActiveSheet.ListObjects(« Table1 »).ListRows(4).Range.Select |
Le contenu de l’intersection de la 3eme ligne et de la 2eme colonne des données | ActiveSheet.ListObjects(« Table1 »).DataBodyRange(3, 2).Select |
La ligne des totaux (sous-totaux, en bas de tableau) | ActiveSheet.ListObjects(« Table1 »).TotalsRowRange.Select |
Pour en savoir + :
– Propriéts et fonctions des ListObjects : http://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables