Filtre VBA plusieurs critères

Chère communauté,

je vous consulte aujourd'hui sur un sujet, dont la solution doit être "toute bête" mais je ne la trouve pas.

voici mon problème:

sur une feuille 1 j'ai un tableau avec des références numériques en case C:C, je souhaite filtrer cette case selon plusieurs critères.

si je prends uniquement 2 critères cela fonctionne, exemple (références entre 2080 et 2090):

Sheets("feuille1").Range("$A$2:$K50").AutoFilter Field:=3, Criteria1:=">=2080", Operator:=xlAnd, Criteria2:="<2090"

par contre j'ai besoin de filtrer en ajoutant une série supplémentaire (c'est a dire filtrer les référence entre 2080 et 2090 et entre 2100 et 2150) et ca ne fonctionne pas correctement, voici ce que j'ai tenté :

essai 1: celui-ci n'a pas fonctionné

Sheets("feuille1").Range("$A$2:$K50").AutoFilter Field:=3, Criteria1:=">=2080", Operator:=xlAnd, Criteria2:="<2090", Criteria3:=">=2100", Operator:=xlAnd, Criteria4:="<2150"

essai2: celui-ci m'a inclus toute les références avant 2150

Sheets("feuille1").Range("$A$2:$K50").AutoFilter Field:=3, Criteria1:=array(">=2080", "<2090"), Operator:=xlAnd, Criteria2:=array(">=2100", ="<2150")

Quelqu'un pourrait m'aider a obtenir ce que je veux?

merci de votre aide.

Bonjour

Une solution qui n'est peut être pas la plus directe serait d'ajouter une colonne avec des "Si", des "ET" et des "OU" pour n'avoir plus qu'un seul critère et de filtrer sur cette colonne.

Merci pour cette suggestion, la solution n'est pas directe en effet mais permet d'obtenir ce que je souhaite

voici ce que j'ai fait, si ca peut service à d'autres :

je créé mes variables de critères, je créé une colonne en fin de tableau, j'y insère une formule de contrôle des conditions puis filtre sur cette colonne ensuite, le tout en VBA :

Dim crit1 as integer, crit2 as integer, crit3 as integer, crit4 as integer

crit1 = "2080"

crit2 = "2090"

crit3 = "2100"

crit4 = "2150"

...

ActiveCell.FormulaR1C1 = _

"=IF(OR(AND([@réf]>=" & crit1 & ",[@réf]<" & crit2 & "),AND([@réf]>=" & crit3 & ",[@réf]<" & crit4 & ")),""OK"","""")" 

Sheets("feuille1").Range("$A$2:$K50").AutoFilter Field:=12, Criteria1:="OK"

...

Si une autre solution plus directe existe, je suis toujours preneur, ca me permettra d'optimiser mon code.

Merci.

Bonjour à tous,

Une solution consisterait à alimenter un array avec les valeurs à retenir. Voici une idée non testée :

function KeepValues(rColumn as range, paramarray Intervalles())
set dico = createobject("Scripting.dictionary")
for each elem in rColumn.value
    for each prm in Intervalles
        if elem >= prm(0) and elem < prm(1) then
            dico(elem) = "": exit for
        end if
    next prm
next elem
if dico.count > 0 then KeepValues = dico.keys
end function

A utiliser ensuite en amont dans votre code, afin d'avoir toutes les valeurs à filtrer :

Sub Mamacro()
with sheets("feuille1").listobjects("Tableau1")
    t = KeepValues(.listcolumns("ref").databodyrange, array(2080, 2090), array(2100, 2150))
    if isarray(t) then
        .range.autofilter field:=.listcolumns("ref").index, Criteria1:=t, Operator:=xlFilterValues
    end if
end with
end sub

Je peux donner des explications si besoin.

Cdlt,

Rechercher des sujets similaires à "filtre vba criteres"