Supprimer une ligne à partir de la recherche d'un mot
Bonjour à tous,
Je viens écrire un peu en dernier recours car je bloque totalement étant débutant en macro. Voici mon problème.
Je voudrais que la macro recherche des mots qui sont dans une certaine colonne M pour l'exemple. Puis va chercher dans une autre feuille si l'on retrouve les mots de la colonnes M et on supprime le contenu de toute la ligne. Et en plus de ça j'aimerai bien une petite confirmation via une msgbox avant la suppression du contenue.
En cherchant à droite à gauche j'ai réussie à faire ça mais j'ai pas réussie à l'appliquer sur mon exemple
Dim Lg&, c As Range, Cel As Range
Dim firstAddress$
Lg = Range("a" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For Each Cel In Range("m1:m" & [m2000].End(xlUp).Row) 'mots à rechercher
With Range("a1:a" & Lg)
Set c = .Find(Cel, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Range(c.Address).ClearContents
Set c = .FindNext(c)
If c Is Nothing Then Exit Do
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next Cel
On Error Resume Next 'si pas de vides
Range("a1:a" & Lg).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Merci d'avance
Voici un exemple un peu simpliste de mon fichier.
Bonjour,
Toutes ces lignes vides en colonne G dans votre exemple c'est normal ? Combien de fois devrez vous réaliser l'action ? Car la macro mets quelques secondes pour s’exécuter. A vous de juger.
En attendant, sur la base de votre exemple, en passant par un array contenant les critères :
Sub NET()
Dim LR&, MOT As Variant, L&, I%
Application.ScreenUpdating = False
With ActiveSheet
LR = .Cells(.Rows.Count, 7).End(xlUp).Row
MOT = Worksheets("Mot à enlever").Range("A2:A" & Worksheets("Mot à enlever").[A2000].End(xlUp).Row) 'mots à rechercher
For L = LR To 2 Step -1
For I = LBound(MOT) To UBound(MOT)
If .Cells(L, 7) = MOT(I, 1) Or .Cells(L, 7) = "" Then .Cells(L, 7).EntireRow.Delete xlUp: Exit For
Next I
Next L
End With
Application.ScreenUpdating = True
End Sub
Cdlt,
Merci beaucoup pour la réactivité mais étonnamment je n'arrive pas à l'appliquer. Je met en pièce jointe mon fichier exemple qui est plus précis.
C'est pour un suivi des retard clients que l'on actualise toute les décades (10 jours) donc ce n'est pas embêtant si ça prend un peu de temps.
Désolé pour ça je suis tous nouveau la dedans comme dit précédemment
Bonjour,
Alors si vous êtes débutant, il va falloir être beaucoup plus précis dans votre demande car les deux fichiers que vous avez postés ne se ressemblent pas dans leur structure. Ma question principale concerne les lignes à supprimer. La liste des critères à supprimer je la vois, elle est en M3 à M8 de la feuille SUetCO30 (dynamique ça il n'y a pas de soucis).
Par contre je bug sur les données à supprimer. Sur quelles feuilles se trouvent-elles ? La feuille BASE (auquel cas on regarde dans la colonne G) ou la feuille SUetCO30 (auquel cas on regarde dans la colonne B) ? Si c'est la feuille SUet CO30, on supprime la ligne de la colonne A à la colonne I ? Car si je supprime toute la ligne et qu'un critère se trouve sur cette ligne, il sera également supprimé.
En vous remerciant pour les précisions apportées.
Cdlt,
Oui je m'en suis rendu compte c'est pour ça que j'ai essayé d'envoyer un exemple plus précis. Alors pour expliquer le fonctionnement complet ma feuille base tire ces infos d'une base de donné qui est sur un autre classeur, ensuite il y a un tri grâce à un tableau dynamique que j'ai enlevé car pas utile dans mon exemple et pour finir ca arrive en top 30 sur la feuille SUetCO30. Et moi c'est la feuille "BASE" (colonne G) où je veux enlever les lignes dont je n'ai pas besoin et la feuille SUetCO30 se modifiera toute seul à partir de mon TCD.
J'espère avoir était plus claire cette fois si.
Bonjour,
Dans ce cas si on souhaite nettoyer la feuille BASE, ce code devrait fonctionner. Je l'ai commenté pour que vous compreniez :
Sub NET()
Dim LR&, MOT As Variant, L&, I%
Application.ScreenUpdating = False
With Worksheets("BASE")
LR = .Cells(.Rows.Count, 7).End(xlUp).Row 'Dernière ligne feuille base
MOT = Worksheets("SUetCO30").Range("M3:M" & Worksheets("SUetCO30").[A2000].End(xlUp).Row) 'Plage des mots à suppr de M3 à dernière ligne colonne M
For L = LR To 2 Step -1 'De la dernière ligne à ligne 2 en remontant
For I = LBound(MOT) To UBound(MOT) 'Pour chaque mot des plages à suppr
If .Cells(L, 7) = MOT(I, 1) Or .Cells(L, 7) = "" Then .Cells(L, 7).EntireRow.Delete xlUp: Exit For 'Si cellule colonne G ligne L est vide ou égale à un mot à suppr alors supprime la ligne
Next I
Next L 'Passe ligne suivante
End With
Application.ScreenUpdating = True
MsgBox "Mise à jour terminée", vbInformation
End Sub
Cdlt,
Edit : Rajout de la MsgBox à la fin du code
Ca marche parfaitement, j'ai juste changé le Delete par un Clear Contents car sinon ça faisait bugée mes REF mais sinon c'est parfait. Merci beaucoup pour le temps et les explications que tu m'as donné