[VBA] filtre sur tableau croisé dynamique

Bonjour, j'utilise un TCD pour récupérer des infos concernant des états de machines. J'aimerais qu'on puisse filtrer le TCD selon l'utilisateur ou les utilisateurs. Voici mon code, mais ça ne fonctionne pas.

Auriez-vous une idée sur la façon de procéder ?

Dim ind As String
Dim objetFiltre As PivotItem
'**************************
'Action des filtres
'***************************

        For j = 1 To 3
        'Selectionner le filtre (on fait 3 tour vue qu'il y a 3 filtres)
        Select Case i
            Case 1
                ind = "Utilisateur"
            Case 2
                ind = "Article"
            Case 3
                ind = "Contexte"
            Case Else
                ind = "0"
        End Select

        'Activer le multi-filtre (coche tout par défaut)
        ' "nomTCD" est initialisée plus haut et correspond au nom du TCD
        With ActiveSheet.PivotTables(nomTCD).PivotFields(ind)
            .EnableMultiplePageItems = True
            .CurrentPage = "(All)"
        End With

        'Pour chaque "pivotItem" dans la liste, on va les mettre a false sauf s'ils correspondent au filtre
        For Each objetFiltre In ActivSheet.PivotTables(nomTCD).PivotFields(ind).PivotItems
            On Error Resume Next
            With ActivSheet.PivotTables(nomTCD).PivotFields(ind).PivotItems.objet
                If .Name = "8060" Or .Name = "45094" Then
                    .Visible = True
                Else
                    .Visible = False
                End If
            End With
        Next objetFiltre
    Next j

sachant qu'avec ce code j'ai l'erreur :

424 : Objet requis sur la ligne du foreach, c'est comme s'il ne trouvais pas de données ? pourtant je sais qu'elles y sont ? Je ne comprends pas.

Bonjour,

sans le fichier exemple...

P. (débrouissailleur pour les spécalistes )

Je ne peux malheureusement pas fournir le fichier exemple :/ c'est dans le cadre de mon travail.

Bonjour,

En attendant le fichier demandé par Patrick1957, amuse toi avec cette procédure.

Pas testé.

Cdlt.

Option Explicit
Public Sub FiltersPivotTable()
Dim pt As PivotTable
Dim pi As PivotItem
Dim strPF As String
Dim J As Long

    Application.ScreenUpdating = False

    Set pt = ActiveSheet.PivotTables(1)

    For J = 1 To 3
        Select Case J
            Case 1: strPF = "Utilisateur"
            Case 2: strPF = "Article"
            Case 3: strPF = "Contexte"
        End Select

        With pt.PivotFields(strPF)
            .ClearAllFilters
            .EnableMultiplePageItems = True
        End With

        For Each pi In pt.PivotFields(strPF).PivotItems
            'On Error Resume Next
            If pi.Name <> "8060" Or pi.Name <> "45094" Then pi.Visible = False
            'On Error GoTo 0
        Next pi
    Next J

    Set pt = Nothing

End Sub
Zohnya a écrit :

Je ne peux malheureusement pas fournir le fichier exemple :/ c'est dans le cadre de mon travail.

ha bon, celle-là, on nous la fait souvent ici...

et que dirais-tu d'en faire une copie exacte et de le rendre anonyme ?

P.

Bonjour Patrick1957,

pas de bras pas de chocolat.

Bon après-midi.

Cdlt.

Bon. Voilà avec des données fictives.

En gros, il y a la feuille avec les états de la machine ( "1234567" ici) et mon but est de créer un TCD qui va récupérer une plage dans cette feuille et créer un TCD sur une autre feuille ( Options du filtre) filtrée selon l'utilisateur, l'article, ou le contexte. Le but c'est qu'on puisse choisir plusieurs utilisateurs/articles/contexte ( je n'ai fait que pour utilisateur pour le moment).

Enfin. C'est sensé. Parce que là ça ne fait même plus le TCD *s'arrache les cheveux*

Désolée je ne suis pas très forte en VBA donc c'est beaucoup du bricolage.

Edit : Il faut juste modifier la plage, et la fin de la première boucle for (j'ai gardé les valeurs d'origine quand j'ai recopié, désolée)

Bonjour,

J'ai revu la création du TCD. Que penses-tu du résultat ?

Nous verrons pour la suite si cela correspond à tes attentes.

La procédure se nomme DEMO.

Cdlt.

Alors. C'est vraiment idiot mais dans ma boucle for, j'ai oublié le "e" en écrivant "ActivESheet "

Et c'est ça qui marchait pas (oui, je vais aller me flageller 10'00' fois quand je rentrerai chez moi, promis)

Merci beaucoup pour ton aide

Rechercher des sujets similaires à "vba filtre tableau croise dynamique"