Trier des lignes en fonction d'une date

- - Dernière réponse : guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
- 27 juin 2019 à 17:14
Bonjour,
je suis novice en VBA. je travail à partir d'un tableau en .csv

j'exécute une première macro qui me mets en page ce tableau et tout marche bien, mais je souhaiterai inclure dans le même code une suppression des lignes contenant une date au delà de 28 jours par rapport à la date du jour où j'exporte le fichier et exécute la macro.

j'espère avoir été asse précis, si besoin je peux apporter plus d'infos et le fichier code

merci à tous

Configuration: Windows / Internet Explorer 11.0
Afficher la suite 

6 réponses

Messages postés
14857
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
17 novembre 2019
1190
0
Merci
Bonjour,

apporter plus d'infos et le fichier code
Faudrait le fichier avec le tableau, modifiez le si infos confidentielles
site de partage:
https://mon-partage.fr/
Commenter la réponse de f894009
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci


voila un export du jour ( simplifié ), je souhaiterai supprimer les lignes qui ont plus de 28 jour ( 4 semaines ) par rapport à la date du jour.
f894009
Messages postés
14857
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
17 novembre 2019
1190 -
Re,
La date du jour est aujourd'hui si je fais le trsf aujourd'hui pas une autre date??
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
c'est ça, j'exporte un fichier une fois par semaine et j'ai besoin de supprimer toutes les lignes de plus de 28 jours
f894009
Messages postés
14857
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
17 novembre 2019
1190 -
Re,
Ok, je regarde la chose
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
merci
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
J'ai modifié ainsi:

Dim Date_Min As Date

Date_Min = Date - 28 'date mini a 28 jours

With Worksheets("Export") 'adaptez nom de feuille
.Range("A1:H1").AutoFilter 'filtre en place
With .UsedRange 'plage de cellules utilisees
.AutoFilter Field:=8, Criteria1:="<" & CDbl(Date_Min) 'filtre date a 29 jours
Set Plage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
Plage_ST.EntireRow.Delete 'suppression ligne filtrees
End With
.Range("A1:H1").AutoFilter 'enleve filtre
End With


j'ai modifié .AutoFilter Field:=5 en 8 , le chiffre correspond bien à la colonne?

par contre quand j'exécute la macro, il m'indique que la variable Plage_ST n'est pas définie.

je suppose donc que je dois déclarer la variable avec Dim...
f894009
Messages postés
14857
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
17 novembre 2019
1190 -
Bonjour,

Oui, si vous avez un Option Exlicit, mais si pas de lignes filtrées il y a erreur (ce que j'ai oublie)

Sub test()
    Dim Date_Min As Date
    Dim PLage_ST As Range
    
    Date_Min = Date - 28 'date mini a 28 jours

    With Worksheets("Export") 'adaptez nom de feuille
        .Range("A1:H1").AutoFilter    'filtre en place
        With .UsedRange 'plage de cellules utilisees
            .AutoFilter Field:=8, Criteria1:="<" & CDbl(Date_Min)    'filtre date a 29 jours
            If Range("H2") <> "" Then           'si au moins une lgne filtree
                Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                PLage_ST.EntireRow.Delete 'suppression ligne filtrees
            End If
        End With
        .Range("A1:H1").AutoFilter    'enleve filtre
    End With
End Sub
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
Merci f894009, une fois de plus ça marche parfaitement et me permet d'avancer dans la compréhension du codage
guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
-
donnée que je n'avais pas, dans la colonne où sont les dates ( colonne D), j'ai des lignes avec le texte "dès réception".
je souhaite que c'est lignes ne soient pas exclus comme c'est le cas avec le code actuel qui filtres en fonction de la date

    Dim Date_Min As Date
    Dim PLage_ST As Range
    
    Date_Min = Date - 28 'date mini a 28 jours

    With Worksheets("Export") 'adaptez nom de feuille
        .Range("A1:E1").AutoFilter    'filtre en place
        With .UsedRange 'plage de cellules utilisees
            .AutoFilter Field:=4, Criteria1:="<" & CDbl(Date_Min)    'filtre date a 29 jours
            If Range("E2") <> "" Then           'si au moins une lgne filtree
                Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                PLage_ST.EntireRow.Delete 'suppression ligne filtrees
            End If
        End With
        .Range("A1:E1").AutoFilter    'enleve filtre
    End With
f894009
Messages postés
14857
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
17 novembre 2019
1190 -
Bonjour,

Filtre a deux critères
j'ai des lignes avec le texte "dès réception".

Colonne F??????????????

Adaptez les colonnes a filtrer:
Sub test()
    Dim PLage_ST As Range
    
    Date_Min = Date - 28 'date mini a 28 jours

    With Worksheets("Export") 'adaptez nom de feuille
        .Range("A1:E1").AutoFilter    'filtre en place
        With .UsedRange 'plage de cellules utilisees
            .AutoFilter Field:=4, Criteria1:="<" & CDbl(Date_Min)         'filtre date a 29 jours Colonne D
            .AutoFilter Field:=5, Criteria1:="<>*r?ception*"             'filtre date a 29 jours  colonne E
            If Range("D2") <> "" Then           'si au moins une lgne filtree
                Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                PLage_ST.EntireRow.Delete 'suppression ligne filtrees
            End If
        End With
        .Range("A1:E1").AutoFilter    'enleve filtre
    End With
End Sub
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
les lignes "dès réception" se trouve dans la même colonne comportant des dates, la colonne D, j'ai donc inséré comme tu m'avais indiqué, mais ça ne me garde que ligne "dès réception et me supprime les autres

Adaptez les colonnes a filtrer:
Sub test()
    Dim PLage_ST As Range
    
    Date_Min = Date - 28 'date mini a 28 jours

    With Worksheets("Export") 'adaptez nom de feuille
        .Range("A1:E1").AutoFilter    'filtre en place
        With .UsedRange 'plage de cellules utilisees
            .AutoFilter Field:=4, Criteria1:="<" & CDbl(Date_Min)         'filtre date a 29 jours Colonne D
            .AutoFilter Field:=4, Criteria1:="<>*r?ception*"             'garde les lignes dès réception colonne D           
                 If Range("D2") <> "" Then           'si au moins une lgne filtree
                Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                PLage_ST.EntireRow.Delete 'suppression ligne filtrees
            End If
        End With
        .Range("A1:E1").AutoFilter    'enleve filtre
    End With
End Sub
Commenter la réponse de guillaume gdco
Messages postés
34
Date d'inscription
samedi 15 août 2009
Statut
Membre
Dernière intervention
27 juin 2019
0
Merci
c'est bon c'est réglé

Dim PLage_ST As Range
    
    Date_Min = Date - 28 'date mini a 28 jours

    With Worksheets("Export") 'adaptez nom de feuille
        .Range("A1:E1").AutoFilter    'filtre en place
        With .UsedRange 'plage de cellules utilisees
            .AutoFilter Field:=4, Criteria1:="<" & CDbl(Date_Min), Criteria1:="<>*r?ception*"                    'filtre date a 29 jours Colonne D     
                 If Range("D2") <> "" Then           'si au moins une lgne filtree
                Set PLage_ST = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible) 'plage de cellules sans les entetes
                PLage_ST.EntireRow.Delete 'suppression ligne filtrees
            End If
        End With
        .Range("A1:E1").AutoFilter    'enleve filtre
    End With
Commenter la réponse de guillaume gdco