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 SubPour 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 SubMerci 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