Comment sélectionner les données d'un tableau Excel avec VBA ?


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électionnerVBA
Tout le tableauActiveSheet.ListObjects("Table1").Range.Select
La ligne des intitulés de colonne (header)ActiveSheet.ListObjects("Table1").HeaderRowRange.Select
Les données du tableauActiveSheet.ListObjects("Table1").DataBodyRange.Select
La 3eme colonneActiveSheet.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éesActiveSheet.ListObjects("Table1").ListRows(4).Range.Select
Le contenu de l'intersection de la 3eme ligne et de la 2eme colonne des donnéesActiveSheet.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

 

0.00 avg. rating (0% score) - 0 votes

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *