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

[VBA] TCD et automatisation de filtres

FlorianQ

XLDnaute Nouveau
Bonjour le forum, tout le monde.

Je reviens une fois de plus vers vous car je fais face à une difficulté. Jusqu'à présent je mettais à jour des filtres de TCD grâce à ce code
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("BE6:BF6")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
'    Application.EnableEvents = False
    Dim Pt As PivotTable
        For Each Pt In PivotTables
            Select Case Target.Address
            'Pour modifier un filtre
            Case "$BE$6"
            If Pt.Name = "Nom des tableaux" Then
            With Pt.PivotFields("Filtre à changer")
                .CurrentPage = Range("$BE$6").Value
            End With
            End If
            'Pour modifier un autre filtre
              Case "$BF$6"
              If Pt.Name = "Filtre à changer" Then
            With Pt.PivotFields("UC")
                .CurrentPage = Range("$BF$6").Value
            End With
            End If
        End Select
        Next Pt
'Application.EnableEvents = True
End Sub
En BE6 et BF6 on trouvait une liste déroulante et on choisissait UN filtre. Et c'est à partir de là que commence mon problème, aujourd'hui il m'est demandé de pouvoir sélectionner plusieurs filtres en même temps, ce que la liste déroulante ne permet pas. Ne sachant pas du tout vers où m'orienter, je vous joint juste un fichier avec une base d'exemple il faudrait rafraichir les TCD selon le CSD choisi (cf la liste sur la gauche dans le fichier).Dans le vrai fichier la base peut être mise à jour et normalement je rafraichi les TCD avec un "RefreshAll" le cas échéant. Pour le rendu, userform ou non cela n'a pas d'importance

Si vous avez des questions n'hésitez pas, et surtout, merci d'avance !


Edit : il manquait le fichier
 

Pièces jointes

  • Classeur Test.xlsm
    37 KB · Affichages: 87
  • Classeur Test.xlsm
    37 KB · Affichages: 82
Dernière modification par un modérateur:

chris

XLDnaute Barbatruc
Re : [VBA] TCD et automatisation de filtres

Bonjour

Dommage que tu aies 2007 car avec 2010 et plus, on a cela sans programmer.

Il faut soit utiliser une liste déroulante programmée en VBA : on trouve plusieurs solutions en cherchant ici mais je pense qu'il est plus simple d'utiliser un TCD comme pilote des autres : on choisit dans le chazmp de page de l'un et les autres s'alignent.
Cela évite le risque d'une liste non conforme avec les items des TCD...
 

FlorianQ

XLDnaute Nouveau
Re : [VBA] TCD et automatisation de filtres

Bonjour Chris et merci pour ta réponse.
J'avais envisagé d'utiliser cette méthode mais n'étant pas sûr de la syntaxe, j'ai procédé autrement.

Hier dans la soirée, une idée m'est venu et il semblerait que cela fonctionne. En fait les CSD sont rattachés à des personnes, alors que je pensais que c'était les CSD identiques qui se rattachaient entre eux.
Du coup j'ai procédé de la manière suivante : J'ai un tableau avec les CSD, et la correspondance avec les personnes. Avec un bouton j'insère une nouvelle colonne "Portefeuille" dans ma base (quand csd base = csd tableau, alors "Portefeuille" = nom de la personne) je rafraichis ensuite mes TCD et cela fonctionne parfaitement.
Maintenant j'aimerai obtenir une liste déroulante avec toutes les modalités de "Portefeuille", sans doublons mais je là je bloque encore une fois, même si ce n'est qu'esthétique.

Edit : Après relecture de mon message je me rends compte que le TCD qui controlerait les autres ne serait pas une mauvaise idée et sans doute l'option la plus simple effectivement
 
Dernière modification par un modérateur:

chris

XLDnaute Barbatruc
Re : [VBA] TCD et automatisation de filtres

Bonjour

Voir Ci-joint sur ton fichier initial et sur le 1er champ en zone de filtre (page)...
 

Pièces jointes

  • SynchroTCD.xlsm
    46.1 KB · Affichages: 78

FlorianQ

XLDnaute Nouveau
Re : [VBA] TCD et automatisation de filtres

Re,

Après vérification c'est tout à fait ce qu'il me faut. Je fais le test de l'adapter sur mon classeur demain matin et je fais un retour

Ce n'est pas le cas ici mais si par exemple sur le second tableau j'ai la raison sociale en plus du CSD, c'est en modifiant l'index que je pourrais continuer à mettre le TCD à jour ?

En tous cas merci déjà pour ce que tu as fait !
 

chris

XLDnaute Barbatruc
Re : [VBA] TCD et automatisation de filtres

Re

Tu peux remplacer l'index par le nom du champ (entre ") : ainsi même si l'ordre des champs de filtre est différent cela marche.
 

FlorianQ

XLDnaute Nouveau
Re : [VBA] TCD et automatisation de filtres

Bonjour le forum, Chris.

J'ai essayé d'adapter le code suivant
Code:
Private Sub Workbook_SheetPivotTableChangeSync(ByVal Sh As Object, ByVal Target As PivotTable)

If Sh.CodeName <> "Détails Découverts PRO Agence" Then Exit Sub ' A adapter selon le classeur

Dim pt As PivotTable
Dim i As Long
Dim pi1 As PivotItem, pi2 As PivotItem

Application.EnableEvents = False
Application.ScreenUpdating = False

'Synchro

        For Each pt In Sh.PivotTables
            If pt <> Target Then
                'Synchro autre TCD
                pt.PageFields("Portefeuille").ClearManualFilter 'Champ à adapter selon le cas
                For Each pi2 In pt.PageFields("Portefeuille").PivotItems
                    For Each pi1 In Target.PageFields("Portefeuille").PivotItems 'Champ à adapter selon le cas
                        If pi2.Caption = pi1.Caption Then
                            pi2.Visible = pi1.Visible
                        End If
                    Next pi1
                Next pi2
            End If
        Next pt
     
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

Je travaille sur "Détails Découverts PRO Agence" et je souhaite changer le filtre "Portefeuille". Lorsque je modifie un TCD les autres ne se modifient pas. Je ne parviens pas à trouver où se trouve l'erreur.
 

chris

XLDnaute Barbatruc
Re : [VBA] TCD et automatisation de filtres

Bonjour

As-tu bien stocké le code dans le module Workbook ?

Le Codename est le nom Excel de la feuille (Feuil1 à Feuil2... que l'on voit dans les objets VBA) pas celui que tu donnes à l'onglet : ceci peut expliquer que le code s'arrête avant de faire quoi que ce soit

Utilise le mode debug en mettant un point d'arrêt : cela te permet de voir par quelles instructions le code passe....
 

FlorianQ

XLDnaute Nouveau
Re : [VBA] TCD et automatisation de filtres

Re,

alors effectivement je m'étais trompé et j'utilisais le nom de la feuille, et pas de l'objet, malheureusement cela n'a pas réglé mon problème.

Pour ce qui est du point d'arrêt, en le mettant sur n'importe quelle ligne, lorsque je modifie un TCD je ne suis pas redirigé vers mon code et je ne comprends pas pourquoi...
 

chris

XLDnaute Barbatruc
Re : [VBA] TCD et automatisation de filtres

Re

Le point d'arrêt doit être sur la 1ère ligne après les dim

Vérifie que, suite à des essais, le gestion d'événements ne soit pas restée à false.

Crée une procédure avec juste dedans une ligne
Code:
Application.EnableEvents = True
et lance-là avant de retester tes TCD.
 

FlorianQ

XLDnaute Nouveau
Re : [VBA] TCD et automatisation de filtres

Re,
Après lancement de la procédure et test du point d'arrêt, toujours rien...

En fait ce classeur est vide de base, les TCD sont importés après. C'est ensuite que je pensais qu'avec le code inséré dans le classeur ça me modifierait mes TCD. Je ne sais pas si le problème peut venir du fait que ces tableaux soient importés.

EDIT : Si on ajoute la nom du client dans un des tableaux que j'ai envoyé en exemple, en changeant le code cela ne fonctionne pas non plus
 
Dernière modification par un modérateur:

chris

XLDnaute Barbatruc
Re : [VBA] TCD et automatisation de filtres

Re

Aucun rapport avec la source des TCD (sauf sources différentes d'un TCD à l'autre où un plantage serait possible)

Je réitère donc ma question : le code est-il bien dans le module Workbook du classeur et non dans un module VBA classique ou un module feuille ?
 

chris

XLDnaute Barbatruc
Re : [VBA] TCD et automatisation de filtres

RE

Sur le classeur exemple posté au #4 cela fonctionne et fonctionnait chez toi.

Si celui-ci ne fonctionne plus c'est sans doute que la gestion d'évènement est désactivée d'où le code que je t'ai dit de créer et de lancer au #10.

Je ne peux rien de plus...
 

FlorianQ

XLDnaute Nouveau
Re : [VBA] TCD et automatisation de filtres

Re,

Lorsque je parlais du classeur factice, je me mettais dans le cas où on rajoutait un filtre sur un TCD par exemple.
En adaptant le code de la même manière qu'au #7, sur le fichier exemple, ça ne fonctionne malheureusement pas
Voir ci-joint
 

Pièces jointes

  • SynchroTCDV2.xlsm
    48.2 KB · Affichages: 99

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…