La gestion d’un Tableau (depuis la version 2007, Insertion > Tableau) permet de faciliter la manipulation de données. On retrouve cette facilité en VBA.
Création d’un Tableau
Dans notre exemple, nous avons une plage classique Excel, qui commence en cellule A1 de la feuille active.
Dim tblVente As ListObject Dim wbClasseur As Workbook Dim wsFeuille As Worksheet Set wbClasseur = ActiveWorkbook Set wsFeuille = wbClasseur.ActiveSheet Set tblVente = wsFeuille.ListObjects.Add(xlSrcRange, wsFeuille.Range("A1").CurrentRegion, , xlYes) tblVente.Name = "tblVente"
Ajout d’une colonne
'Déclare une variable ColTotal de type Colonne de Tableau Dim colTotal As ListColumn 'On ajoute une colonne au tableau et on place cette nouvelle colonne dans la variable colTotal Set colTotal = tblVente.ListColumns.Add 'écrit Total HT dans la première cellule du Tableau (étiquette de colonne) colTotal.Name = "Total HT" 'Remplit la colonne avec une formule de calcul colTotal.DataBodyRange = "=[@Qte]*[@PU]"
Ajout d’une ligne
'On déclare une variable NewLine de type Ligne de tableau Dim NewLine As ListRow 'On ajoute une ligne au tableau et on place cette ligne dans la variable NewLine Set NewLine = tblVente.ListRows.Add 'Les chiffres 1, 2 et 3 correspondent aux numéros de colonnes dans lesquelles on veut écrire NewLine.Range(, 1) = "AA" NewLine.Range(, 2) = 5 NewLine.Range(, 3) = 10
On peut aussi utiliser le nom des colonnes à la place de leur numéro, surtout si l’ordre des colonnes est amené à changer :
Set NewLine = tblVente.ListRows.Add 'on écrit le chiffre 10 dans la colonne est nommée PU NewLine.Range(, tblVente.ListColumns("PU").Index) = 20 NewLine.Range(, tblVente.ListColumns("Produit").Index) = "BB" NewLine.Range(, tblVente.ListColumns("Qte").Index) = 6
Ajout d’un total à une colonne
On ajoute ici la somme de la colonne Total HT
tblVente.ShowTotals=True colTotal.TotalsCalculation = xlTotalsCalculationSum
Suppression d’une ligne
'Suppression de la ligne 2 des données (le ligne 3 de la feuille) tblVente.ListRows(2).Delete