VBA filtre dans un tableau croisé dynamique

Bonjour,

Ayant un problème avec une macro VBA, je me permets de demander votre aide!

Je voudrais pouvoir imposer un filtre "date" en retenant les 4 dernières périodes lors d'une mise à jour du TCD.

Donc dans l'onglet période, l'utilisateur renseigne la date de l'importation des données. Ma formule à coté retient les 4 dernières périodes en tant que période 1, période2, période 3, période 4.

En cliquant sur mise à jour ma macro se lance pour retenir que les 4 dernières période dans le TCD.

Le TCD est issu des données de l'onglet détail facture.

Ci joint ma macro: Dans celle-là je n'arrive pas à imposer les périodes. Je pense n'ai pas très bien compris le rôle de

.PivotItems(i.Value).Visible = False. (avec Excel 2010)

Je joindrais le fichier filtre_TCD par la suite. (J’ai un problème de par feux)

D'avance merci de votre aide et de votre temps. !!!

Cordialement,

Sub miseajour()

Dim periode1, periode2, periode3, periode4 As Date
Dim PvI As Object

    Sheets("23 - Période").Activate
    periode1 = Cells(6, 4).Value
    periode2 = Cells(7, 4).Value
    periode3 = Cells(8, 4).Value
    periode4 = Cells(9, 4).Value

    Sheets("19 - RAFF Qté Zone").Select
    Sheets("19 - RAFF Qté Zone").Activate

'Set Field = Sheet.PivotTables("14 - Graph Détail RAFF Qté Zone").PivotFields("[Date Observation].[Calendrier].[Annee]").VisibleItemsList = Array("")
'Sheet.PivotTables("14 - Graph Détail RAFF Qté Zone").PivotFields("[Date Observation].[Calendrier].[Mois]").VisibleItemsList = Array("", "[Date Observation].[Calendrier].[Mois].&[" & rng2 & "]", "[Date Observation].[Calendrier].[Mois].&[" & Rng & "]", "[Date Observation].[Calendrier].[Mois].&[" & rng3 & "]")

    Application.ScreenUpdating = False
    ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotSelect "Mois[All]", _
        xlLabelOnly + xlFirstRow, True

    With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("Mois")
            For Each PvI In .PivotItems
                Select Case PvI.Name
                    Case Is <> periode1 'Pour tout qui est différent de la période 1,
                    'Il ne m'affichera pas la date
                    PvI.Visible = False 'Il me donne une erreur??? or je ne comprends pas???
                    Case Is <> periode2
                    PvI.Visible = False
                    Case Is <> periode3
                    PvI.Visible = False
                    Case Is <> periode4
                    PvI.Visible = False
                End Select
            Next
    End With
        Sheets("21 - Détails Factures").Select
        MsgBox ("Ok")
End Sub

Bonjour,

Tu peux peut-être commencer par modifier tes déclarations de variables.

Dim periode1 As Date, _
    periode2 As Date, _
    periode3 As Date, _
    periode4 As Date
Dim PvI As PivotItem

Bonjour Jean Eric,

J'ai vu qu'il avait mis :

Dim periode1, periode2, periode3, periode4 As Date

et toi,

Dim periode1 As Date, _

periode2 As Date, _

periode3 As Date, _

periode4 As Date

Y a t il une différence?

"Dim periode1, periode2, periode3, periode4 As Date"

impose Date qu'a periode4, les autres sont pas definit (mais existent)

Jean-Eric a écrit :

Bonjour,

Tu peux peut-être commencer par modifier tes déclarations de variables.

Merci de ton aide!

Pourtant même en changeant la déclaration de variable; il me renvoie le même message d'erreur:

Erreur d'éxécution 13: Incompatibilité de Type

Je recherche d'autre solutions mais je suis toujours preneur d'astuce!

Dim PvI As PivotItem
...
For Each PvI In .PivotItems

ca dois venir de ca mais j'ai jamais utilisé les tcd

Re,

Bonjour psdi,

Gauthier69 a initialement déclaré periode1, periode2 et periode3 en variant.

Seule periode4 était déclarée en date.

Cdlt.

J'ai fait les modification de déclaration de variable! Mais pour l'instant j'ai toujours mon message d'erreur.

D'avance merci! !

A priori cela viendrait d'un bug sur les dates et sur les vides mais par contre j'ai pas vraiment compris comment résoudre le problème!

Je ne sais pas à quelle endroit je dois l’appeler cette fonction. !

D'avance Merci!

Function EtatChamp(TCDOnglet As String, TCDNom As String, TCDChamp As String, ByVal Position As Long) As Boolean

    With Worksheets(TCDOnglet).PivotTables(TCDNom).PivotFields(TCDChamp)

        If .PivotItems(Position) = "(blank)" Then
            .PivotItems(Position).Value = "vide"
            EtatChamp = .PivotItems(Position).Visible
            .PivotItems(Position).Value = "(vide)"
        ElseIf IsDate(.PivotItems(Position)) Then
            Dim Valini As Date ‘pour le stockage temporaire de la date figurant dans le TCD
            Valini = .PivotItems(Position).Name
            .PivotItems(Position).Name = .PivotItems(Position).Value
            EtatChamp = .PivotItems(Position).Visible
            .PivotItems(Position).Name = Valini
        Else
            EtatChamp = .PivotItems(Position).Visible
        End If

    End With

End Function

Bonjour,

A tester dans ton environnement de travail.

de ton aide! Je viens de comprendre le fonctionnement de cette astuce. Et la macro fonctionne très bien! Par contre peut tu me dire si j'ai bien compris cette partie de la macro? !!!

For Each pi In wsd.PivotTables(strPT).PivotFields(strPF).PivotItems
            On Error Resume Next 
            If .Range("tblPériodes[Périodes]").Find(what:=pi, _
                LookIn:=xlValues, lookat:=xlWhole).Row > 0 Then 'si il trouve une période qui est égale au champ du TCD,
'il regarde dans la table période et trouve la valeur qui doit être strictement égale. Si elle est égale elle sera visible!
                    If Err = 0 Then 'si pas d'erreur ma variable est visible
                        Debug.Print pi.Name
                        pi.Visible = True
                    Else
                        pi.Visible = False 'sinon elle est masqué!
                    End If
            End If
        Next pi

!!!! J'ai aussi vu une trouvé une astuce en utilisant la fonction "GRANDE VALEUR" en rajoutant un champ de le TCD.

Avec une colonne "4 valeur" dans mon onglet "21 - Detail facture" avec cette formule:

=SI([@Mois]<GRANDE.VALEUR([Mois];5+NB.SI([Mois];[@Mois]));0;1)

Ainsi dans mon TCD, je filtre mes données avec le champs "4 valeur".

Et cela marche aussi!

Mon problème est donc résolu!

Re,

Si tu es satisfait, je suis satisfait

Tu as bien compris.

Vire:

Debug.Print pi.Name

Et efface le contenu de la fenêtre 'Exécution'

N'oublie pas clore le sujet.

Amicalement.

Merci! je prends note! !!

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