Bonjour à tous,
Je ne connais pas la fonction FILTRE, indisponible sur ma version mais je doute qu'elle soit correctement gérée par l'objet worksheetfunction...
Quel est l'objectif concrètement ?
En tout cas, voici une proposition de fonction qui renvoie un tableau dynamique avec filtre sur un mot-clé :
function Filtrer(Plage as range, champ&, motcle$)
dim temp()
t = Plage.value2
for i = lbound(t) to ubound(t)
if t(i, champ) like "*" & motcle & "*" then
n = n + 1: redim preserve temp(1 to ubound(t, 2), 1 to n)
for k = lbound(t, 2) to ubound(t, 2)
temp(k, n) = t(i, k)
next k
end if
next i
Filtrer = application.transpose(temp)
end function
Pour coder une fonction, il faut lui rentrer les éléments dont elle dépend en paramètres (ce sont des variables régissant son fonctionnement).
Ici, on définit la plage à filtrer. Elle est chargée dans une tableau dynamique.
On définit le champ de filtre (la colonne de la plage) . On parcourt chaque ligne du tableau et si dans cette colonne, on y trouve le motcle, on retient la ligne entière qu'on reporte dans un autre tableau temp redimensionné au fur et à mesure des correspondances.
La particularité/difficulté est la transposition du tableau temp, effectuée à cause de l'instruction redim preserve qui ne fonctionne que sur la dernière dimension. Donc on alimente ce tableau transposé puis à la fin on le restitue retransposé...
Exemple d'utilisation dans une procédure :
sub test()
a = Filtrer(range("A1:B12"), 1, "Lundi")
range("D1").resize(ubound(a), ubound(a, 2)) = a
end sub
Cdlt,