VBA Impossible de lire propr. PivotItems

Bonjour

Je rencontre un petit pb dans une macro qui doit actualiser des tableaux croisés puis sélectionner automatiquement le bon mois dans les tcd. Voici le bout de code qui bloque. Pouvez-vous m'aider car je sèche ? Le message d'erreur est : Impossible de lire la propriété PivoItems de la classe PivotField.

Merci beaucoup pour vos réponses

Dim Mois As Integer
Mois = InputBox("Entrer le mois de cloture")

On actualise les TCD et on sélectionne le mois de cloture dans les TCD 4 - 5 - 6 - 7 - 8 - 9
--------------------------------------------------------------------------------------------------------
ThisWorkbook.RefreshAll
Sheets("Feuil1").Select
 With ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotFields("MOIS")
        .PivotItems(Mois).Visible = True
        .PivotItems(Mois - 1).Visible = False
 End With
 With ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotFields("MOIS")
        .PivotItems(Mois).Visible = True
        .PivotItems(Mois - 1).Visible = False
 End With
 

Par ailleurs, pouvez-vous me dire si l'instruction ThisWorkbook.RefreshAll permet bien d'actualiser tous les tableaux croisés du classeur.

merci

Bonjour,

Un fichier va être nécessaire dans la mesure où l'on ne sait pas de quoi on parle.

Pour commencer la fonction 'InputBox' renvoie un 'String' (chaîne de caractères, texte). et pas un 'Integer' (nombre entier).

On ne sait pas non plus comment sont saisis les mois.

Puis, avant de créer un filtre, il faut effacer les filtres existants. Pour ensuite le recréer en fonction du mois retenu.

Etc...

Cdlt.

Merci pour ta réponse.

Je ne peux pas mettre en ligne mon fichier pour des raisons de confidentialité. Peux-tu quand même me mettre sur la voie avec un exemple à peu près correspondant à ce que je veux faire ? J'ai 3 fichiers :

  • un fichier de Données,
  • un fichier avec des TCD
  • une macro dans un fichier à part qui alimente les TCD.

Je voudrais que la macro actualise tous les TCD en une fois avec une seule instruction puis sélectionne le mois retenu qui n'est rien d'autre que le dernier mois de cloture. Il est dans une colonne de mon fichier de données. Je l'ai mis dans un InputBox pour que l'utilisateur n'aille pas le sélectionner manuellement dans le filtre des TCD et que ce soit la macro qui le sélectionne grâce à la valeur saisie dans InputBox. Je ne sais pas si c'est un peu plus clair.

Si tu peux, envoie-moi quelques liens vers des exemples de macros qui sélectionne des critères dans un filtre de TCD. Je vais essayer de me débrouiller avec.

Merci pour ta réponse.

Re,

Un début de réponse à tester et à adapter.

A te relire.

Cdlt

Option Explicit
'Option Private Module
Public Sub EssaiFiltre()
Dim Message As String, Title As String, Default As String, myValue As String
Dim Ws As Worksheet
Dim PT As PivotTable, Field As PivotField
Dim i As Long
    ' ---------------------------------------------------------------------------------
    Message = "Veuillez saisir le mois."
    Title = "Choix du filtre."
    Default = Month(DateAdd("m", -1, Date))    ' mois précédent par défaut.

    myValue = InputBox(Message, Title, Default)

    If myValue = vbNullString Then Exit Sub
    ' ---------------------------------------------------------------------------------
    Application.ScreenUpdating = False

    Set Ws = Worksheets("Feuil1")

    For Each PT In Ws.PivotTables

        Set Field = PT.PivotFields("Mois")

        With Field
            If .Orientation = xlPageField Then
                .CurrentPage = myValue
            ElseIf .Orientation = xlRowField Or .Orientation = xlColumnField Then
                On Error Resume Next
                .PivotItems(1).Visible = True
                For i = 2 To Field.PivotItems.Count
                    If .PivotItems(i).Name = myValue Then _
                       .PivotItems(i).Visible = True Else _
                       .PivotItems(i).Visible = False
                Next i
                If .PivotItems(1).Name = myValue Then _
                   .PivotItems(1).Visible = True Else _
                   .PivotItems(1).Visible = False
            End If
        End With

    Next PT
    ' ---------------------------------------------------------------------------------
    Set Field = Nothing: Set Ws = Nothing

End Sub

Pour actualiser tous les TCDs d'un classeur, voir exemple ci-dessous :

Public Sub ActualiserTCDs()
Dim Ws As Worksheet
Dim PT As PivotTable

    Application.ScreenUpdating = False

    For Each Ws In ActiveWorkbook.Worksheets
        For Each PT In Ws.PivotTables
            PT.RefreshTable
        Next PT
    Next Ws

End Sub

Merci beaucoup pour ta réponse, je te tiens au courant dès que j'ai testé

Bonsoir Jean-Eric

J'ai copié le code que tu m'as donné mais je rencontre qq pbs. Je t'ai envoyé les fichiers dans ta messagerie.

Je te remercie pour ton aide,

cordialement

Rechercher des sujets similaires à "vba impossible lire propr pivotitems"