Table des matières
Le tutoriel montre comment extraire des chiffres de diverses chaînes de texte dans Excel en utilisant des formules et l'outil d'extraction.
Lorsqu'il s'agit d'extraire une partie d'une chaîne de texte d'une longueur donnée, Excel fournit trois fonctions Substring (Left, Right et Mid) pour gérer rapidement la tâche. Lorsqu'il s'agit d'extraire des chiffres d'une chaîne alphanumérique, Microsoft Excel ne fournit... rien.
Pour obtenir un nombre à partir d'une chaîne de caractères dans Excel, il faut faire preuve d'un peu d'ingéniosité, de patience et d'un tas de fonctions différentes imbriquées les unes dans les autres. Vous pouvez aussi utiliser l'outil d'extraction et faire le travail en un clic de souris. Vous trouverez ci-dessous des détails complets sur les deux méthodes.
Comment extraire un numéro à la fin d'une chaîne de texte ?
Lorsque vous avez une colonne de chaînes alphanumériques où le numéro vient après le texte, vous pouvez utiliser la formule suivante pour l'obtenir.
DROIT( cellule , LEN( cellule ) - MAX(IF(ISNUMBER(MID( cellule , ROW(INDIRECT("1 :"&LEN( cellule ))), 1) *1)=FALSE, ROW(INDIRECT("1 :"&LEN( cellule ))), 0)))Nous nous attarderons un peu plus tard sur la logique de la formule. Pour l'instant, il suffit de remplacer cellule avec une référence à la cellule contenant la chaîne originale (A2 dans notre cas), et saisissez la formule dans n'importe quelle cellule vide de la même ligne, disons en B2 :
=RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1 :"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1 :"&LEN(A2))), 0)))
Cette formule ne récupère les numéros qu'à partir de la fin. Si une chaîne comporte également des numéros au début ou au milieu, ils sont ignorés :
L'extraction est effectuée à l'aide de la fonction DROIT qui appartient à la catégorie des fonctions Texte. La sortie de cette fonction est toujours texte Dans notre cas, le résultat est un sous-chaîne numérique qui, en termes d'Excel, est également un texte et non un nombre.
Si vous voulez que le résultat soit un numéro (que vous pouvez utiliser dans d'autres calculs), puis intégrez la formule dans la fonction VALUE ou effectuez une opération arithmétique qui ne modifie pas le résultat, par exemple en multipliant par 1 ou en ajoutant 0. Pour détecter les erreurs dans les chaînes qui ne contiennent pas un seul nombre, utilisez la fonction IFERROR. Par exemple :
=IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1 :"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1 :"&LEN(A2))), 0)))), "")
ou
=IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1 :"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1 :"&LEN(A2))), 0)) +0, "")
Remarque : dans Excel Dynamic Array (Office 365 et 2021), vous saisissez la formule de la manière habituelle avec la touche Entrée. Dans Excel 2019 et antérieur, elle ne fonctionne que comme une formule de tableau, pensez donc à appuyer sur Ctrl + Shift + Entrée pour la compléter.
Comment fonctionne cette formule :
Pour extraire un numéro d'une chaîne alphanumérique, la première chose à savoir est de savoir où commencer l'extraction. La position du dernier caractère non numérique d'une chaîne est déterminée à l'aide de cette formule délicate :
MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1 :"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1 :"&LEN(A2))), 0))
Pour comprendre la logique, examinons-la de l'intérieur :
La combinaison ROW(INDIRECT("1 :"&LEN(A2))) crée une séquence de numéros correspondant au total des caractères de la chaîne source (A2), et nous servons ces numéros séquentiels à MID comme numéros de départ :
MID(A2, {1;2;3;4;5;6;7;8}, 1)
La fonction MID extrait chaque caractère individuel de A2 et les renvoie sous forme de tableau :
{"0";"5";"-";"E";"C";"-";"0";"1"}
Comme MID est une fonction texte, sa sortie est toujours du texte (comme vous pouvez le remarquer, tous les caractères sont entre guillemets). Pour transformer les chiffres en nombres, nous multiplions le tableau par 1 (la double négation --MID() aura le même effet). Le résultat de cette opération est un tableau de nombres et d'erreurs #VALUE ! représentant des caractères non numériques :
ISNUMBER({0;5;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;0;1}))
La fonction ISNUMBER évalue chaque élément du tableau et donne son verdict sous la forme de valeurs booléennes - VRAI pour les nombres, FAUX pour tout le reste :
{VRAI;VRAI;FAUX;FAUX;FAUX;FAUX;VRAI;VRAI}
Ce tableau passe au test logique de la fonction IF, où chaque élément du tableau est comparé à FALSE :
IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}=FALSE, ROW(INDIRECT("1 :"&LEN(A2))), 0)
Pour chaque FALSE (valeur non numérique), une autre fonction ROW(INDIRECT()) renvoie sa position relative dans la chaîne. Pour chaque TRUE (valeur numérique), un zéro est renvoyé. Le tableau résultant se présente comme suit :
{0;0;3;4;5;6;0;0}
Le reste est facile. La fonction MAX trouve le nombre le plus élevé dans le tableau ci-dessus, qui est la position de la dernière valeur non numérique dans la chaîne (6 dans notre cas). Il suffit de soustraire cette position de la longueur totale de la chaîne retournée par LEN, et de passer le résultat à RIGHT pour lui faire savoir combien de caractères extraire du côté droit de la chaîne :
DROIT(A2, LEN(A2) - 6)
C'est fait !
Comment extraire un numéro du début d'une chaîne de texte ?
Si vous travaillez avec des enregistrements où le texte apparaît après le numéro, vous pouvez extraire le numéro du début d'une chaîne en utilisant cette formule générique :
GAUCHE( cellule , MATCH(FALSE, ISNUMBER(MID( cellule , ROW(INDIRECT("1 :"&LEN( cellule )+1)), 1) *1), 0) -1)Avec la chaîne originale en A2, utilisez la formule suivante pour obtenir le nombre :
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1 :"&LEN(A2)+1)), 1) *1), 0) -1)
Quel que soit le nombre de chiffres au milieu ou à la fin, seul le chiffre de départ est extrait :
Remarque : dans Excel 365 et Excel 2021, en raison de la prise en charge des tableaux dynamiques, une formule ordinaire fonctionne parfaitement. Dans Excel 2019 et les versions antérieures, vous devez appuyer sur les touches Ctrl + Maj + Entrée pour en faire explicitement une formule de type formule matricielle .
Comment fonctionne cette formule :
Ici, nous utilisons à nouveau la combinaison des fonctions ROW, INDIRECT et LEN pour créer une séquence de chiffres égale au total des caractères de la chaîne source plus 1 (le rôle de ce caractère supplémentaire deviendra clair un peu plus tard).
ROW(INDIRECT("1 :"&LEN(A2)+1))
MID et ISNUMBER font le même travail que dans l'exemple précédent - MID extrait les caractères individuels et ISNUMBER les convertit en valeurs logiques. Le tableau résultant de VRAIS et de FAUX est envoyé à la fonction MATCH comme tableau de recherche :
MATCH(FALSE, {VRAI;VRAI;FAUX;FAUX;FAUX;FAUX;VRAI;VRAI;FAUX}, 0)
MATCH calcule une position relative du premier FALSE, ce qui nous donne la position du premier caractère non numérique dans la chaîne (3 en A2). Pour extraire les chiffres précédents, nous soustrayons 1 de la position du premier caractère du texte et servons la différence à la fonction nombre_de_chars de la fonction LEFT :
GAUCHE(A2, 3-1)
Revenons maintenant à un caractère "supplémentaire" dans la séquence générée par ROW(INDIRECT()+1)). Comme vous le savez déjà, cette séquence fournit les points de départ de la fonction MID. Sans +1, MID extrairait exactement autant de caractères qu'il y en a dans la chaîne originale. Si la chaîne ne contient que des chiffres, ISNUMBER ne retournera que des VRAIS alors que MATCH a besoin d'au moins un FAUX. Pour s'en assurer, nous ajoutons unplus de caractères à la longueur totale de la chaîne, que la fonction MID convertirait en une chaîne vide. Par exemple, dans B7, MID renvoie ce tableau :
{"1" ; "2" ; "3" ; "4" ;""}
Remarque : comme c'est le cas pour la fonction RIGHT, LEFT renvoie également une valeur sous-chaîne numérique Pour obtenir le résultat sous la forme d'un nombre plutôt que d'une chaîne numérique, imbriquez la formule dans la fonction VALUE ou multipliez le résultat par 1 comme indiqué dans le premier exemple.
Comment obtenir un nombre à partir de n'importe quelle position dans une chaîne de caractères ?
Si votre tâche consiste à extraire un nombre de n'importe où dans une chaîne de caractères, vous pouvez utiliser la formule suivante, publiée sur le forum MrExcel :
=SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1 :"&LEN(A2))), 1)) * ROW(INDIRECT("1 :"&LEN(A2))), 0), ROW(INDIRECT("1 :"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1 :"&LEN(A2)))/10)
Où A2 est la chaîne de texte originale.
La décomposition de cette formule nécessiterait un article séparé, vous pouvez donc simplement la copier sur votre feuille de calcul pour vous assurer qu'elle fonctionne vraiment :)
Toutefois, en examinant les résultats, vous remarquerez peut-être un inconvénient mineur : si la chaîne de caractères source ne contient pas de nombre, la formule renvoie zéro, comme à la ligne 6 de la capture d'écran ci-dessus. Pour remédier à ce problème, vous pouvez inclure la formule dans l'instruction IF, dont le test logique vérifie si la chaîne de caractères source contient un nombre. Si c'est le cas, la formule extrait le nombre, sinon elle renvoie une valeur vide.chaîne :
=IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")
Comme le montre la capture d'écran ci-dessous, la formule améliorée fonctionne à merveille (bravo à Alex, notre gourou d'Excel, pour cette amélioration) :
Contrairement à tous les exemples précédents, le résultat de cette formule est numéro Pour s'en assurer, il suffit de remarquer les valeurs alignées à droite dans la colonne B et les zéros de tête tronqués.
Astuce : Dans Excel 365 - Excel 2019, il existe une solution beaucoup plus simple à l'aide de la fonction TEXTJOIN. Veuillez consulter Comment supprimer du texte et conserver des chiffres.
Extraire un numéro d'une chaîne de texte avec Ultimate Suite
Comme vous venez de le voir, il n'existe pas de formule Excel triviale pour extraire un nombre d'une chaîne de texte. Si vous avez des difficultés à comprendre les formules ou à les adapter à vos ensembles de données, vous aimerez peut-être cette façon simple d'extraire un nombre d'une chaîne de caractères dans Excel.
Avec notre Ultimate Suite ajoutée à votre ruban Excel, voici comment vous pouvez rapidement extraire un numéro de n'importe quelle chaîne alphanumérique :
- Allez à la Ablebits Data tab> ; Texte et cliquez sur Extrait :
- Sélectionnez toutes les cellules contenant les chaînes de caractères sources.
- Dans le volet de l'outil d'extraction, sélectionnez l'option Numéros d'extrait bouton radio.
- Selon que vous souhaitez que les résultats soient des formules ou des valeurs, sélectionnez l'option Insérer comme formule ou la laisser non sélectionnée (par défaut).
Si vous souhaitez que les résultats soient indépendants des chaînes d'origine (par exemple, si vous envisagez de supprimer les données sources ultérieurement), ne cochez pas cette case.
- Cliquez sur le bouton Insérer les résultats bouton. C'est fait !
Comme dans l'exemple précédent, les résultats de l'extraction sont les suivants numéros Vous êtes donc libre de les compter, de les additionner, d'en faire la moyenne ou d'effectuer tout autre calcul.
Dans cet exemple, nous avons choisi d'insérer les résultats en tant que valeurs et le module complémentaire a fait exactement ce qui était demandé :
Si le Insérer comme formule a été sélectionnée, vous observeriez une formule dans la barre de formule. Curieux de savoir laquelle ? Téléchargez la version d'essai d'Ultimate Suite et voyez par vous-même :)
Téléchargements disponibles
Numéro d'extrait Excel - exemple de classeur (fichier .xlsx)
Ultimate Suite - version d'essai (fichier .exe)