Microsoft 365 Aide explication de formule svp

Atlas85200

XLDnaute Nouveau
Bonjour,

Je suis en train de reporter des données d'une feuille à autre autre selon un critère, j'ai trouvé une formule mais j'ai un peu de mal à l'apprivoiser :

1714326660519.png

Je la comprends jusqu'à LIGNE(A), je ne comprends plus

Pouvez me l'expliquer svp ?

Merci par avance
 
Solution
Bonjour à tous,
Pour le meme resultat que la formule que tu proposes, utilises plutot min.si.ens() ou si tu veux la liste par ordre croissant,
=Trier(filtre(Répertoire!$A$2:$A$10;Répertoire!$C$2:$C$10="m"))
la formule que tu as trouvée est devenue obsolète pour les nouvelles version d'excel>2019

Crdlmt

Dranreb

XLDnaute Barbatruc
Bonsoir.
La partie un peu délicate à comprendre c'est l'expression LIGNE(Répertoire!$A$2:$A$10)/(Répertoire!$C$2:$C$10="m"). Elle renvoie un tableau d'une colonne contenant un mélange de numéros de lignes des cellules de Répertoire!$C$2:$C$10 valant "m" et de valeurs d'erreurs #DIV0!. Après, le numéro 15 de la fonction AGREGAT en donnes les petites valeurs, les classe donc, et son option 6 en exclut les fameuses valeurs d'erreurs #DIV/0!. LIGNE(A1) donne je pense le rang désiré de la petite valeur. FILTRE(Répertoire!$A$2:$A$10;Répertoire!$C$2:$C$10="m") devrait donner le même résultat. Alors sur une version d'Excel ne disposant pas de cette fonction, comme la mienne d'ailleurs, je préfèrerais utiliser une fonction perso FILTR écrite en VBA :
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
 
Dernière édition:

djidji59430

XLDnaute Barbatruc
Bonjour à tous,
Pour le meme resultat que la formule que tu proposes, utilises plutot min.si.ens() ou si tu veux la liste par ordre croissant,
=Trier(filtre(Répertoire!$A$2:$A$10;Répertoire!$C$2:$C$10="m"))
la formule que tu as trouvée est devenue obsolète pour les nouvelles version d'excel>2019

Crdlmt
 

Discussions similaires

Statistiques des forums

Discussions
312 417
Messages
2 088 254
Membres
103 790
dernier inscrit
Djo Hubs