Bonjour,
En gros, tu souhaites supprimer des lignes suivants des critères ?
Code de la procédure
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 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 à gauche 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 |
Exemples d’appels de cette procédure
Lignes de codes permettant de supprimer toutes les lignes
- de la plage de cellules $A$1:$M$1000 dont la valeur de la cellule de la colonne I est 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)"
- de la plage de cellules $A$1:$E$52 dont la valeur de la cellule de la colonne D est égal à “C”
DeleteRowsByAdvancedFilter Range("$A$1:$E$52"), "=D2=""C"""
Un fichier exemple à télécharger ici
Partager