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.