Macro pour filtrer TCD sur une chaîne de caractère

Bonjour,

Je cherche à filtrer un TCD par rapport à une chaine de caractère.

Jusque là évident, vous allez me dire Problème, la base de donnée évolue et je dois donc faire une ségrégation dynamique.

Les données étant confidentielles, j'essai de modéliser:

1 onglet base de donnée avec

  • 1 champ ID contenant soit "ChaineCaractère1", soit "ChaineCaractère2",... soit autre chose.
  • d'autres champs dont un champs Type

(exemple d'entrée: ChaineCaractère1-Toto, Type1 ; ChaineCaractère1-Tata, Type2 ; ChaineCaractère1-Titi, Type1 ; ChaineCaractère2-Tutu, Type2)

Afin d'avoir des graphes séparés, je crée autant de tableau croisé que de "ChaineCaractère" différentes + 1 (Autre)

En mettant la chaine de caractère concernée dans une cellule "Cell1" située devant chaque tableau croisé dynamique, je cherche à ce qu'il soit capable de filtrer les données sur les champs ID contenant cette ChaineCaractère ... et que le dernier tableau croisé dynamique doit être capable de filtrer sur le reste (les non pris).

Avez-vous des pistes s'il vous plait ?

D'avance merci.

N'hésitez pas à me poser des questions si ce n'est pas clair.

Cordialement.

52modele.xlsm (29.96 Ko)

Bonjour,

Tu crées un fichier exemple avec des données significatives, en expliquant précisément ce que tu souhaites faire et les résultats attendus.

Ceci pour que nous puissions t'apporter une aide.

A te lire

Cdlt

J'ai mis à jour avec un exemple rapide

Boinsoir,

Une proposition avec tableau de données dynamiques et mise à jour TCDs par Ctrl+a.

J'attends vos commentaires.

Cdlt.

Procédure de mise à jour des TCDs et GCD :

Option Explicit
Public Sub MAJtcd()
Dim pt As PivotTable
Dim ws As Worksheet
    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables
            pt.RefreshTable
        Next pt
    Next ws

End Sub
51modele-v1.xlsm (35.19 Ko)

Merci pour ton aide.

En revanche, j'aimerai garder "libre" la ChaineCaractèreA, ChaineCaractèreB dans une cellule pour la modifier à volonté.

De plus, si j'ajoute des entrées dans la base de données (ex. TOTO, X), je ne vois pas le graphe et le TCD se mettre à jour...

C'est normal ?

Re,

Pour la 2ème question CTRL+a pour lancer la procédure.

Pour la 1ère, je ne comprends pas la question.

Cdlt.

Si tu reprends mon fichier initial, il y a trois cellules situées à côté de chacun des TCD.

J'ai besoin de les garder comme étant des cellules afin que les utilisateurs finaux puissent remplir ce qu'ils veulent et ainsi avoir les filtres souhaités sur les graphes (pour l'idée, il peut y avoir dans cette base de données 2 valeurs principales qui seront reprises dans les 2 cellules (autre traitement antérieur)

De plus, je ne peux pas modifier la Base de donnée en ajoutant une colonne manuellement par un tableau Excel comme tu l'as fait.

Sa structure est figée. (importé d'autres fichiers, contenant 1000 entrées sur 25 colonnes)

Comprends-tu mieux mon besoin ?

Bonsoir,

En lisant ce fil, tu peux peut être essayer avec le fichier joint.

Ajoute ou modifie les données en colonne et ou B, puis clique sur ton bouton

Si ok, convertit en XLSM car je n'ai pas 2010 sur cet ordi.

A te relire

56modele.zip (20.40 Ko)

Hello Dan,

Je sais que je suis nouveau mais je ne suis pas noob de la programmation quand même

Je sais faire un ThisWorkbook.RefreshAll.

Je réitère mon besoin en expliquant avec un contre-exemple à cette solution.

A partir du fichier actuel, je veux pouvoir:

ajouter la ligne Toto, V et Tutu, T

changer la valeur de D1 (choix du end user) avec "Toto" (remplaçant alors chaineA)

Cliquer sur update et que les graphes / TCD soient toujours bons (en fonction de la chaine de caractère rentrée à côté)

TCD1 ... le nb d'ID contenant Toto classé par type.

(n.b: a priori en réalité (le besoin), le cardinal de la BD doit être égal à la somme des 3 nb : ici ce n'est pas le cas car ChaineB-Toto doit faire parti de TCD1 et TCD2)

Ici, je me heurte aux filtres déjà créés sur la version en cours... d'où normalement besoin de créer clear all pivot table et de recommencer à zéro les filtres sur pivottable ID.

C'est cela que j'ai du mal à faire.

Est-ce que je suis plus clair?

Re,

Si j'ai bien compris ce que tu expliques, chaineB pourrait aussi être entré en D1 et ChaineA en G1. Cela fait plein de possibiltés à évaluer. Là tu parles de chaineA et de toto mais on pourrait imaginer plein de solutions en fonction des données de la colonne A.

Cela veut dire aller chercher des données dans le filtre du TCD et les comparer avec D1 et G1. En gros deux critères ID en D1 et G1 et le reste des ID en J1.

si oui, il faudra de toute façon réatculaiser complètement le TCD à chaque changement de la base de données. Donc ce que j'ai proposé doit être fait avant ce que tu veux faire.

A te relire

PS : quelle est la version d'excel qui est utilisée ?

Re Dan,

En effet, tu as bien compris mon besoin.

Je suis d'accord pour le refreshall en premier.

Ce qu'il me faut ensuite c'est une formule de boucle qui soit capable de faire

TCD1:

pour tout pivottable ID,

si on trouve la chaineCaractère situé en D1 dans l'ID

pivotTable.visible = true

... idem TCD2 avec G1 (autre boucle)

... TCD3 : si on ne trouve si D1, ni G1 (autre boucle)

A te lire également.

Merci d'avance pour ton aide.

Re,

Petite question sup. Comment complètes-tu ta base de données ?

Est-ce que tu supprimes toutes tes données depuis la ligne 2 pour en remettre des nouvelles ou complètes tu en ajoutant les nouvelles données en dessous de celles existantes

A te relire

Bonjour,

Si cela peut vous donner des soluces au problème posé.

Cdlt

https://forum.excel-pratique.com/excel/macro-sur-un-tableau-croise-dynamique-t34474.html

En réalité, le fichier (les deux colonnes) est tous les mois alimenté par un copier/coller par valeur (source externe)

Certain mois, il y aura 25 entrées, certains 250, certains 2000...

Cela clarifie?

@Jean-Eric: j'ai été voir le lien... je pense que la problématique est similaire mais au début je comprends le code... après je suis complètement perdu

@ vous lire, j'espère que vous pourrez m'aider / m'expliquer comment faire.

Re,

Il me semble avoir répondu sur le même genre de demande sur ce forum. Je donc rechercher ce lien

L'application doit bien être uniquement exécutée sur excel 2010 (comme marqué dans ton profil) ??

A te relire

Oui Dan.

Encore merci pour ton aide.

Re,

j'ai presque terminé ton code

Seule petite précision, lorsque tu mets "Autres" en J1, on peut avoir plusieurs solutions :

Soit le "autre" veut dire "tout" ce qui différent de D1 et G1

Soit le "autre" veut dire que tu fais un choix différent de D1 et G1

C'est si ce qui est différent de D1 et G1, cela veut dire que tu ne mets jamais rien en J1

On pourrait avoir les deux solutions bien entendu. Mais si tu mets un mot qui n'est pas connu dans la liste du champ, cela ne devrait rien te donner ou tout te donner

Merci de ta précision car pour le reste j'ai terminé

A te relire

Merci Dan.

Réponse 1 : le "autre" veut dire "tout" ce qui différent de D1 et G1 (si Trouve OU(D1;G1) --> PivotTable visible = false)

Cela dit en passant, je pourrai copier/coller ton code pour créer x autres TCD avec x conditions, dans ce cas, le autre sera si trouve OU(D1;G1;...;CondTCDx) --> PivotTable visible = false)

Merci beaucoup pour ton aide.

@ te lire.

Re,

Ton fichier en retour avec le code lié à ton bouton

Pour ton info :

  • Les TCD sont adaptés en fonction des nouvelles données en colonnes A et B
  • une fois la base de données mise à jour par tes soins, clique sur le bouton UPDATE
  • le code lié au bouton est appelé MAJ

Le module 1 dans l'éditeur avec le code que tu avais fait peut être supprimé

Si ok, clique sur le V vert à coté du bouton EDITER lors de ta réponse afin de cloturer le fil. (Si tu veux le réouvrir, il te suffit de cliquer sur le V devenu Rouge par la cloture du fil

Amicalement

53cool91-2.xlsm (40.19 Ko)

ça marche !

MERCI DAN !!!

Rechercher des sujets similaires à "macro filtrer tcd chaine caractere"