Macro pour supprimer des lignes avec des libellés spécifiques

  • Initiateur de la discussion Initiateur de la discussion Anto35200
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Anto35200

XLDnaute Occasionnel
Bonjour,

J'en appelle à vos connaissances pour pouvoir dans mon fichier suivant, par une macro, supprimer toutes les lignes qui ont pour libellé (colonne K):
"COM SUR REM CB"
"COM SUR IMPAYES"
"COM REMISES EFFETS"
"COM SUR VIRT"

En vous remerciant d'avance de votre aide.
 

Pièces jointes

Re : Macro pour supprimer des lignes avec des libellés spécifiques

Bjr plimosin

avec cette macro :

Code:
Sub recherchersuppr()
Application.ScreenUpdating = False
Dim I     As Long
Dim Plage As Range
Set Plage = Range("K1:K" & Range("K65536").End(xlUp).Row)
For I = Plage.Cells.Count To 1 Step -1
    If InStr(Plage.Cells(I).Text, "COM SUR REM CB") Or InStr(Plage.Cells(I).Text, "COM SUR IMPAYES") _
    Or InStr(Plage.Cells(I).Text, "COM REMISES EFFETS") Or InStr(Plage.Cells(I).Text, "COM SUR VIRT") Then
    Plage.Cells(I).EntireRow.Delete
    End If
Next
Application.ScreenUpdating = True

End Sub

Cordialement, Gérard
 
Re : Macro pour supprimer des lignes avec des libellés spécifiques

Bonjour plimosin, Gérard,

S'il y a beaucoup de lignes ceci sera bien plus rapide :

Code:
Sub TEST()
Application.ScreenUpdating = False
Columns(1).Insert 'colonne auxiliaire
With [B1].CurrentRegion.Columns(0)
  .FormulaR1C1 = "=1/OR(TRIM(RC12)={""COM SUR REM CB"",""COM SUR IMPAYES"",""COM REMISES EFFETS"",""COM SUR VIRT""})"
  .Value = .Value 'supprime les formules
  Cells.Sort .Cells, xlDescending, Header:=xlYes 'tri pour accélérer la suppression
  On Error Resume Next
  .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete 'recherche les valeurs numériques
  .EntireColumn.Delete
End With
With ActiveSheet.UsedRange: End With 'met à jour la barre de défilement verticale
End Sub
Nota 1 : j'ai mis TRIM (SUPPRESPACE) dans la formule en cas d'espaces superflus (ça arrive).

Nota 2 : COMMISSIONS SUR REMISE CB n'est pas supprimé, vous ne l'avez pas demandé.

A+
 
Re : Macro pour supprimer des lignes avec des libellés spécifiques

Bonjour,

Merci à Natorp et Job75 de vos réponses. Les macros, l'une comme l'autre sont parfaites, j'ai testé les 2.

Job75, pourriez-vous me dire comment je peux faire pour insérer un bouton macro sur la Feuil1. J'ai mis un bouton macro, mais elle ne se lance pas.

Cordialement.
 
Re : Macro pour supprimer des lignes avec des libellés spécifiques

Bonjour plimosin, le forum,

J'ai mis un bouton macro, mais elle ne se lance pas.

Il vaudrait mieux affecter à la macro un raccourci clavier mais bon...

Commencez par insérer une ligne vide au dessus de la ligne de titres pour y placer le bouton.

Puis onglet DEVELOPPEUR => Insérer, vous avez 2 possibilités.

1) Contrôle de formulaire : clic droit, vous lui affectez la macro TEST.

2) Contrôle ActiveX :

- clic droit => Visualiser le code pour y mettre cette macro :

Code:
Private Sub CommandButton1_Click()
TEST
End Sub
- clic droit => Propriétés et modifiez la propriété Caption

- quitter le mode Création.

La macro TEST est à placer dans un module standard, et comme vous avez inséré une ligne, remplacez [B1] par [B2].

Fichier joint avec les 2 boutons, en plus j'ai figé les lignes 1 et 2.

Bonne journée.
 

Pièces jointes

Re : Macro pour supprimer des lignes avec des libellés spécifiques

Re,

Noter que s'il y a plusieurs lignes au dessus de la ligne de titres il faut remplacer :

Code:
Cells.Sort .Cells, xlDescending, Header:=xlYes 'tri pour accélérer la suppression
par :

Code:
.EntireRow.Sort .Cells, xlDescending, Header:=xlYes 'tri pour accélérer la suppression
Fichier (2).

A+
 

Pièces jointes

Re : Macro pour supprimer des lignes avec des libellés spécifiques

Re,

L'utilisation du CurrentRegion nécessitait de définir la 1ère cellule du tableau.

Avec le UsedRange de la feuille ce n'est plus la peine :

Code:
Sub TEST()
Application.ScreenUpdating = False
With Intersect(ActiveSheet.UsedRange.EntireRow, Columns("K")) 'K colonne à filtrer
  .Insert xlToRight 'colonne auxiliaire
  With .Offset(, -1)
    .FormulaR1C1 = "=1/OR(TRIM(RC[1])={""COM SUR REM CB"",""COM SUR IMPAYES"",""COM REMISES EFFETS"",""COM SUR VIRT""})"
    .Value = .Value 'supprime les formules
    .EntireRow.Sort .Cells, xlDescending, Header:=xlNo 'tri pour accélérer la suppression
    On Error Resume Next
    .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete 'recherche les valeurs numériques
    .Delete xlToLeft
  End With
End With
With ActiveSheet.UsedRange: End With 'met à jour la barre de défilement verticale
End Sub
Fichier (3).

A+
 

Pièces jointes

Re : Macro pour supprimer des lignes avec des libellés spécifiques


Bonjour,

une rapide suppression via un filtre avancé :

Code:
Sub Demo()
    [Z1:Z5].Value = Application.Transpose(Array(Cells(11).Value, "COM SUR REM CB", _
                        "COM SUR IMPAYES", "COM REMISES EFFETS", "COM SUR VIRT"))
    With Cells(1).CurrentRegion.Columns(11)
        .AdvancedFilter xlFilterInPlace, [Z1:Z5]
        If .SpecialCells(xlCellTypeVisible).Count > 1 Then .Offset(1).Delete xlShiftUp
    End With
    With ActiveSheet:  .ShowAllData:  .UsedRange:  End With
    [Z1:Z5].Clear
    ActiveWindow.ScrollRow = 1
End Sub
_______________________________________________________________________________
Merci de cliquer sur J'aime ce post pour chaque message ayant aidé …

_______________________________________________________________________________
Je suis Charlie - Je suis Bardo
 
Dernière édition:
Re : Macro pour supprimer des lignes avec des libellés spécifiques

Bonjour plimosin, Marc L,

La suppression avec filtre avancé prend généralement bien plus de temps que la suppression avec tri.

Voyez les fichiers joints avec 10000 lignes, sur Win 8 - Excel 2013 :

- suppression avec tri => 0,31 seconde

- suppression avec filtre avancé => 2,67 secondes.

Edit : en toute rigueur il faut ajouter Application.ScreenUpdating = False sur le filtre avancé.

Mais ça ne change pratiquement rien.

A+
 

Pièces jointes

Dernière édition:
Re : Macro pour supprimer des lignes avec des libellés spécifiques


Bonjour job75,

merci du rappel; de mon côté la suppression via filtre avancé prend 1,152s et
quant à ta méthode elle ne passe pas - c'est du reste la raison de mon intervention - sur ma version 2003
même en enregistrant le classeur en .xls, peut-être un souci du convertisseur
(soit erreur 32809 sur la ligne Intersect soit formule non interprétée) …
J'attends d'avoir sous le coude une version 2007 (mais PC portable moins puissant) pour tester de nouveau.

Pour des utilisateurs pas à l'aise avec les formules et un nombre raisonnable de données,
le filtre avancé reste accessible tout en étant plus rentable que des boucles en VB pur !

_______________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !

 
Re : Macro pour supprimer des lignes avec des libellés spécifiques


Merci !

• Tri … : 0,141s

• Filtre : 1,266s … (affichage désactivé : 1,140s)

_______________________________________________________________________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. (Albert Einstein)
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour