XL 2016 la fonction FILTRE que je n'ai pas !

LEPATOCHE

XLDnaute Occasionnel
Bonsoir a tous dans excel je n'ai pas la fonction FILTRE puis je l'avoir et comment ont fait pour l'avoir merci de votre aide ! la marche a suivre exactement dans la mesure du possible moi j'ai excel 2016 que j'ai acheter !
 

Eleusis670

XLDnaute Nouveau
Bonsoir.
D'après ce que j'en ai vu, elle n'est guère compliquée à écrire en VBA. Mais il n'accepte pas que je l'appelle FILTRE. Alors j'ai enlevé le 'E' à la fin :
VB:
Function FILTR(ByVal TDonn, ByVal TCond)
   Dim LE&, LS&, C&
   If TypeOf TDonn Is Range Then TDonn = TDonn.Value
   If TypeOf TCond Is Range Then TCond = TCond.Value
   For LE = 1 To UBound(TDonn, 1)
      If TCond(LE, 1) Then
         LS = LS + 1
         For C = 1 To UBound(TDonn, 2)
            TDonn(LS, C) = TDonn(LE, C)
            Next C: End If: Next LE
   Do While LS < UBound(TDonn, 1)
      LS = LS + 1
      For C = 1 To UBound(TDonn, 2)
         TDonn(LS, C) = ""
         Next C: Loop
   FILTR = TDonn
   End Function
À valider en matriciel, en principe …
#Dranreb : merci beaucoup pour cette macro, qui va me permettre de déployer mon petit fichier excel écrit avec le fonction filtre (office 365), sur les postes de ma boite qui sont encore en 2016 :)
 

Eleusis670

XLDnaute Nouveau
Bonsoir.
D'après ce que j'en ai vu, elle n'est guère compliquée à écrire en VBA. Mais il n'accepte pas que je l'appelle FILTRE. Alors j'ai enlevé le 'E' à la fin :
VB:
Function FILTR(ByVal TDonn, ByVal TCond)
   Dim LE&, LS&, C&
   If TypeOf TDonn Is Range Then TDonn = TDonn.Value
   If TypeOf TCond Is Range Then TCond = TCond.Value
   For LE = 1 To UBound(TDonn, 1)
      If TCond(LE, 1) Then
         LS = LS + 1
         For C = 1 To UBound(TDonn, 2)
            TDonn(LS, C) = TDonn(LE, C)
            Next C: End If: Next LE
   Do While LS < UBound(TDonn, 1)
      LS = LS + 1
      For C = 1 To UBound(TDonn, 2)
         TDonn(LS, C) = ""
         Next C: Loop
   FILTR = TDonn
   End Function
À valider en matriciel, en principe …
Bonjour Drandeb,
un grand merci pour cette macro, cela va me permettre de déployer mon petit fichier utilisant la fonction Filtre (365) sur les poste de ma société, majoritairement en 2016 :)
 

martinTh

XLDnaute Nouveau
Bonsoir.
D'après ce que j'en ai vu, elle n'est guère compliquée à écrire en VBA. Mais il n'accepte pas que je l'appelle FILTRE. Alors j'ai enlevé le 'E' à la fin :
VB:
Function FILTR(ByVal TDonn, ByVal TCond)
   Dim LE&, LS&, C&
   If TypeOf TDonn Is Range Then TDonn = TDonn.Value
   If TypeOf TCond Is Range Then TCond = TCond.Value
   For LE = 1 To UBound(TDonn, 1)
      If TCond(LE, 1) Then
         LS = LS + 1
         For C = 1 To UBound(TDonn, 2)
            TDonn(LS, C) = TDonn(LE, C)
            Next C: End If: Next LE
   Do While LS < UBound(TDonn, 1)
      LS = LS + 1
      For C = 1 To UBound(TDonn, 2)
         TDonn(LS, C) = ""
         Next C: Loop
   FILTR = TDonn
   End Function
À valider en matriciel, en principe …
Bonjour Dranreb,

Merci pour votre astuce, c'est très élégant !
Cependant, elle ne fonctionne pas sur toutes les version d'Excel. Dans mon cas, je n'arrive pas à la faire fonctionner sur la version 14.0 (et version 16.0 apparemment aussi) d'Excel alors qu'elle fonction sur les versions les plus récentes (versions qui contiennent la fonction Filtre par défaut ..)
Avez-vous une astuce pour ça ?
Je peux vous transmettre un fichier avec une Excel d'application

Bonne journée à vous
Martin
 

Pièces jointes

  • Exemple d'application.xlsm
    16.9 KB · Affichages: 18
Dernière édition:

LEPATOCHE

XLDnaute Occasionnel
Bonsoir Dranreb ,

cette fois ci j'ai cette fonction filtre car j'ai sur mon ordinateur
Microsoft 365 que j'ai fait installer chez un magasin informatique et bien sur excel 2016 a était désinstaller
et je peux dire
que cette formule est formidable je la metrise comme un chef !
merci a vous quand même et bonne soirée .
 

martinTh

XLDnaute Nouveau
Bonsoir
Sur des version autres que 365 la formule doit être validée en matriciel (par Ctrl+Shift+Entrée)
Bonjour,

Merci pour votre retour et votre réactivité !
J'ai appliqué votre conseil, en effet ça fonctionne mais partiellement, la fonction ne me retour qu'une valeur alors qu'il y en a deux qui correspondent au critère.

Avec-vous une solution à ça ?

Bonne journée
Martin
 

Pièces jointes

  • Exemple d'application - validé en matriciel.xlsm
    17.5 KB · Affichages: 9

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour

Sur la base du fichier Fil.xlsm du post#11
En E1 la formule suivant à tirer vers le bas :
=SIERREUR(AGREGAT(15;6;$B$1:$B$10/($A$1:$A$10=$D$1);LIGNE(1:1));0)
Pour ceux qui préfèrent en F1, à valider par CTRL+MAJ+ENTRER puis à tirer vers le bas :
=SIERREUR(PETITE.VALEUR(SI($A$1:$A$10=$D$1;$B$1:$B$10);LIGNE(1:1));0)

Les deux zone E2:E10 et F2:F10 ont un format personnalisé pour masquer les 0 (zéros) : Standard;Standard;;
 

Pièces jointes

  • FIL.xlsm
    20.9 KB · Affichages: 17

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16