Ouh ! C'est pas beau !

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 !!!!
 
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 -
 
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
 
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
 
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
581
Réponses
2
Affichages
1 K
Retour