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

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

Voici un guide détaillé et un code VBA pour créer un filtre dynamique pour un Tableau Croisé Dynamique (TCD) dans Excel : 

Objectif : 

Nous voulons créer un filtre dynamique qui se met à jour automatiquement en fonction des valeurs uniques d’une colonne spécifique dans les données sources. Par exemple, supposons que vous avez une colonne « Région » et que vous souhaitez créer un Tableau Croisé Dynamique qui permet à l’utilisateur de filtrer dynamiquement par région. 

Étapes : 

1. Préparer vos données : Assurez-vous que vos données sources sont organisées sous forme de tableau (pas une simple plage de données). Cela facilite la gestion des TCD et des filtres. 

Exemple de données : 

Date  Région  Ventes 
01/01/2025  Nord  100 
01/01/2025  Sud  150 
02/01/2025  Nord  200 
02/01/2025  Est  300 

2. Créer le Tableau Croisé Dynamique (TCD) : Créez manuellement un TCD ou utilisez VBA pour le créer. Dans cet exemple, nous supposons que le TCD sera créé dans une nouvelle feuille de calcul. 

3. Filtre Dynamique : Nous allons écrire un code VBA qui crée automatiquement un filtre pour le TCD en fonction des valeurs uniques de la colonne « Région ». 

Code VBA : 

Sub CreerFiltreDynamiquePourTCD() 
    Dim ws As Worksheet 
    Dim pt As PivotTable 
    Dim pRange As Range 
    Dim filterField As PivotField 
    Dim sourceData As Range 
    Dim uniqueRegions As Collection 
    Dim region As Variant 
    Dim i As Long 
    ' Définir la feuille et la plage des données sources 
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Remplacez par le nom de votre feuille 
    Set sourceData = ws.Range("A1:C5") ' Ajustez selon la plage de vos données 
    ' Créer le Tableau Croisé Dynamique 
    Set pRange = ws.Range("E1") ' Cellule en haut à gauche où le TCD sera placé 
    Set pt = ws.PivotTableWizard(SourceType:=xlDatabase, SourceData:=sourceData, TableDestination:=pRange) 
    ' Ajouter les champs au TCD (ajustez selon vos besoins) 
    With pt 
        .PivotFields("Région").Orientation = xlPageField 
        .PivotFields("Ventes").Orientation = xlDataField 
        .PivotFields("Date").Orientation = xlRowField 
    End With 
    ' Créer une collection pour contenir les régions uniques 
    Set uniqueRegions = New Collection 
    ' Parcourir les données sources pour obtenir les régions uniques 
    On Error Resume Next ' Ignorer les erreurs liées aux doublons 
    For i = 2 To sourceData.Rows.Count ' Ignorer la première ligne (entêtes) 
        uniqueRegions.Add sourceData.Cells(i, 2).Value, CStr(sourceData.Cells(i, 2).Value) 
    Next i 
    On Error GoTo 0 ' Restaurer le traitement des erreurs 
    ' Définir le champ de filtre pour la "Région" 
    Set filterField = pt.PivotFields("Région") 
    ' Effacer les filtres existants 
    filterField.ClearAllFilters 
    ' Appliquer les régions uniques comme filtres dynamiques 
    filterField.EnableMultiplePageItems = True 
    For Each region In uniqueRegions 
        filterField.PivotItems(region).Visible = True 
    Next region 
    ' Optionnel : Appliquer un filtre initial (par exemple, la première région) 
    filterField.CurrentPage = uniqueRegions(1) 
    MsgBox "Filtre dynamique pour le TCD créé avec succès !" 
End Sub

Explication du code : 

1. Définition des variables

  • Nous définissons des variables pour la feuille de calcul (ws), le Tableau Croisé Dynamique (pt), la plage de données sources (sourceData), ainsi que d’autres éléments nécessaires comme le champ de filtre et les régions uniques. 

2. Plage des données sources : La plage sourceData contient les données qui seront utilisées pour construire le TCD. Vous pouvez ajuster cette plage pour correspondre à votre jeu de données. 

3. Création du Tableau Croisé Dynamique : La méthode PivotTableWizard est utilisée pour créer un nouveau TCD. Nous spécifions les données sources et la destination du TCD. Ensuite, nous ajoutons les champs au TCD : 

  • « Région » est ajouté en tant que champ de filtre (pour les filtres dynamiques), 
  • « Ventes » est ajouté en tant que champ de données, 
  • « Date » est ajouté en tant que champ de ligne. 

4. Collection des valeurs uniques : Nous utilisons une Collection pour stocker les valeurs uniques de la colonne « Région ». Cela garantit que seules les valeurs distinctes seront ajoutées au filtre. 

5. Effacement des filtres existants : Avant d’appliquer de nouveaux filtres, nous supprimons tous les filtres existants avec ClearAllFilters. 

6. Application des filtres dynamiques : Nous parcourons la collection des régions uniques et les appliquons comme filtres sur le TCD. Si vous souhaitez plusieurs options de filtre, la propriété EnableMultiplePageItems permet cela. 

7. Filtre initial : Optionnellement, vous pouvez définir un filtre initial en réglant CurrentPage sur une région spécifique (par exemple, la première région de la collection). 

8. Message final : Après avoir appliqué le filtre dynamique, une boîte de message informe l’utilisateur que le processus est terminé. 

Notes : 

  • Assurez-vous que le TCD soit correctement créé et que votre plage de données soit dynamique. Vous pouvez remplacer les plages codées en dur par des plages dynamiques si nécessaire. 
  • Le code applique le filtre directement au champ « Région » du TCD. Vous pouvez modifier la logique si vous avez besoin d’autres champs ou filtres. 
  • Pour améliorer l’expérience utilisateur, vous pouvez ajouter une gestion des erreurs, surtout si le TCD existe déjà ou si la plage de données n’est pas définie correctement. 

Ce code vous permettra de mettre en place un filtre dynamique qui se mettra à jour automatiquement dans votre Tableau Croisé Dynamique en fonction des valeurs uniques de votre jeu de données. 

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