Synchronisation de plusieurs TCD

coco74

XLDnaute Nouveau
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
 

coco74

XLDnaute Nouveau
Re : Synchronisation de plusieurs TCD

J'ai modifié le code comme suit :

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

Bonjour,

Pour les nouvelles données, une boucle peut venir remplacer les éléments individuels :
Code:
For Each pi In .PivotItems
     pi.Visible = pf.PivotItems(pi.Value).Visible
Next pi

A +
:)
 

James007

XLDnaute Barbatruc
Re : Synchronisation de plusieurs TCD

Re,

La question que tu soulèves n'est pas directement liée au code ...
Avec plusieurs TCD, il y a deux précautions à prendre :

1. Définir de façon dynamique la source et appliquer le même nom à tous les TCD
2. et, rafraichir tous les TCD ...

avant de modifier les choix et lancer la synchronisation ...

A +
:)
 

coco74

XLDnaute Nouveau
Re : Synchronisation de plusieurs TCD

- 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

End Sub

Est-ce correct ?

Re,

La question que tu soulèves n'est pas directement liée au code ...
Avec plusieurs TCD, il y a deux précautions à prendre :

1. Définir de façon dynamique la source et appliquer le même nom à tous les TCD
2. et, rafraichir tous les TCD ...

avant de modifier les choix et lancer la synchronisation ...

A +
:)
 

Discussions similaires

Réponses
1
Affichages
309

Statistiques des forums

Discussions
312 378
Messages
2 087 760
Membres
103 661
dernier inscrit
fcleves