Re,
La ligne de commande de filtrage :
[PlageAFiltrer].AdvancedFilter xlFilterCopy, [Crt], [PlageCible]
Elle sera d'autant plus courte en utilisant des noms de plage...
PlageAFiltrer= le tableau à filtrer incluant la ligne d'en-tête. Si on utilise un tableau Excel, on peut y accéder par :
Worksheets("NomFeuille").ListObjects(1).Range (NB- le nom mis par Excel automatiquement dans le gestionnaire de noms ne couvre pas l'en-tête), si plage normale, la nommer en dynamique.
Crt=zone de critères (la 1re ligne doit reproduire les noms de champs utilisés, la seconde [éventuellement les suivantes...] les critères), on peut la placer n'importe où, on la nomme et on utilise le nom.
PlageCible= plage de résultat du filtrage définie par sa première ligne, on peut aussi la nommer ou utiliser les réf. cellules... Cette première ligne accueillera les noms de champs, et les suivantes les lignes de la base filtrées. Si elle est vide au départ, pas de problème, sinon veiller à ce qu'elle contiennent les noms de champs exactement reproduits...
NB- En notation compacte dans le code, on place simplement un nom de plage entre crochets.
Cordialement.