XL 2013 Segment qui modifie différents TCD avec 1 champ Direction commun

Chrystel01

XLDnaute Occasionnel
Bonjour,

J'ai créé différents TCD portant sur des bases différentes.
Ces tableaux ont un champ commun le champ Direction.

Par ailleurs, je créé un segment Direction que l'utilisateur choisira.
Mais le segment ne porte que sur un des TCD.
Savez vous svp comment faire pour ne pas créer 5 segments Directions relatifs aux 5 bases ?
Existe il un moyen pour que l'utilisateur ne sélectionne qu'une fois la Direction et que tous les TCD se mettent à jour avec cette Direction même s'ils portent sur des bases différentes ?

Merci d'avance pour votre aide

Chrystel
 
Solution
Bonjour

Soit il faut lier les bases par PowerQuery (en add on sur 2013) soit par PowerPivot (intégré à 2013) mais cela dépend de la structure des tables sources et de ta version 2013 http://www.excel-formations.fr/Trucs_astuces/TCD09.php

Sinon il faut utiliser VBA. A adapter :
VB:
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)

'Synchro des segments de la feuille nommée "pivots"

    If Sh.Name <> "pivots" Then Exit Sub

    For Each Seg In ActiveWorkbook.SlicerCaches

        For Each PTlien In Seg.PivotTables

            If PTlien = Target.Name Then

                Application.EnableEvents = False

                For Each Seg2 In ActiveWorkbook.SlicerCaches

                    If...

goube

XLDnaute Impliqué
Bonsoir,
Sélectionner le segment, Connexions de rapport, Sélectionner les TCD concernés.
1646098127020.png

Cordialement.
 

chris

XLDnaute Barbatruc
Bonjour

Soit il faut lier les bases par PowerQuery (en add on sur 2013) soit par PowerPivot (intégré à 2013) mais cela dépend de la structure des tables sources et de ta version 2013 http://www.excel-formations.fr/Trucs_astuces/TCD09.php

Sinon il faut utiliser VBA. A adapter :
VB:
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)

'Synchro des segments de la feuille nommée "pivots"

    If Sh.Name <> "pivots" Then Exit Sub

    For Each Seg In ActiveWorkbook.SlicerCaches

        For Each PTlien In Seg.PivotTables

            If PTlien = Target.Name Then

                Application.EnableEvents = False

                For Each Seg2 In ActiveWorkbook.SlicerCaches

                    If Seg2.Name <> Seg.Name Then ActiveWorkbook.SlicerCaches(Seg2.Name).ClearManualFilter

                Next Seg2

                For Each Iitem In ActiveWorkbook.SlicerCaches(Seg.Name).SlicerItems

                    For Each Seg2 In ActiveWorkbook.SlicerCaches

                        If Seg2.Name <> Seg.Name Then ActiveWorkbook.SlicerCaches(Seg2.Name).SlicerItems(Iitem.Name).Selected = Iitem.Selected

                    Next Seg2

                Next Iitem

                Application.EnableEvents = True

            End If

        Next

    Next

End Sub
 
Dernière édition:

Chrystel01

XLDnaute Occasionnel
Bonjour

Soit il faut lier les bases par PowerQuery (en add on sur 2013) soit pas PowerPivot (intégré à 2013) mais cela dépend de la structure des tables sources et de ta version 2013 http://www.excel-formations.fr/Trucs_astuces/TCD09.php

Sinon il faut utiliser VBA. A adapter :
VB:
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)

'Synchro des segments de la feuille nommée "pivots"

    If Sh.Name <> "pivots" Then Exit Sub

    For Each Seg In ActiveWorkbook.SlicerCaches

        For Each PTlien In Seg.PivotTables

            If PTlien = Target.Name Then

                Application.EnableEvents = False

                For Each Seg2 In ActiveWorkbook.SlicerCaches

                    If Seg2.Name <> Seg.Name Then ActiveWorkbook.SlicerCaches(Seg2.Name).ClearManualFilter

                Next Seg2

                For Each Iitem In ActiveWorkbook.SlicerCaches(Seg.Name).SlicerItems

                    For Each Seg2 In ActiveWorkbook.SlicerCaches

                        If Seg2.Name <> Seg.Name Then ActiveWorkbook.SlicerCaches(Seg2.Name).SlicerItems(Iitem.Name).Selected = Iitem.Selected

                    Next Seg2

                Next Iitem

                Application.EnableEvents = True

            End If

        Next

    Next

End Sub
Bonjour,

Merci beaucoup Chris, c'est parfait ! Je vais utiliser le code VBA.

Bonne soirée

Chrystel
 

Discussions similaires

Réponses
1
Affichages
2 K
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 023
Messages
2 084 716
Membres
102 636
dernier inscrit
TOTO33000