Je vous propose dans ce billet, une procédure qui vous permettra de supprimer les lignes d’une liste de données suivant les critères que vous aurez choisi comme par exemple toutes les personnes Célibataires, gagnant plus de 2.500€. Cette procédure est basée sur la méthode AdvancedFilter.
La méthode AdvancedFilter d’un objet Range permet d’effectuer énormément d’opération en VBA et ce avec un minimum de lignes de code.
Cette méthode est issue de la fonctionnalité des filtres avancés d’excel qui permettent une multitude d’opérations telles que l’exportation de données suivant des critères, l’extraction sans doublons, etc.
SI vous ne connaissez pas les filtres avancés d’excel, je vous suggère d’abord la lecture de ce didacticiel Les filtres avancés ou élaborés dans Excel
Code de la procédure DeleteRowsByAdvancedFilter
Sub DeleteRowsByAdvancedFilter(ByVal areaData As Range, ByVal FormulaCriteria As String) ' Author : Philippe Tulliez (Http://philippe.tulliez.be ' Date : 21/11/2015 (V 1.0) ' Arguments ' areaData (Objet) - Plage des données (Etiquettes de colonnes + données ' FormulaCriteria (String) - Formule à placer dans la zone des critères ' Déclaration des variables Dim areaCriteria As Range ' Assignation de la référence des critères à la variable objet areaCriteria ' Les critères se trouveront à 2 colonnes à droite de la plage de données With areaData Set areaCriteria = areaData.Offset(columnoffset:=.Columns.Count + 1).Resize(2, 1) ' Zone des critères 2 colonnes à droite de la zone des données End With ' Placement des critères (Etiquettes de colonne + critère calculé) areaCriteria(1) = "_fn_": areaCriteria(2).Formula = FormulaCriteria With areaData ' Filtre les données On Error GoTo ExitSub .AdvancedFilter xlFilterInPlace, areaCriteria ' Suppression des lignes filtrées sans la première ligne (Etiquettes de colonnes) .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete End With ExitSub: areaData.Worksheet.ShowAllData ' Efface le filtre On Error GoTo 0 areaCriteria.Clear ' Suppression de la zone des critères Set areaData = Nothing: Set areaCriteria = Nothing End Sub
Comment appeler cette procédure ?
- Ligne de code permettant de supprimer toutes les lignes de la plage de cellules A1:M1000 dont la cellule de la colonne I contient une date de l’année 2000 et que la valeur en colonne E est supérieure à 2500
DeleteRowsByAdvancedFilter Range("$A$1:$M$1000"), "=AND(YEAR(I2)=2000,E2>2500)"
- Ligne de code permettant de supprimer toutes les lignes de la plage de cellules A1:E52 dont la valeur de la cellule de la colonne D est égal à « C »
DeleteRowsByAdvancedFilter Range("$A$1:$E$52"), "=D2=""C"""
Classeur exemple à télécharger
De nombreux exemples de suppression de lignes dans ce classeur
[wpdm_package id=’795′]
Commentaires récents