Filtrer un TCD via une macro VBA

Bonjour je suis novice dans le codage en VBA et j'aimerais filtrer un TCD via une macro qui manipule un des filtres. J'ai déjà réussi sur d'autres tableaux mais je suis bloqué sur deux autres qui comparaient aux premiers contiennent deux autres filtres. Je ne parvient pas à manipuler le filtre et ma macro me dit que le champ n'existe pas alors que j'ai bien mis le même.

Merci pour votre aide

Bonjour & bienvenue sur le forum,

Avez-vous essayé l'enregistreur de macros ? Il fournit une bonne base. Dans l'exemple simple ci-joint, on en extrait le code suivant pour filtrer sur "A" :

Public Sub Macro1()
  '                             nom du TCD                 nom de la colonne
  With ActiveSheet.PivotTables("PivotTable1").PivotFields("Filtre")
    .ClearAllFilters
    '               valeur du filtre
    .CurrentPage = "A"
  End With
End Sub
17book3.xlsm (18.23 Ko)

Bonjour oui j'ai déjà essayé l'enregistreur de macro. Pour être honnête j'ai déjà une macro qui comme je l'ai dit fonctionne pour mes autres tableaux qui n'ont qu'un seul filtre. Je ne comprend donc pas quel est le problème lorsque j'ai plusieurs filtres sur le même TCD. Voici mon premier code si vous voulez :

Sub FiltrerTCD_QRQC6()
    Dim ws As Worksheet
    Dim pt As PivotTable
    Dim pf As PivotField
    Dim item As PivotItem
    Dim i As Integer
    Dim moisFiltre(1 To 6) As String
    Dim dateReferenceStr As String
    Dim dateReference As Date
    Dim annee As Integer, mois As Integer
    Dim valeur As String
    Dim nbMoisTrouves As Integer

    ' 1. Lire la date depuis la cellule A10
    dateReferenceStr = ThisWorkbook.Sheets("Liste score ST").Range("A10").Value

    ' 2. Validation du format
    If Len(dateReferenceStr) <> 6 Or Not IsNumeric(dateReferenceStr) Then
        MsgBox "La valeur de la cellule A10 est invalide. Format attendu : yyyymm (ex: 202501).", vbExclamation
        Exit Sub
    End If

    annee = Left(dateReferenceStr, 4)
    mois = Right(dateReferenceStr, 2)

    If mois < 1 Or mois > 12 Then
        MsgBox "Mois invalide dans la cellule A10. Veuillez corriger (valeurs entre 01 et 12).", vbExclamation
        Exit Sub
    End If

    ' 3. Convertir en date réelle pour calcul
    dateReference = DateSerial(annee, mois, 1)

    ' 4. Générer les 6 dates au format texte "yyyymm"
    For i = 0 To 5
        moisFiltre(i + 1) = Format(DateAdd("m", -i, dateReference), "yyyymm")
    Next i

    ' 5. Cibler la feuille, le TCD et le champ
    Set ws = ThisWorkbook.Sheets("TCD_score_6mois")
    Set pt = ws.PivotTables("TCD_QRQC_6")
    Set pf = pt.PivotFields("Date_envoi2")

    pf.ClearAllFilters
    pf.EnableMultiplePageItems = True

    nbMoisTrouves = 0

    ' 6. Appliquer le filtre
    For Each item In pf.PivotItems
        valeur = item.Name
        Dim visible As Boolean: visible = False
        For i = 1 To 6
            If valeur = moisFiltre(i) Then
                visible = True
                nbMoisTrouves = nbMoisTrouves + 1
                Exit For
            End If
        Next i

        On Error Resume Next
        item.visible = visible
        On Error GoTo 0
    Next item

End Sub

Re,

Sans fichier difficile de vous aider… Si vous pouviez le partager, merci.

Cependant si l'exécution vous donne l'erreur "le champ n'existe pas" cela veut simplement dire que l'une de ces 2 lignes est incorrecte :

Set pt = ws.PivotTables("TCD_QRQC_6") Set pf = pt.PivotFields("Date_envoi2")

Vérifiez que le nom de la colonne est exactement "Date_envoi2" et idem pour le nom du TCD. Quelle est la ligne surlignée en jaune lorsque le code se bloque ?

Je peux malheureusement pas vous donner le fichier mais en effet lors d'un premier test de la macro j'ai eu une fenêtre de débogage qui parlait de cette ligne la : Set pf = pt.PivotFields("Date_envoi2") Savez vous ce qui ne va pas et pouvez vous le régler ?

Merci déjà pour votre réponse.

Cependant si l'exécution vous donne l'erreur "le champ n'existe pas" cela veut simplement dire que l'une de ces 2 lignes est incorrecte :

Set pt = ws.PivotTables("TCD_QRQC_6") Set pf = pt.PivotFields("Date_envoi2")

Vérifiez que le nom de la colonne est exactement "Date_envoi2" et idem pour le nom du TCD

Donc comme je le disais, vérifiez ceci ^

Si vous avez un doute, vous pouvez lancer une boucle comme

For Each pf In pt.PivotFields: Debug.Print "[" & pf.Name & "]": Next pf

Pour afficher tous les noms de champs possibles, vous verrez que peut-être il vous manque un espace ou une majuscule...

D'accord merci pour votre réponse je vais essayer ce que vous m'avez donné. Bonne journée

Pour information j'ai trouvé d'où venait le problème, j'avais utilisé un TCD à partir d'une source externe au lieu d'un TCD traditionel. Ce qui fait que certaines fonctionnalité ne marchait pas. Si vous avez des solutions pour manipuler les filtres d'un TCD utilisant un tableau d'un document externe via une macro merci de me faire signe.

Bonne journée à tous

Bonjour,
Merci de préciser la version Excel utilisée pour une aide adaptée du forum.
(365, 2024, 2021, etc.).
Cdlt.

Bonjour j'utilise la version 2408 (build 1792820588 Office)

re,

vous n'avez pas pensé à utiliser un segment ?

C'est une bonne idée je vais essayer merci

et puis avec l'enregistreur des macros, on voit ce que VBA fait avec vos segments.

Bonjour,

Je n'interviens sur votre fil que pour la référence de votre programme excel et compléter le post de Jean Eric --> https://forum.excel-pratique.com/s/goto/1250299

Bonjour j'utilise la version 2408 (build 1792820588 Office)

"Version 2408" ..... Ce n'est pas ce qui est attendu et si vous le mettez dans un post de votre fil, on va vous le redemander à chaque nouvelle demande

Vous devez mettre cette information dans le profil de votre compte

Suivez les indications ci-dessous pour le voir :

- Pour la trouver sous Windows :---> menu Fichier -> Autre -> Compte (en bas) + Clic sur le point d'interrogation puis sur la page suivante au-dessus vous trouvez votre version (2010, 2013, 2016, 2019, ...)
- Pour la trouver sous MAC : une fois Excel ouvert, cliquez sur l'icône Pomme en haut à gauche puis à "A propos de " Si vous êtes sous MAC ajoutez l'info avec votre version.

Cordialement

Rechercher des sujets similaires à "filtrer tcd via macro vba"