Parcourir des lignes et supprimer si condition

yaciin Messages postés 26 Statut Membre -  
yaciin Messages postés 26 Statut Membre -
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 :


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+

7 réponses

  1. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Pour effectuer ce type de traitement avec une suppression de ligne, tu dois incrémenter ta boucle en sens inverse
    For a = b To 2 step -1

    Cela dit, tu as sûrement intérêt à procéder différemment pour cette suppression.
    En utilisant un filtre pour sélectionner les lignes à supprimer par exemple. Sur 17000 lignes, tu gagnerais un temps non négligeable.

    A+
    0
  2. foo
     
    Bonjour

    ses bien Gyrus

    en claire ca donne ca

    Sub testDel()
    Dlig = 2
    Flig = Range("A" & Rows.Count).End(xlUp).Row
    For L = Flig To Dlig Step -1
    If Cells(L, 2) <> "SLoc" And Cells(a, 2) <> "" Then
    Rows(L).Delete
    End If
    Next
    End Sub

    A+
    Maurice
    0
  3. yaciin Messages postés 26 Statut Membre
     
    Bonjour Gyrus,

    premièrement merci pour ta disponibilité, ta proposition de faire la bouble à l'inverse a marché pour la suppression des lignes, mais ça a pris 10min pour se lancer :o :s
    je revien alors sur le gain de temps que t'a proposé, tu px stp developper un peu comment je px utiliser le filtre ?
    MErci d'avance

    A+
    0
  4. foo
     
    Bonjour

    Pour aller plus vite

    Sub testDel()
    Dlig = 2
    Flig = Range("A" & Rows.Count).End(xlUp).Row
    With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    End With

    For L = Flig To Dlig Step -1
    If Cells(L, 2) <> "SLoc" Then
    Rows(L).Delete
    End If
    Next
    With Application
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    End With
    End Sub

    A+
    Maurice
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yaciin Messages postés 26 Statut Membre
     
    reee

    c'est bon ça marche la boucle à l'inverse merci bq
    mais le temps d'exécution me pose tjrs probléme surtout que les instructions que je fais si <> "SLoc" ce sont DEUX VLOOKUP sur deux feuilles différentes d'un autre fichier différent aussi pour remplir la 4éme et la 5éme colonnes des lignes à garder ( si <> "SLoc" )

    Si tu px expliquer un peu plus Gyrus comment je px exploiter les filtres pour gagner du temps, je serai reconnaissant

    A+
    0
  7. yaciin Messages postés 26 Statut Membre
     
    je te remercie beaucoup Gyrus, je vais essayer d'adapter cet exemple à mon code
    Bonne aprés-midi à toi

    a+
    0