Table des matières
Ce tutoriel vous apprendra à séparer le texte des chiffres dans Excel en utilisant des formules natives et des fonctions personnalisées. Vous apprendrez également à séparer le texte et les chiffres en deux colonnes distinctes.
Imaginez ceci : vous recevez des données brutes à analyser et vous découvrez que des chiffres sont mélangés à du texte dans une colonne. Dans la plupart des situations, il sera certainement plus pratique de les avoir dans des colonnes séparées pour un examen plus approfondi.
Si vous travaillez avec des données homogènes, vous pourriez probablement utiliser les fonctions LEFT, RIGHT et MID pour extraire le même nombre de caractères à partir de la même position. Mais il s'agit là d'un scénario idéal pour les tests en laboratoire. Dans la vie réelle, il est plus probable que vous ayez affaire à des données dissemblables où les chiffres se trouvent avant le texte, après le texte ou entre les textes. Les exemples ci-dessous fournissent des solutions exactement pour cela.cas.
Comment supprimer le texte et conserver les chiffres dans les cellules Excel ?
La solution fonctionne dans Excel 365, Excel 2021 et Excel 2019.
Microsoft Excel 2019 a introduit quelques nouvelles fonctions qui ne sont pas disponibles dans les versions précédentes, et nous allons utiliser l'une de ces fonctions, à savoir TEXTJOIN, pour dépouiller les caractères de texte d'une cellule contenant des chiffres.
La formule générique est la suivante :
TEXTJOIN("", TRUE, IFERROR(MID( cellule , ROW(INDIRECT( "1 :"&LEN( cellule ))), 1) *1, ""))Dans Excel 365 et 2021, celle-ci fonctionnera également :
TEXTJOIN("", TRUE, IFERROR(MID( cellule , SÉQUENCE(LEN( cellule )), 1) *1, ""))À première vue, les formules peuvent sembler un peu intimidantes, mais elles fonctionnent :)
Par exemple, pour supprimer le texte des chiffres en A2, saisissez l'une des formules ci-dessous en B2, puis copiez-la dans autant de cellules que nécessaire.
Dans Excel 365 - 2019 :
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1 :"&LEN(A2))), 1) *1, "")))
Dans Excel 2019, elle doit être saisie comme une formule de tableau avec Ctrl + Shift + Enter . Dans Excel tableau dynamique, elle fonctionne comme une formule normale complétée par la touche Enter.
Dans Excel 365 et 2021 :
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, "")))
En conséquence, tous les caractères de texte sont supprimés d'une cellule et les chiffres sont conservés :
Comment fonctionne cette formule :
Pour mieux comprendre la logique, commençons par étudier la formule de l'intérieur :
Vous utilisez soit ROW(INDIRECT("1 :"&LEN(string))) soit SEQUENCE(LEN(string)) pour créer une séquence de nombres correspondant au nombre total de caractères de la chaîne source, puis vous transmettez ces nombres séquentiels à la fonction MID comme nombres de départ. En B2, cette partie de la formule se présente comme suit :
MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)
La fonction MID extrait chaque caractère de A2 en commençant par le tout premier et les renvoie sous forme de tableau :
{"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
Ce tableau est multiplié par 1. Les valeurs numériques restent inchangées, tandis que la multiplication d'un caractère non numérique entraîne une erreur #VALUE !
{2;1;0;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!}
La fonction IFERROR traite ces erreurs et les remplace par des chaînes vides :
{2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}
Ce tableau final est servi à la fonction TEXTJOIN, qui concatène les valeurs non vides du tableau ( ignore_vide défini à TRUE) en utilisant une chaîne vide ("") comme délimiteur :
TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})
Astuce. Pour Excel 2016 - 2007, une solution existe également, mais la formule est beaucoup plus complexe. Vous pouvez la trouver dans ce tutoriel : Comment extraire des nombres dans Excel.
Fonction personnalisée pour supprimer le texte des chiffres
La solution fonctionne pour toutes les versions d'Excel
Si vous utilisez une ancienne version d'Excel ou si vous trouvez les formules ci-dessus trop difficiles à retenir, rien ne vous empêche de créer votre propre fonction avec une syntaxe plus simple et un nom convivial tel que RemoveText La fonction définie par l'utilisateur (UDF) peut être écrite de deux façons :
Code VBA 1 :
Ici, nous examinons chaque caractère de la chaîne de caractères source un par un et vérifions s'il s'agit d'un chiffre ou non. Si c'est un chiffre, le caractère est ajouté à la chaîne de caractères résultante.
Function RemoveText(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If True = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & ; Mid(str, i, 1) End If Next i RemoveText = sRes End FunctionCode VBA 2 :
Le code crée un objet pour traiter une expression régulière. En utilisant RegExp, nous supprimons tous les caractères autres que les chiffres 0-9 de la chaîne source.
Function RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End FunctionSur les petites feuilles de calcul, les deux codes seront aussi performants l'un que l'autre. Sur les grandes feuilles de calcul où la fonction est appelée des centaines ou des milliers de fois, le code 2 qui utilise VBScript.RegExp sera plus rapide.
Les étapes détaillées pour insérer le code dans votre classeur se trouvent ici : Comment insérer un code VBA dans Excel.
Quelle que soit l'approche choisie, du point de vue de l'utilisateur final, la fonction permettant de supprimer du texte et de laisser des numéros est aussi simple que cela :
RemoveText(string)Par exemple, pour supprimer les caractères non numériques de la cellule A2, la formule en B2 est la suivante :
=RemoveText(A2)
Il suffit de le copier dans la colonne, et vous obtiendrez ce résultat :
Remarque : les formules natives et la fonction personnalisée produisent toutes deux un fichier chaîne numérique Pour la transformer en un nombre, multipliez le résultat par 1, ajoutez un zéro ou intégrez la formule dans la fonction VALUE. Par exemple :
=RemoveText(A2) + 0
=VALEUR(RemoveText(A2))
Comment supprimer les chiffres d'une chaîne de texte dans Excel
La solution fonctionne dans Excel 365, Excel 2021 et Excel 2019.
Les formules permettant de supprimer les chiffres d'une chaîne alphanumérique sont assez similaires à celles présentées dans l'exemple précédent.
Pour Excel 365 - 2019 :
TEXTJOIN("", TRUE, IF(ISERR(MID( cellule , ROW(INDIRECT( "1 :"&LEN( cellule ) )), 1) *1), MID( cellule , ROW(INDIRECT("1 :"&LEN( cellule ))), 1), ""))Dans Excel 2019, n'oubliez pas d'en faire un formule matricielle en appuyant simultanément sur les touches Ctrl + Shift + Enter.
Pour Excel 365 et 2021 :
TEXTJOIN("", TRUE, IF(ISERROR(MID( cellule , SÉQUENCE(LEN( cellule 1) *1), MID( cellule , SÉQUENCE(LEN( cellule )), 1), ""))Par exemple, pour supprimer les chiffres d'une chaîne de caractères en A2, la formule est la suivante :
=TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT("1 :"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1 :"&LEN(A2))), 1), ""))
Ou
=TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))
En conséquence, tous les chiffres sont supprimés d'une cellule et les caractères de texte sont conservés :
Comme le montre la capture d'écran ci-dessus, la formule supprime les caractères numériques de n'importe quelle position dans une chaîne de caractères : au début, à la fin et au milieu. commence par un chiffre suivi d'un espace cet espace est conservé, ce qui pose un problème d'espaces en tête (comme en B2).
Pour se débarrasser des surplus espaces avant le texte Enveloppez la formule dans la fonction TRIM comme suit :
=TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))))
Maintenant, vos résultats sont absolument parfaits !
Comment fonctionne cette formule :
En substance, la formule fonctionne de la même manière que celle expliquée dans l'exemple précédent. La différence est que, du tableau final servi à la fonction TEXTJOIN, il faut supprimer les chiffres et non le texte. Pour ce faire, nous utilisons la combinaison des fonctions IF et ISERROR.
Comme vous vous en souvenez, MID(...)+0 génère un tableau de chiffres et d'erreurs #VALUE ! représentant des caractères de texte dans les mêmes positions :
{2;1;0;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!}
La fonction ISERROR détecte les erreurs et transmet le tableau de valeurs booléennes résultant à IF :
{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE}
Lorsque la fonction IF voit TRUE (une erreur), elle insère le caractère de texte correspondant dans le tableau traité à l'aide d'une autre fonction MID. Lorsque la fonction IF voit FALSE (un nombre), elle le remplace par une chaîne vide :
{"" ;"" ;"" ;"" ; "S" ; "u" ; "n" ; "s" ; "e" ; "t" ;"" ; "R" ; "o" ; "a" ; "d"}
Ce tableau final est transmis à TEXTJOIN, qui concatène les caractères du texte et produit le résultat.
Fonction personnalisée pour supprimer les chiffres du texte
La solution fonctionne pour toutes les versions d'Excel
En gardant à l'esprit qu'une formule robuste doit rester simple, je vais partager le code de la fonction définie par l'utilisateur (UDF) pour supprimer tout caractère numérique.
Code VBA 1 :
Function RemoveNumbers(str As String ) Dim sRes As String sRes = "" For i = 1 To Len(str) If False = IsNumeric(Mid(str, i, 1)) Then sRes = sRes & ; Mid(str, i, 1) End If Next i RemoveNumbers = sRes End FunctionCode VBA 2 :
Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End FunctionComme dans le cas de la fonction RemoveText, il est préférable d'utiliser le deuxième code dans les feuilles de calcul de grande taille pour optimiser les performances.
Une fois le code ajouté à votre classeur, vous pouvez supprimer tous les caractères numériques d'une cellule en utilisant cette fonction personnalisée :
RemoveNumbers(string)Dans notre cas, la formule en B2 est :
=Supprimer les numéros (A2)
Pour couper les éventuels espaces avant, placez la fonction personnalisée dans TRIM comme vous le feriez pour une formule native :
=TRIM(RemoveNumbers(A2))
Divisez les chiffres et le texte en colonnes séparées
Dans les situations où vous souhaitez séparer du texte et des chiffres dans deux colonnes, il serait agréable de faire le travail avec une seule formule, d'accord ? Pour cela, nous fusionnons simplement le code de la formule RemoveText et RemoveNumbers en une seule fonction, nommée SplitTextNumbers ou simplement Split ou ce que vous voulez :)
Code VBA 1 :
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" For i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) Then sNum = sNum & ; sCurChar Elsext = sText & ; sCurChar End If Next i If True = is_remove_text Then SplitTextNumbers = sNum Elsext SplitTextNumbers = sText End If EndFonctionCode VBA 2 :
Function SplitTextNumbers(str As String , is_remove_text As Boolean ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True If True = is_remove_text Then .Pattern = "[^0-9]" Else .Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End FunctionNotre nouvelle fonction personnalisée requiert deux arguments :
SplitTextNumbers(string, is_remove_text)Où is_remove_text est une valeur booléenne indiquant les caractères à supprimer :
- VRAI ou 1 - supprimer le texte et garder les chiffres
- FALSE ou 0 - supprimer les chiffres et garder le texte
Pour notre ensemble de données d'échantillon, les formules prennent la forme suivante :
Pour supprimer les caractères non numériques :
=SplitTextNumbers(A2, TRUE)
Pour supprimer les caractères numériques :
=SplitTextNumbers(A2, FALSE)
Conseil : pour éviter un problème potentiel d'espaces en tête, je recommande de toujours envelopper la formule qui supprime les chiffres dans la fonction TRIM :
=TRIM(SplitTextNumbers(A2, FALSE))
Outil spécial pour supprimer les chiffres ou le texte
Pour ceux qui n'aiment pas compliquer inutilement les choses, je vais montrer notre propre façon de supprimer du texte ou des chiffres dans Excel.
En supposant que notre Ultimate Suite soit ajoutée à votre ruban Excel, voici ce que vous devez faire :
- Sur le Ablebits Data dans l'onglet Texte cliquez sur Retirer > ; Supprimer les caractères .
Conseil : si les résultats contiennent des espaces en tête, l'outil Découpage des espaces les éliminera en un rien de temps.
Voilà comment supprimer des caractères textuels ou numériques d'une chaîne de caractères dans Excel. Je vous remercie de votre lecture et j'ai hâte de vous retrouver sur notre blog la semaine prochaine !
Téléchargements disponibles
Supprimer du texte ou des chiffres dans Excel - exemples (fichier .xlsm)
Ultimate Suite - version d'essai (fichier .exe)