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

XL 2021 Segments et tcd non liés

jozerebel

XLDnaute Occasionnel
bonjour à tous,

Pour commencer, je précise que je travaille sous excel 2021 mais que mon fichier sera ouvert par des utilisateurs n ayant ni power query ni power pivot et que la structure des tables ne permet pas une compilation.

Mon fichier comporte plusieurs base de données que je ne peux donc pas compiler même si plusieurs colonnes comportent les mêmes valeurs (comme des dates ou des secteurs par exemple).

Prenons un exemple de mon pb :
J ai un tcd pour la facturation mensuelle organismes (Dépendant d une bdd)
J ai un tcd pour la facturation mensuelle clients (dependant d une autre bdd)
Je crée un segment pour filtrer la date sur le tcd1
J aimerais que ce segment s'applique aussi au tcd2 alors même qu aucune liaison n est possible puisque les deux tcd sont issus de deux bdd différentes. Pour autant les conditions de filtres du tcd1 pourraient s appliquer au tcd2 (dates dans mon exemple).

Comment puis je gérer cela sans obliger l utilisateur à saisir plusieurs segments pour une même condition ? (Date dans mon exemple).

Je ne suis pas contre une solution par macro.

Je vous remercie pour votre aide précieuse.

Jo
 

jozerebel

XLDnaute Occasionnel
Salut Chris,

J'ai testé ta macro qui fonctionne bien mais prend beaucoup de temps d'exécution.

J'ai en effet plusieurs segments dont les sélections doivent se reporter dans d'autres segments.

J'ai adapté ta macro à ma situation et je te joins le code.

Vois-tu une solution ou une amélioration du code pour accélérer le traitement?

Je te remercie pour tout.
VB:
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
'Synchro des segments de la feuille nommée "TCD"
    If Sh.Name <> "Saad_Tcd_Heures" Then Exit Sub
    On Error GoTo Fin
    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 And Seg2.Name Like 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 And Seg2.Name Like Seg.Name & "*" Then ActiveWorkbook.SlicerCaches(Seg2.Name).SlicerItems(Iitem.Name).Selected = Iitem.Selected
                    Next Seg2
                    
                Next Iitem
                
                Application.EnableEvents = True
            End If
        Next
    Next

Fin:
Application.EnableEvents = True
End Sub
 

chris

XLDnaute Barbatruc
Bonjour

Le Pb est de parcourir tous les items : les boucles sont toujours une solution lente.

On peut tenter la synchro un champ de filtre des TCD, mono valué, mais si une valeur n'existe pas, cela entraîne la modification des libellés donc à réserver aux cas dont on est certains...
 

Discussions similaires

Réponses
3
Affichages
534
Réponses
6
Affichages
629
Réponses
1
Affichages
284
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…