Récupérer la première lettre d’une cellule
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 :
- Le texte qui va être traité : dans notre cas les cellules de la colonne B.
- L’endroit à partir duquel le texte sera traité : dans notre cas, dès la première lettre, donc 1.
- 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)
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’argumentnouveau_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;" ";"-"))
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 fonctionSTXT
ou la fonctionREMPLACER
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;" ";"-"))
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… !
Réactions
10 juin 2012 • 22:33
Salut, Nico,
Mille mercis pour ce cours très instructif et très bien pensé.
Bonne continuation à toi.
11 juin 2012 • 23:28
Salut Nounours !
Mille de rien ;) Content que ça puisse servir à d’autres.
Bonne continuation à toi aussi !
12 déc. 2012 • 11:24
Bonjour les explications sont hyper claires, mais puis-je abuser en vous demandant comment faire pour mettre un chiffre (tjs le même) avant STXT
Merci beaucoup pour votre aide
16 déc. 2012 • 15:58
@Covalau : Il suffit d’utiliser le symbole
&
pour concaténer votre chiffre et la commande qui suit. Ce qui donnerait par exemple pour le chiffre 3 :27 déc. 2012 • 17:06
Très utile
merci
12 mar. 2013 • 12:13
Mille fois merci, ça m’a tiré d’affaire
17 mar. 2013 • 13:16
Content que ça puisse vous rendre service :)
21 juin 2013 • 19:26
Merci beaucoup pour ce tuto très intéressant et qui m’a fait gagner un temps trèèèèèèès précieux ! :)
24 juin 2013 • 14:24
J’ai un soucis, dans le même style…
J’ai une colonne avec des noms de plantes et renseignements ex:
en A1 Abelia x grandiflora C4 et je voudrais avoir en B1 ABE-X-GRA-C4
en A2 Acer palmatum ‘Ozakazuki’ C15 80/100 et je voudrais avoir en B2 ACE-PAL-‘OZ-C15-80/
Merci
26 juin 2013 • 20:47
@JUV : je pense qu’en s’inspirant des fonctions précédentes, et avec un peu de réflexion, c’est tout à fait faisable. Il faut juste y aller étape par étape ;)
23 août 2013 • 23:17
Merci beaucoup pour cette explication! Très simple et ça fonctionne du premier coup. Je travaille dans un établissement scolaire où je dois créer 475 nouveaux comptes par années, ça m’a sauver beaucoup de maux de tête. :)
Merci encore!
24 août 2013 • 17:30
@jeanfrancoisrd : de rien :-)
12 sept. 2013 • 14:55
Un tout grand merci, je devais créer une liste avec des sessions… Ton tuto m’a permis de gagner un temps précieux.
Gloire à toi!!! ;)
13 sept. 2013 • 08:16
@Alan : Tant mieux :)
14 nov. 2013 • 15:43
Super ce tuto, tu étayes bien la logique d’excel(et la tienne) à chaque étape, merci
24 juil. 2014 • 22:04
Top merci ! tu viens de me sortir d'une belle ...
Paix et prospérité sur ton peuple
27 juil. 2014 • 12:52
Top de rien :-)
Content que ça ait pu vous aider !
6 août 2014 • 17:58
Super, je m'en suis servie c'est top.
Maintenant je vais essayer de détourner la formule car j'ai un autre document dans lequel je ne dois pas mettre de "-" entre les noms de famille mais tout coller pour créer un login.
Merci pour ce partage
17 oct. 2014 • 10:37
Bonjour, J'aimerai connaitre la formule quand j'écrie DOMICILE en A1 qu'il m'écrie extérieur en B1 et vis-et-versa.
bien cordialement JEAN
28 juil. 2015 • 10:10
salut,
merci pour toutes ces infos super intéressantes !
serait-il possible d’ajouter la suppression d’apostrophes dans les noms de familles ?
Merci
6 sept. 2015 • 15:08
Pour construire un tableau j’ai la formule STXT pour le textes, ok mais je souhaite ajouter la date après
initialeNom/InitialePrénon/aammjj
J’ai essayé =STXT(B6;1;1)&STXT(C6;1;1)&STXT(F6;2;2)&STXT(G6;2;2)&STXT(H6;2;2); mais il prend la date en nombre
Col 1 Nom col 2 Prénom et mis la reconversion date de naissance dans trois colonne
Merci pour votre aide
8 sept. 2015 • 19:06
Salut
Merci beaucoup ! Très utile !
21 sept. 2015 • 14:46
Bonjour c’est un super travail, est ce qu’il serait possible d’avoir une traduction pour Google Sheets et/ou Libre office (ils ne connaissent pas ces fonctions)
merci
22 sept. 2015 • 00:59
Je viens de faire un tour sur l’aide de LibreOffice :
STXT
est équivalent àSTXT
MINUSCULE
est équivalent àMINUSCULE
SUBSTITUE
est équivelent àSUBSTITUE
SI
est équivalent àSI
NB.SI
est équivalent àNB.SI
CHERCHE
est équivalent àCHERCHE
Bref, les fonctions Excel utilisées ici sont totalement équivalentes à celles de LibreOffice !
16 oct. 2015 • 18:13
Bonjour, est-ce que vous pouvez m’aider svp?
Je ne peux pas trouver réponse de ma question sur Google ou au moins je ne sais pas trop comment rechercher.
Alors j’ai une cellule “Période 7”, qui change en “Période 8” et ainsi de suite. Quelle sera la formule, si je veux l’utiliser dans une autre céllule en changeant seulement la chiffre. C’est-à-dire, dans la celulle où je veux placer la formule, je voudrais d’avoir comme résultat Période 8, si je change la chiffre de 7 à 8 dans la première cellule.
Merci d’avance pour votre aide. Si je n’étais pas assez claire, n’hésitez pas à me dire.
20 oct. 2015 • 15:04
Merci beaucoup pour cet excellent tuto d’une rare clarté.
V.