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:
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é
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)
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:
Le générateur de macro m'a donc écrit en dur ce que je lui avais donné en paramétré.
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
Comment mettre l'argument de CriteriaRange en variable ?
J'ai essayé comme cela, mais ça ne marche pas:
Ça fait deux heures que je tourne en rond, quelqu'un peut-il m'aider ?
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
Merci
Partager