VBA supprimer lignes selon date cellule

Scrabblouille Messages postés 8 Statut Membre -  
Scrabblouille Messages postés 8 Statut Membre -
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.
Configuration: Windows XP Internet Explorer 7.0

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. Scrabblouille Messages postés 8 Statut Membre
     
    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
  3. Scrabblouille Messages postés 8 Statut Membre
     
    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