XL 2010 Reset des valeurs du filtre de rapport sur un TCD

luigiF

XLDnaute Junior
Salut à vous,

mon problème est le suivant : lorsque l'on crée un TCD incluant un filtre (page), il est possible de renommer les valeurs possibles du filtre (cf. capture ci-dessous) :
upload_2019-2-21_21-46-40.png


Dès lors, les valeurs possibles du filtre pour la colonne "Cat" seront "Z", "D" et "S" au lieu de "A", "D" et "S"
et lorsque l'on sélectionnera "Z", le TCD sera en fait filtré sur "A". Si l'on est un peu vicieux, on peut même renommer "A" en "D" et "D" en "A" et le comportement du TCD devient très "amusant" (cf. Pièce jointe).

Il m'a été assez compliqué de comprendre ce processus à partir d'un fichier transmis par un utilisateur qui se plaignait que "le TCD ne fonctionnait pas" ...

Ma question : comment réinitialiser automatiquement les valeurs du filtres afin qu'elles correspondent à nouveau aux valeurs de la base de données ? Pour l'instant, le seul moyen que j'ai trouvé consiste à "vider" la base (ou à changer sa source) et à rafraichir le tableau avant de rétablir la base et de rafraichir à nouveau. Les traditionnelles méthodes pour nettoyer les filtres des données supprimées de la base ne fonctionnent pas.

Merci pour votre aide.

Cordialement,

Luigi.
 

Pièces jointes

  • Classeur1.xlsx
    12.5 KB · Affichages: 9
Dernière édition:

luigiF

XLDnaute Junior
Salut Amilo et merci pour ta suggestion, mais je recherche une solution pour automatiser le process car mes fichiers comportent plusieurs TCD et je ne connais pas à l'avance les filtres qui ont été renommés.

je pense en fait avoir trouvé via une petite macro que je viens d'écrire :

Code:
Sub ResetPivotItems()
For Each SH In ThisWorkbook.Sheets
    For Each TCD In SH.PivotTables
        For Each PF In TCD.PivotFields
            For Each IT In PF.PivotItems
                IT.Caption = IT.SourceName
            Next IT
        Next PF
    Next TCD
Next SH
End Sub

Ceci dit, si quelqu'un connait une solution n'utilisant pas VBA, je suis preneur.

Cordialement,

Luigi
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

Sans VBA, pas sûr que ça existe. Une autre idée : plutôt que de chercher à reconstruire, les empêcher de détruire avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$F$1" Then [E1].Select
End Sub
Ils ne peuvent plus sélectionner F1 mais la liste reste accessible.
eric

Edit : d'une façon plus générale dans ThisWorkbook :
VB:
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
    Dim pt As PivotTable, pl As Range
    For Each sh In ThisWorkbook.Sheets
        For Each pt In sh.PivotTables
            Application.EnableEvents = False
            If Not Intersect(Target, pt.PageRangeCells) Is Nothing Then pt.PageRangeCells(1).Select
            Application.EnableEvents = True
        Next pt
    Next sh
End Sub
Toute modif des feuilles ou ajout de TCD seront pris en compte sans à avoir à modifier les cellules concernées dans le code.
eric
 
Dernière édition:

luigiF

XLDnaute Junior
Bonjour Eriiiic et merci pour ta contribution.

Je souhaitais trouver un moyen de réparer des fichiers endommagés mais effectivement, d'une manière générale, l'approche "préventive" est préférable car la "reconstruction" est très longue dès lors que l'on a plusieurs TCD et pas mal de données, même en optimisant le code.

Pour ma part j'ai utilisé une approche préventive différente de celle que tu proposes car le renommage des valeurs de filtrage, dans mes fichiers, est déclenché par des macros, mais la logique est la même.

Cordialement,

Luigi.
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16