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 :

Parcourir des lignes et supprimer si condition


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
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut Parcourir des lignes et supprimer si condition
    Bonjour tt le monde,

    je reviens vers vous encore une fois parsq je crois que je perd du temps dans un probléme qui semble simple.
    J'ai un fichier excel avec plus de 17000 lignes et je veux parcourir ces derniers pour :
    - exécuter des instructions sur les lignes dont la deuxième colonne = "1" ou "2"
    - supprimer les lignes dont la deuxième colonne = "SLoc"
    pour cela j'ai écris les lignes de code suivantes :

    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
     
    Dim a, b
    b = ActiveSheet.UsedRange.Rows.Count
     
    For a = 2 To b
     
            If Cells(a, 2) <> "SLoc" And Cells(a, 2) <> "" Then
     
                      ....
     
            ElseIf Cells(a, 2) = "SLoc" Then 
     
                      Cells(a, 2).EntireRow.Delete
            End If
     
    Next
    Mais ça marche pas ça bloque quand la boucle For arrive sur la dernière ligne dont la deuxième colonne = "1" ou "2"

    Ps : j'ai déja trié ma deuxième colonne, du coup j'ai tout mes lignes à supprimer en bas, donc si j'arrive à récuperer l'indice de la premiére lignes à supprimer, je vais selectionner les lignes à partir de cet indice jusqu'à "b" et puis supprimer la selection, mais j'y arrive pas. c'est parsq je suis débutant en VBA et je sais pas trop manipuler les boucle pouvez-vous m'aider SVP. Merci d'avance

    A+

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lorsque l'on supprime des lignes dans excel, il faut parcourir les lignes de la dernière vers la première
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Invité
    Invité(e)
    Par défaut
    et oui tu as raison:
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Lorsque l'on supprime des lignes dans excel, il faut parcourir les lignes de la dernière vers la première

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut
    Bonjour Philippe,

    Premièrement merci pour ta disponibilité
    j'ai essayé de faire la boucle en inverse avec : For a = b To 2 step -1 , mais ça prends bq de temp avant de se lancer je sai pas pq, ça a pris 10min

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
     
    Dim a, b
    b = ActiveSheet.UsedRange.Rows.Count
     
    For a = b To 2 Step -1
     
           If UCase(Trim("" & Cells(a, 2))) = UCase("SLoc") Then Rows(a).Delete
     
     
    Next
    End Sub
    il faut boire le calice jusqu’à la lie. on y peut pas grand chose sauf si tu as des ligne avec des chaines vide, alors supprime les toutes avant d’exécuter ta macro.

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    j'ai essayé de faire la boucle en inverse avec : For a = b To 2 step -1 , mais ça prends bq de temp avant de se lancer je sai pas pq, ça a pris 10min
    Bonjour yaciin; et à tous


    Le UsedRange est peut-être très bas sur la feuille.

    Remplace

    b = ActiveSheet.UsedRange.Rows.Count

    par

    b = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

    ou par

    b = Cells.Find("*", , , , xlByColumns, xlPrevious).Row


    Cordialement

    Docmarti

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 20
    Par défaut
    ree

    La boucle à l'inverse marche bien pour la suppression des lignes
    le : b = Cells.Find("*", , , , xlByColumns, xlPrevious).Row , a réduit relativement le temps de l'exécution aussi

    Merci a tous, j'arrête pas d'apprendre de ce forum

    A+++

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

Discussions similaires

  1. parcourir une liste et supprimer des éléments selon une condition
    Par jean-pat dans le forum Général Python
    Réponses: 17
    Dernier message: 17/03/2017, 22h07
  2. Parcourir des lignes en vba
    Par Sawzaaren dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/04/2012, 09h14
  3. [WD-2010] Supprimer des lignes par rapport à une condition
    Par CG2956 dans le forum VBA Word
    Réponses: 2
    Dernier message: 10/01/2012, 01h50
  4. [DOM] DOM : parcourir des <td> et supprimer leurs enfants
    Par WalidNat dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/01/2009, 10h17
  5. filtré des lignes aléatoirement mais sous condition
    Par afssaLERH dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/11/2008, 15h10

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