Parcourir des lignes et supprimer si condition

Fermé
yaciin Messages postés 23 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 27 août 2014 - 17 janv. 2014 à 11:19
yaciin Messages postés 23 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 27 août 2014 - 17 janv. 2014 à 14:07
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+
A voir également:

7 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
17 janv. 2014 à 11:33
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
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
yaciin Messages postés 23 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 27 août 2014
17 janv. 2014 à 12:04
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yaciin Messages postés 23 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 27 août 2014
17 janv. 2014 à 13:09
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
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
17 janv. 2014 à 13:52
Voici un exemple de traitement avec filtrage
https://www.cjoint.com/?DArnZ6mHsA1

A+
0
yaciin Messages postés 23 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 27 août 2014
17 janv. 2014 à 14:07
je te remercie beaucoup Gyrus, je vais essayer d'adapter cet exemple à mon code
Bonne aprés-midi à toi

a+
0