MEDIANE, ou l'art de diminuer les SI

Suite à une discussion très intéressante sur des calculs d'intervalles de dates, Brad Yundt a proposé une solution à base de MEDIANE.

Si on regarde, l'aide, on trouve la définition suivante :

Renvoie la valeur médiane des nombres. La médiane est la valeur qui se trouve au centre d’un ensemble de nombres.

Ainsi, en l'utilisant avec 3 valeurs, on réduit une formule de type :

Note : on peut simplifier un peu la formule en utilisant des ET et des OU, mais on voit bien que c'est un peu complexe.

D'où l'utilisation de la fonction MEDIANE :

=MEDIANE(A1;A2;A3)

Une particularité à noter, si la médiane n'est pas disponible (nombre pair de valeurs), Excel considère la moyenne entre les deux valeurs médiane. Ici, la médiane est 6 = (8+4)/2

L.Fractionner.Texte pour Excel 365 et 2021

Petite fonction du jour : comment séparer en ligne et en colonnes.
Sur Excel 365 Insider, ca se fait en une seule formule (fractionner.texte), mais en attendant, voici ce qui devrait faire l'affaire pour 365 (et 2021, je pense) :
Attention, il faut exactement le bon nombre de séparateur dans les données initiales (voir copie d'écran)

=LET(
plage;A1:A3;
DelimiteurL;".";
DelimiteurC;",";
resultat1;FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurL;;plage);DelimiteurL;"</a><a>")&"</a></b>";"//a");
INDEX(TRANSPOSE(
FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurC;;resultat1);DelimiteurC;"</a><a>")&"</a></b>";"//a")
);
SEQUENCE(LIGNES(resultat1);
NBCAR(INDEX(resultat1;1;1))-NBCAR(
SUBSTITUE(INDEX(resultat1;1;1);DelimiteurC;)
)+1)))

et avec une Lambda (pour plus d'informations sur la création de Lambda, c'est par ici), par exemple L.FRACTIONNER.TEXTE :

=LAMBDA(plage;DelimiteurC;DelimiteurL; LET(resultat1;FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurL;;plage);DelimiteurL;"</a><a>")&"</a></b>";"//a"); INDEX(TRANSPOSE( FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurC;;resultat1);DelimiteurC;"</a><a>")&"</a></b>";"//a") ); SEQUENCE(LIGNES(resultat1); NBCAR(INDEX(resultat1;1;1))-NBCAR( SUBSTITUE(INDEX(resultat1;1;1);DelimiteurC;) )+1))))

Un peu de VBA

En VBA, comment inverser deux textes séparés par un caractère?

Il y a pleins d'autres solutions, mais j'aime bien celle-là d'un point de vue pédagogique.

Soit un texte du style R21_TOTO

On veut le transformer en TOTO_R21 par VBA

On peut donc faire l'opération suivante

Sub InverserTexte()
    Dim sTexte As String
    sTexte = "R21_TOTO"

    sTexte = Split(sTexte, "_")(1) & "_" & Split(sTexte, "_")(0)

    MsgBox sTexte
End Sub

L'idée est de scinder (split) le texte en un tableau, puis de reprendre l'élément 1 du tableau et de le concaténer avec l'élément 0 du tableau.