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 :

Tri d'un fichier excel en supprimant des lignes via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Santé
    Inscrit en
    Août 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 29
    Par défaut Tri d'un fichier excel en supprimant des lignes via VBA
    Bonjour à toute la communauté !

    J'espère que vous allez bien.

    Je réalise des extractions de données. Dans un souci de nettoyer les données inutiles afin de les exploiter, je souhaite créer un code VBA.
    J'ai quelques bases mais je ne trouve pas la solution pour ce que je souhaite réalsier.

    Mon tableau excel comporte de nombreuses lignes et colonne.
    Dans une colonne, j'ai la date du jour sous format "31/08/2023 09:00:35"
    Je souhaiterai que chaque jour, on ne garde que la ligne ayant l'heure la plus tardive entre 18h et 21H.
    Une fois trouvé, les autres lignes du jour peuvent alors être supprimées par le code.

    Je n'aurai alors qu'une ligne par jour dans mon tableur où l'heure max sera bien entre 18h et 21h.

    J'espère avoir été explicite. Si ce n'est pas le cas, n'hésitez pas, je fournirai d'autres détails.

    Belle journée,

    Bob

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Vos ne donnez aucune précision, vu que c'est une extraction de données, on peut penser que le format de la date/heure n'est pas au format excel donc, il faudra peut-être faire une manipulation de ce côté là.
    Dans quelle colonne se trouve la date?
    Les dates sont elles rangées dans l'ordre chronologique?

    Le plus simple est de fournir un extrait de votre fichier anonymisé, et vous obtiendrez plus facilement des réponses.

    Sinon pour le principe:
    -En premier lieu, faire un tri chronologique (de l'ancienne date à la plus récente).
    -Puis faire une bouche qui part de l'avant dernière ligne en remontant vers la première ligne, en testant la date de la ligne traitée par rapport à la date de la ligne suivante,
    -Si c'est le même jour alors, supprimer la ligne en cours,
    -Sinon, c'est forcément la date avec l'horaire le plus tardif et donc, on conserve la ligne.
    -On passe à la ligne du dessus et on recommence le test.

    Cdlt

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, voici une méthode basée sur l'idée de ARTURO83 (que je salue).
    Je considère que les dates sont en colonne A et démarrent en ligne 2. Adapte au besoin.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Sub NettoyerDonnees()
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim i As Long
        Dim dictDates As Object
        Set dictDates = CreateObject("Scripting.Dictionary")
     
        ' Remplacez "Feuil1" par le nom de votre feuille de données
        Set ws = ThisWorkbook.Sheets("Feuil1")
     
        ' Trouver la dernière ligne avec des données
        lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
     
        ' Supprimer les lignes qui ne sont pas dans la plage horaire (18h à 21h)
        For i = lastRow To 2 Step -1
            ' Extraire la date et l'heure
            Dim dateValeur As Date
            dateValeur = ws.Cells(i, 1).Value
     
              ' Vérifier si l'heure est dans la plage horaire
            If Hour(dateValeur) < 18 Or Hour(dateValeur) >= 21 Then
                ' Si l'heure n'est pas dans la plage, supprimer la ligne
                ws.Rows(i).Delete
            End If
        Next i
     
        ' Trier le tableau par date et heure (colonne A)
        With ws.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A2:A" & lastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange ws.UsedRange
            .MatchCase = False
            .Orientation = xlTopToBottom
            .Apply
        End With
        ' Parcourir les lignes restantes du bas vers le haut pour éviter les problèmes lors de la suppression
        For i = lastRow To 3 Step -1
            ' Extraire la date
            dateValeur = ws.Cells(i, 1).Value
     
             ' Si la date n'est pas déjà dans le dictionnaire, l'ajouter
            If Not dictDates.exists(Int(dateValeur)) Then
                dictDates.Add Int(dateValeur), i
            Else
                ' Si la date est déjà présente, supprimer la ligne puisque suite au tri
                ' c'est forcément l'heure la plus élevée qui est dans le dictionnaire
                ws.Rows(i).Delete
            End If
        Next i
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Santé
    Inscrit en
    Août 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 29
    Par défaut
    Bonjour,

    Je tiens à vous remercier pour votre aide.
    Cela a été très utile !

    Merci !!!!

    Belle journée,

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

Discussions similaires

  1. [XL-2007] Supprimer des lignes avec vba
    Par sigma17 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/01/2015, 15h31
  2. [XL-2010] Besoin d'aide pour supprimer des lignes en VBA
    Par SimKmil dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/05/2013, 08h46
  3. macro excel pour supprimer des lignes comportant un caractere spécial
    Par fredo49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2011, 16h32
  4. [AC-2002] ouvrir un fichier txt et supprimer des lignes
    Par Brett dans le forum VBA Access
    Réponses: 2
    Dernier message: 31/03/2010, 16h36
  5. supprimer des lignes avec VBA
    Par NulenVBA dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/10/2008, 17h14

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