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 :
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 :
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