Filtrer une colonne TCD "date" avant "aujourd'hui" en VBA

Bonjour,

Je me suis lancer dans un projet d'envergure dans mon travail pour automatiser les envoies de commande après avoir découvert le VBA.

Habituellement j'aime me faire souffrance et découvrir/chercher par moi même mais pour le coup je bute sur un sujet qui me bloque pas mal et qui pourtant me semble terriblement simple.

J'ai chercher partout sur le net mais rien ne correspond vraiment a mon besoin ou alors les macro ne fonctionne pas (je dit pas que je suis peut-etre pas une quiche :D), je m'exuse du coup d'avance si doublons.

Pour préciser mon Classeur contient une Page d'accueil ainsi que plusieurs feuille de TCD provenant de 2 fichier data excel externe stocker dans le même dossier que le classeur.

Mon problème :

Une de mes feuilles est un TCD qui récupère des Data d'un classeur externe écraser et remplacer toutes les 12h dans un dossier.

Ce TCD est actualiser par une macro et a une colonne "F" nommer "SSD" avec des dates de départ prévue.

J'aimerai faire en sorte que cette feuille n'affiche que les lignes avec une date "SSD" inférieur a la date du jours actuel qui du coup change tout les jours et n'est pas fixe.

J'ai actuellement cette ligne qui ce rapproche le plus de mon besoin mais qui me limite a une modification manuel journalière :

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"SSD").PivotFilters.Add2 Type:=xlBefore, Value1:="28/01/2025"

Mon soucis est que j'arrive a indiquer le Type:=xlBefore dans ma macro PivotFilters.Add2 mais le champ Value1:="xx/xx/xxxx" m'oblige a indiquer une date précise qui n'est pas dynamique, hors j'aurais souhaiter pouvoir faire une sorte que la date du jours ce change automatiquement du genre Value1:=xlDatetoday.

Malheureusement j'ai compris que le xlDatetoday est un type et non une valeur, j'ai du coup tenter avec un copier/coller d'une cellule sur la page qui contient une formule =AUJOURDHUI() mais le Paste ne s'effectue pas uniquement le Copy.

Si quelqu'un a une idée je suis preneur, voici le code a ce jours et désoler si c'est le boxon j'apprend encore le VBA et je n'ai pas fini de mettre en forme :(:

Sub Bouton_Refresh_new()

    Workbooks.Open Filename:= _
        "chemin d'accés d'un rapport externe de data avec des dates au mauvais format"

    Range("AH2:AH50000").Select
    Selection.NumberFormat = "[$-fr-FR]d-mmm-yy;@"

    Range("CZ2:CZ50000").Select
    Selection.NumberFormat = "[$-fr-FR]d-mmm-yy;@"

    With ActiveWorkbook
        .Save
        .Close
    End With
'
    Sheets("TCD-FICHE").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
    ActiveWorkbook.Save
'
    Sheets("TCD-CONTROL").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "SSD").ClearAllFilters
    ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "SSD").PivotFilters.Add2 Type:=xlBefore, Value1:="28/01/2025"
    ActiveWorkbook.Save
'
    Sheets("TCD-MOIS").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
    ActiveWorkbook.Save
'
    Sheets("QOH-DATA").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique1").RefreshTable
    ActiveWorkbook.Save
'
    Sheets("TDB-ACCUEIL").Select
'
    Dim ws As Worksheet
    Dim rngToTake1 As Range
    Dim rngToTake2 As Range
    Dim rngToTake3 As Range

    Set ws = ThisWorkbook.Sheets("FICHE-CALCULE")
    Set rngToTake1 = ws.Range("B4")
    Set rngToTake2 = ws.Range("B7")
    Set rngToTake3 = ws.Range("B8")

    MsgBox "L'actualisation du Soft a été correctement effectué." & Chr(10) & Chr(10) & "Il y a actuellement :" & Chr(10) & Chr(10) & rngToTake1.Value & " " & "Commande a préparer" & Chr(10) & rngToTake2.Value & " " & "Commande en retard"

End Sub

Bonjour

Il serait plus simple à mon avis d'utiliser PowerQuery (intégré à Excxel).

Une requête

  • récupère les données (soit le nom du classeur ne bouge pas, soit il est seul dans son dossier, soit c'est le plus récent...),
  • filtre automatiquement les dates passées.

Le TCD étant basé sur la requête une simple actualisation du TCD suffit à suivre l'évolution de la source.

A noter que le typage de données est plus facile à gérer dans PowerQuery

Bonjour Chris,

Merci pour cette réponse rapide, je n'ai pas encore utiliser PowerQuery mais je vais y jeter un oeil tout de suite.

Toutefois j'aurais espérer trouver une solution au moins temporaire en VBA si quelqu'un a une idée.

Je trouve dommage qu'EXCEL soit capable de filtrer très simplement avec la date du jours dynamique mais que cela devienent compliquer a partir du moment ou on ajoute une condition de temporalité suplémentaire comme avant ou après :p.

Cela dit je cela me plongera dans des nuits blanches a tenter d'en apprendre plus sur PowerQuery, en espérant que quelqu'un est une idée avec le VBA.

Merci encore de ta réponse, j'attend de voir si d'autres personne ont une idée.

Bonjour à tous,

J'appuie bien entendu la proposition PQ, meilleure en de nombreux points.

Pour ce qui est de la date du jour en VBA, elle est accessible avec Date function (Visual Basic for Applications) | Microsoft Learn

Ce qui donne, pour la convertir en texte : Format(Date,"dd/mm/yyyy")

Il suffit donc de remplacer Value1:="28/01/2025" par Value1:=Format(Date,"dd/mm/yyyy")

EDIT : ou peut-être plus simplement : Value1:=Date

Bonjour Saboh,

Merci aussi pour ton retour :).

Pour l'option Value1:=Format(Date, "dd/mm/yyyy") Excel renvoie une erreur 1004 "Erreur définie par l'application ou par l'objet"

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"SSD").PivotFilters.Add2 Type:=xlBefore, Value1:=Format(Date, "dd/mm/yyyy")

Pour l'option Value1:=Date j'avais déjà tester et Excel renvoie également une erreur 1004 "Le Format de la date est incorrect"

Je me penche actuellement sur PowerQuery enattendant et en espérant que cela m'aide

Ah tiens ça c'est étrange… Pourtant "28/01/2025" c'est bien une String au format "dd/mm/yyyy"...

Si vous utilisez le même format que celui de vos cellules, aka si j'ai bien compris

Format(Date, "[$-fr-FR]d-mmm-yy;@")

Toujours la même erreur ? Si oui, je ne comprends pas 😥

RE

Un exemple anonymisé mais représentatif du fichier source serait utile

Bonsoir à tous, 🙂

Et si tu convertis la date en Long, cela fonctionne ?

Value1:=CLng(Date)

Value1:=CLng(CDate("28/01/2025"))

klin89

Rechercher des sujets similaires à "filtrer colonne tcd date aujourd hui vba"