Parcourir des lignes et supprimer si condition
yaciin
Messages postés
26
Statut
Membre
-
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 :
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+
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:
- Parcourir des lignes et supprimer si condition
- Supprimer rond bleu whatsapp - Guide
- Excel cellule couleur si condition texte - Guide
- Supprimer page word - Guide
- Supprimer pub youtube - Accueil - Streaming
- Partager des photos en ligne - Guide
7 réponses
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+
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+
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
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
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+
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+
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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+
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+