XL 2019 TCD avec filtre entre deux dates - Macro

Jackdu95

XLDnaute Nouveau
Bonjour,

Je suis nouveau ici et aussi en VBA.

En feuille "Feuil1" j'ai le tableau avec les données (la base).
En feuille "tcd" j'ai le tableau croisé dynamique lié au tableau de la Feuil1. Dans cette feuille en colonne T et U j'ai des dates.

-Je voudrais avec un macro pouvoir cocher au TCD dans le filtre Date par exemple que les dates comprises entre 20/10/2021 (cellule T1) et le 26/10/2021 (cellule U1) et décocher toutes les autres dates.
-Je voudrais avec un macro pouvoir cocher au TCD dans le filtre Date par exemple que les dates comprises entre 26/09/2021 (cellule T2) et le 26/10/2021 (cellule U2) et décocher toutes les autres dates.
-idem entre la date T3 et U3
-idem entre la date T4 et U4
-idem entre la date T5 et U5

Si vous pouvez m'aider s'il vous plait.

Merci

Jack
 

Pièces jointes

  • exemple.xlsm
    280.7 KB · Affichages: 13
Solution
Car je voudrais que les np soit à la suite de haut en bas sans avoir de Date entre chaque np.
euh...et bien c'est le cas... les np sont bien à la suite et il n'y a pas de date entre eux... (ici filtre 180 jours)
je vais passer la main si cela ne te va pas, j'arrive à ma limite de connaissances/compétences sur VBA 🙄
1635414549896.png

chris

XLDnaute Barbatruc
Bonjour

La source d'un TCD doit être un tableau structuré.

Tu peux utiliser
  • soit un segment basé sur la date
  • soit une chronologie basée sur la date
  • soit une requête PowerQuery, intégré à Excel, qui en plus de normaliser la source pour une utilisation plus normale en TCD, filtrera les dates indiquées dans le tableau en T:U.
    Ce qui n'est pas claire c'est si ce sont toujours les mêmes dates et il faut choisir parmi elles ou bien si tu indique une seule plage que tu saisis
 

Jackdu95

XLDnaute Nouveau
Bonjour,

Peux tu me faire un exemple de macro avec le fichier que j'ai joint et le reposter ici?

Ca sera toujours les même rapports de dates en U : =AUJOURDHUI()-1 et en T :
=J-6 (période de 7 jours)
=J-30 (période de 30 jours)
=J-60 (période de 60 jours)
=J-90 (période de 90 jours)
=J-180 (période de 180 jours)
Il y a des formule entre T1 et U5.
je voudrais que la macro sélectionne la cellule pour définir la date de début et la date de fin.

J'ai essayé ceci mais j'ai un problème car ce macro ne selectionne pas toutes les dates entre T5 et U5 dans le filtre. je ne sais pas pourquoi.

VB:
Sub feuille1()
Dim pvtF As PivotField
Dim pvtI As PivotItem
On Error Resume Next
Set pvtF = Worksheets("tcd").PivotTables("Tableau croisé dynamique1").PivotFields("Date")
For Each pvtI In pvtF.PivotItems
    If DateValue(pvtI.Name) >= Range("T5").Value And DateValue(pvtI.Name) <= Range("U5").Value Then
        pvtI.Visible = True
    Else
        pvtI.Visible = False
    End If
Next pvtI

End Sub

Merci par avance.

Jack
 
Dernière édition:

chris

XLDnaute Barbatruc
RE

Filtrer par boucle est très long

Je te propose une solution PowerQuery qui d'une part normalise la base, ce qui allège le cache du TCD, simplifie et optimise la structure, d'autre part filtre de façon plus directe.

VBA ne fait que
  • récupérer le choix via un mini TCD secondaire,
  • vérifier qu'il n'y a qu'un choix ou aucun et afficher un message sio ce n'est pas le cas
  • actualiser les requêtes
 

Pièces jointes

  • FIltre_TCD_plages_Dates2.xlsm
    311 KB · Affichages: 11

Jackdu95

XLDnaute Nouveau
Merci pour l'aide.
Peux tu me dire comment je ferais pour faire ce que tu as fais dans le fichier avec PowerQuery.
Si je veux lancer un macro pour 7/30/60/90 et 180 jours je fais comment? Un par un. J'ai besoin de 5 macro différents stp
Peux tu me creer les macros stp et renvoyer le fichier?

Peux tu aussi me faire sans PowerQuery 5 macros qui traiteront les dates stp? Sur un autre fichier.
A vrai dire je n'y comprend rien à PowerQuery.

Merci encore.
 
Dernière édition:

chris

XLDnaute Barbatruc
RE

Le choix fait avec le segment lance ce qui est choisi, donc au choix 7, 30, etc ou tout.

Un clic sur le segment et le TCD affiche ce qui est demandé...

Donc quel intérêt de 5 macros, sauf si tu avais 5 TCD...

PowerQuery remplace de plus en plus VBA.

J'utilise au maximum les nouvelles technos qui améliorent le fonctionnement d'Excel

D'autres xldiens te ferons des boucles à l'ancienne, qui sur les TCD moulinent longuement...

A vrai dire je n'y comprend rien à PowerQuery
A priori tu n'es pas non plus très avancé en VBA et POwerQuery est moins compliqué que VBA à manier...
 

Jackdu95

XLDnaute Nouveau
Je ne veux pas cliquer sur les boutons je voudrais 5 macros s'il te plait lié aux 5 boutons est ce possible? Pour 5 TCD.

Comment arriver a ton resultat en powerquery? De mon fichier exemple a ton fichier traité. Peux tu me donner des etapes à suivre pour avoir la meme chose que toi.
-comment as tu fais pour avoir les segments avec les boutons 7/30/60... sur le petit tableau?
Etc...
 

LAPIN CRETIN

XLDnaute Nouveau
bonjour Jack

je ne sais pas si tu veux à tout pris utiliser une macro ?
sinon, les options du TCD, te permettent de faire ce que tu demandes (si j'ai bien compris ce que tu veux)

les segments trimestres et la chronologie peuvent t'y aider
1635357272535.png

Sinon, en mettant les dates dans les lignes du TDCD tu peux filtrer et choisir le bornage des dates :
1635357237087.png

1635357419545.png
 

Pièces jointes

  • exemple.xlsm
    291 KB · Affichages: 6

Jackdu95

XLDnaute Nouveau
J'aimerais utiliser des macros oui. Peux tu m'aider en prenant mon exemple de code vba mais ca ne marche pas pour 30/60/90 et 180 jours je ne sais pas pourquoi! Peux tu m'aider avec le macro que j'ai essayé de faire.
Ca doit etre obligatoirement 7/30/60/90 et 180 jours donc 5 macros differents.
Est ce que un segment peut avoir 4 boutons 7j / 30j / 60j / 90j et 180j? Par rapport a J-1.
 
Dernière édition:

chris

XLDnaute Barbatruc
RE

Tu n'as pas spécifié au début que tu voulais 5 TCD

Ce n'est plus la même demande...

Le segment c'est comme les boutons si c'est un même TCD... et ce qui est restitué est bien ce que tu as demandé mais de toute évidence tu ne regardes même pas le résultat...

On tourne en rond
 

chris

XLDnaute Barbatruc
Re
Vu qu'il y a 5 interval de date alors 1 tcd peut se changer 5 fois aussi. Ca me va aussi.
C'est bien ce que cela fait

Le mini TCD sert juste à récupérer le choix effectué parmi les 5 et le segment pour choisir y est y est lié.
La plage occupée par le TCD est dynamiquement claculée et nommée Choix

La source en Feuil1 est mise sous forme de tableau structuré nommé Data, basculé dans PowerQuery.
Le plage nommée Choix est aussi intégrée dans PowerQuery

2 requêtes exploitent Data :
  • Data_T en normalisant simplement l'ensemble du tableau source (les TCD n'aiment pas les sources de type tableaux à double entrée) sans filtrer de date
  • Data_F utilise fait de même mais Choix pour filtrer les dates selon le nombre de jours retenu
La requête Data, source du TCD, affiche soir un résultat filtré, soit les données de l'ensemble des dates selon qu'un choix ou aucun choix n'a été fait fait dans le segment.

Le code VBA vérifie qu'on ne sélectionne pas n périodes (c'est une seule ou tout) et actualise les requêtes et le TCD.

Toutes les étapes sont listées à droite quand on sélectionne une requête dans PowerQuery

Le B A BA de PowerQuery ici http://www.excel-formations.fr/Trucs_astuces/PQ00.php

Si une étape pose question, reposte
 

LAPIN CRETIN

XLDnaute Nouveau
J'aimerais utiliser des macros oui. Peux tu m'aider en prenant mon exemple de code vba mais ca ne marche pas pour 30/60/90 et 180 jours je ne sais pas pourquoi! Peux tu m'aider avec le macro que j'ai essayé de faire.
Ca doit etre obligatoirement 7/30/60/90 et 180 jours donc 5 macros differents.
Est ce que un segment peut avoir 4 boutons 7j / 30j / 60j / 90j et 180j? Par rapport a J-1.
salut.
je suis loin d'etre un expert en VBA, alors je te propose quelque chose mais je ne sais pas si c'est adapté
1635407851829.png

là c'est pour 30 jours. je te joins le fichier
EDIT : je viens de voir que c'est par rapport à J-1, donc il faudrait peur etre faire "start: = now()-31
 

Pièces jointes

  • exemple (1).xlsm
    285.3 KB · Affichages: 6

LAPIN CRETIN

XLDnaute Nouveau
Bonjour,

Merci pour le macro sauf que je voudrais que les dates soit dans le filtre du TCD et non pas dans les lignes.

Peux tu le refaire s'il te plait? car les macros ne marchent plus.

Jack
si les dates sont dans le filtre global du tcd ma proposition ne fonctionnera pas (telle quelle en tout cas et avec mes maigres connaissances de VBA)

Par contre, pourquoi cet affichage te pose-t-il problème ?
 

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh