VBA - Filtre Tableau croisé dynamique

Maxim_

XLDnaute Nouveau
Bonjour à tous,


Je souhaiterais faire une macro qui vienne filtrer une étiquette de ligne d'un tcd selon la valeur d'une cellule se trouvant sur la même feuille. J'ai essayé l'enregistreur de macro en tapant une valeur (la valeur 1 dans l'exemple):


Sans titre.jpg


Puis j'ai remplacé la valeur 1 par ' Range("D12").Value
La macro ne fonctionne pas : Erreur d'exécution '1004'

Sans titre2.jpg

Pourriez-vous m'aider svp. Je ne trouve pas d'autres alternatives après mes diverses recherches sur internet.
Vous trouverez le fichier joint.

Merci beaucoup pour votre aide.

Cordialement,
Maxim
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    23.7 KB · Affichages: 325
  • Sans titre.jpg
    Sans titre.jpg
    23.7 KB · Affichages: 323
  • Sans titre2.jpg
    Sans titre2.jpg
    13.9 KB · Affichages: 280
  • Sans titre2.jpg
    Sans titre2.jpg
    13.9 KB · Affichages: 256
  • Filtre Tcd VBA.xlsm
    28 KB · Affichages: 204
  • Filtre Tcd VBA.xlsm
    28 KB · Affichages: 166
  • Filtre Tcd VBA.xlsm
    28 KB · Affichages: 140

Maxim_

XLDnaute Nouveau
Re : VBA - Filtre Tableau croisé dynamique

Bonjour

Un minimum d'attention t'éviterait les faute de frappe sur le nom du champ.

Sur 2010 on dispose des segments pour faire la même : cela évite le VBA (inutile ?).

Bonjour Chris,

Effectivement, je n'avais pas vu l'erreur de frappe dans la macro. Je l'ai corrigé, mais nouvelle erreur: Erreur d'exécution '5'
Sans titre3.jpg

Tu as raison pour les segments, et je souhaite les utiliser pour ce fichier. Seulement j'aurai voulu également mettre à disposition des utilisateurs finaux un "filtre personnalisé", qui leur permettra d'affiner encore plus leur recherche. La raison étant une base de données..

Merci pour ton aide.

Cordialement,
Maxime
 

Pièces jointes

  • Sans titre3.jpg
    Sans titre3.jpg
    16.4 KB · Affichages: 177
  • Sans titre3.jpg
    Sans titre3.jpg
    16.4 KB · Affichages: 158

sousou

XLDnaute Barbatruc
Re : VBA - Filtre Tableau croisé dynamique

Bonjour Maxim et chris
Peu_être quelque chose comme ceci
Sur changement de la cellule d12 on visualise le filtre
Si j'ai tout compris?
 

Pièces jointes

  • Filtre Tcd VBA.xlsm
    29.8 KB · Affichages: 322
  • Filtre Tcd VBA.xlsm
    29.8 KB · Affichages: 284
  • Filtre Tcd VBA.xlsm
    29.8 KB · Affichages: 283

Maxim_

XLDnaute Nouveau
Re : VBA - Filtre Tableau croisé dynamique

Bonjour Maxim et chris
Peu_être quelque chose comme ceci
Sur changement de la cellule d12 on visualise le filtre
Si j'ai tout compris?

Bonjour Sousou,

Merci pour ton retour. C'est ce genre de macro qu'il me faudrait, mais sur le "PivotFields" Description, et avec un filtre contient.
J'ai essayé de modifier moi même le nom du champ "Description", mais j'ai un message d'erreur "Erreur d'exécution '1004': Impossible de définir la propiété Visible de la classe PivotItem."

Sans titre.jpg

En tout cas, merci à tous les deux pour votre aide.

Cordialement,
Maxim
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    36.6 KB · Affichages: 198
  • Sans titre.jpg
    Sans titre.jpg
    36.6 KB · Affichages: 192

sousou

XLDnaute Barbatruc
Re : VBA - Filtre Tableau croisé dynamique

re
Corrige le filtre ainsi, problème d'utilisation de l'index numérique
Sub filtre()
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("description")
MsgBox .PivotItems(CStr(.Parent.Parent.Range("d12").Value))
.PivotItems(CStr(.Parent.Parent.Range("d12").Value)).Visible = True
For Each p In .PivotItems()
If p <> CStr(.Parent.Parent.Range("d12").Value) Then
On Error Resume Next
p.Visible = False
On Error GoTo 0
End If
Next
End With
End Sub
 

Maxim_

XLDnaute Nouveau
Re : VBA - Filtre Tableau croisé dynamique

re
Corrige le filtre ainsi, problème d'utilisation de l'index numérique
Sub filtre()
Application.ScreenUpdating = False
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("description")
MsgBox .PivotItems(CStr(.Parent.Parent.Range("d12").Value))
.PivotItems(CStr(.Parent.Parent.Range("d12").Value)).Visible = True
For Each p In .PivotItems()
If p <> CStr(.Parent.Parent.Range("d12").Value) Then
On Error Resume Next
p.Visible = False
On Error GoTo 0
End If
Next
End With
End Sub

Désolé Sousou de te solliciter encore une fois, mais je n'arrive pas à faire fonctionner ta macro.
J'ai bien collé la macro dans le module, mais j'ai toujours un message d'erreur (type 1004: Impossible de lire la propriété PivotItems de la classe PivotField).. As tu essayé la macro de ton côté?

Désolé encore, et merci pour ton aide.

Cordialement,
Maxim
 

Maxim_

XLDnaute Nouveau
Re : VBA - Filtre Tableau croisé dynamique

Sousou,

D'accord je viens de capter pourquoi ça ne fonctionnait pas chez moi. Je n'avais pas vu ta Msgbox..
C'est la macro qu'il me faut, par contre est-il possible d'effectuer ce filtre avec "contient" au lieu de "est égal à".
De telle sorte que lorsque l'on saisi 1 en D12 il me ressorte les valeurs 11, 21, 31, 41.. de la colonne descritption.
J'ai essayé de placer des étoiles aux extrémités de la valeur (ex:*1*), mais ça ne fonctionne pas.

Merci pour le temps que tu m'accordes, je n'aime pas être dans cette situation, mais ton aide m'est très utile!!

Cordialement,
Maxim
 

sousou

XLDnaute Barbatruc
Re : VBA - Filtre Tableau croisé dynamique

Ca change tout, car je ne crois pas que nous puissions faire contient dans un tcd
J'ai donc changé en ajoutant une fonction
à chaque item je regarde si il est contenu dans le mot si oui visible si non masqué
a suivre!
 

Pièces jointes

  • Filtre Tcd VBA.xlsm
    31 KB · Affichages: 131
  • Filtre Tcd VBA.xlsm
    31 KB · Affichages: 180
  • Filtre Tcd VBA.xlsm
    31 KB · Affichages: 210

chris

XLDnaute Barbatruc
Re : VBA - Filtre Tableau croisé dynamique

Bonjour

Contient peut s'appliquer en filtre d'étiquettes non numériques : pas sûr que l'exemple fourni soit représentatif...

Le problème de ce type de code est que si la cellule contient quelque chose qui n'existe pas, cela plante.
Pour éviter cela il faut vérifier que la valeur existe avant de filtrer...

D'où mon conseil de segment...
 

Maxim_

XLDnaute Nouveau
Re : VBA - Filtre Tableau croisé dynamique

Bonjour

Contient peut s'appliquer en filtre d'étiquettes non numériques : pas sûr que l'exemple fourni soit représentatif...

Le problème de ce type de code est que si la cellule contient quelque chose qui n'existe pas, cela plante.
Pour éviter cela il faut vérifier que la valeur existe avant de filtrer...

D'où mon conseil de segment...

Merci Sousou pour ta proposition.
Chris, les segments sont vraiment utiles pour ce genre de fichier. Je suis tout à fait d'accord avec toi. Le fichier que je souhaite faire est en quelque sorte un glossaire avec des données mutliples.
C'est pour cette raison que je souhaite avoir sur ce fichier à la fois des segments et une cellule de filtre contient..

Les segments sont utilisables qu'à travers un tcd ou autres bdd externes (access...), c'est bien ça? Alors que moi je souhaiterai avoir l'ensemble sur un seul fichier. S'il n'y a pas d'autre solution, alors j'utiliserai la macro de Sousou.

Merci à vous pour avoir échangé sur ce sujet.

Cordialement,
Maxim
 

mromain

XLDnaute Barbatruc
Re : VBA - Filtre Tableau croisé dynamique

Bonjour Maxim, Chris, Sousou

Une autre solution serait d’utiliser un tableau intermédiaire (sur une feuille cachée par exemple) comme source de tes TCD. Ce tableau contiendrait les données de ton tableau lib filtrées comme tu le souhaites en fonction de ta cellule contient.
Ainsi, tu peux te passer d’avoir à manipuler les TCD en VBA (juste les rafraichir après avoir mis à jour ton tableau intermédiaire).

A+
 

Maxim_

XLDnaute Nouveau
Re : VBA - Filtre Tableau croisé dynamique

Bonjour Romain et merci pour ton retour,

Je ne vois pas où tu veux en venir car si je filtre mon tableau de la feuille lib le tcd ne tient pas compte de ce filtre.
Tu parles d'un 3ième tableau? Tu peux gérer un filtre delon une velaur cellule sans passer par VBA?

Merci pour ton aide.

Maxim
 

mromain

XLDnaute Barbatruc
Re : VBA - Filtre Tableau croisé dynamique

Re-bonjour Maxim,

Je parle bien d’un troisième tableau contenant les données de lib filtrées. Ainsi, tu joues sur la source de tes TCD.
Cela évite de manipuler les TCD en VBA et de tomber dans des travers comme abordé par Chris.

Il est sûr que ça déplace le problème. Car il faut gérer ce tableau supplémentaire. La mise à jour de celui-ci peut se faire en VBA, ou à l’aide de MS-Query. Ce tutoriel présente cette fonctionnalité avec un exemple pour "filtrer selon la valeur d’une cellule".

Ce n’est qu’une autre piste ;)

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 490
Messages
2 088 875
Membres
103 980
dernier inscrit
grandmasterflash38