Bonjour,

Je veux faire un tri avancé avec une macro ou du vba. J'ai une base de données à trois champs, dans les colonnes A, B et C.
J'utilise l'outil filtre élaboré pour extraire des enregistrements, filtrés sur plusieurs critères.

Pour cela, j'utilise la fonction DECALER, avec la syntaxe suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
=DECALER(Feuil1!$E$1;;;MAX(SI($E$2:$F$8<>"";LIGNE($E$2:$F$8);0));2)
Dans les colonnes E et F, j'ai mis les champs sur lesquels je fais les filtres qui servent de référence au filtre élaboré
Quand je lance manuellement le filtre élaboré, je remplis la boîte de dialogue "critères" avec la chaîne ci-dessus, et ça marche

Par contre, je veux automatiser mes requêtes par une macro - ce qui évite de modifier le code en fonction du nombre de lignes remplies dans les colonnes E et F
, mais quand j'enregistre manuellement le filtre automatique, le code généré est le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
    Range("A1:C9").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "E1:F3"), CopyToRange:=Range("J1:L1"), Unique:=False
Le générateur de macro m'a donc écrit en dur ce que je lui avais donné en paramétré.
Comment mettre l'argument de CriteriaRange en variable ?

J'ai essayé comme cela, mais ça ne marche pas:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 Range("A1:C9").AdvancedFilter Action:=xlFilterCopy, _ 
 CriteriaRange:=Range(" = DECALER(Feuil1!$E$1;;;MAX(SI($E$2:$F$8<>"";LIGNE($E$2:$F$8);0));2)"), _ 
 CopyToRange:=Range("J1:L1"), Unique:=False
Ça fait deux heures que je tourne en rond, quelqu'un peut-il m'aider ?
Merci