Supprimer les lignes d'un tableau contenant un mot

Bonjour à tous,

J'essaie de créer une macro qui me permettrait de nettoyer un tableau Excel en supprimant toutes les lignes qui possèdent le mot TOTAL. Comme ce tableau est complété régulièrement, il faut faire cette opération régulièrement donc j'ai voulu ajouter un bouton pour le faire en auto.

Cela ne fonctionne pas!

Voilà ce que j'ai fait:

J'ai créé une macro et un bouton associé "Updatedata" puis j'ai démarré l'enregistrement.

- Ctr F puis rechercher le mot TOTAL, "rechercher tout", Ctr A, "suivant". Clic droit sur les lignes sélectionnées, supprimer lignes.

Je stoppe l'enregistrement.

Après avoir rechargé le tableau avec des lignes, j'essaie et seulement la ligne pour laquelle j'ai fait le clic droit disparait (elle ne contient d'ailleurs pas le mot TOTAL).

Si vous pouviez m'aider svp en me donnant le code VBA pour supprimer toutes les lignes possédant les mots TOTAL" et "Durée".

Merci

Bonjour,

Avec l'enregistrement de macro, la recherche du mot "Total" ne s'enregistre pas.

Il nous faudrait un fichier exemple représentatifs de ton fichier sans données confidentielles et on pourra plus facilement t'aider.

avec ce bouton :

image

Voilà ;-)

il faut que la macro trouve toutes les lignes les les mots en jaune (la couleur est là pour repérer) puis supprimer ces lignes.

Merci

94classeur1.xlsx (13.09 Ko)

bonjour Dums45,

cette macro supprime toutes ces lignes en une fois, mais elle efface des lignes entières, donc s'il y a des choses à côté de cette plage (ici les lignes 2:72 à partir de la colonne G), cela sera aussi supprimé !!!!

Sub Dangeureux_Mais_Vite()

     With Sheets("Data").Range("A1").CurrentRegion
          .AutoFilter
          .AutoFilter 4, "total"
          If .Columns(1).SpecialCells(xlVisible).Count > 1 Then
             Application.DisplayAlerts = False
             .Offset(1).Resize(.Rows.Count - 1).Delete
           Application.DisplayAlerts = True
          End If
          .AutoFilter
     End With

End Sub

oubien (sans ce danger)

Sub Plus_Lent()
     Dim Derl  As Long
     With Sheets("Data")
          Derl = .Range("A" & Rows.Count).End(xlUp).Row
          For i = Derl To 2 Step -1
               If .Cells(i, "D").Value = "TOTAL" Then
                    .Range("A" & i).Resize(, 6).Delete
               End If
          Next
     End With
End Sub

Merci.

Comment ajouter la même fonction pour supprimer les lignes avec "Durée" aussi?

Bonjour,

Il suffit d'ajouter une seconde boucle For J avec la seconde condition :

Sub Macro1()
Dim NBLIGNE As Long
NBLIGNE = Range("A65536").End(xlUp).Row

For i = NBLIGNE To 2 Step -1
If Range("D" & i).Value = "TOTAL" Then
Rows(i & ":" & i).Delete
End If
Next

For j = NBLIGNE To 2 Step -1
If Range("C" & j).Value = "Catégorie" Then
Rows(j & ":" & j).Delete
End If
Next j

End Sub

Merci beaucoup

Bonjour à tous ,

Une méthode un peu plus compliquée mais plutôt rapide.

Le classeur joint supprime les lignes du tableau comportant "Catégorie" en colonne C ou comportant "TOTAL" en colonne D. Cliquer sur le bouton Hop!

Sur ma bécane, pour 20 000 lignes dans la base, la durée d'exécution est de 0,11 s pour 3 425 lignes supprimées.

Le code dans Module1 :

Sub SupprLignes()
Dim der&, deb, der2&
   deb = Timer
   With Sheets("data")
      If .FilterMode Then .ShowAllData
      der = .Cells(Rows.Count, "a").End(xlUp).Row
      If der = 1 Then Exit Sub
      Application.ScreenUpdating = False
      .Columns("a:a").Insert
      On Error GoTo FIN
      .Cells(2, "a").Formula = "=IF(OR(d2=""Catégorie"",e2=""TOTAL""),NA(),ROW())"
'      .Cells(2, "a").Formula = "=IF(e2=""TOTAL"",NA(),ROW())"  '<<<<<< réactiver la ligne pour ne supprimer que les lignes "TOTAL"
      .Range("a2").AutoFill Destination:=.Range("a2:a" & der)
      .Range("a2:a" & der).Value = .Range("a2:a" & der).Value
      .Range("a1:g1").Resize(der).Sort key1:=.Range("a1"), order1:=xlAscending, Header:=xlYes
      On Error Resume Next
      .Range("a1:a" & der).SpecialCells(xlCellTypeConstants, xlErrors).Resize(, 7).Delete xlShiftUp
FIN:
      On Error GoTo 0
      der2 = .Cells(Rows.Count, "a").End(xlUp).Row
      .Columns("a:a").Delete
   End With
   MsgBox (der - der2) & " lignes supprimée(s) en " & Format(Timer - deb, "#,##0.0\ sec.")
End Sub
Rechercher des sujets similaires à "supprimer lignes tableau contenant mot"