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 *