XL 2016 Équivalent à Filtre sous Excel 2016 ?

telemarrk

XLDnaute Occasionnel
Bonsoir,

J'ai dernièrement solliciter les membres du forum pour une aide sur la fonction filtre, aide qui m'a été donnée par Mapomme et Hasco.

J'ai appliqué les consignes sur un fichier au travail, mais il s'avère qu'il y a des PC qui tournent sur Excel 2016 et je ne peux appliquer la fonction Filtre.

Quelqu'un peut-il m'aider pour avoir une fonction alternative sur la version 2016 d'Excel.

Je vous joins le fichier d'exemple. J’aimerais avoir la fonction en L19


Merci
 

Pièces jointes

  • test-filtre.xlsx
    13.6 KB · Affichages: 20

Genedag

XLDnaute Nouveau
Bonjour!

Merci beaucoup job75 pour la fonction en VBA. J’ai un problème à faire propager la formule pour obtenir toutes les réponses possible. Car pour l’instant, il me renvoit seulement la 1ère correspondance alors qu’il y en a plusieurs. La fonction Filtre se propage toute seule mais comment le faire en ayant utiliser ta fonction en VBA.

As-tu une idée?

Merci!
 

Dranreb

XLDnaute Barbatruc
Bonjour.
En principe on ne "propage" pas une formule matricielle comme une formule classique, sauf si elle n'est que sur une ligne et qu'on veut qu'elle soit intégralement recalculée sur d'autres pour leurs seules propres lignes chaque fois.
S'il s'agit d'une modification, il faut sélectionner l'intégralité de la plage matricielle, cliquer dans la barre de formule pour la mettre en édition et ensuite seulement valider en matriciel. La nouvelle plage peut à la rigueur être plus grande que l'ancienne mais elle ne doit pas être plus petite. Si vous ne sélectionnez pas une plage contenant au moins toute l'ancienne, il vous dit que vous ne pouvez pas modifier une partie de matrice.
Enfin, du moins Excel 2016 le dit. Excel 365 peut être plus, parce qu'il détecte automatiquement que la formule renvoie un tableau et qu'elle doit donc être évaluée toujours une seule fois mais pour plusieurs cellules.
 
Dernière édition:

Genedag

XLDnaute Nouveau
Bonjour.
En principe on ne "propage" pas une formule matricielle comme une formule classique, sauf si elle n'est que sur une ligne et qu'on veut qu'elle soit intégralement recalculée sur d'autres pour leurs seules propres lignes chaque fois.
S'il s'agit d'une modification, il faut sélectionner l'intégralité de la plage matricielle, cliquer dans la barre de formule pour la mettre en édition et ensuite seulement valider en matriciel. La nouvelle plage peut à la rigueur être plus grande que l'ancienne mais elle ne doit pas être plus petite. Si vous ne sélectionnez pas une plage contenant au moins toute l'ancienne, il vous dit que vous ne pouvez pas modifier une partie de matrice.
Enfin, du moins Excel 2016 le dit. Excel 365 peut être plus, parce qu'il détecte automatiquement que la formule renvoie un tableau et qu'elle doit donc être évaluée toujours une seule fois mais pour plusieurs cellules.
Tout fonctionnait chez moi avec 365 car j’avais la fonction FILTRE mais au bureau, tout est vieux… d’où le pourquoi j’ai utiliser la fonction en vba.
Hum ok je ne suis pas certaine de bien comprendre alors. Malheureusement je ne peux joindre le fichier car je n’ai pas accès à rien avec cet ordinateur. Mais voici une photo de l’écran. Donc je cherche à ce qu’il me donne la liste des articles contenant ce qui se trouve en « F2 ». Mais il ne me donne qu’une correspondance (en f6, la cellule où est ma formule en matricielle.) Alors qu’il y en a plusieurs. Je cherche comment faire apparaitre les autres réponses.
Si je sélectionne exemple F6 à F1000 (ce qui est largement plus grand que le nombre d’article dans mon tableau) et que je clique dans la barre de formule et fait ctrl/shift/enter, il me met la même réponse partout, soit la 1ère qu’il trouve dans mon tableau.
Merci!!
 

Genedag

XLDnaute Nouveau
D6EF4564-E663-4E0A-970D-0B620E1018F1.jpeg
 

Dranreb

XLDnaute Barbatruc
Ça ne me semble pas correct. En tout cas ce ne le serait pas pour ma fonction FILTR. Le second argument doit être un tableau de Boolean, donc une expression matricielle couvrant les mêmes lignes que la colonne à restituer. Or là c'est une valeur unique. D'ailleurs pourquoi voudriez vous restituer la même chose que ce que vous cherchez autant de fois que ça y figure ?
Un exemple qui serait peut être correct avec ma fonction :
Code:
=FILTR(Tableau1[[No.pièce]];Tableau1[[Nom article]]=$F$2)
En tout cas vérifiez que votre deuxième argument est bien un tableau, en le sélectionnant et touche F9, ça devrait vous afficher {???;??? … ;???} avec des VRAI et FAUX à la place des ???
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
À la réflexion, si, ça devrait marcher: ça devrait sortir tous les Nom article qui contiennent les caractères spécifiés en F2.
On en revient donc à l'hypothèse de la formule revalidée sur chaque lignes au lieu d'une plage matricielle toute entière revalidée.
Essayez peut être cette macro :
Code:
Sub Test()
Dim Fml As String
With [F4].Resize(1000)
   Fml = .Rows(1).Formula
   .ClearContents
   .FormulaArray = Fml
   End With
End Sub
 
Dernière édition:

Genedag

XLDnaute Nouveau
Ça ne me semble pas correct. En tout cas ce ne le serait pas pour ma fonction FILTR. Le second argument doit être un tableau de Boolean, donc une expression matricielle couvrant les mêmes lignes que la colonne à restituer. Or là c'est une valeur unique. D'ailleurs pourquoi voudriez vous restituer la même chose que ce que vous cherchez autant de fois que ça y figure ?
Un exemple qui serait peut être correct avec ma fonction :
Code:
=FILTR(Tableau1[[No.pièce]];Tableau1[[Nom article]]=$F$2)
En tout cas vérifiez que votre deuxième argument est bien un tableau, en le sélectionnant et touche F9, ça devrait vous afficher {???;??? … ;???} avec des VRAI et FAUX à la place des ???
Au final ce que je veux c’est pouvoir obtenir un menu déroulant dynamique. Donc un menu qui contiendrait tous les articles disponibles. Mais comme c’est bcp trop long à chercher et qu’il y a souvent de nouveaux articles j’aimerais qu’il se réduise selon les quelques caractères que je met. (Cette fonctionnalité se fait sur excel en ligne mais ce n’est pas ce que j’utilise et ça fonctionnait avec la fonction FILTRE et le restant de la formule que je vous ai montré mais sur excel365).
Donc j’aimerais que si j’écris exemple baril tout ce qui contient baril apparaissent dans le menu déroulant sans que les autres articles apparaissent dans la liste.
 

Dranreb

XLDnaute Barbatruc
Je crois qu'il va y avoir un problème avec la fonction de @job75 si elle est utilisée sur 365 parce qu'il va retailler la plage matricielle, de sorte que s'il n'y a qu'un seul résultat ça va devenir une plage matricielle d'une seule cellule. La mienne garnit toujours un tableau de la taille du 1er argument et met une chaine vide dans les postes en trop.
Pour obtenir une liste de validation, peut être vaudrait-il mieux ne pas préparer la liste dans des cellules mais comme référence d'un nom dans le classeur.
 

Genedag

XLDnaute Nouveau
Je crois qu'il va y avoir un problème avec la fonction de @job75 si elle est utilisée sur 365 parce qu'il va retailler la plage matricielle, de sorte que s'il n'y a qu'un seul résultat ça va devenir une plage matricielle d'une seule cellule. La mienne garnit toujours un tableau de la taille du 1er argument et met une chaine vide dans les postes en trop.
Pour obtenir une liste de validation, peut être vaudrait-il mieux ne pas préparer la liste dans des cellules mais comme référence d'un nom dans le classeur.
Tu veux dire avec le gestionnaire de noms?
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 300
Membres
103 173
dernier inscrit
Cerba95