Ouh ! C'est pas beau !

  • Initiateur de la discussion thombar
  • Date de début
T

thombar

Guest
Bonjour

Voila, je suis en train de faire une macro qui efface toutes les lignes d'une feuille ou la valeur des cellules de la colonne N ne commence pas par "LB".
Et je souhaite commencer ce petit bazar à partir de la ligne 6, pas avant.

J'ai commencé à faire un truc (qui va vous faire sourire certainement), mais bon je fais des efforts pour un vendredi après midi !!:

Sub Cherch()
For i = Selection.Rows.Count To 1 Step -1
For Each ligne In ActiveSheet.UsedRange.Rows
R = ligne.Row
chercheLB = Left(Cells(R, 14), 2)
If chercheLB <> "LB" Then Cells(R, 14).EntireRow.Delete
Next
Next i
End sub

Alors, non seulement ca ne commence pas à la ligne 6, mais en plus c'est ultra-lent à executer, je pense que j'ai un problème de boucles.

En fait j'aimerais quelquechose de très rapide....

merci de votre aide !!!!
 
R

Rhodan

Guest
salut
commence par mettre cette ligne en début de macro pour accélerer la macro....

Application.ScreenUpdating = False

merci à :

Monique Celeda - Ti - Jean-Marie - LaurentTBT - C@thy- Chris - Syl's - Dan - Eric - André - Denis - La Toile -
 
M

Michel_M

Guest
Salut Thombar, rhodan et le forum


essaies ceci

Option Explicit

Sub lb()

Dim lig As Long, fin As Long

fin = Range("N6").End(xlDown).Row

For Each cell In Range("N6:N" & fin)
If Left(cell, 2) <> "Lb" Then
lig = cell.Row
Rows(lig).Delete
End If
Next

End Sub

Si tu as bcp d'éléments, ajoute le ligne de Rhodan
(Usedrange est très bien pour avoir le temps de regarder ta macro agir...)

Bonne soirée
Michel
 
M

Michel_M

Guest
Re

C'était l'heure de la soupe quand j'ai envoyé mon post et en écrivant vite la macro, j'ai oublié de déclarer Cell; ça l'a fout mal avec une option explicit en tête...Donc, à rajouter en début de lmacro

Michel
 
T

thombar

Guest
Bonjour,

J'ai effectué des tests, mais il s'avère que la macro s'arrête si elle trouve une cellule vide.......

Dans cette colonne N, on peut trouver une valeur commencant par LB (ligne à conserver) ou n'importe quoi y compris rien, et là je souhaite voir disparaître la ligne.


merci de votre aide.
 
@

@+Thierry

Guest
Bonjour Thombar, Michel, le Forum

Ah ! il me semble que tu n'avais pas précisé que tu avais des cellules vides. Ce n'est pas grave mais c'est une autre approche :

Option Explicit
Option Compare Text 'pour comparer "LB" ou "lb"
Sub CLeanAllExceptLB()
Dim L As Integer
With Sheets(1)
For L = 6 To .Range("N65536").End(xlUp).Row
If Left(.Range("N" & L).Text, 2) <> "LB" Then
.Range("N" & L).ClearContents
End If
Next
On Error Resume Next
.Range("N6:N" & L).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub

Explications : Si il y a plusieurs cellule vides contigues dans ta plage (par exemple N10, N11, N12 et N13 sont vides), il faut que le user click et reclick jusqu'à ce qu'il n'y en ait plus des cellules vides !!! si on utilise les boucles proposée plus haut...

Ce phénomène est dû à "EntireRow.Delete" qui, quand cette instruction est utilisée au cours d'un boucle de type "For Each Cell in Range", finit par faire un décalage, ce qui est logique, on enlève des Rows alors que le "compteur" de la boucle tourne....Alors que la méthode que je propose si dessus, dans la boucle on ne fait que mettre les cellules à Vide, puis on gère la suppression des vides...

Bonne Soirée
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
314 190
Messages
2 106 996
Membres
109 735
dernier inscrit
Mounskad