Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Extraire un nombre d'une chaine de caractère

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

battijo

XLDnaute Nouveau
Bonjour,

je voudrais, à l'aide d'une formule (ou plusieurs) - pas de macro -, extraire le contenu numérique d'une chaîne de caractère.
Par exemple, en cellule A1, j'ai le texte "cet objet coûte 520,05 euros"
Je voudrais extraire en B1 au format numérique : 520,05

Je suis conscient que la virgule peur poser problème. Je me contenterais d'extraire 520 dans un 1er temps, cela serait déjà très bien.
J'ai fait plusieurs recherches et systématiquement un échec....
Par avance merci
 
Bonjour Battijo,
Si la valeur est en A1, Essayez :
VB:
=CNUM(GAUCHE(A1;CHERCHE(" ";A1)))
Si la virgule n'est pas votre séparateur décimal pour XL, ("," au lieu de "." ) essayez :
Code:
=CNUM(SUBSTITUE(GAUCHE(A1;CHERCHE(" ";A1));",";"."))
 
bonjour
si dans ta (tes) cellule(s) tu as TOUJOURS un texte avec
"Cet objet coûte" PRIX "Euros"
il te suffit de trouver la position de "Coûte" et la postion de "Euros" (fonction "TROUVE" et d'extraire ce qu'il y a entre les deux (fonction "MID")
et de convertir le résultat en nombre "CLNG, ou cint ou .. je sais plus;.

sinon.. bah... sans fichier exemple qui soit suffisamment représentatif de tous les cas de figure.. impossible de t'aider plus
 
Merci, mais effectivement le texte varie
 

Pièces jointes

Re,
Un essai en PJ avec :
VB:
=SIERREUR(CNUM(GAUCHE(STXT(A2;EQUIV(VRAI;ESTNUM(1*STXT(A2;LIGNE($1:$31);1));0);NBCAR(A2));CHERCHE(" ";STXT(A2;EQUIV(VRAI;ESTNUM(1*STXT(A2;LIGNE($1:$31);1));0);NBCAR(A2)))-1));"")
A valider par Maj+Ctrl+Entrée pour les versions XL plus anciennes.
 

Pièces jointes

Hello,
comme il n'y a pas les fonctions REGEX (expressions régulières) dans la version Excel 2016 , en utilisant mon complément XlDnaLibJP , on peut utiliser les expressions régulières à partir de la version Excel 2010. En particulier il y a la fonction REGEXEXTRACTJP qui permet d'extraire une chaîne à partir d'un motif d'expressions régulières.


le motif [\d,]+ signifie extraire 1 ou plus caractère composés de chiffres ou virgules. Si il y a des virgules sans chiffre dans le texte il faudra revoir le motif .
Ami calmant, J.P
 
bonjour
@jurassic pork si je me trompe pas
motif ="[(\d)+[,|.]+(\d)|(\d)]"
Hello patricktoulon,
il ne m'a pas l'air de marcher ton motif. Déjà si il y a un . en séparateur décimale dans une version française cela va faire planter le CNUM.
Voilà ce que je propose :
"\d+,*\d*" -> un ou plusieurs chiffres suivis de 0 ou plus virgule suivi de 0 ou plus chiffres.
Cela fonctionne pour les exemples et aussi quand on met une virgule seule dans un texte. Cela m'a permis de voir que ma fonction REGEX renvoie #NUL! quand elle ne trouve rien. Cela serait peut-être judicieux qu'elle ne renvoie rien dans ce cas.
 
allons donc ça ne marche pas
mais bien sur que si
et pour le coup j'ajoute toutes les possibilités
VB:
Sub test()
    chaine = "Cet objet coûte 520.60 ""Euros"""
    MsgBox chaineNum(0, chaine)

    chaine = "je prends 100 euros pour aller fire les courses"
    MsgBox chaineNum(0, chaine)


    chaine = "il me manque 1,67 euros pour acheter mon journal"
    MsgBox chaineNum(0, chaine)



    chaine = "il me manque 3,20 euros pour acheter mon journal et 0.58 centimes pour le paquet de swingum et 1 euros pour le parking"
    MsgBox chaineNum(0, chaine)
    MsgBox chaineNum(1, chaine)
    MsgBox chaineNum(2, chaine)

End Sub
Function chaineNum(index, v)
    Dim maVar As String, matchs
    With CreateObject("VBScript.RegExp"):
        .Global = True: .IgnoreCase = True: .Pattern = "[( \d )|[(\d)+[,|.]+(\d)|(\d)]]"
        Set matchs = .Execute(CStr(v))
        If matchs.Count > 0 Then chaineNum = matchs(index)
    End With
End Function

formule:
=chainenum(0,A1)
 
Dernière édition:
Bonjour battijo🙂, à toutes et tous 😀et à tous les autres 😉,

Un essai avec une formule matricielle pour extraire un nombre d'un texte avec quelques conditions :
  • le nombre doit être unique
  • le nombre doit être positif
Il peut y avoir d'autres cochoncetés dans le texte tel que l'espace insécable ou le caractère unicode du séparateur décimal ou encore le caractère unicode du séparateur des milliers. Mais comme on n'a pas de fichier représentatif 😕, on ne peut guère aller plus loin.

La formule en Excel 2016 est une formule matricielle qui est à valider par Ctrl+Maj+Entrée.

La formule est :
VB:
=SIERREUR(1*SUBSTITUE(SUBSTITUE(STXT(A1;MIN(SI(ESTNUM(--STXT(A1;LIGNE(INDIRECT("a1:a" & NBCAR(A1)));1));LIGNE(INDIRECT("a1:a" & NBCAR(A1)))));MAX(SI(ESTNUM(--STXT(A1;LIGNE(INDIRECT("a1:a" & NBCAR(A1)));1));LIGNE(INDIRECT("a1:a" & NBCAR(A1)))))-MIN(SI(ESTNUM(--STXT(A1;LIGNE(INDIRECT("a1:a" & NBCAR(A1)));1));LIGNE(INDIRECT("a1:a" & NBCAR(A1)))))+1);".";",");" ";"");"")

 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…