suppression de plusieurs lignes contenant un même mot

spyderdvd

XLDnaute Nouveau
Bonjour à tous,

J'ai crée cette macro pour le fichier joint:
sub Martin
'Supprim ligne avec MARTIN
'
nb_ligne = Sheets("TEST").Range("A5").End(xlDown).Row
For i = 5 To nb_ligne
If Sheets("TEST").Range("G" & i).Value Like "*Martin*" Then
Sheets("TEST").Rows(i).Delete
Else
End If
Next i
'
End Sub

Par contre j'ai fait ceci pour effacer toutes les lignes contenant Martin mais le problème est que
lorsque la ligne suivante contient également Martin celle-ci ne s'efface pas?
Je pense que cela vient du fait que lorsqu'une 1ère ligne (exemple TEST ligne 7)
contenant Martin est supprimée, la ligne suivante (exemple TEST ligne 8) devient ligne 7
et donc comme ma macro demande de passer à la suivante celle-ci ne s'efface pas.

Avez vous une solution à mon problème qui est d'effacer toutes les lignes contenant le mot Martin ?

Merci d'avance.
 

Pièces jointes

  • TEST.xls
    28 KB · Affichages: 26

cp4

XLDnaute Barbatruc
Bonsoir,
Il faut commencer à supprimer par le bas de la feuille.
En commençant comme tu as fait le numéro de ligne va changer
et par conséquent des lignes seront sautées.
VB:
Option Explicit
Sub Martin()
   Dim nb_ligne As Integer, i As Integer
   'Supprim ligne avec MARTIN
   '
   With Sheets("TEST")
      nb_ligne = .Range("A" & Rows.Count).End(xlUp).Row
      For i = nb_ligne To 5 Step -1
         If .Range("G" & i).Value Like "*Martin*" Then
            .Range("A" & i).EntireRow.Delete
         Else
         End If
      Next i
     End With
End Sub
 

Jacky67

XLDnaute Barbatruc
Bonjour à tous,

J'ai crée cette macro pour le fichier joint:
sub Martin
'Supprim ligne avec MARTIN
'
nb_ligne = Sheets("TEST").Range("A5").End(xlDown).Row
For i = 5 To nb_ligne
If Sheets("TEST").Range("G" & i).Value Like "*Martin*" Then
Sheets("TEST").Rows(i).Delete
Else
End If
Next i
'
End Sub

Par contre j'ai fait ceci pour effacer toutes les lignes contenant Martin mais le problème est que
lorsque la ligne suivante contient également Martin celle-ci ne s'efface pas?
Je pense que cela vient du fait que lorsqu'une 1ère ligne (exemple TEST ligne 7)
contenant Martin est supprimée, la ligne suivante (exemple TEST ligne 8) devient ligne 7
et donc comme ma macro demande de passer à la suivante celle-ci ne s'efface pas.

Avez vous une solution à mon problème qui est d'effacer toutes les lignes contenant le mot Martin ?

Merci d'avance.
Bonjour,
Pour supprimer des lignes dans le genre de code que tu utilises et pour éviter le problème que tu rencontres, il faudra commencer la boucle par la fin.
change cette ligne
For i = 5 To nb_ligne
par
For i = ligne To 5 Step -1
 

job75

XLDnaute Barbatruc
Bonsoir spyderdvd, cp4, Jacky67,

S'il y a beaucoup de lignes à supprimer cette macro sera beaucoup plus rapide :
Code:
Sub SupprimerMartin()
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
With Sheets("TEST")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .Range("A1", .UsedRange)
        .Columns("G").Insert xlToRight
        .Columns("G") = "=1/ISERROR(SEARCH(""Martin"",RC[1]))"
        .Columns("G") = .Columns("G").Value 'supprime les formules
        .Sort .Columns("G"), xlAscending, Header:=xlNo 'tri pour grouper et accélérer
        .Columns("G").SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
        .Columns("G").Delete xlToLeft
    End With
    With .UsedRange: End With 'actualise les barres de défilement
End With
End Sub
A+
 

spyderdvd

XLDnaute Nouveau
Bonsoir Job75,
J'ai essayé ta macro et celle-ci m'efface la colonne F (équilibres) et me créer une colonne A avec des 1 ou #DIV/O!
Par contre les MARTIN sont encore présent, j'ai mis une copie d'écran. en pièce jointe.
Sinon c'est pas grave, la première solution fonctionne.
A+
 

Pièces jointes

  • TEST.JPG
    TEST.JPG
    133.8 KB · Affichages: 32

spyderdvd

XLDnaute Nouveau
Bonjour Job 75,
Désolé pour ma réponse un peu tardive mais après quelque recherche effectivement il y bien eu un tri horizontal auparavant
car j'ai utilisé une macro d'une première demande de déplacement de colonne et ensuite j'ai utilisé votre macro
pour supprimer les lignes contenant MARTIN.

Bonne soirée.
 

Discussions similaires