Introduction
Les tableaux croisés dynamiques sont essentiels pour analyser de grandes quantités de données dans Excel. Automatiser leur création avec VBA permet de gagner un temps considérable et de standardiser vos rapports. Ce tutoriel intermédiaire vous montre comment générer, configurer et actualiser un tableau croisé dynamique via du code VBA robuste. Vous apprendrez à manipuler le PivotCache et les champs de manière professionnelle. Chaque étape inclut du code complet et fonctionnel que vous pouvez copier directement dans vos macros.
Prérequis
- Excel 2016 ou version ultérieure
- Connaissances de base en VBA (modules, variables)
- Un classeur Excel contenant des données tabulaires
- L'onglet Développeur activé dans Excel
Initialiser le classeur et les données
Sub CreerTCD()
Dim wb As Workbook
Dim wsData As Worksheet
Set wb = ThisWorkbook
Set wsData = wb.Sheets("Donnees")
' Vérifier que les données existent
If wsData.Range("A1").Value = "" Then
MsgBox "Aucune donnée trouvée", vbExclamation
Exit Sub
End If
End SubCe code initialise le classeur actif et la feuille de données source. Il inclut une vérification basique pour éviter les erreurs si aucune donnée n'est présente.
Définir la plage source
Dim lastRow As Long
Dim lastCol As Long
Dim sourceRange As Range
With wsData
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set sourceRange = .Range(.Cells(1, 1), .Cells(lastRow, lastCol))
End WithCette section calcule dynamiquement la plage des données source en utilisant End(xlUp) pour s'adapter automatiquement à la taille du tableau.
Créer le PivotCache
Dim pivotCache As PivotCache
Set pivotCache = wb.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=sourceRange)Le PivotCache est créé à partir de la plage source. Cela stocke les données en mémoire et permet une actualisation rapide du tableau croisé dynamique.
Créer le tableau croisé dynamique
Dim wsPivot As Worksheet
Dim pivotTable As PivotTable
Set wsPivot = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count))
wsPivot.Name = "TCD_Automatique"
Set pivotTable = pivotCache.CreatePivotTable( _
TableDestination:=wsPivot.Range("A3"), _
TableName:="MonTCD")Un nouvel onglet est créé pour héberger le TCD. La méthode CreatePivotTable positionne le tableau à la cellule A3 avec un nom explicite.
Ajouter les champs au TCD
With pivotTable
.PivotFields("Region").Orientation = xlRowField
.PivotFields("Produit").Orientation = xlColumnField
.PivotFields("Ventes").Orientation = xlDataField
.PivotFields("Ventes").Function = xlSum
End WithLes champs sont positionnés en lignes, colonnes et valeurs. La fonction de synthèse est définie sur Somme pour les ventes.
Bonnes pratiques
- Toujours nommer explicitement les tableaux et caches
- Utiliser des variables pour les plages dynamiques
- Actualiser le TCD après modification des données source
- Protéger le code contre les erreurs de plage vide
- Documenter les noms de champs pour la maintenance
Erreurs courantes à éviter
- Oublier de définir la plage source complète
- Ne pas gérer les cas où la feuille pivot existe déjà
- Utiliser des références absolues au lieu de End(xlUp)
- Ignorer les erreurs de type de données dans les champs
Pour aller plus loin
Découvrez nos formations avancées sur l'automatisation Excel et VBA : https://learni-group.com/formations