Supprimé des lignes en fonction de leur date, plus précisément le mois

Bonjour à tous,

Je souhaite supprimer les lignes qui contiennent une date de début qui n'est pas dans le mois en cours. Par exemple, nous sommes en février, toutes les dates de début qui ne sont pas au mois de février doivent disparaître.

La date de début se trouve dans la colonne G. J'ai essayé de récupérer le mois de mon système mais ce la ne fonctionne pas. Surement puisque ma date de début est sous le format "dd/mm/yyyy" et que je récupère seulement le chiffre "2".

Le dépot de ficheir est indisponible malheureusement.

La date se trouve en colonne G sous un format "dd/mm/yyyy" et je souhaite supprimer tout les date qui ne sont pas en cours ce mois-ci.

6question-date.xlsx (156.16 Ko)

Voici les fichiers. Question_date correspond au fichier de base et Questio_Date_Test, j'applique déjà une première macro afin de supprimer les informations dont je n'ai pas besoin.

Bonjour,

Dans la solution ci-dessous, le principe est de travailler avec un tableau structuré.

Option Explicit

Sub TestMettreAJourOnglet()

Dim TabDonnees As ListObject
Dim AireTableau As Range

    With Sheets("Question Date2")
         .Activate
         If .ListObjects.Count = 0 Then
             Set AireTableau = .Range("A1").CurrentRegion
             Set TabDonnees = .ListObjects.Add(xlSrcRange, AireTableau, , xlYes)
         End If
         MettreAJourOnglet ActiveSheet, "797326"
    End With
    Set AireTableau = Nothing: Set TabDonnees = Nothing

End Sub

Sub MettreAJourOnglet(ByVal Sh As Worksheet, ByVal NumCB As String)

Dim J As Integer, MoisEnCours As Integer
Dim AireEtat As Range, AireDateDebut As Range, AireCBEx As Range

    Application.ScreenUpdating = False

    With Sh.ListObjects(1)
         Set AireEtat = .ListColumns("Etat").DataBodyRange
         Set AireCBEx = .ListColumns("CB exéc. Prest.").DataBodyRange
         Set AireDateDebut = .ListColumns("Date début").DataBodyRange
    End With

    MoisEnCours = Month(Date)

    'Sous Traitance Gestionnaire
    For J = AireEtat.Count To 1 Step -1

          '  Pour vérifier
          '  If AireEtat(J) = "AT" Then AireEtat(J).Interior.Color = RGB(255, 255, 0)
          '  If AireCBEx(J) = CStr(NumCB) Then AireCBEx(J).Interior.Color = RGB(255, 255, 0)
          '  If Month(CDate(AireDateDebut(J))) < MoisEnCours Then AireDateDebut(J).Interior.Color = RGB(255, 255, 0)

            If AireEtat(J) = "AT" Then AireEtat(J).EntireRow.Delete
            If AireCBEx(J) = CStr(NumCB) Then AireEtat(J).EntireRow.Delete
            If Month(CDate(AireDateDebut(J))) < MoisEnCours Then AireEtat(J).EntireRow.Delete
    Next J

    With Sh.ListObjects(1)
         .Sort.SortFields.Clear
         .Sort.SortFields.Add2 Key:=AireDateDebut, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With

    Set AireEtat = Nothing: Set AireCBEx = Nothing: Set AireDateDebut = Nothing
    Application.ScreenUpdating = True

End Sub

Bonjour,

Power query peux vous faire les deux étapes en 1. Et pas besoin de macro pour cela.

Et tout cela en quelque étapes.

Bonjour,

Ci joint via power query en quelque clicks

Pour voir les requêtes utilisés, il suffit de faire : onglet "données" => "Requêtes et connexion" Les requêtes s'afficheront à droite. Double clicker dessus pour voir les étapes utiliser dans Power query (complément excel totalement intégré depuis 2016).

Pour mettre à jour le tableau de faire : onglet "données" => " Actualiser tout

EDIT: J'ai modifié le format de la colonne heure

0question-date.xlsx (169.53 Ko)

Merci beaucoup pour vos réponses

Bonjour à tous,

Un autre essai par macro....

  • A partir de ton fichier question-date.xlsx, (on traite tout en une fois)...
5jusugar.xlsm (191.24 Ko)

Cordialement,

Rechercher des sujets similaires à "supprime lignes fonction leur date precisement mois"