Microsoft 365 [VBA] Filtrage VBA pour obtenir les dates avec le mois précédent le mois en cours

maxime45

XLDnaute Junior
Bonjour à toutes et à tous !

Dans le cadre de préparation de présentations hebdomadaires, je dois traiter un large paquet de données et trier ces dernières puis les mettre en forme.
J'utilise en ce moment un peu de VBA pour automatiser quelques procédés et il va me manquer un élément:

La possibilité de filtrer une colonne de manière à ne garder que les dates du mois précédent le mois en cours.
Par exemple: si je suis en juillet, et à n'importe quelle date de préférence, le tri mis en place permettrait de garder toutes les dates associées au mois précédent (ainsi la colonne triée ne comporterait que les dates en jj/06/2022 et ce peu importe la date à laquelle je réalise le tri en juillet.
Enfin, je me doute que le passage du mois de décembre à janvier doit quelque peu compliquer la tâche (changement d'année) mais pas besoin de l'inclure si cela complique les choses je m'occuperai de cas particulier à la main !

Merci beaucoup, si on me propose je me doute que ça doit aussi être réalisable via formule mais cela m'arrange de passer par du VBA !
Excellent lundi à vous et merci pour la lecture !!
 

maxime45

XLDnaute Junior
Bonjour,

Vous pouvez utiliser les fonctions TRIER et FILTRE avec excel 365.
Cordialement
Je vais bientôt upload un fichier pour aider à visualiser
Je suis prêt à explorer cette piste, ça m'intéresserait d'avoir une idée de ce que je suis censé mettre comme critère dans mon tri pour obtenir les dates du mois précédent le mois en cours et ce peu importe le jour du mois en cours !
Merci pour la réponse je reviens bientôt vers vous !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re Maxime, bonjour Hasco,
En VBA pour obtenir les dates de début et fin d'aujourd'hui ( simplifié ):
VB:
    MoisPrécédent = DateAdd("m", -1, Date)
    DateDébut = CDate("1/" & Month(MoisPrécédent) & "/" & Year(MoisPrécédent))
    DateFin = DateAdd("m", 1, DateDébut) - 1
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
bonjour @sylvanu,

Vous reconnaîtrez peut-être dans le fichier joint les données 'NorthWind' des années 95-200N des exemples microsoft.
J'en ai tiré deux exemples, un sur la feuille data par la fonction FILTRE en P2 et un autre avec power query sur la feuille PQ_OrderSummary (euh y'a qu'un M là Non ?)

La formule de filtrage est :
MOIS(T_OrderSummary[Order Date])=MOIS(AUJOURDHUI())-1
Où T_OrderSummary est un tableau structuré avec un champ (colonne) 'Order Date'.


Cordialement
 

Pièces jointes

  • Order Summary.xlsx
    32.8 KB · Affichages: 6

maxime45

XLDnaute Junior
Re !
Désolé c'est lundi j'avoue me prendre quelques réunions et imprévus dans les pattes, alors je reviens vers vous une fois que j'aurai eu le temps de regarder/tester les solutions que vous m'avez proposé @sylvanu et @Hasco, d'ailleurs merci infiniment pour votre réactivité !!
Je vous joins quand même le petit fichier macro pour aider à la compréhension même si à première vue vous m'avez largement donné de quoi faire ! @ toute, merci encore !
 

Pièces jointes

  • testmacrodate.xlsm
    26.8 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
un essai en PJ.
mais peut quand même conserver les formules associées dans les cases C5 à E105,
Quelles formules ? Je ne vois rien en colonne C.

VB:
Sub Extract()
    Dim Tablo, T, MoisPrécédent, DateDébut, DateFin, DL%, Inc%, i%
    [C5:E65000].ClearContents
    Application.ScreenUpdating = False
    With Sheets("export")
        DL = .[A65500].End(xlUp).Row
        Tablo = .Range("A2:C" & DL)      ' Données dans Tableau
    End With
    ReDim T(UBound(Tablo), 2)           ' T tableau de sortie
    MoisPrécédent = DateAdd("m", -1, Date)
    DateDébut = CDate("1/" & Month(MoisPrécédent) & "/" & Year(MoisPrécédent))
    DateFin = DateAdd("m", 1, DateDébut) - 1
    Inc = 0                             ' Inc Pointeur écriture
    For i = 1 To UBound(Tablo)
        If Tablo(i, 1) <> "Fermé" Then
            If Tablo(i, 3) >= DateDébut And Tablo(i, 3) <= DateFin Then
                T(Inc, 0) = Tablo(i, 1): T(Inc, 1) = Tablo(i, 2): T(Inc, 2) = Tablo(i, 3)
                Inc = Inc + 1
            End If
        End If
    Next i
    [C5].Resize(UBound(T, 1), UBound(T, 2) + 1) = T
End Sub
 

Pièces jointes

  • testmacrodate.xlsm
    26.4 KB · Affichages: 5

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Comme @sylvanu, pas certain d'avoir tout compris.
Par contre voici une proposition par macro de filtre avancé qui filtes les "Ouvert" du mois précédent.
J'ai du nettoyer vos données pour ça. Il y avait des sauts de lignes et des espaces insécables, dans les entêtes (et les données).

Mais vous avez excel 365 et vous travaillez comme avec excel 2002 (xp), C'est comme avoir une ferrari et rouler en trotinette :)

cordialement
 

Pièces jointes

  • Advanced_filter.xlsm
    36.7 KB · Affichages: 9

maxime45

XLDnaute Junior
@Hasco, @sylvanu

Si je reste sur ces fonctionnalités assez basiques d'Excel c'est parce-ce que ces fichiers ne me sont pas directement destinés, c'est plutôt pour le reste de mon équipe et on m'impose certaines restrictions en termes de type de fichier excel, mon équipe ne travaillant déjà pas du tout avec des macro initialement.
J'avoue également n'avoir commencé excel que cette année c'est pour ça que tout ce qui est Power Query et autres outils ne sont encore que moyennement à ma portée.
Ce qu'il faut comprendre c'est que je ne saisis pas forcément toute la logique derrière Excel, du moins je ne la connais pas encore. C'est pour cela que mes demandes peuvent vous apparaître comme bizarres, décalées, ou lentes en comparaison avec ce qu'il est possible de faire avec Excel (ex: utiliser du VBA alors que des formules peuvent suffire)
Je vous remercie de me pousser à voir plus loin car je sais pertinemment que les solutions que vous me proposez sont surement bien plus légères et fonctionnelles que ce que j'essaye de faire en VBA, c'est simplement que j'ai bouclé une partie de mon travail en VBA et que j'y trouve une certaine logique
Je ne serai pas en mesure de vous dire si les solutions proposées fonctionnent pour moi aujourd'hui, je vous ferai un retour demain !

Concernant cette phrase:
" mais peut quand même conserver les formules associées dans les cases C5 à E105 "
Je voulais dire par là que si j'utilise une formule en C au lieu de trier mes dates avec du VBA puis de les copier/coller en colonne C, j'aurai pu "Clear" cette colonne en conservant les formules associées (car je veux pouvoir vider l'ensemble des données)

Bonne fin d'après midi, je vous promets de revenir vers vous demain !!
 

Discussions similaires

Réponses
8
Affichages
283
Réponses
9
Affichages
300

Statistiques des forums

Discussions
313 274
Messages
2 096 750
Membres
106 738
dernier inscrit
Lacbus