VBA supprimer lignes selon date cellule
Scrabblouille
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Scrabblouille Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Scrabblouille Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- VBA supprimer lignes selon date cellule
- Supprimer rond bleu whatsapp - Guide
- Supprimer page word - Guide
- Excel compter cellule couleur sans vba - Guide
- Supprimer pub youtube - Accueil - Streaming
- Aller à la ligne dans une cellule excel - Guide
3 réponses
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
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.
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.