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

5exemple.xlsx (109.35 Ko)

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

4exemple.xlsm (273.17 Ko)

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é

Rechercher des sujets similaires à "supprimer ligne partir recherche mot"