Créer un Tableau Croisé Dynamique (TCD), Excel VBA

Créer un Tableau Croisé Dynamique (TCD), Excel VBA

Voici une explication détaillée du code VBA pour créer un Tableau Croisé Dynamique (TCD) dans Excel : 

Vue d’ensemble : 

Un Tableau Croisé Dynamique (TCD) est un tableau qui s’ajuste automatiquement lorsque de nouvelles données sont ajoutées. Ce code VBA crée un TCD dynamique basé sur une plage de données qui peut changer, par exemple, lorsque des lignes ou des colonnes sont ajoutées. 

Code avec explication détaillée : 

Sub CreateDynamicPivotTable() 
    ' Déclaration des variables 
    Dim wsSource As Worksheet 
    Dim wsPivot As Worksheet 
    Dim lastRow As Long 
    Dim lastCol As Long 
    Dim pivotRange As Range 
    Dim pivotTable As PivotTable 
    Dim pivotCache As PivotCache 
    Dim pivotSheetName As String 
    ' Définir la feuille de données source 
    Set wsSource = ThisWorkbook.Sheets("Sheet1") ' Changez le nom de votre feuille de données ici 
    ' Trouver la dernière ligne et la dernière colonne avec des données dans la feuille source 
    lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row ' Supposons que les données commencent dans la colonne A 
    lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column ' Supposons que la ligne d'en-tête soit dans la ligne 1 *
    ' Définir la plage dynamique de données pour le tableau croisé dynamique (y compris les en-têtes) 
    Set pivotRange = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRow, lastCol)) 
    ' Vérifier si une feuille de tableau croisé dynamique existe déjà et la supprimer si nécessaire 
    On Error Resume Next 
    Set wsPivot = ThisWorkbook.Sheets("PivotTableSheet") ' Changez le nom de votre feuille de tableau croisé dynamique ici 
    On Error GoTo 0 
    If Not wsPivot Is Nothing Then 
        Application.DisplayAlerts = False 
        wsPivot.Delete 
        Application.DisplayAlerts = True 
    End If 
    ' Créer une nouvelle feuille pour le tableau croisé dynamique 
    Set wsPivot = ThisWorkbook.Sheets.Add 
    wsPivot.Name = "PivotTableSheet" 
    ' Créer un cache de tableau croisé dynamique à partir de la source de données 
    Set pivotCache = ThisWorkbook.PivotTableWizard(wsSource:=pivotRange) 
    ' Créer le tableau croisé dynamique dans la nouvelle feuille 
    Set pivotTable = wsPivot.PivotTables.Add(PivotCache:=pivotCache, TableDestination:=wsPivot.Cells(1, 1), TableName:="DynamicPivotTable") 
    ' Ajouter des champs au tableau croisé dynamique (exemple) 
    ' Champs de ligne 
    pivotTable.PivotFields("Category").Orientation = xlRowField 
    pivotTable.PivotFields("Category").Position = 1 
    ' Champs de colonne 
    pivotTable.PivotFields("Region").Orientation = xlColumnField 
    pivotTable.PivotFields("Region").Position = 1 
    ' Champs de données 
    pivotTable.PivotFields("Sales").Orientation = xlDataField 
    pivotTable.PivotFields("Sales").Function = xlSum 
    pivotTable.PivotFields("Sales").NumberFormat = "#,##0" 
    ' Paramètres optionnels : mise en forme et disposition 
    With pivotTable 
        .RowAxisLayout xlTabularRow 
        .ColumnGrand = True 
        .RowGrand = True 
    End With 
    ' Ajuster la largeur des colonnes pour une meilleure présentation 
    wsPivot.Columns.AutoFit 
End Sub

Explication détaillée : 

1. Déclaration des variables

  • wsSource : La feuille contenant les données brutes. 
  • wsPivot : La feuille où sera créé le tableau croisé dynamique. 
  • lastRow et lastCol : Déterminent la taille de la plage de données. 
  • pivotRange : La plage de données à utiliser pour le tableau croisé dynamique. 
  • pivotCache : Un cache qui contient les données du tableau croisé dynamique. 
  • pivotTable : L’objet du tableau croisé dynamique lui-même. 

2. Définir la plage de données

  • Nous utilisons lastRow et lastCol pour déterminer la taille dynamique de la plage de données. Cela permet d’adapter le tableau croisé dynamique si de nouvelles lignes ou colonnes sont ajoutées. 

3. Supprimer une feuille existante de tableau croisé dynamique (si nécessaire)

  • Avant de créer un nouveau tableau croisé dynamique, nous vérifions si une feuille avec le nom « PivotTableSheet » existe déjà. Si elle existe, elle est supprimée. 

4. Créer une nouvelle feuille pour le tableau croisé dynamique

  • Une nouvelle feuille est créée pour héberger le tableau croisé dynamique. Elle est nommée « PivotTableSheet ». 

5. Créer un cache de tableau croisé dynamique

  • Un cache est créé à partir de la plage dynamique de données. Ce cache contient toutes les données nécessaires pour le tableau croisé dynamique. 

6. Ajouter des champs au tableau croisé dynamique

  • Vous pouvez définir les champs de lignes, de colonnes et de données. Dans cet exemple :  
  • « Category » est utilisé comme champ de ligne. 
  • « Region » est utilisé comme champ de colonne. 
  • « Sales » est utilisé comme champ de données, et nous affichons la somme des ventes. 

7. Paramètres optionnels : mise en forme et disposition

  • La disposition est définie sur xlTabularRow, ce qui permet d’afficher les lignes dans un format tabulaire. 
  • Les totaux des lignes et des colonnes sont activés avec .RowGrand et .ColumnGrand. 

8. Ajuster la largeur des colonnes

  • Enfin, nous ajustons la largeur des colonnes pour une présentation plus claire en utilisant AutoFit. 

Personnalisation : 

  • Vous pouvez adapter la plage de données en fonction des colonnes spécifiques de votre source de données. 
  • Modifiez les champs de lignes, de colonnes et de données en fonction de vos besoins spécifiques. 
  • Vous pouvez également changer la fonction de résumé des données (Function), comme par exemple utiliser xlAverage pour la moyenne ou xlCount pour le nombre d’éléments. 

Conclusion : 

Ce code permet de créer un tableau croisé dynamique qui s’adapte automatiquement aux nouvelles données ajoutées. Il vous évite d’avoir à mettre à jour manuellement la plage de données chaque fois que vous ajoutez de nouvelles lignes ou colonnes. Vous pouvez personnaliser ce code pour répondre à vos besoins spécifiques en matière de reporting. 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x