Retourner les gagnants avec la gestion des ex-aequo (Excel 2021 et plus)

Vous pouvez télécharger directement le fichier ici :

Avec les nouvelles fonctions d'Excel, ça se fait en une seule formule relativement simple. FILTRE permet de renvoyer un tableau des gagnants. On peut utiliser le MAX si on ne veut retourner que le score le plus élevé.

=FILTRE(Tableau10[Equipe];Tableau10[Points]=MAX(Tableau10[Points]))

On peut aussi ajouter une variante pour déterminer la liste des gagnants en fonction des scores. On utilise pour cela la fonction GRANDE.VALEUR :

=FILTRE(Tableau10[Equipe];Tableau10[Points]>=GRANDE.VALEUR(Tableau10[Points];3))

Que l' on peut ensuite joindre avec la fonction JOINDRE.TEXTE

=JOINDRE.TEXTE(" ; ";;FILTRE(Tableau10[Equipe];Tableau10[Points]>=GRANDE.VALEUR(Tableau10[Points];3)))

Ensuite (Excel 365), comment gérer le dernier élément. J'utilise la fonction Exclure (excel 365), mais on pourrait aussi utiliser la fonction INDEX pour retourner les lignes qui nous intéressent.

=LET(
gagnants;
FILTRE(Tableau10[Equipe];Tableau10[Points]>=GRANDE.VALEUR(Tableau10[Points];3));
   SI(LIGNES(gagnants)=1;
      "Le groupe gagnant est le " & MINUSCULE(gagnants);
      "Les groupes gagnants sont : " & MINUSCULE(JOINDRE.TEXTE( ", ";;EXCLURE(gagnants;-1))) & " et " & PRENDRE(gagnants;1)))

Et finalement on transforme en Lambda. On pourra personnaliser à l'envie le texte en fonction des besoins. On notera l'utilisation de la fonction TRIER et TRIERPAR pour avoir les gagnants dans le bon ordre.

J'utilise le nom : L_Gagnants pour la lambda

=LAMBDA(ListePoints;ListeParticipants;TopN;[Texte_UnSeulGagnant];[Texte_PlusieursGagnants];LET(MaxN;GRANDE.VALEUR(ListePoints;TopN);gagnants;FILTRE(ListeParticipants;ListePoints>=MaxN);
          SI(LIGNES(gagnants)=1;
                  SI(ISOMITTED(Texte_UnSeulGagnant);"Le gagnant est : ";Texte_UnSeulGagnant) & MINUSCULE(gagnants);
                  SI(ISOMITTED( Texte_PlusieursGagnants);"Les gagnants sont : "; Texte_PlusieursGagnants) & MINUSCULE(JOINDRE.TEXTE( ", ";;EXCLURE(gagnants;-1))) & " et " & PRENDRE(gagnants;-1))))(Tableau10[Points];Tableau10[Equipe];1;"Le groupe gagnant est le ";"Les groupes gagnants sont : ")

Et une fois que la lambda est créée, c'est super simple à utiliser :

Et en personnalisant le message :

Voici aussi la solution pour Excel 2021, sans la fonction EXCLURE.

L'astuce consiste à utiliser une fonction INDEX combinée avec SEQUENCE, ce qui permet de retourner la liste des n-1 premiers items : INDEX(gagnants;SEQUENCE(LIGNES(gagnants)-1;1);)

Pour le dernier gagnant, c'est le même principe, mais en plus simple : INDEX(gagnants;LIGNES(gagnants);)

=LAMBDA(ListePoints;ListeParticipants;TopN;[Texte_UnSeulGagnant];[Texte_PlusieursGagnants];
      LET(MaxN;GRANDE.VALEUR(ListePoints;TopN);gagnants;FILTRE(TRIERPAR(ListeParticipants;ListePoints;-1);TRIER(ListePoints;;-1)>=MaxN);
          SI(LIGNES(gagnants)=1;
                  SI(ISOMITTED(Texte_UnSeulGagnant);"Le gagnant est : ";Texte_UnSeulGagnant) & MINUSCULE(gagnants);
                  SI(ISOMITTED( Texte_PlusieursGagnants);"Les gagnants sont : "; Texte_PlusieursGagnants) &
                    MINUSCULE(JOINDRE.TEXTE( ", ";;INDEX(gagnants;SEQUENCE(LIGNES(gagnants)-1;1);))) &
                    " et " &INDEX(gagnants;LIGNES(gagnants);)
                  )))(Tableau10[Points];Tableau10[Equipe];3;"Le groupe gagnant est le ";"Les groupes gagnants sont : ")