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
 

JCGL

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

Bonjour à tous,

Peux-tu essayer en adaptant au vu de l'absence de fichier ?
A placer dans le module de la feuille concernée :

Option Explicit

Private Sub Worksheet_Activate()
On Error GoTo Sortie
ActiveSheet.PivotTables("TCD1").PivotFields("Date").CurrentPage = Range("D1").Value
ActiveWorkbook.RefreshAll
'Columns("A:G").AutoFit
Sortie:
End Sub

A+ à tous
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Filtrer tableau croisé dynamique sur la date la plus récente (change chaque jour

Bonjour Tweedi,

un exemple vite fait en pièce jointe

à+
Philippe

Edit: Salut Jean-Claude
 

Pièces jointes

  • 111.xlsm
    23.6 KB · Affichages: 124
  • 111.xlsm
    23.6 KB · Affichages: 120
  • 111.xlsm
    23.6 KB · Affichages: 139

chris

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

Bonjour
Coucou JCGL :), Philippe :)

Cela est faisable aussi sans macro en ajoutant une colonne dans la source (que l'on peut placer à gauche et masquer).

Exemple ci-joint sur la base des données fournies par Philippe.

Le Filtre sera toujours à jour lors de l'actualisation.
 

Pièces jointes

  • FiltreTCD.xlsx
    16.2 KB · Affichages: 213

tweedi

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

Bonjour à tous,

Merci pour vos réponses et vos solutions, ca fonctionne bien. Pensez-vous qu'il soit possible de faire le calcul en "virtuel" sans avoir à créer une colonne supplémentaire ?

En fouillant j'ai trouvé ce morceau de code qui semble utiliser la fonction evaluate, malheureusement je ne comprends pas encore tout ce qui est fait dans ce code car il comprend beaucoup de nouvelles fonctions pour moi.

Code:
Sub MaxDatePivot()

    Dim pfiPivFldItem As PivotItem
    Dim dtmDate As Date
    With Worksheets("Sheet1").PivotTables(1)
        .PivotCache.Refresh
        .ClearAllFilters
        With .RowRange
            dtmDate = Evaluate("MAX(IF(ISNUMBER(" & .Address(0, 0) & ")," & .Address(0, 0) & ",))")
        End With
        For Each pfiPivFldItem In .PivotFields("End Date").PivotItems
            If pfiPivFldItem.Value = "(blank)" Then
                pfiPivFldItem.Visible = False
            Else
                pfiPivFldItem.Visible = (CDate(pfiPivFldItem.Value) = CLng(dtmDate))
            End If
        Next pfiPivFldItem
    End With
   
End Sub

Je continue de chercher, si vous avez une idée, n'hésitez pas à la proposer s'il vous plaît.

Cdlt,

Tweedi
 

tweedi

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

Bon, je suis content, ca fonctionne ( voir fichier joint):D :D

Par contre pour être honnête je ne suis pas très rassuré, car je ne comprends pas le code et si j'ai une erreur un jour ou l'autre ce sera difficile pour moi de résoudre le problème.

Je ne comprends pas la ligne

Code:
with.rowrange

qu'est-ce que rowrange ? une ligne du TCD ? oui d'accord mais si il y a plusieurs rows dans le TCD ? .rowrange n'est référencé nul part dans le code.

Code:
Dat = Evaluate("MAX(IF(ISNUMBER(" & .Address(0, 0) & ")," & .Address(0, 0) & ",))")

Je crois comprendre que cette ligne va définir chaque cellule présente dans le champ "date closed" comme un array, et que la valeur maximale présente dans cet array sera retourné (est-ce que cela est juste ?). En revanche, je ne comprends pas la syntaxe avec les " & .Address(0,0) " & ")

Merci pour votre aide !

Tweedi
 

Pièces jointes

  • Book1.xlsm
    18.9 KB · Affichages: 70
  • Book1.xlsm
    18.9 KB · Affichages: 83
  • Book1.xlsm
    18.9 KB · Affichages: 77

JCGL

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

Bonjour à tous,

.RowRange est à associer à Sheet1.PivotTables(1)
Ce qui donne Sheet1.PivotTables(1).RowRange qui est le "nombre" de lignes du TCD

Dat = Evaluate("MAX(IF(ISNUMBER(" & .Address(0, 0) & ")," & .Address(0, 0) & ",))") pourrait se simplifier en
Dat = Evaluate("MAX(" & .Address(0, 0) & ")"). Ce qui donne en formule =MAX(B3:B22)

Lance le fichier joint...

A+ à tous
 

Pièces jointes

  • JC TCD Aide.xlsm
    26.9 KB · Affichages: 67

tweedi

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

Merci pour les explications JCGL ! Cependant j'ai essaye au travail et ca ne fonctionne pas. J'ai essaye d'autres codes (ci après) sans success :(

Sub Button1_Click()

Dim mytable As PivotTable
Set mytable = ActiveSheet.PivotTables("PivotTable9")

Dim FldItem As PivotItem
Dim newDate As Date

mytable.PivotCache.MissingItemsLimit = xlMissingItemsNone
mytable.PivotFields("date closed").Orientation = xlRowField
mytable.PivotCache.Refresh
mytable.ClearAllFilters
mytable.ManualUpdate = False

With mytable
With .RowRange
newDate = Evaluate("MAX(IF(ISNUMBER(" & .Address(0, 0) & ")," & .Address(0, 0) & ",))")
End With

MsgBox newDate

For Each FldItem In mytable.PivotFields("date closed").PivotItems
'If FldItem.Value <> newDate Then 'ERREUR 13 TYPE MISMATCH ICI
'FldItem.Visible = False
If FldItem.Value <> newDate Then
FldItem.Visible = False '(CDate(pfiPivFldItem.Value) = CLng(dtmDate))
End If
Next FldItem

End With

End Sub

ou encore avec la method:

mytable.PivotFields("date closed").PivotFilters.Add Type:=xlAllDatesInPeriodSeptember

En essayant plusieurs filtres differents, ca ne fonctionne jamais. Erreur 1004 Application-defined or object-defined error (pourtant en passant mon curseur sur xlalldatesinperiodseptember il me rend bien la valeur 65).

Bref j'ai reussi a trouver la valeur max grave a evaluate (verifie grace a msgbox), maintenant je n'arrive pas a faire le filter.

Merci pour votre aide

Tweedi
 
Dernière édition:

tweedi

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

Idem pour ce code qui fonctionnait pourtant chez moi, il ne passe pas sur le fichier au travail. Erreur 1004 Application defined or object defined error

Sub filter()

Dim pvt As PivotTable

Set pvt = ActiveSheet.PivotTables("PivotTable9")

Dim datestring As String
datestring = Format(Date - 7, "dd/mm/yyyy")



With pvt.PivotFields("date closed")
.ClearAllFilters
.PivotFilters.Add Type:=xlAfter, Value1:=datestring
End With


End Sub

Pourtant le format semble bon, date, dd/mm/yyyy (confirme avec le msgbox), j'ai essayer different format en changeant directement le format dans le ruban, rien a faire :(

EDIT: je suis rentré chez moi et si je continue à faire des essais. De retour sur mes fichiers à la maison, j'ai remarqué que si je fais une pivot table avec des dates et qu'au milieu des dates je met du texte dans une cellule, j'aurais l'erreur 13 type mismatch. Je commence à me dire qu'au travail mes dates, mêmes si elles apparaissent bien dans la cellule et dans la msgbox ne sont peut être pas du bon format. Des avis ?

EDIT2: Maintenant que j'y pense. Je me souviens que je n'avais déjà pas réussi à faire une mise en forme conditionnel sur les dates (vérification que la END DATE soit bien postérieure à la START DATE avec un =if(B2<A2) alors mettre en rouge). Le résultat donnait n'importe quoi. Je vais fouiller de ce côté là. Les données sont par un logiciel qui sort le fichier en .XLS (xl 2003) aussi. Si par hasard vous avez une idée, une suggestion, n'hésitez pas.

Tweedi
 
Dernière édition:

tweedi

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

Bonsoir à tous. Voici donc le fichier qui déconne, j'ai enlevé les données confidentielles.

Bref, voyez par vous meme le code qui plante, j'ai réussi à attendre le résultat voulu par une méthode bien bizarre et peu satisfaisante pour le moment.

Merci de votre aide.

Cdlt,

Tweedi
 

Pièces jointes

  • DIEuuljl4pA_fichier_test2.xlsm
    290.6 KB · Affichages: 51
Dernière édition:

tweedi

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

Bonsoir,

Veuillez trouver ci-joint deux fichiers, mêmes données, même pivot table, même code.

Sur deux fichiers différents, l'un fonctionne, l'autre non.

J'espère que quelqu'un pourra m'aider, je continue de chercher !

Cdlt,

Tweedi
 

Pièces jointes

  • does work.xlsm
    19.5 KB · Affichages: 65
  • doesnt work.xlsm
    20.9 KB · Affichages: 38

tweedi

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

Bonsoir,

j'ai un peu progressé, en revenant sur mon fichier de départ, j'ai fait les modifications suivantes:

mytable.ManualUpdate = True

Dim pf As PivotField
Set pf = ActiveSheet.PivotTables(1).PivotFields("date closed")

pf.AutoSort xlManual, pf.SourceName

désormais il arrive bel est bien à effectuer le PivotItem.Visible = false sur les "(blank)".

En revanche quand il s'agit de comparer le PivotItem suivant il me ressort un message d'erreur.

Merci pour votre aide, je n'abandonnerai pas (enfin, je ne pense pas).

Tweedi

EDIT: j'ai remarqué que les dates ne sont peut etre pas lues dans le meme format (dd/mm/yyyy vs mm/dd/yyyy) voir capture d'écran
 

Pièces jointes

  • debloquage sur autosort.xlsm
    98.6 KB · Affichages: 54
  • inverse jour et mois.jpg
    inverse jour et mois.jpg
    65.7 KB · Affichages: 84
Dernière édition:

MJ13

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

Bonjour à tous

Voici un exemple pour filtrer sur une date ou une zone de date.
 

Pièces jointes

  • debloquage sur autosort N2.xlsm
    109.7 KB · Affichages: 70

tweedi

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

Bonjour MJ13 et merci pour ton aide mais chez moi les codes ne fonctionnent pas.

Quand je clique sur le bouton Filtre A1:

Run Time error 1004 Unable to set the Visible property of the PivotItem class. Erreur sur cette ligne:

.PivotItems(CDate(Cells(1, 1))).Visible = True

Quand je clique sur le bouton filter zone:

Run Time error 1004 Unable to set the Visible property of the PivotItem class. Erreur sur cette ligne:

.PivotItems(CDate(Cell)).Visible = True

Je suis sur excel 2010 et 2007. Il semblerait qu'il s'agisse d'une histoire de bug au niveau des dates qui seraient lues de manieres differentes, voir mon printscreen au dessus. Le bug a ete resolu sur XL2013 et tu es sur XL2013.

Quelqu'un aurait une idee de ce que je dois faire pour stopper cette erreur ?

Merci,

Tweedi
 

MJ13

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

Re

J'ai testé sur XL2013.

Mais suivant les versions, c'est souvent très différents. C'est la compatibilité incompatible :(.

Je te conseille de copier ton TCD en valeur et format puis de filtrer en extraction avancée. Ce sera plus facile et cela fonctionnera quelque sot la version.
 

Discussions similaires

Statistiques des forums

Discussions
312 243
Messages
2 086 544
Membres
103 244
dernier inscrit
lavitzdecreu