Récupérer la première lettre d’une cellule

Tableau 1. Là où on en est…
A B C
1 Nom Prénom Login
2 Dupond Sophie
3 Dupuis Dupont Jean-Marc
4 Martin Kevin

Excel étant un gentil tableur, il nous propose la fonction suivante : STXT. L’aide nous indique :

Renvoie un nombre donné de caractères extraits d’une chaîne de caractères à partir de la position que vous indiquez, en fonction du nombre de caractères spécifié.

Syntaxe : STXT(texte;no_départ;no_car)

La fonction STXT prend donc trois paramètres :

  1. Le texte qui va être traité : dans notre cas les cellules de la colonne B.
  2. L’endroit à partir duquel le texte sera traité : dans notre cas, dès la première lettre, donc 1.
  3. Le nombre de caractère à prendre : dans notre cas on ne veut que la première lettre, donc 1.

Voilà ce que cela nous donne pour la ligne 2 :

=STXT(B2;1;1)

Magique, cela affiche bien S dans la cellule C2 !

Mettre un texte en minuscule

Mais soyons clair, on ne veut pas de majuscule ! Heureusement Excel a une fonction MINUSCULE, qui remplit très bien sa mission :

=MINUSCULE(STXT(B2;1;1))

Bien, on a donc notre s minuscule. Maintenant il faudrait ajouter le point et le nom de famille.

Problème : comment concaténer du texte dans une cellule ?

Concaténer deux cellules de textes

Pour concaténer du texte il faudra utiliser &. Vous pouvez essayer de concaténer les deux cellules avec +, Excel vous affichera une jolie erreur !

Pour afficher le point, il suffit de le mettre en double guillemet : ".".
N’oublions pas que l’on veut le nom en minuscule, donc on obtient la formule suivante :

=MINUSCULE(STXT(B2;1;1))&"."&MINUSCULE(A2)
Tableau 2. On est pas trop mal
A B C
1 Nom Prénom Login
2 Dupond Sophie s.dupond
3 Dupuis Dupont Jean-Marc j.dupuis dupont
4 Martin Kevin k.martin

Aïe. C’est presque le résultat attendu. Sauf que pour les noms composés, il faudrait supprimer l’espace et le remplacer par un trait d’union. Quant aux prénoms composés, la politique de création des login est d’accoler les deux lettres du prénom. On veut donc obtenir pour Jean-Marc : jm.dupuis-dupont.

Remplacer des caractères dans une chaîne de texte

Pas de problème : la fonction SUBSTITUE va permettre de remplacer les espaces. Un petit tour sur l’aide :

Remplace l’argument ancien_texte par l’argument nouveau_texte dans une chaîne de caractères.

Syntaxe :
SUBSTITUE(texte;ancien_texte;nouveau_texte;no_position)

Bien, donc si l’on veut remplacer tous les espaces par des traits d’union des cellules de la colonne A, et en particulier de la ligne 2, il va nous falloir écrire :

=SUBSTITUE(A2;" ";"-")

Ce qui donne dans la formule générale pour la ligne 2 :

=MINUSCULE(STXT(B2;1;1))&"."&MINUSCULE(SUBSTITUE(A2;" ";"-"))
Tableau 3. On se rapproche dangereusement !
A B C
1 Nom Prénom Login
2 Dupond Sophie s.dupond
3 Dupuis Dupont Jean-Marc j.dupuis-dupont
4 Martin Kevin k.martin

Il ne reste plus que le problème des prénoms composés.

Un peu de condition avec Excel

Pour les prénoms composés, on souhaite aussi ajouter la première lettre du deuxième prénom. Seulement, voilà, comment le traduire pour Excel ?
On a choisi arbitrairement que tous les prénoms composés l’étaient avec un trait d’union. On va donc demander à Excel : S’il y a un trait d’union dans la cellule, alors prend la lettre juste après et affiche là.

On va faire appel à plusieurs nouvelles fonctions : SI, NB.SI, CHERCHE. Voici ce que nous donne l’aide pour cette première fonction :

Renvoie une valeur si la condition spécifiée est VRAI et une autre valeur si elle est FAUX. La fonction SI permet d’effectuer des tests conditionnels sur des valeurs et des formules.

Syntaxe : SI(test_logique;valeur_si_vrai;valeur_si_faux)

Donc, il va falloir que l’on remplace :

  • test_logique par s’il y a un trait d’union dans la cellule ;
  • valeur_si_vrai par la lettre juste après le trait d’union ;
  • valeur_si_faux par rien !

Vérifier si un caractère est présent dans une chaîne de caractère

Il va falloir utiliser la fonction NB.SI qui s’utilise comme suit :

Compte le nombre de cellules à l’intérieur d’une plage qui répondent à un critère donné.

Syntaxe : NB.SI(plage;critère)

Notez que l’on détourne (ou plutôt que l’on sous-utilise) un peu cette fonction. Elle sert normalement à compter le nombre d’occurrence d’un caractère ; alors que l’on s’en sert juste pour savoir s’il y présence du trait d’union ou pas.
On va donc écrire ceci pour la ligne 2 :

=NB.SI(B2;"*-*")

Vous remarquerez qu’on a utilisé des étoiles devant et derrière le trait d’union pour signifier que les suites de lettres avant et après ne nous intéressent pas. Si l’on avait juste mis "-" le test aurait chercher si la cellule était exactement égale au trait d’union.

S’il y a présence d’un trait d’union, la fonction renverra 1, sinon elle renverra 0.
Notre condition ressemble donc à ça :

=SI(NB.SI(B2;"*-*");valeur_si_vrai;)

Il faut donc maintenant ajouter la lettre qui suit immédiatement le trait d’union.

Récupérer une lettre après un caractère donné dans une cellule

Comme au début, on va utiliser la fonction STXT. Sauf qu’ici, on ne connait pas la position à partir de laquelle il faut récupérer le texte. C’est là qu’intervient la fonction CHERCHE :

Renvoie le numéro du caractère au niveau duquel un caractère spécifique ou une chaîne de caractères est initialement reconnu(e) à partir du no_départ. La fonction CHERCHE permet de déterminer la position d’un caractère ou d’une chaîne de caractères dans une autre chaîne de caractères de façon à pouvoir utiliser ensuite la fonction STXT ou la fonction REMPLACER pour modifier le texte.

Syntaxe : CHERCHE(texte_cherché;texte;no_départ)

Magnifique, il n’y a plus qu’à remplacer :

=STXT(B2;CHERCHE("-";B2)+1;1)

De deux choses l’une : on n’a pas ajouté de numéro de départ, cela signifie que l’on commence dès le début ; on a ajouté 1 à la fonction CHERCHE, car la fonction nous donne la position du trait d’union, et on veut la lettre qui suit !
Et voilà la condition entière :

=SI(NB.SI(B2;"*-*");STXT(B2;CHERCHE("-";B2)+1;1);)

Hé bien ce n’était pas si compliqué ! Il faut maintenant la concaténer avec l’expression de départ, et ne pas oublier de tout mettre en minuscule !

Récapitulatif du code

=MINUSCULE(STXT(B2;1;1))&MINUSCULE(SI(NB.SI(B2;"*-*");STXT(B2;CHERCHE("-";B2)+1;1);))&"."&MINUSCULE(SUBSTITUE(A2;" ";"-"))

Je suis gentil, je vous le colore un peu pour que vous vous y retrouviez :

=
  minuscule(STXT(B2;1;1)) &
  minuscule(SI(NB.SI(B2;"*-*");STXT(B2;CHERCHE("-";B2)+1;1);)) &
  "." &
  minuscule(SUBSTITUE(A2;" ";"-"))
Tableau 4. Exactement le résultat que l’on souhaitait
A B C
1 Nom Prénom Login
2 Dupond Sophie s.dupond
3 Dupuis Dupont Jean-Marc jm.dupuis-dupont
4 Martin Kevin k.martin

Si ça peut vous être utile… !