Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour)

tweedi

XLDnaute Nouveau
Bonsoir tout le monde !

Pouvez-vous m'aider à trouver le code VBA qui permet de filtrer la colonne du champ "date closed" sur la date la plus récente ? Bien sûr chaque jour il y aura de nouvelles données et donc les dates vont changer et il faut que seule la case de la date la plus récente soit cochée dans le filtre.

Merci beaucoup pour votre aide.

Cdlt

Tweedi
 

MJ13

XLDnaute Barbatruc
Re : Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour

Re

Regarde dans le fichier joint. C'est une extraction de la zone _BD sur le critère _CR (faire F5 pour voir les zones nommées).

Le code tiens sur une ligne :).
 

Pièces jointes

  • debloquage sur autosort N2 XL2003 OK SUr XL2013 Plus Extraction_BD.zip
    116.2 KB · Affichages: 56

MJ13

XLDnaute Barbatruc
Re : Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour

Re

Sinon sur Xl2010 tu peux tester ce code qui pourrait fonctionner sur XL 2007 :confused:, mais au préalabe, il faut mettre tes données sources date au format standard:

Code VBA:
Sub Filtre_TCD_Date_XL2010()
'Pour éviter le bug: Attention mettre les dates sources au format standard
Dim Filtre As String
'XL2010 ok
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date Closed") _
.ClearAllFilters


With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Date Closed")
.PivotItems("0").Visible = False
.PivotItems("1").Visible = False
.PivotItems("(blank)").Visible = False
End With
'Filtre = CDbl(CDate("10/12/2013"))
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Date Closed")
On Error Resume Next
For i = 1 To .PivotItems.Count
Filtre = CDbl(CDate(.PivotItems(i)))
.PivotItems(Filtre).Visible = False
Next
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"Date Closed")
On Error Resume Next
For i = 1 To .PivotItems.Count
Filtre = CDbl(CDate(Cells(1, 1)))
.PivotItems(Filtre).Visible = True
'attention si le dernier doit être pris en compte, le mettre à true; Faire un test
.PivotItems(.PivotItems.Count).Visible = False
Next
End With
End Sub
 

tweedi

XLDnaute Nouveau
Re : Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour

Hello MJ113 !

Merci pour ton aide, j'ai pas encore eu le temps de regarder pour l'extraction il va falloir que je fouille sur des tutos pour vois un peu ce que tu as fait. Pour le moment j'ia adopté la solution bancale, mais ca marche. C'est à dire que je tire mon range range pour les données sources de la pivot table jusqu'à la ligne 2000 et je rempli chaque cellule au format date ;)

Je vais tester ton deuxième code début de semaine prochaine car je n'aurais pas accès au fichier avant (et on m'a déjà lancé sur un autre projet d'envoi de mail automatique à plusieurs personne, un personne par pivotfield, mais c'est une autre histoire).

Peux tu m'expliquer ce qu'il se passe ici ?:

Code:
For i = 1 To .PivotItems.Count
Filtre = CDbl(CDate(.PivotItems(i)))
.PivotItems(Filtre).Visible = False
Next

J'ai du mal à comprendre ou la comparaison avec la plus haute date se fait dans ce code.

Merci !

Tweedi
 

MJ13

XLDnaute Barbatruc
Re : Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour

Bonjour à tous

Tweedi: En général, je pars du principe que cela doit fonctionner sur toutes les versions de 2007 à 2013 pour les TCDs.

Mais comme le filtre de date sur un TCD est très aléatoire, j'ai développé une nouvelle méthode qui devrait fonctionner quelque soit la version d'Excel.


Voir le fichier pour test :).
 

Pièces jointes

  • FIltre_TCD_Sur_Date_Nouveau_MJ.xlsm
    104 KB · Affichages: 90

tweedi

XLDnaute Nouveau
Re : Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour

Bonjour MJ13, merci beaucoup pour ce nouveau post et ces nouvelles méthodes. je vais marquer ici ce que j'ai compris de ton code, peux tu simplement confirmer que j'ai bien compris ce que ton code fait ? Merci !!

Code:
Cells.EntireRow.AutoFit

Cela revient à faire un ClearAllFilters sur toute la page simplement en remettant les RowHeight en valeur positif grace à l'autofit ?

Code:
For Each cell In Selection
        If cell = "(vide)" Or cell = 0 Or cell = 1 Then Rows(cell.Row).RowHeight = 0: GoTo suite
        If cell <> Cells(1, 1) Then Rows(cell.Row).RowHeight = 0
suite:
    Next

Cela "cache" les lignes mais les lignes sont toujours présentes, donc si je copie le range pour le mettre dans le corps d'un e-mail, les lignes vont réapparaître ? Dans ce cas cette méthode ne vas pas réellement m'aider, à moins que j'essaie de copier le TCD en tant qu'image et que celle le range "visible" ne soit pris dans l'image.

Enfin, comment fais tu pour définir les "Zones" je trouve ca très intéressant.

Merci encore MJ13 j'ai appris des choses sur ce coup là.

Tweedi
 

MJ13

XLDnaute Barbatruc
Re : Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour

Bonjour Tweedi

Je pense que tu as bien compris :).

Pour la défintion des noms, on peut faire Ctrl+F3 ou taper dans la fenêtre en haut à gauche d'Excel.

Pour la copie au mail, on peut réutiliser la zone copiée lors de la création de la feuille avec les données filtrées copiées en valeur et format.
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 253
Membres
103 498
dernier inscrit
FAHDE