Lier TCD et variable

Bonjour,

Je cherche à lier un filtre d'un TCD et une variable externe au TCD.

Je pense que cela passe forcément par l'utilisation de VBA. Auriez-vous un exemple de code qui pourrait remplir cette tâche?

Vous trouverez une illustration de mon cas sur le fichier en pièce jointe. Lorsque je sélectionne une valeur dans ma liste déroulante en B4, je souhaiterai mouvementer également le filtre de mon TCD en J6.

Merci par avance

20exemple.xlsx (11.94 Ko)

Bonjour

Pourquoi ne pas tout simplement utiliser un segment ?

Bonsoir,

Je ne veux pas utiliser un segment car sauf erreur de ma part le segment ne peut pas s'afficher sous forme de liste déroulante. J'aurai environ 40 "prénoms" différents donc cela ne sera pas très lisible....

Merci de votre aide,

Bonjour,

Un exemple avec TCD et segments.

Cdlt.

41exemple.xlsx (16.88 Ko)

Bonsoir,

Merci pour ta réponse.

Avec ta solution, je vais (je pense) rencontrer un problème car la valeur que je sélectionne sera la variable de plusieurs tableaux / graphiques qui n'auront pas la même base de données mais le filtre sera le même. J'espère être clair.

Merci par avance,

Bonjour à tous

J'avais pondu ce code en 2013 pour synchroniser des segments pour des TCD de sources différentes

A adapter

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,

Un exemple à adapter.

Cdlt.

33exemple.xlsm (18.39 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pf As PivotField
    If Target.Address = "$B$4" And Not IsEmpty(Target) Then
        Set pf = Me.PivotTables(1).PageFields("Prénom")
        With pf
            '.ClearAllFilters
            .EnableItemSelection = False
            .CurrentPage = Target.Value
        End With
    End If
End Sub

RE

Jean-Eric :

Si on doit synchroniser des TCD, et que certains prénoms n'existent pas dans la source de l'un d'eux, ce code change l'étiquette mais ne filtre pas.

On est donc obligé de partir de la liste des valeurs du champ dans chaque TCD pour ne pas tenter le filtre si la valeur est absente.

Re,

Bonjour 78chris,

Je me suis rendu compte de la bévue.

Manuellement, on peut pas saisir un prénom non existant, mais VBA autorise la chose et fout le bousin.

Cdlt.

RE

De même qu'on peut manuellement avoir un filtre renvoyant un TCD vide mais pas en VBA.

Le VBA des TCD a quelques bizarreries et anomalies (notamment liées à la localisation)...

Bonjour,

Je vous remercie pour vos réponses. Je vais essayer vos propositions.

La solution fonctionne, merci à vous.

Cependant je n'arrive pas à l'utiliser sur deux feuilles différentes de mon fichier.

Set pf = Me.PivotTables(1).PageFields("Manager")

Est-ce qu'en dupliquant je peux renommer "pf"comme je le souhaite pour ma seconde feuille? Je l'ai nommé "pf1", je ne sais pas si mon bug vient de là.

Merci de votre retour,

RE

Le but est de synchroniser ?

Si oui il ne faut pas dupliquer le code mais faire une boucle sur l'ensemble de TCD

C'est donc seulement le TCD qui varie

Avec les réserves que j'ai signalées en cas d’élément absent dans une des sources, cas qui mettra le souk dans le TCD concerné...

Non le but est d'utiliser deux fois ceci avec des bases de données et des listes différentes. Tout est donc indépendant et dans des onglets différents.

Cependant, lorsque je met en place la seconde cela ne fonctionne pas.

RE

Si le code est bien dans le module de l'onglet, il n'y a rien à changer : chaque déclenchement se base sur la feuille en cours

Rechercher des sujets similaires à "lier tcd variable"