VBA supprimer lignes selon date cellule
Fermé
Scrabblouille
Messages postés
8
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
2 octobre 2011
-
4 août 2009 à 22:33
Scrabblouille Messages postés 8 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 2 octobre 2011 - 6 août 2009 à 23:01
Scrabblouille Messages postés 8 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 2 octobre 2011 - 6 août 2009 à 23:01
A voir également:
- VBA supprimer lignes selon date cellule
- Aller à la ligne dans une cellule excel - Guide
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
- Excel cellule couleur si condition texte - Guide
- Excel compter cellule couleur sans vba - Guide
3 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
5 août 2009 à 08:51
5 août 2009 à 08:51
Salut,
Pourquoi ne fais tu pas une boucle sur ta colonne ou figurent les dates (supposons col B)...
Dim derlign as Integer
Dim i as Long
derlign = Sheets("Feuil1").Range("B65536").End(xlUp).Row
Debut = InputBox("Quelle est la date de début d'analyse ? (jj/mm/aa)", "Date début")
Fin = InputBox("Quelle est la date de fin d'analyse ? (jj/mm/aa)", "Date fin")
Debut = Format(Debut, "m,d,yy")
Fin = Format(Fin, "m,d,yy")
With Sheets("Feuil1")
For i = 1 to derlign
If .Cells(i, 2).Value <Fin Then
If .Cells(i, 2).Value > Debut Then
Cells(i, 2).EntireRow.Delete
End If
End If
Next
End With
Je ne l'ai pas testé mais ça devrait fonctionner
Pourquoi ne fais tu pas une boucle sur ta colonne ou figurent les dates (supposons col B)...
Dim derlign as Integer
Dim i as Long
derlign = Sheets("Feuil1").Range("B65536").End(xlUp).Row
Debut = InputBox("Quelle est la date de début d'analyse ? (jj/mm/aa)", "Date début")
Fin = InputBox("Quelle est la date de fin d'analyse ? (jj/mm/aa)", "Date fin")
Debut = Format(Debut, "m,d,yy")
Fin = Format(Fin, "m,d,yy")
With Sheets("Feuil1")
For i = 1 to derlign
If .Cells(i, 2).Value <Fin Then
If .Cells(i, 2).Value > Debut Then
Cells(i, 2).EntireRow.Delete
End If
End If
Next
End With
Je ne l'ai pas testé mais ça devrait fonctionner
Scrabblouille
Messages postés
8
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
2 octobre 2011
5 août 2009 à 22:47
5 août 2009 à 22:47
Salut,
Mon fichier fait actuellement environ 6000 lignes et augmente en moyenne de 350 lignes par mois, c'est pourquoi je cherchais une solution autre qu'une boucle. Pouvoir créer une "Range" et supprimer l'ensemble de la plage me semblait plus efficace.
Je pense par contre qu'il faudrait aller de la dernière ligne à la 1ère en faisant un step (-1). En effet si, par exemple, la 2ème ligne est supprimée, la 3ème devient la 2ème, le next teste la 3ème et celle qui est devenue 2ème n'est donc pas testée.
Je testerai demain et verrai bien le temps que ça prendra.
Je te tiens au courant et merci pour cette solution.
Mon fichier fait actuellement environ 6000 lignes et augmente en moyenne de 350 lignes par mois, c'est pourquoi je cherchais une solution autre qu'une boucle. Pouvoir créer une "Range" et supprimer l'ensemble de la plage me semblait plus efficace.
Je pense par contre qu'il faudrait aller de la dernière ligne à la 1ère en faisant un step (-1). En effet si, par exemple, la 2ème ligne est supprimée, la 3ème devient la 2ème, le next teste la 3ème et celle qui est devenue 2ème n'est donc pas testée.
Je testerai demain et verrai bien le temps que ça prendra.
Je te tiens au courant et merci pour cette solution.
Scrabblouille
Messages postés
8
Date d'inscription
mardi 4 août 2009
Statut
Membre
Dernière intervention
2 octobre 2011
6 août 2009 à 23:01
6 août 2009 à 23:01
Bonjour,
Voici la solution que j'ai retenue après l'avoir adaptée à mon fichier et qui semble fonctionner tout à fait correctement.
Sub test()
Dim Debut As Date
Dim Fin As Date
Dim temp1 As Long
Dim temp2 As Long
Debut = InputBox("Quelle est la date de début d'analyse ? (jj/mm/aa)", "Date début")
Fin = InputBox("Quelle est la date de fin d'analyse ? (jj/mm/aa)", "Date fin")
With Range("a1:a500")
Set c = .Find(Debut)
If Not c Is Nothing Then
temp1 = c.Row
End If
Set d = .Find(Fin, LookIn:=xlValues)
If Not c Is Nothing Then
temp2 = d.Row
End If
End With
Range(Cells(1, 1), Cells(temp1 - 1, 1)).EntireRow.Delete
Range(Cells(temp2, 1), Cells(500, 1)).EntireRow.Delete
End Sub
Au revoir.
Voici la solution que j'ai retenue après l'avoir adaptée à mon fichier et qui semble fonctionner tout à fait correctement.
Sub test()
Dim Debut As Date
Dim Fin As Date
Dim temp1 As Long
Dim temp2 As Long
Debut = InputBox("Quelle est la date de début d'analyse ? (jj/mm/aa)", "Date début")
Fin = InputBox("Quelle est la date de fin d'analyse ? (jj/mm/aa)", "Date fin")
With Range("a1:a500")
Set c = .Find(Debut)
If Not c Is Nothing Then
temp1 = c.Row
End If
Set d = .Find(Fin, LookIn:=xlValues)
If Not c Is Nothing Then
temp2 = d.Row
End If
End With
Range(Cells(1, 1), Cells(temp1 - 1, 1)).EntireRow.Delete
Range(Cells(temp2, 1), Cells(500, 1)).EntireRow.Delete
End Sub
Au revoir.