Trier des lignes en fonction d'une date
guilau24
-
guillaume gdco Messages postés 75 Statut Membre -
guillaume gdco Messages postés 75 Statut Membre -
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
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
A voir également:
- Excel trier ligne en fonction d'une colonne
- Trier colonne excel - Guide
- Déplacer une colonne excel - Guide
- Fonction si et excel - Guide
- Partager photos en ligne - Guide
- Liste déroulante excel - Guide
6 réponses
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/
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/
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
Re,
Une facon de faire:
Une facon de faire:
Sub sup_28_jour()
Dim Date_Min As Date
Date_Min = Date - 28 'date mini a 28 jours
With Worksheets("Feuil2") 'adaptez nom de feuille
.Range("A1:H1").AutoFilter 'filtre en place
With .UsedRange 'plage de cellules utilisees
.AutoFilter Field:=5, 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
End Sub
J'ai modifié ainsi:
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...
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...
Bonjour,
Oui, si vous avez un Option Exlicit, mais si pas de lignes filtrées il y a erreur (ce que j'ai oublie)
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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