Synchronisation de TCD via VBA

isywybad

XLDnaute Nouveau
Bonjour,

Je souhaite synchroniser plusieurs TCD via les filtres d'un autre TCD.

J'ai trouvé du code pour :
plusieurs filtres mais une seul valeur utilisée
Un seul filtre mais plusieurs valeurs utilisées

Mais je n'arrive pas la configuration suivante :

Je peux filtrer sur plusieurs filtres et dans les filtres, il est possible de sélectionner plusieurs valeurs.

En pièce jointe un fichier tout bête qui peut servir de support.

Merci par avance de votre aide.

Cdlt Isy
 

Pièces jointes

  • Fichierexemple.xlsx
    17.9 KB · Affichages: 106
  • Fichierexemple.xlsx
    17.9 KB · Affichages: 118
  • Fichierexemple.xlsx
    17.9 KB · Affichages: 114

isywybad

XLDnaute Nouveau
Re : Synchronisation de TCD via VBA

Pour faire avancer la disussion :


Code permettant de filtrer sur plusieurs filtres mais sans choix multiples par filtre

Code:
Sub MAJ_Graph_Demo()

Dim bob, bob2, bob3 As String

'Evite le clignotement de l'écran lors de la mise à jour du rapport
    Application.ScreenUpdating = False

'Nomme le filtre du rapport
    bob = Worksheets("TCD").PivotTables("TCD0").PivotFields("PERIMETRE") _
        .CurrentPage
    bob2 = Worksheets("TCD").PivotTables("TCD0").PivotFields("EMPLOI") _
        .CurrentPage
    bob3 = Worksheets("TCD").PivotTables("TCD0").PivotFields("ATELIER") _
        .CurrentPage
         
'Modifie le fitre du rapport dans les TCDs
    Worksheets("TCD").PivotTables("TCD1").PivotFields("PERIMETRE") _
        .CurrentPage = bob
    Worksheets("TCD").PivotTables("TCD1").PivotFields("EMPLOI" _
        .CurrentPage = bob2
    Worksheets("TCD").PivotTables("TCD1").PivotFields("ATELIER") _
        .CurrentPage = bob3
        

    
   
End Sub


[CODE]


cependant, ce code ne me permet pas de choisir plusieurs éléments par filtre ... Ce que je recherche ... 

Existe t il un code ?
 

isywybad

XLDnaute Nouveau
Re : Synchronisation de TCD via VBA

Ce code permet le multi choix... Comment puis je l'améliorer dans le cadre de TCD avec plusieurs filtres


Code:
Sub OneForAll()
Dim PT_MAIN As PivotTable
Dim PT As PivotTable
Dim PFN(), PF As Integer, P, I
 
ActiveWorkbook.RefreshAll
 
'table de référence
Set PT_MAIN = ActiveSheet.PivotTables("Tableau croisé dynamique1")
I = 1
 
'recuperer les noms de filtres inactifs
For PF = 1 To PT_MAIN.PivotFields("AA").PivotItems.Count
    If Not PT_MAIN.PivotFields("AA").PivotItems(PF).Visible Then
        'redimensionner pfn en fonction du nombre de filtres inactif sur le champ AA
        ReDim Preserve PFN(1 To I)  'preserve pour ne pas perdre les données précédemment inscrites
        'l'ajouter
        PFN(I) = PT_MAIN.PivotFields("AA").PivotItems(PF).Name
        I = I + 1   'on incrémente en prévision du prochain filtres inactif à ajouter
    End If
Next PF
 
'nb de filtre inactifs
On Error GoTo ShowAll
I = UBound(PFN)
On Error GoTo 0
 
'les appliquer sur les autres tables pivot
For Each PT In ActiveSheet.PivotTables
    'sauf si c'est la table pivot de référence
    If Not PT.Name = PT_MAIN.Name Then
        With PT
            'activation de la selection multiple
            PT.PivotFields("AA").EnableMultiplePageItems = True
            'on affiche tout les filtres disponibles
            For Each P In PT.PivotFields("AA").PivotItems
                P.Visible = True
            Next P
            'on désactive les filtres devant etre inactif
            If Not I = 0 Then
                For PF = 1 To I
                    PT.PivotFields("AA").PivotItems(PFN(PF)).Visible = False
                Next PF
            End If
        End With
    End If
Next PT
 
Exit Sub
 
ShowAll:
I = 0
Resume Next
 
End Sub
 

kjin

XLDnaute Barbatruc
Re : Synchronisation de TCD via VBA

Bonjour,
Dans l'exemple que tu as joint, il s'agit de champs de page et chez moi, il n'y a pas possibilité de choix multiple, c'est tous ou 1 seul, à la difference des champs de lignes ou de colonne. Est ce bien celà
Tu peux utiliser l'événement Update du premier TCD pour mettre à jour les autres, à condition que les champs correspondent, bien entendu
Code:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim pvt As PivotTable, i As Byte, y$
If Target <> PivotTables(1) Then Exit Sub
For Each pvt In ActiveSheet.PivotTables
    If pvt <> Target Then
        For i = 1 To Target.PageFields.Count
            Application.EnableEvents = False
            y = Target.PageFields(i).CurrentPage
            pvt.PageFields(i).CurrentPage = y
            pvt.RefreshTable
            Application.EnableEvents = True
        Next
    End If
Next
End Sub
A+
kjin
 

isywybad

XLDnaute Nouveau
Re : Synchronisation de TCD via VBA

En effet, avant Excel 2007, un seul champ pouvait être sélectionné. Mais à partir de 2007 ... plusieurs champs dans un filtre peuvent être sélectionne.

Le code fonctionne sur un filtre mais pas sur plusieurs. Mais n'étant pas bon en VBA, je ne sais comment l'améliorer.

Merci de ta réponse.
 

isywybad

XLDnaute Nouveau
Re : Synchronisation de TCD via VBA

Le lien que tu donnes est exactement ce que je cherche...

Par contre, la màj ce fait de manière automatique des TCDs se fait automatiquement à chaque changement dans le filtre. Quel est le code qui faite cela ? que je puisse l'isoler et lancer la macro sur demande via un bouton.

Encore un grand merci.
 

Discussions similaires

Réponses
6
Affichages
362

Statistiques des forums

Discussions
312 379
Messages
2 087 762
Membres
103 661
dernier inscrit
fcleves