Macro - Détection de l'année d'une date

Résolu
Bonjour à tous,

J'ai le code suivant:

Selection.AutoFilter Field:=2, Criteria1:="<=" & CDbl(CDate("01/01/2016"))
Range("A2:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlVisible).EntireRow.Select
Selection.Delete
Selection.AutoFilter Field:=2


Ce code me permet de filtrer une colonne en affichant toutes les lignes avec une date antérieure au 01.01.2016.

Ce que je souhaite, via macro, c'est de pouvoir filtrer les données et de ne retenir que tout ce qui est antérieur au 01.01 de l'année en cours. J'aimerais éviter de renseigner l'année afin de m'éviter d'aller modifier ma macro en début de chaque nouvelle année. En résumé, je souhaiterait détecter l'année en cours.

D'avance merci pour votre aide.

Xenos

5 réponses

Résumé de la discussion

L'utilisateur souhaite qu'une macro filtre les données et conserve uniquement les dates antérieures au 01/01 de l'année en cours, sans préciser l'année manuellement. Plusieurs réponses proposent une détection dynamique de l'année via Year(Now), mais les solutions utilisent des critères de filtre variables et varient selon la version Française ou Anglaise d'Excel. La meilleure réponse suggère d'utiliser Year(Now) et de construire les critères pour la plage du 1er janvier au 31 décembre de l'année en cours. En parallèle, des échanges portent sur l'affichage des lignes plutôt que leur masquage et sur les éventuelles différences de gestion des dates entre versions Excel, ce qui peut influencer l'exécution.

Bobot (l’IA à votre service)
  1. Bonjour

    l'année en cours es données par
    Year(Date)

    Cdlmnt
    0
    1. Bonjour,

      Le problème avec cette solution c'est que l'on doit malgré tout renseigner une date entre parenthèses...

      Y-aurait-il pas un moyen de dire à la macro de détecter l'année en cours en se basant sur l'horloge du système d'exploitation?

      D'avance merci.

      Xenos
      0
    2. Contributeur
      Bonjour,

      tu as testé ?
      eric
      0
    3. @Xenos1705Comme dit Eric (salut à toi), il faut tester !!!!
      Date est une fonction vba qui renvoie la date actuelle

      Cdlmnt
      0
    4. @ccm81Bonjour,

      Je ne fais que ca depuis ce matin: Tester
      0
  2. Bonjour,

    essaye comme cela
    Year(Now)

    pour avoir l'année en cellule B5
    Private Sub CommandButton1_Click()
    [B5] = Year(Now)
    End Sub

    mais pour l'adapter à ton code il serait bon d'avoir un bout de ton fichier et code existant pour ne pas induire en erreur
    A+
    Mike-31

    Pas savoir n'est pas un échec, l'échec est le refus d'apprendre.
    0
    1. Hello,

      Merci pour ton message...

      Le code fonctionne mais ce n'est pas encore le résultat que je souhaiterais...

      Pour des raisons de confidentialité, je suis dans l'impossibilité de te transmettre le fichier en question...

      Si jamais tu as bout de mon code dans mon post initial.

      Si tu veux j'ai une BDD avec plus de 8'000 lignes, et ce que je souhaite c'est supprimer toutes les lignes contenant une date antérieur au 01.01 de l'année en cours.

      Actuellement, je filtre les données en renseignant la date à la main comme ci-dessous:

      Selection.AutoFilter Field:=2, Criteria1:="<=" & CDbl(CDate("01/01/2016"))


      Je souhaiterai adapter ce code pour éviter chaque année d'aller corriger ma macro...

      Encore merci pour ta réponse et ton aide...

      Xenos
      0
    2. @Xenos1705Bonjour,

      Essaie avec :
      Selection.AutoFilter Field:=2, Criteria1:="<" & DateSerial(Year(Date), 1, 1)


      A+
      0
    3. @GyrusHello Gyrus,

      J'ai eu un petit espoir en essayant ton code mais malheureusement celui-ci ne fonctionne pas.

      Le code a bien filtré la colonne mais n'a retenu aucune donnée.

      Aucune case n'est sélectionner dans les options de filtrage.

      Aurais-tu une autre idée de comment pouvoir rédiger le code?

      D'avance merci...

      A+

      Xenos
      0
    4. @Xenos1705Et pourtant, elle tourne !
      Voici un fichier exemple (non confidentiel ...)
      https://www.cjoint.com/c/FIEiCz6APSN

      Si le filtre ne s'applique pas, c'est que ton fichier a une spécificité que j'ignore.

      A+
      0
    5. @GyrusHello,

      J'ai pensé que c'était dû au fait que les données proviennent d'un autre fichier mais non car j'ai pris un fichier excel vierge, j'ai fait un exemple avec trois colonnes, exécuter ta macro et le résultat est le même, il filtre les données mais ne retiens rien, aucune case coché dans les critères.

      Est-ce que ce serait du au fait que mes dates sont au format: 01.01.2016?
      0
  3. Bonjour
    peux être comme ca

    Sub Test()
    Dim An As Long
    An = Year(Now)
    Columns("A:E").Select
       Selection.AutoFilter field:=2, _
          Criteria1:=">=" & "1/1/" & An, Operator:=xlAnd, Criteria2:="<=" & "12/31/" & An
    End Sub
    


    A+
    Maurice
    0
    1. Hello,

      Malheureusement cela ne joue pas non plus...
      0
  4. Contributeur
    Bonjour,

    Lorsque tu enlèves tout alignement tes dates sont bien à droite ?
    eric
    0
    1. Hello,

      Oui mes dates se trouvent bien à droite...
      0
  5. Contributeur
    Bonjour à tous,

    J'ai le code suivant:
    Selection.AutoFilter Field:=2, Criteria1:="<=" & CDbl(CDate("01/01/2016"))

    Puisqu'il fonctionne pourquoi ne pas effectuer ce simple changement ?
    Selection.AutoFilter Field:=2, Criteria1:="<=" & CDbl(CDate("01/01/" & Year(Date)))
    0
    1. Hello,

      Merci bcp CA FONCTIONNE...

      Je te remercie infiniment, je n'ai pas encore assez d'expérience pour faire de simples changements lol

      A+
      0