Suppression de ligne si un mot précis est dans les cellules

Bonjour,

Je souhaite supprimer des lignes de la colonne A lorsque le mot "bio" est trouvé dans des cellules (tout en sachant qu'une cellule peut contenir plusieurs mots, "bio" étant un des mots)

J'ai trouvé la formule suivante sur le forum, elle fonctionne mais elle cherche "bio" dans toutes le colonnes ! Comment modifier la formule pour que sa recherche ne se fasse que sur la colonne A ? :

Sub SuppBIO()

Dim I As Integer

For I = [A65000].End(xlUp).Row To 1 Step -1

If Not Cells(I, 1).Resize(1, 6).Find("bio") Is Nothing Then Rows(I).Delete

Next I

End Sub

Merci.

François

Bonjour

SupprimesResize(1, 6)

Sub SuppBIO()
Dim I As Integer
For I = [A65000].End(xlUp).Row To 1 Step -1
If Not Cells(I, 1).Find("bio") Is Nothing Then Rows(I).Delete
Next I
End Sub
Banzai64 a écrit :

Bonjour

SupprimesResize(1, 6)

Sub SuppBIO()
Dim I As Integer
For I = [A65000].End(xlUp).Row To 1 Step -1
If Not Cells(I, 1).Find("bio") Is Nothing Then Rows(I).Delete
Next I
End Sub

Merci ça marche ! Et si je veux dire à la macro qu'elle recherche plusieurs mots et supprime toujours les lignes si un de ces mots est trouvé, par exemple chercher "bio" ou "régime" ou 'bienfaits" ? Quelle modif dois je effectuer dans la macro ?

Bonjour

Une solution

Sub SuppBIO()
Dim I As Integer
  For I = [A65000].End(xlUp).Row To 1 Step -1
  If Not Cells(I, 1).Find("bio") Is Nothing Or _
     Not Cells(I, 1).Find("régime") Is Nothing Or _
      Not Cells(I, 1).Find("bienfaits") Is Nothing Then Rows(I).Delete
  Next I
End Sub

Bonjour à tous, salut Banzai,

Autre solution,

si beaucoup de lignes et peu à rechercher, évite de boucler sur toutes les lignes.

Sub SupprimeLigne()
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("f1:f" & [f65000].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
End Sub

édit: ajouter Application.ScreenUpdating = False

Amicalement

Claude

Banzai64 a écrit :

Bonjour

Une solution

Sub SuppBIO()
Dim I As Integer
  For I = [A65000].End(xlUp).Row To 1 Step -1
  If Not Cells(I, 1).Find("bio") Is Nothing Or _
     Not Cells(I, 1).Find("régime") Is Nothing Or _
      Not Cells(I, 1).Find("bienfaits") Is Nothing Then Rows(I).Delete
  Next I
End Sub

Impeccable Merci à toi Banzai64, à Claude aussi

Dans le meme genre et à l'inverse, comment peut t'on faire pour supprimer les lignes de la colonne A qui ne contiennent pas le mot "bio" dans les cellules ?

Bonjour

Tu repends la première macro

Sub SuppNonBIO()
Dim I As Integer
For I = [A65000].End(xlUp).Row To 1 Step -1
If  Cells(I, 1).Find("bio") Is Nothing Then Rows(I).Delete
Next I
End Sub
Banzai64 a écrit :

Bonjour

Tu repends la première macro

Sub SuppNonBIO()
Dim I As Integer
For I = [A65000].End(xlUp).Row To 1 Step -1
If  Cells(I, 1).Find("bio") Is Nothing Then Rows(I).Delete
Next I
End Sub

Ca marche, merci

Bonjour,

J'ai bien inclus cette macro (ayant le même problème) mais je voudrais que la macro soit active dans plusieurs feuilles, et dans plusieurs fichiers si possible ?

Cordialement,

Mel

Bonjour,

Je me permets de m’insérer dans cette discussion étant donné que je cherche à faire quelque chose de similaire.

J’ai un fichier qui contient près de 5000 lignes et je souhaite supprimer les lignes qui contiennent « mot1 », « mot2 » ou « mot3 ».

A la lecture du post de dubois je pense qu’il est préférable de ne pas boucler sur toutes les lignes, comme il le suggère.

J’ai donc essayé, sans succès, d’adapter son code à mon utilisation.

Plutôt que de chercher une liste de mots contenus dans une colonne (dans son exemple "f1:f") je cherche à mettre directement dans le code, les mots (« mot1 », « mot2 », « mot3 ») afin qu’ils suppriment la ligne qui les contient.

J’ai donc essayé de remplacer "f1:f" par "mot1" , "mot2" , "mot3" et visiblement Excel n’apprécie pas, car il me renvoie un message d’erreur…

Voici exactement le code :

For Each Cel In Range("mot1" , "mot2" , "mot3" & [f65000].End(xlUp).Row

J’aimerais donc savoir si la syntaxe de dubois me permet de procéder comme je le souhaite ou pas ; et la syntaxe à suivre dans ce cas.

En espérant avoir suffisamment clair et précis, je vous remercie par avance pour votre aide !

escadron

Bonjour et bienvenu(e)

Pas glop de squatter un post (il faut en ouvrir un autre en indiquant le référence de celui-ci - mais pas grave)

Macro modifiée : A toi d'indiquer les bonnes valeurs

Option Explicit

Sub SupprimeLigne()
'Dim Lg&, c As Range, Cel As Range
Dim Lg&, c As Range, Cel
Dim firstAddress$

  Lg = Range("a" & Rows.Count).End(xlUp).Row
  Application.ScreenUpdating = False

'  For Each Cel In Range("f1:f" & [f65000].End(xlUp).Row) 'mots à rechercher
  For Each Cel In Array("bio", "régime", "bienfaits", "toto")    '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
End Sub

Salut Banzai64,

Merci beaucoup pour ta réponse, le code marche à merveille !

Juste pour comprendre (je débute en VBA), peux tu m’expliquer le rôle du ‘firstAddress’, je ne vois pas bien comment il fonctionne…

Je te remercie pour ton aide,

escadron

PS : message bien compris pour mes prochains posts

Bonjour

escadron a écrit :

peux tu m’expliquer le rôle du ‘firstAddress’

Grosso Modo

Dans une recherche (Find) pour éviter de boucler Do ..... While sans arrêt on note l'adresse de la première occurrence trouvée et on continue à chercher .FindNext(c) jusqu'à ce que l'on retombe sur cette cellule c.Address <> firstAddress

Dans ce cas précis c'est inutile car on efface les cellules trouvées (mais bon "ça ne mange pas de pain")

Ah ok, je comprends mieux

Merci pour tes réponses rapides !

A bientôt

J'ai trouvé ce vieux message et il m'est très pratique puisque la macro fonctionne très bien.

J'aimerais savoir si l'on peut modifier cette macro pour faire l'inverse. C'est-à-dire, conserver les lignes qui contiennent les mots 'bio', 'régime' et 'bienfaits' et supprimer les lignes qui ne contiennent pas ces mots.

Bonjour et bienvenu(e)

Avec cette macro, je ne pense pas qu'elle soit idéale pour faire de que tu veux

Un filtre serait (je pense) plus efficace

Mais sans voir le fichier pas évident

Fournis un fichier qui reflète ton fichier réel avec la liste des mots ainsi que les données à traiter

Malheureusement, je ne peut fournir le fichier. Ce n'est pas un fichier personnel.

J'utilise déjà une macro pour ce fichier et je veux simplement y ajouter un filtre pour que cela soit automatisé.

Je continue mes recherches. rdi2:

Bonjour à tous,

je débute

Merci pour ce code

Sub SuppBIO()

Dim I As Integer

For I = [A65000].End(xlUp).Row To 1 Step -1

If Not Cells(I, 1).Find("bio") Is Nothing Then Rows(I).Delete

Next I

End Sub

Les lignes que je veux supprimer, le mot se trouve dans la colonne BE, du coup j'ai remplacé le A65000 par BE65000 et cela ne fonctionne pas, est ce qu'il y a une raison ? par avance merci pour votre aide.

Bonne journée

Rechercher des sujets similaires à "suppression ligne mot precis"