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
Bonjour,

Je souhaiterais, dans un tableau trié sur une colonne contenant des dates au format jj/mm/aaaa hh:mm:ss, supprimer les lignes dont la date n'est pas dans un intervalle donné.
Les dates sont choisies par l'utilisateur avec des inputbox.
J'ai imaginé rechercher la 1ère cellule contenant la date de début et supprimer toutes les lignes précédentes, idem pour la date de fin avec les lignes suivantes.
En cherchant sur le net j'ai trouvé que la commande find ne fonctionne qu'avec le format américain (m/d/yy). Ceci est mon 1er pb puisque ma conversion de format ne fonctionne pas si le jour est à 2 chiffres.
Ensuite mon find ne fonctionne pas malgré plusieurs méthodes testées.
Ci-dessous mes codes, si quelqu'un pouvait m'éclairer ce serait sympa.

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")
Set Ligne_debut = [a:a].Find(what:=Debut, LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows).Address

Cdlt.
A voir également:

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 744
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
0
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
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.
0
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
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.
0