Note: The other languages of the website are Google-translated. Back to English

Comment filtrer le tableau croisé dynamique en fonction d'une valeur de cellule spécifique dans Excel?

Normalement, nous filtrons les données dans un tableau croisé dynamique en sélectionnant des éléments dans la liste déroulante, comme indiqué dans la capture d'écran ci-dessous. En fait, vous pouvez filtrer un tableau croisé dynamique en fonction de la valeur d'une cellule spécifique. La méthode VBA de cet article vous aidera à résoudre le problème.

Filtrer le tableau croisé dynamique en fonction d'une valeur de cellule spécifique avec le code VBA


Filtrer le tableau croisé dynamique en fonction d'une valeur de cellule spécifique avec le code VBA

Le code VBA suivant peut vous aider à filtrer un tableau croisé dynamique en fonction d'une valeur de cellule spécifique dans Excel. Veuillez faire comme suit.

1. Veuillez entrer une valeur sur laquelle vous filtrerez le tableau croisé dynamique dans une cellule à l'avance (ici, je sélectionne la cellule H6).

2. Ouvrez la feuille de calcul contient le tableau croisé dynamique que vous filtrerez par valeur de cellule. Cliquez ensuite avec le bouton droit sur l'onglet de la feuille et sélectionnez Afficher le code dans le menu contextuel. Voir la capture d'écran:

3. Dans l'ouverture Microsoft Visual Basic pour applications fenêtre, copiez ci-dessous le code VBA dans la fenêtre Code.

Code VBA: filtre de tableau croisé dynamique basé sur la valeur de la cellule

Private Sub Worksheet_Change(ByVal Target As Range)
'Update by Extendoffice 20180702
    Dim xPTable As PivotTable
    Dim xPFile As PivotField
    Dim xStr As String
    On Error Resume Next
    If Intersect(Target, Range("H6:H7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
    Set xPFile = xPTable.PivotFields("Category")
    xStr = Target.Text
    xPFile.ClearAllFilters
    xPFile.CurrentPage = xStr
    Application.ScreenUpdating = True
End Sub

Notes: Dans le code,

1) "Sheet1»Est le nom de la feuille de calcul.
2) "Tableau croisé dynamique2»Est le nom du tableau croisé dynamique.
3) Le champ de filtrage dans le tableau croisé dynamique s'appelle "Catégories".
4) La valeur que vous souhaitez filtrer dans le tableau croisé dynamique est placée dans la cellule H6.
Vous pouvez modifier les valeurs des variables ci-dessus selon vos besoins.

4. appuie sur le autre + Q touches pour fermer le Microsoft Visual Basic pour applications fenêtre.

Ensuite, le tableau croisé dynamique filtre en fonction de la valeur de la cellule H6, comme illustré ci-dessous:

Vous pouvez changer la valeur de la cellule en d'autres selon vos besoins.

Notes: Les valeurs que vous saisissez dans la cellule H6 doivent correspondre exactement aux valeurs de la liste déroulante Catégorie du tableau croisé dynamique.


Articles Liés:


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2019 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (19)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
En utilisant ce code (mis à jour pour mes variables bien sûr), lors du changement de champ, le filtre passe momentanément au bon, puis s'efface presque immédiatement. Essayer de comprendre pourquoi il fait cela (vous vous demandez si cela a quelque chose à voir avec les ClearAllFilters à la fin du sous-titre ?)
Ce commentaire a été minimisé par le modérateur sur le site
Comment procéderiez-vous avec un filtre de rapport hiérarchisé ?
Ce commentaire a été minimisé par le modérateur sur le site
Hé! Merci pour votre macro.

J'essayais de l'utiliser pour plus d'un tableau croisé dynamique dans la même page, mais cela ne fonctionne pas. Je l'ai écrit comme ceci :

Private Sub Worksheet_Change (Cible ByVal en tant que plage)
Dim xPTable1 en tant que tableau croisé dynamique
Estomper xPFile1 en tant que champ croisé dynamique
Dim xStr1 en tant que chaîne
On Error Resume Next
Si l'intersection (cible, plage ("D7")) n'est rien, alors quittez le sous-marin
Application.ScreenUpdating = Faux
Set xPTable1 = Worksheets("BUSCADOR").PivotTables("PV_ETAPA1")
Définir xPFile1 = xPTable1.PivotFields("ETAPA1")
xStr1 = Cible.Texte
xPFile1.ClearAllFilters
xPFile1.CurrentPage = xStr1
Application.ScreenUpdating = True

Dim xPTable2 en tant que tableau croisé dynamique
Estomper xPFile2 en tant que champ croisé dynamique
Dim xStr2 en tant que chaîne
On Error Resume Next
Si l'intersection (cible, plage ("G7")) n'est rien, alors quittez le sous-marin
Application.ScreenUpdating = Faux
Set xPTable2 = Worksheets("BUSCADOR").PivotTables("PV_ETAPA2")
Définir xPFile2 = xPTable2.PivotFields("ETAPA2")
xStr2 = Cible.Texte
xPFile2.ClearAllFilters
xPFile2.CurrentPage = xStr2
Application.ScreenUpdating = True

End Sub

Peut-être pourrez-vous m'aider !

Merci d'avance!
Ce commentaire a été minimisé par le modérateur sur le site
Hi


merci pour la macro


J'essaie la même chose mais je n'arrive pas à le faire fonctionner sur 2 tables. ils regardent tous les deux la même cellule juste 2 tableaux croisés dynamiques différents


à
Ce commentaire a été minimisé par le modérateur sur le site
Vous devez modifier le nom du tableau croisé dynamique. Chaque tableau croisé dynamique a un nom différent. pour l'obtenir, faites un clic droit sur le pivot et sélectionnez les paramètres du tableau croisé dynamique, le nom sera en haut
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour pour une raison quelconque, cette macro après être entrée dans la page Visual Basic, ne s'affiche pas du tout. Je ne parviens pas à activer/exécuter cette macro, j'ai vérifié tous les paramètres du centre de confiance, mais rien ne se passe, aidez-moi s'il vous plaît
Ce commentaire a été minimisé par le modérateur sur le site
Salut, je n'arrive pas à le faire fonctionner. La cellule à laquelle je veux faire référence est extraite d'une formule - serait-ce la raison pour laquelle le filtre ne peut pas la trouver car il regarde la formule plutôt que la valeur renvoyée par la formule ?Merci d'avanceHeather McDonagh
Ce commentaire a été minimisé par le modérateur sur le site
Salut Heather, avez-vous trouvé une solution. J'ai juste le même problème.
Ce commentaire a été minimisé par le modérateur sur le site
J'ai pu modifier/filtrer 3 pivots différents qui se trouvent sur le même onglet. J'ai également ajouté une ligne dans mon ensemble de données "Aucune donnée trouvée", sinon cela a laissé le filtre sur "TOUT" ce que je ne voulais pas. Ce qui précède a été d'une grande aide pour me mériter des félicitations à la direction, alors je voulais partager. Notez que (Tous) est sensible à la casse m'a pris un peu de temps pour comprendre cela.
Private Sub Worksheet_Change (Cible ByVal en tant que plage)
'test
Estomper xPTable en tant que tableau croisé dynamique
Dim xPFile As PivotField
Dim xStr As String

Dim x2PTable en tant que tableau croisé dynamique
Dim x2PFile As PivotField
Dim x2Str As String

Dim x3PTable en tant que tableau croisé dynamique
Dim x3PFile As PivotField
Dim x3Str As String

On Error Resume Next
Si Intersect(Target, Range("a2:e2")) n'est rien alors quittez Sub

Application.ScreenUpdating = Faux

'tbl-1
Set xPTable = Worksheets("Graphique").PivotTables("PivotTable1")
Set xPFile = xPTable.PivotFields("MR Department - Department")
xStr = Cible.Texte
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Si xPFile.CurrentPage = "(Tous)" Alors xPFile.CurrentPage = "Aucune donnée trouvée"

'tbl-2
Set x2PTable = Worksheets("Graphique").PivotTables("PivotTable2")
Set x2PFile = x2PTable.PivotFields("MR Department - Department")
x2Str = Cible.Texte
x2PFile.ClearAllFilters
x2PFile.CurrentPage = x2Str
Si x2PFile.CurrentPage = "(Tous)" Alors x2PFile.CurrentPage = "Aucune donnée trouvée"

'tbl-3
Set x3PTable = Worksheets("Graphique").PivotTables("PivotTable3")
Set x3PFile = x3PTable.PivotFields("MR Department - Department")
x3Str = Cible.Texte
x3PFile.ClearAllFilters
x3PFile.CurrentPage = x3Str
Si x3PFile.CurrentPage = "(Tous)" Alors x3PFile.CurrentPage = "Aucune donnée trouvée"

Application.ScreenUpdating = True

End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Est-ce possible avec Google Sheets ? Si c'est le cas, comment?
Ce commentaire a été minimisé par le modérateur sur le site
Google Sheets ne nécessitera aucun tableau croisé dynamique. vous pouvez effectuer directement via la fonction de filtre
Ce commentaire a été minimisé par le modérateur sur le site
Je souhaite utiliser plusieurs codes de modification de feuille de calcul dans la même feuille de calcul. Comment faire ça? Mon code est comme ci-dessous:
Private Sub Worksheet_Change (Cible ByVal en tant que plage)
'Filtre de tableau croisé dynamique basé sur la valeur de la cellule
Estomper xPTable en tant que tableau croisé dynamique
Dim xPFile As PivotField
Dim xStr As String
On Error Resume Next
Si l'intersection (cible, plage ("D20: D21")) n'est rien, alors quittez le sous-marin
Application.ScreenUpdating = Faux
Définir xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
Set xPFile = xPTable.PivotFields("Désignation")
xStr = Cible.Texte
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Application.ScreenUpdating = True
End Sub

Sous-feuille de calcul privée_Change2 (cible ByVal en tant que plage)
'Filtre de tableau croisé dynamique basé sur la valeur de cellule 2
Estomper xPTable en tant que tableau croisé dynamique
Dim xPFile As PivotField
Dim xStr As String
On Error Resume Next
Si l'intersection (cible, plage (" H20: H21 ")) n'est rien, quittez le sous-marin
Application.ScreenUpdating = Faux
Définir xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
Set xPFile = xPTable.PivotFields("Offre")
xStr = Cible.Texte
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Olá, gostaria de saber se quisesse filtrar mais de uma categoria como poderia ser ?
Ce commentaire a été minimisé par le modérateur sur le site
Que se passe-t-il si je veux lier la cellule de sélection à un autre onglet ? Ceci est mon code jusqu'à présent
Private Sub Worksheet_Change (Cible ByVal en tant que plage)
Dim xPTable1 en tant que tableau croisé dynamique
Estomper xPFile1 en tant que champ croisé dynamique
Dim xStr1 en tant que chaîne
On Error Resume Next
Si l'intersection (cible, plage ("B1")) n'est rien, alors quittez le sous-marin
Application.ScreenUpdating = Faux
Set xPTable1 = Worksheets("SM_SKU PIVOTS").PivotTables("PivotTable1")
Définir xPFile1 = xPTable1.PivotFields("Géographie")
xStr1 = Cible.Texte
xPFile1.ClearAllFilters
xPFile1.CurrentPage = xStr1
Application.ScreenUpdating = True

Dim xPTable2 en tant que tableau croisé dynamique
Estomper xPFile2 en tant que champ croisé dynamique
Dim xStr2 en tant que chaîne
On Error Resume Next
Si l'intersection (cible, plage ("B1")) n'est rien, alors quittez le sous-marin
Application.ScreenUpdating = Faux
Set xPTable2 = Worksheets("SM_SKU PIVOTS").PivotTables("PivotTable4")
Définir xPFile2 = xPTable2.PivotFields("Géographie")
xStr2 = Cible.Texte
xPFile2.ClearAllFilters
xPFile2.CurrentPage = xStr2
Application.ScreenUpdating = True

Dim xPTable3 en tant que tableau croisé dynamique
Estomper xPFile3 en tant que champ croisé dynamique
Dim xStr3 en tant que chaîne
On Error Resume Next
Si l'intersection (cible, plage ("B1")) n'est rien, alors quittez le sous-marin
Application.ScreenUpdating = Faux
Set xPTable3 = Worksheets("SM_SKU PIVOTS").PivotTables("PivotTable8")
Définir xPFile3 = xPTable3.PivotFields("Géographie")
xStr3 = Cible.Texte
xPFile3.ClearAllFilters
xPFile3.CurrentPage = xStr3
Application.ScreenUpdating = True

End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour!

Je suis nouveau avec VBA et j'aimerais avoir un code pour sélectionner un filtre pivot basé sur une plage de cellules.
Comment puis-je changer "CurrentPage" pour être une valeur de plage ?
Je vous remercie!!
-------------------------------------------------- -----------------------------------------
Sous PrintTour()

ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"[Bereich 1].[Tour].[Tour ]"). _
EffacerTousFiltres
ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"[Bereich 1].[Tour].[Tour]"). _
CurrentPage = "[Bereich 1].[Tour lt. Anlieferungstag].&[4001-01]"
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Merci beaucoup pour ce code ! Je l'ai fait fonctionner après l'avoir ajusté pour répondre à mes champs, mais après avoir formaté quelques modifications sur ma feuille, cela ne fonctionne plus ! Je l'ai déplacé de A1 à B1, j'ai changé le formatage des cellules pour le faire ressortir, etc. Rien de trop fou mais maintenant il ne se met pas à jour lorsque je change de texte dans B1. Quelqu'un a des idées?

Private Sub Worksheet_Change (Cible ByVal en tant que plage)
'test
Estomper xPTable en tant que tableau croisé dynamique
Dim xPFile As PivotField
Dim xStr As String

Dim x2PTable en tant que tableau croisé dynamique
Dim x2PFile As PivotField
Dim x2Str As String

Dim x3PTable en tant que tableau croisé dynamique
Dim x3PFile As PivotField
Dim x3Str As String

On Error Resume Next
Si l'intersection (cible, plage ("b1")) n'est rien, alors quittez le sous-marin

Application.ScreenUpdating = Faux

'tbl-1
Set xPTable = Worksheets("Line Report").PivotTables("PivotTable7")
Set xPFile = xPTable.PivotFields("Utopia Source")
xStr = Cible.Texte
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr

'tbl-2
Set x2PTable = Worksheets("Line Report").PivotTables("PivotTable2")
Set x2PFile = x2PTable.PivotFields("Utopia Source")
x2Str = Cible.Texte
x2PFile.ClearAllFilters
x2PFile.CurrentPage = x2Str

'tbl-3
Set x3PTable = Worksheets("Line Report").PivotTables("PivotTable3")
Set x3PFile = x3PTable.PivotFields("Utopia Source")
x3Str = Cible.Texte
x3PFile.ClearAllFilters
x3PFile.CurrentPage = x3Str

Application.ScreenUpdating = True

End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Salut Lance,
J'ai testé votre code et il fonctionne bien dans mon cas. La modification du format de cellule n'affecte pas le fonctionnement du code.
Ce commentaire a été minimisé par le modérateur sur le site
Comment cela fonctionne-t-il avec Power Pivot, lors de l'utilisation de plusieurs tables ? J'ai enregistré une macro en changeant la valeur dans le filtre. Quelques modifications apportées pour que le code ci-dessus fonctionne. Mais cela génère une erreur de non-concordance de type. Peu importe ce que je fais.
Ce commentaire a été minimisé par le modérateur sur le site
Salut DK,
La méthode ne fonctionne pas pour Power Pivot. Désolé pour le dérangement.
Il n'y a pas encore de commentaires postés ici
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés