Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Synchronisation de TCD via VBA

  • Initiateur de la discussion Initiateur de la discussion isywybad
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

I

isywybad

Guest
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

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 ?
 
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
 
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
 
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.
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
527
A
Réponses
5
Affichages
1 K
A
G
Réponses
2
Affichages
955
G
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…