Bonjour
Voici ma question : comment synchroniser par VBA un "Filtre du rapport" de plusieurs TCD cibles par rapport un TCD source qui possède le même "Filtre du rapport".
Jusqu'à présent, j'utilisais simplement la valeur de la cellule du TCD source, mais avec Excel 2007/2010 on à la possibilité de sélectionner plusieurs éléments dans le filtre, et là ça coince ! !
Peut-être peut-on lire et mettre à jour directement la valeur du PivotFields, mais je ne sais pas faire !
Merci par avance
Option Explicit
Sub SyncTCD()
Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Set pt = ActiveSheet.PivotTables("Tableau croisé dynamique1")
Set pf = pt.PageFields("AA")
ActiveWorkbook.RefreshAll
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("AA")
.EnableMultiplePageItems = True
.CurrentPage = "(All)"
For Each Pi In .PivotItems
Pi.Visible = pf.PivotItems(Pi.Value).Visible
Next Pi
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("AA")
.EnableMultiplePageItems = True
.CurrentPage = "(All)"
For Each Pi In .PivotItems
Pi.Visible = pf.PivotItems(Pi.Value).Visible
Next Pi
End With
End Sub
Quand j'ajoute une entrée dans le tableau, que je la sélectionne dans le TCD source, voici ce qui se passe :
- la nouvelle entrée est bien ajoutée sur les TCD cibles
- elle est ajoutée, mais pas sélectionnée ! ! !
- le message d'erreur suivant apparait :
"erreur d'execution 13 : incompatibilité de type"
sur la ligne : Pi.Visible = pf.PivotItems(Pi.Value).Visible
- Définir de façon dynamique la source : c'est déjà le cas
- appliquer le même nom aux TCD : ils sont nommés comme les noms que tu as utilisé dans ton code, soit : Tableau croisé dynamique2 et Tableau croisé dynamique3
- rafraichir tous les TCD : comme tu peux le voir; j'ai ajouté au début de ton code la ligne : ActiveWorkbook.RefreshAll
J'ai néanmoins essayé d'ajouter la ligne "on error resume next" devant chacune des boucles et tout fonctionne correctement.
Soit :
Sub SyncTCD()
Dim pt As PivotTable
Dim pf As PivotField
Dim Pi As PivotItem
Set pt = ActiveSheet.PivotTables("Tableau croisé dynamique1")
Set pf = pt.PageFields("AA")
ActiveWorkbook.RefreshAll
With ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("AA")
.EnableMultiplePageItems = True
.CurrentPage = "(All)"
On Error Resume Next
For Each Pi In .PivotItems
Pi.Visible = pf.PivotItems(Pi.Value).Visible
Next Pi
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("AA")
.EnableMultiplePageItems = True
.CurrentPage = "(All)"
On Error Resume Next
For Each Pi In .PivotItems
Pi.Visible = pf.PivotItems(Pi.Value).Visible
Next Pi
End With