Supprimer une ligne avec VBA si la date est inférieure à une date donnée

Bonjour à tous,

J'ai beau effectué les recherches mais je trouve toujours la même question : avec VBA supprimer la ligne si la date est inférieur à aujourd'hui...

Mais moi je ne veux pas cela, je cherche à supprimer la ligne si la date est inférieure à une date que moi-même j'imposerai.

Selon le code :

Sub test()
For i = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
             If Cells(i, 1) < "01/11/2019" Then
             Cells(i, 1).EntireRow.Delete
             End If
       Next i
End Sub

Je veux que les dates antérieures au 1er novembre 2019 soient supprimées.

Cependant rien ne fait, cela ne fonctionne pas

Merci d'avance à vous tous !

50vba-test.xlsb (14.43 Ko)

Bonjour Batang,

Une proposition est de remplacer :

If Cells(i, 1) < "01/11/2019" Then

par :

If Cells(i, 1) < #11/1/2019# Then ' A mettre au format US : Mois/Jour/Année

La date est à mettre au format US : #Mois/Jour/Année#

Bonjour

Dans cette configuration "01/11/2019" est un texte, pas une date

Une autre approche est d'automatiser un filtre auto : filtrer les dates et supprimer d'un coup

    With Sheets("Feuil1")
        .Range("A:B").AutoFilter Field:=1, _
        Criteria1:="<11/01/2019", Operator:=xlAnd
        .Rows("2:" & Cells.Rows.Count).Select
        Selection.SpecialCells(xlCellTypeVisible).Select
        Selection.Delete Shift:=xlUp
        .ShowAllData
    End With

Bonjour,
Une autre proposition VBA.
Cdlt.

60vba-test.xlsb (13.93 Ko)
Public Sub DeleteRows()
Dim rng As Range, tbl As Variant, arr() As Variant, I As Long, k As Long
    With ActiveSheet
        Set rng = .Cells(1).CurrentRegion
        With rng
            tbl = .Value
            .Offset(1).ClearContents
        End With
        For I = 2 To UBound(tbl)
            If tbl(I, 1) > CLng(DateSerial(2019, 11, 1)) Then
                ReDim Preserve arr(2, k + 1)
                arr(0, k) = CLng(tbl(I, 1))
                arr(1, k) = CLng(tbl(I, 2))
                k = k + 1
            End If
        Next I
        With .Cells(2, 1).Resize(k, 2)
            .Value = Application.Transpose(arr)
            .NumberFormat = "dd/mm/yyyy"
        End With
    End With
End Sub

Salut Batang,
Salut l'équipe,

Tu peux aussi inscrire la date-butoir, ici en [D1] - cellule nommée = [dDATE], ce qui te permet d'activer la macro à volonté sans modification.
Un double-clic sur la feuille démarre la macro.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
Application.ScreenUpdating = False
'
For x = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1
    If CDate(Range("A" & x).Value) < [dDATE] Then Rows(x).Delete shift:=xlUp
Next
'
Application.ScreenUpdating = True
'
End Sub
96batang.xlsm (14.46 Ko)


A+

Tout d'abord merci pour vos messages et vos propositions !

Cependant je pense avoir mal choisi mon exemple, car lorsque j'effectue vos propositions sur mon fichier de travail confidentiel (et non vba-test.xlsb), cela ne marche que sur mon fichier de test ...

@AntoineDL : Effectivement le code fonctionne seulement si c'est un texte et non une date, mes dates antérieures ne sont pas supprimées

@78chris : J'ai essayé d'intégrer le code à mon fichier en changeant le n° de colonne bien entendu mais mes dates antérieures ne sont toujours pas supprimées

@Jean-Eric : Toutes mes données sont supprimées

@curulis57 : Curieusement c'est intéressant mais l'idée ici est que je puisse modifier la date directement dans le code VBA sans mettre quoi que ce soit dans les cellules, du coup sans modifier mon fichier confidentiel.

Je vous envoie ici le fichier avec des données confidentielles supprimées comme le nom, prénom, adresse... :

----RESOLU-----

En d'autres termes, c'est la 7eme colonne (Colonne G) qui doit être inférieure à < 1er novembre 2019

Vous pourrez voir les propositions que vous m'avez donné dans VBA

Merci encore à tous!

En actualisant la formule par rapport à la structure du dernier fichier, c'est-à-dire en remplaçant :

If Cells(I, 1) < #11/1/2019# Then ' Format US : Mois/Jour/Année

par :

If Cells(I, 7).Value < #11/1/2019# Then ' Format US : Mois/Jour/Année

sur un tableau initial de 76 lignes, il ne reste que 62 lignes après la suppression des dates antérieures au 1er nov. 2019.

Oh je me suis trompé avec les lignes et les colonnes, l'erreur de débutant

Merci @AntoineDL, ta solution marche impec'!

RE

@78chris : J'ai essayé d'intégrer le code à mon fichier en changeant le n° de colonne bien entendu mais mes dates antérieures ne sont toujours pas supprimées

C'est sûr que si l'exemple n'est pas représentatif, cela a peu de chances de s'adapter...

C'est pénible ces pseudo fichiers...

Su ton exemple tu peux constater que cela fonctionne...

Re,
Mêmes constatations que 78chris !
Cdlt.

Rechercher des sujets similaires à "supprimer ligne vba date inferieure donnee"