Filtre : exclure plus de 2 critères

llobica

XLDnaute Nouveau
Bonsoir à tous,

Je bloque depuis quelques temps sur ce problème, merci par avance de l'aide que vous pourrez m'apporter.

Je souhaite activer une fonction de filtre de manière à exclure plusieurs critères du filtre (au lieu d'en sélectionner).

Si mon problème se limitait à 2 critères, je pourrais utiliser la fonction suivante :
ActiveSheet.Range("$A$1:$A$6").AutoFilter Field:=1, Criteria1:="<>1", Criteria2:="<>2"

Seulement voila, j'ai plus deux 2 critères à exclure (environ une trentaine), par conséquent je pense qu'il faut que je passe par une formulation telle que celle-ci :
ActiveSheet.Range("$A$1:$A$7").AutoFilter Field:=1, Criteria1:=Array("1", _
"2", "3", "4"), Operator:=xlFilterValues
Mais cette syntaxe permet de filtrer en conservant les critères renseignés alors que je souhaiterais les retirer.

Auriez-vous la solution pour résoudre ce problème ?

Cordialement.

NB : Je débute en VBA...
 

job75

XLDnaute Barbatruc
Re : Filtre : exclure plus de 2 critères

Bonsoir llobica, bienvenue sur XLD,

C'est le filtre avancé (élaboré) qu'il faut appliquer :

Code:
Sub Filtre()
Dim a
a = Array(1, 2, 3, 4) 'valeurs à exclure
ThisWorkbook.Names.Add "Tableau", a 'nom défini
[B2].Formula = "=ISNA(MATCH(A2,Tableau,0))"
[A1:A12].AdvancedFilter xlFilterInPlace, [B1:B2]
'---retire le filtre---
'[A1:A12].AdvancedFilter xlFilterInPlace, ""
'[B2] = ""
End Sub
Le nom défini Tableau est utilisé dans la formule du critère en B2.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Filtre : exclure plus de 2 critères

Re,

Solution plus générale :

Code:
Sub Filtre()
Dim a, plage As Range
a = Array(1, 2, 3, 4) 'valeurs à exclure
Set plage = Intersect([A:A], ActiveSheet.UsedRange)
ThisWorkbook.Names.Add "Tableau", a 'nom défini
plage(2, 256).FormulaR1C1 = "=ISERROR(MATCH(RC[-255],Tableau,0))"
plage.AdvancedFilter xlFilterInPlace, plage(1, 256).Resize(2)
[IV:IV].ClearContents
End Sub

Sub AfficheTout()
On Error Resume Next
ActiveSheet.ShowAllData
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Filtre : exclure plus de 2 critères

Re,

Une solution sans fitre, mais moins rapide :

Code:
Sub Masque()
Dim a, plage As Range, n
a = Array(1, 2, 3, 4) 'valeurs à masquer
Application.ScreenUpdating = False
On Error Resume Next
Set plage = Intersect([A:A], ActiveSheet.UsedRange)
With Intersect(plage.EntireRow, [IV:IV])
  .Cells = plage.Value
  For Each n In a
    .Replace n, "#N/A", xlWhole
  Next
  .SpecialCells(xlCellTypeConstants, 16).EntireRow.Hidden = True
  .ClearContents
End With
End Sub

Sub AfficheTout()
Rows.Hidden = False
End Sub
Fonctionne même sans ligne de titre.

A+
 
Dernière édition:

llobica

XLDnaute Nouveau
Re : Filtre : exclure plus de 2 critères

Bonsoir job75,

Merci beaucoup pour vos réponses !
J'ai opté pour la deuxième solution qui me parle plus (d'un point de vue novice bien sur...).
Un problème de résolu !

Encore merci,
Bonne soirée,

llobica
 

Discussions similaires

Réponses
12
Affichages
321

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote