Voici une formule bien utile pour les administrateurs système qui manipulent des listes de noms de fichiers avec Excel. Elle permet de supprimer le répertoire d'un chemin. Par exemple, « /abc/def/ghi/truc.txt » devient « truc.txt ». A1 est la cellule contenant le texte d'origine.

=SI(ESTERREUR(TROUVE("/";A1));A1;STXT(A1;
 TROUVE(CAR(1);SUBSTITUE(A1;"/";CAR(1);
 NBCAR(A1)-NBCAR(SUBSTITUE(A1;"/";""))))+1;
 NBCAR(A1)))

Sur un Excel anglophone, ou sur Google Document et Tableur cela s'écrit (notez que CHAR(1), l'équivalent anglais de CAR(1) ne fonctionne pas sur Google Document et Tableur) :

=IF(ISERROR(FIND("/";A1));A1;MID(A1;
 FIND("¤";SUBSTITUTE(A1;"/";"¤";
 LEN(A1)-LEN(SUBSTITUTE(A1;"/";""))))+1;
 LEN(A1)))

En Perl, cela s'écrirait :

s@.*/@@;

Est-ce que quelqu'un osera dire qu'Excel c'est simple et que Perl, c'est compliqué ?

Une partie de cette formule Excel est bien utile dans d'autres cas : il s'agit de la recherche de la dernière occurence d'une chaîne.

=TROUVE(CAR(1);SUBSTITUE(A1;"/";CAR(1);
 NBCAR(A1)-NBCAR(SUBSTITUE(A1;"/";""))))

Et en anglais :

=FIND("¤";SUBSTITUTE(A1;"/";"¤";
 LEN(A1)-LEN(SUBSTITUTE(A1;"/";""))))

Un peu d'explications :

  • NBCAR(A1)-NBCAR(SUBSTITUE(A1;"/";"")) calcule le nombre d'occurences de "/" ;
  • le SUBSTITUE() qui l'entoure permet de remplacer cette occurence par un caractère spécial (ici CAR(1) est le caractère dont le code est 1) ;
  • le TROUVER() englobant permet de trouver la position de ce caractère spécial.

Et pour vous faire rire un peu, voici la formule que le support Microsoft propose (à valider en technique matricielle avec Ctrl+Maj+Entrée). Cette fois, le texte dans lequel on cherche est dans la cellule A2 pour bien distinguer de la cellule A1 utilisée dans la formule matricielle.

=STXT(A2;MAX(SI(ESTERREUR(
 CHERCHE("/";A2;LIGNE(DECALER(INDIRECT("A1");;;NBCAR(A2)))));0;
 CHERCHE("/";A2;LIGNE(DECALER(INDIRECT("A1");;;NBCAR(A2))))))+NBCAR("/");
 NBCAR(A2))

Laquelle préférez-vous ?