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
 

James007

XLDnaute Barbatruc
Re : Synchronisation de plusieurs TCD

Bonjour Coco74,

Effectivement, on peut synchroniser plusieurs TCD ... par exemple, avec un "filtre central", avec tous tes choix qui sont automatiquement retransmis aux TCD ...en fonction des PivotFields, de leur Orientation et de leur valeur ...

Sans ton fichier, difficile de t'aider plus avant ...

A +
:)
 

coco74

XLDnaute Nouveau
Re : Synchronisation de plusieurs TCD

Bonjour James007

Je n'ai pas de fichier particulier à envoyer, mais voilà la syntaxe que j'utilisais jusqu'à présent :
With F3
.PivotTables("Tableau croisé dynamique1").PivotFields("Période"). _
CurrentPage = F2.Range("B2").Value
.PivotTables("Tableau croisé dynamique2").PivotFields("Période"). _
CurrentPage = F2.Range("B2").Value
.PivotTables("Tableau croisé dynamique3").PivotFields("Période"). _
CurrentPage = F2.Range("B2").Value
End With

Où F2.Range("B2").Value était la valeur de la cellule correspondant au filtre de page du TCD source (Excel 2003 par exemple).

Or dans 2007, le filtre peut cumuler plusieurs valeurs (Oprion : "Sélectionner plusieurs éléments"). Dans ce cas mon code ne fonctionne plus !
L'enregistreur de macro ne m'aide pas plus.
Alors j'ai essayé de remplacer : = F2.Range("B2").Value par : = F2.PivotTables("Tableau croisé dynamique1").PivotFields("Période").CurrentPage, mais sans succès !

Qu'en penses-tu ?



Bonjour Coco74,

Effectivement, on peut synchroniser plusieurs TCD ... par exemple, avec un "filtre central", avec tous tes choix qui sont automatiquement retransmis aux TCD ...en fonction des PivotFields, de leur Orientation et de leur valeur ...

Sans ton fichier, difficile de t'aider plus avant ...

A +
:)
 

coco74

XLDnaute Nouveau
Re : Synchronisation de plusieurs TCD

Bonjour Pierrot93

Je ne pensais pas mal faire en imaginant toucher plus d'interlocuteurs. J'en tiendrais compte dorénavant !
Ceci dit, celà ne réponds malheureusement pas à mon problème qui reste entier.


Bonjour,

tu as une réponse ici :
Synchronisation de plusieurs TCD - Forum des professionnels en informatique
il est plus ympa de prévenir quand on poste la même question sur plusieurs forums...

bonne journée
@+
 

James007

XLDnaute Barbatruc
Re : Synchronisation de plusieurs TCD

Re,

Tu peux t-inspirer de cette boucle pour rendre tous les items visibles ...
PHP:
Sub PivotTousVisibles()
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
For Each pt In ActiveSheet.PivotTables
   For Each pf In pt.RowFields
    pf.AutoSort xlManual, pf.SourceName
     For Each pi In pf.PivotItems
         pi.Visible = True
     Next pi
    pf.AutoSort xlAscending, pf.SourceName
   Next pf
Next pt
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

A +
:)
 

coco74

XLDnaute Nouveau
Re : Synchronisation de plusieurs TCD

Merci James007

Néanmoins, je n'ai pas su exploiter ce code pour résoudre mon problème.
Pour rappel : on affecte manuellement les filtres sur le TCD source (un seul filtre du rapport, mais plusieurs items) et on souhaite les voir s'appliquer automatiquement aux TCD cibles !
Par exemple je sélectionne les mois de Janvier et Février sur le champ de page "Période" du TCD source et je souhaite les voir s'appliquer automatiquement à un ou plusieurs TCD cibles !


Re,

Tu peux t-inspirer de cette boucle pour rendre tous les items visibles ...
PHP:
Sub PivotTousVisibles()
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
For Each pt In ActiveSheet.PivotTables
   For Each pf In pt.RowFields
    pf.AutoSort xlManual, pf.SourceName
     For Each pi In pf.PivotItems
         pi.Visible = True
     Next pi
    pf.AutoSort xlAscending, pf.SourceName
   Next pf
Next pt
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

A +
:)
 

James007

XLDnaute Barbatruc
Re : Synchronisation de plusieurs TCD

Bonjour Coco74,

Sur la base de ton fichier Excel 2007, voilà un premier test comme point de départ ...
pour synchroniser les TCD 2 et 3 avec le choix fait dans le TCD1 ...

A +
:)
 

Pièces jointes

  • TestSyncTCD.xls
    45 KB · Affichages: 364

coco74

XLDnaute Nouveau
Re : Synchronisation de plusieurs TCD

Bonjour James007 et tous mes voeux pour cette nouvelle année !

Merci pour ton travail qui de plus répond parfaitement à ma demande. Je comprends (un peu) mieux l'argument "visible".
Seulement il me semble que quand le tableau de base (données) va grandir et recevoir de nouvelle données dans la colonne "AA" (par exemple : "ee", "ff", etc ... ), elles ne seront pas prises en compte par le code tel que tu l'a écrit.
Comment gérer automatiquement l'arrivée de nouvelles données dans le tableau source ?


Bonjour Coco74,

Sur la base de ton fichier Excel 2007, voilà un premier test comme point de départ ...
pour synchroniser les TCD 2 et 3 avec le choix fait dans le TCD1 ...

A +
:)
 

Discussions similaires

Réponses
1
Affichages
320

Statistiques des forums

Discussions
312 505
Messages
2 089 098
Membres
104 031
dernier inscrit
RimeF