Fonction filtre avec WorksheetFunction

Bonjour à tous,

J'aimerais créer une fonction qui me permettrait d'utiliser la fonction filtre avec WorksheetFunction.

J'ai essayé en écrivant cela, mais ça ne fonctionne pas ...

Function a()
a = WorksheetFunction.Filter(Range("A1:B12"), (Range("A1:A12")) = "Lundi")
End Function

Si vous avez une solution je suis preneur.

Vous trouverez ci joint mon fichier Excel

27test1.xlsm (14.60 Ko)

Merci d'avance pour votre aide

Bonjour,

Qu'est ce que vous cherchez à obtenir comme résultat ? Pourquoi ne pas utiliser NB.SI ou SOMME.SI ?

Cdlt,

Merci de ton retour Ergotamine,

Mon objectif est de recréer des tableaux triès.

je ne vois pas comment les fonctions SOMME.SI et NB.SI pourraient m'aider ?

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,

Bonjour;

Merci 3GB pour ton intervention, comme toujours pertinente. J'allais dans ce sens mais je n'étais pas sûr, donc tu confirmes, j'avance ! En tout cas je n'aurai jamais été capable de pondre une telle fonction personnalisée.

Sinon il existe aussi les solutions TCD avec segment ou POWER QUERY, ou tout simplement, filtrer pour filtrer une table de donnée.

Cdlt,

Salut Ergotamine,

En effet, il existe tout un tas de solutions et la fonction n'est pas nécessairement la meilleure (ça dépend du contexte). En fait, je suis surtout intervenu car la fonction de départ n'avait pas de paramètres et n'aurait pas été facilement réutilisable.

D'ailleurs, je ne sais même pas s'il faut filtrer ou trier.

Cdlt,

Bonjour,

La fonction Filtre (Filter) est présente dans 365 uniquement. Et L'objet WorksheetFunction intègre bien cette fonction.

Cdlt.

Merci à tous pour vos retours,

Pour être tout à fait franc avec vous j'ai simplifié ma fonction et ma question pour ne pas rentrer trop dans les détails et c'est pourquoi ma fonction n'avait pas de paramètre d'entrée.

Mais je me rends compte que c'est une erreur et je vais vous exposer l'ensemble de mon problème :

Mon but et de trier un long tableau de 3 colonne ( Date/Puissance/Température) en recréant une multitude de tableau, je m'explique.

J'aimerais avoir un tableau par heure de la journée et par jour, c'est à dire un tableau de lundi 00h00 ensuite un tableau de lundi 01h00 ... jusqu'à Dimanche 23h00. Ce qui me fait donc 168 tableaux en tout.

Comme vous l'imaginez je vais pas m'amuser à le faire manuellement, c'est pourquoi je cherche à écrire la fonction FILTRE sur VBA pour ensuite pourvoir l'intégrer dans une boucle et faire c'est fameux 168 tableaux.

Pour résumer je cherche à faire une fonction filtre qui me permettra de recréer des tableaux avec les températures associées à leurs puissances pour une heure et un jour donné. Il y aura donc dans cette fonction 2 paramètre d'entrer : le jour et l'heure.

Je suis donc à la recherche d'une façon de faire cela, peut importe comment tant que cela fonctionne.

J'avais essayé avec Application.Evaluate, cela à fonctionné pour une centaine de donnée mais dès que je veux passer sur l'ensemble de mes données mon Excel crash. C'était prévisible ...

Pour imager mes propos, vous trouverez ci joint un échantillon de mon tableau avec l'un des tableaux filtre que j'aurais fait manuellement.

12test1.xlsm (28.16 Ko)
capture

Je vous remercie de votre aide et du temps que vous m'accordez,

Bien cordialement

Bonjour,

Un début de réponse avant de penser VBA !?

Cdlt.

43test1.xlsm (40.71 Ko)

Bonjour Jean-Eric,

Merci de ta réponse,

Effectivement c'est un très bon début de réponse !

Avec du recul je pense que cela devrait pouvoir répondre à mes attentes et que je n'aurai pas besoin de passer par VBA.

J'ai alors plein d'autres questions qui me vienne, je vais donc recréer un sujet pour ne pas polluer celui ci.

Bien cordialement

Bonjour,

Merci de retour et je dois saluer ton investissement.

Pas facile de travailler (s'adapter) avec ce nouveau moteur de calcul d'Excel avec Excel 365.

Modifie ton profil...

Cdlt.

Rechercher des sujets similaires à "fonction filtre worksheetfunction"