IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA supprimer des ligne selon la date d'une cellule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Points : 49
    Points
    49
    Par défaut VBA supprimer des ligne selon la date d'une cellule
    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    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
    Cela fait ce que tu souhaites.

    A toi d'adapter.

    A+
    DeaD

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut DeaD78 et le forum
    J'ai déjà répondu au même problème sur un autre forum
    Là, je pense que tu fais une erreur de raisonnement : Tu ne peux pas utiliser la métode Find.

    – la date peut ne pas exister dans la liste :
    Par exemple, je veux les dates de janvier 2000 : je vais entrer du 1/1/2000 au 31/1/2000 => le 1/1/2000 étant un samedi, et férier, peu de chance de trouver cette date sur un listing de mouvements par exemple.

    - La cellule est codée en "jj/mm/aaaa hh:mm:ss" or dans la boîte input, je ne code que la date (description du problème). Il faudrait donc que la méthode Find soit codée avec recherche sur une partie de la cellule. Mais pour la date de fin, il faut la dernière date correspondant à la date de fin à 23 heures, 59 minutes et 59 secondes : soit avant le jour d'après.

    Pour tout ça, je pense qu'une recherche par Find ne donnera pas les résultats escomptés
    A+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    J'ai adapté ce matin la solution de Dead78 à mon fichier et cela semble très bien fonctionner.
    Il ne me reste plus qu'à traiter les erreurs lorsque la date n'existe pas ou lorsque plusieurs lignes ont la même date.

    Encore merci, je débute en VBA et ça fait plaisir de trouver de l'aide.

    A une prochaine.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer des lignes selon une condition
    Par j0joo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/03/2014, 14h40
  2. Réponses: 4
    Dernier message: 21/07/2011, 15h25
  3. [XL-2003] supprimer des lignes selon critères
    Par collinchris dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/01/2010, 13h51
  4. Grouper des lignes selon un champs dans une listView
    Par Msysteme dans le forum Windows Forms
    Réponses: 10
    Dernier message: 26/02/2009, 19h13
  5. [VBA] Supprimer des lignes dans une table
    Par shadockgreg dans le forum Access
    Réponses: 6
    Dernier message: 22/11/2006, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo