Personnaliser les préférences

Nous utilisons des cookies pour vous aider à naviguer efficacement et à exécuter certaines fonctions. Vous trouverez ci-dessous des informations détaillées sur tous les cookies sous chaque catégorie de consentement.

Les cookies classés comme « Nécessaires » sont stockés sur votre navigateur car ils sont essentiels pour activer les fonctionnalités de base du site.... 

Toujours actif

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Aucun cookie à afficher.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Aucun cookie à afficher.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Aucun cookie à afficher.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Aucun cookie à afficher.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

Aucun cookie à afficher.

Comment filtrer les tableaux croisés dynamiques à l’aide de VBA (avec exemples)



Vous pouvez utiliser les méthodes suivantes pour filtrer les tableaux croisés dynamiques dans Excel à l’aide de VBA :

Méthode 1 : filtrer le tableau croisé dynamique en fonction d’une valeur

Sub FilterPivotTable()
   Dim pf As PivotField
   Dim myFilter As String
   Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Position")
   myFilter = ActiveWorkbook.Sheets("Sheet1").Range("J2").Value
   pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub

Cette macro particulière filtrera le tableau croisé dynamique appelé PivotTable1 pour afficher uniquement les lignes où la valeur dans la colonne Position du tableau croisé dynamique est égale à la valeur dans la cellule J2 de Sheet1 .

Méthode 2 : filtrer le tableau croisé dynamique en fonction de plusieurs valeurs

Sub FilterPivotTableMultiple()
  Dim v As Variant
  Dim i As Integer, j As Integer
  Dim pf As PivotField
  Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Position")
  
  'specify range with values to filter on
  v = Range("J2:J3")
  
  'clear existing filters
  pf.ClearAllFilters
  
  'apply filter to pivot table
  With pf
    For i = 1 To pf.PivotItems.Count
      j = 1
       Do While j <= UBound(v, 1) - LBound(v, 1) + 1
         If pf.PivotItems(i).Name = v(j, 1) Then
           pf.PivotItems(pf.PivotItems(i).Name).Visible = True
           Exit Do
        Else
          pf.PivotItems(pf.PivotItems(i).Name).Visible = False
        End If
        j = j + 1
      Loop
    Next i
  End With
End Sub

Cette macro particulière filtrera le tableau croisé dynamique appelé PivotTable1 pour afficher uniquement les lignes où la valeur dans la colonne Position du tableau croisé dynamique est égale à l’une des valeurs de la plage de cellules J2:J3 .

Méthode 3 : supprimer les filtres du tableau croisé dynamique

Sub ClearPivotTableFilter()
   Dim pt As PivotTable
   Set pt = ActiveSheet.PivotTables("PivotTable1")
   pt.ClearAllFilters
End Sub

Cette macro particulière effacera tous les filtres du tableau croisé dynamique appelé PivotTable1 .

Les exemples suivants montrent comment utiliser chacune de ces méthodes dans la pratique.

Exemple 1 : filtrer le tableau croisé dynamique en fonction d’une valeur

Supposons que nous ayons créé un tableau croisé dynamique à partir d’un ensemble de données dans Excel pour résumer les points marqués par les basketteurs de différentes équipes et postes :

Supposons que nous souhaitions filtrer le tableau croisé dynamique pour afficher uniquement les lignes dont la valeur dans la colonne Position est Garde.

Nous pouvons créer la macro suivante pour ce faire :

Sub FilterPivotTable()
   Dim pf As PivotField
   Dim myFilter As String
   Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Position")
   myFilter = ActiveWorkbook.Sheets("Sheet1").Range("J2").Value
   pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub

Lorsque nous exécutons cette macro, le tableau croisé dynamique est automatiquement filtré pour afficher uniquement les lignes dont la valeur dans la colonne Position est Guard :

Tableau croisé dynamique des filtres VBA

Le tableau croisé dynamique a été filtré pour afficher uniquement les lignes dont la valeur dans la colonne Position est Garde.

Exemple 2 : Filtrer un tableau croisé dynamique en fonction de plusieurs valeurs

Supposons que nous souhaitions plutôt filtrer le tableau croisé dynamique pour afficher uniquement les lignes dont la valeur dans la colonne Position est Garde ou Centre.

Nous pouvons créer la macro suivante pour ce faire :

Sub FilterPivotTableMultiple()
  Dim v As Variant
  Dim i As Integer, j As Integer
  Dim pf As PivotField
  Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Position")
  
  'specify range with values to filter on
  v = Range("J2:J3")
  
  'clear existing filters
  pf.ClearAllFilters
  
  'apply filter to pivot table
  With pf
    For i = 1 To pf.PivotItems.Count
      j = 1
       Do While j <= UBound(v, 1) - LBound(v, 1) + 1
         If pf.PivotItems(i).Name = v(j, 1) Then
           pf.PivotItems(pf.PivotItems(i).Name).Visible = True
           Exit Do
        Else
          pf.PivotItems(pf.PivotItems(i).Name).Visible = False
        End If
        j = j + 1
      Loop
    Next i
  End With
End Sub

Lorsque nous exécutons cette macro, le tableau croisé dynamique est automatiquement filtré pour afficher uniquement les lignes dont la valeur dans la colonne Position est Garde ou Centre :

Tableau croisé dynamique du filtre VBA basé sur plusieurs valeurs

Le tableau croisé dynamique a été filtré pour afficher uniquement les lignes dont la valeur dans la colonne Position est Garde ou Centre.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans VBA :

VBA : comment actualiser les tableaux croisés dynamiques
VBA : comment supprimer les valeurs en double
VBA : Comment compter le nombre de lignes dans la plage

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *