Fonction REGEX, transformer un point en virgule

Bonjour,

Dans la formule ci dessous j’ai réussi a extraire les chiffres après la virgule (la formule qui m’avait été donnée sur ce site était paramétré pour extraire les chiffres sans virgule) mais pour que que calc la prenne en charge dans un calcul il me faut une virgule. Je pourrai encore chercher mais je fais appel aux expert qui passent par là.

Cellule F12 → Cellule G12 → Cellule H12
{“ethereum”:{“usd”:1482.97}} → =REGEX(F$12;"[:digit:]{1,}+[.]+[:digit:]{1,}") → 1482.97

D’avance merci pour votre aide.

Bonjour

Le plus simple ne serait-il pas de remplacer le point par une virugle ? Avec en A1 {"eos":{"usd":3.85}} :

=CNUM(SUBSTITUE(REGEX(A1;"\d.*[^}]"); "."; ","))

retourne le nombre 3,85

[Ajout 3-03-21 16:15]

@regha a écrit :

chez moi j’ai une erreur :502

Le classeur joint \serviceweb.ods génère-t-il la même erreur ?

Quoiqu’il en soit je pense rester sur la proposition de njhub qui fonctionne très bien

Comme à son habitude :slight_smile:

[Ajout 04-03-21 13:45]

@njhub merci pour le fichier test. L’erreur 502 vient du fait que figurent des espaces derrière les valeurs dans ton document. Je note que la fonction SERVICEWEB n’ajoute pas ces espaces dans mon environnement. Quoiqu’il en soit, on peut utiliser :

=CNUM(SUBSTITUE(REGEX(A1;"\d+.{0,1}\d+"); "."; ","))

Cordialement

La formule est plus courte c’est toujours mieux. Par contre chez moi j’ai une erreur :502.
Ma version de LO est en français je sais que certaines fonctions demandent à être traduites.
Quoiqu’il en soit je pense rester sur la proposition de njhub qui fonctionne très bien.

Merci beaucoup pour le retour.

Une erreur 502 apparait également chez moi

en isolant REGEX(A1;"\d.*[^}]") de la formule on obtient le nombre décimal et deux parenthèses fermantes,

Pb “résolu” avec une cascade de substitue :

=CNUM(SUBSTITUE(SUBSTITUE(REGEX(A1;"\d.*[^}]"); "."; ",");"}";""))

Bonjour regha,

Si votre texte

{"ethereum":{"usd":1482.97}}

est en F12, essayez la formule suivante :

=REGEX(REGEX(F$12;"[:digit:]{1,}+\.+[:digit:]{1,}");"\.";"\,")

qui ne fonctionne chez moi que s’il y a une décimale marquée par un point

ou une formule hybride qui retranscrit les entiers et les décimales marquées soit avec un point ou avec une virgule

=SI(ESTNUM(CHERCHE(CAR(46);REGEX(F$12;"[:digit:]{1,}+\.+[:digit:]{1,}")));SUBSTITUE(REGEX(F$12;"[:digit:]{1,}+\.+[:digit:]{1,}");CAR(46);CAR(44));SI(ESTNUM(CHERCHE(CAR(44);REGEX(F$12;"[:digit:]{1,}+\,+[:digit:]{1,}")));REGEX(F$12;"[:digit:]{1,}+\,+[:digit:]{1,}");REGEX(F$12;"[:digit:]{1,}")))

Ajout :

Si P.Y. Samyn valide la modification apportée à sa formule, qui ressort directement un nombre utilisable pour les calculs c’est elle qu’il faudrait utiliser

éCregex.ods

@njhub @@regha je ne peux valider car cela fonctionne dans mon environnement.

Vous n’avez pas indiqué clairement si mon classeur de test génére l’erreur chez vous et avec quelles versions de LibreOffice ?

Cordialement

@PYS @regha

Concernant la version :
Version: 7.1.1.1 (x64) / LibreOffice Community
Build ID: 575c5867c4cc13d7ae78f9ce39a54a52ed38c769
CPU threads: 6; OS: Windows 10.0 Build 19042; UI render: Skia/Raster; VCL: win
Locale: fr-FR (fr_FR); UI: fr-FR
Calc: threaded
En attendant la 7.1.1 stable qui devrait être disponible sous peu

Concernant le classeur de test fourni, s’ouvre sans l’erreur 502, qui elle se produit en collant la formule dans un autre classeur, que j’accepte ou non les expressions régulières dans les formules…

Cordialement :slight_smile:

@njhub ok… du coup procédons à l’envers : peux-tu joindre ton classeur pour que je teste dans mon environnement ?

@PYS

Il est maintenant présent dans ma réponse sous le nom

C:\fakepath\éCregex.ods

[04/03/21 16:19]
@PYS des espaces parasites à supprimer, merci

Cordialement :slight_smile:

@njhub a écrit

des espaces parasites à supprimer

euh oui… j’ai déjà complété ma réponse avec une adaptation de la formule qui fonctionne aussi dans ce cas

Bonjour njhub,

merci infiniment, est-ce que je pourrai vous demander quelques explications sur la première formule ?

=REGEX(REGEX(F$12;"[:digit:]{1,}+.+[:digit:]{1,}");".";",")

D’avance merci.

Ps je fais avec cette formule un document pour gérer des achats de cryptos si vous êtes intéressé par celui-ci n’hésitez pas je le partagerai.

Bonsoir regha,

Le REGEX() extérieur, remplace le point décimal par une virgule dans le REGEX() intérieur

REGEX(

REGEX(F$12;"[:digit:]{1,}+.+[:digit:]{1,}")

;".";",")

Càd une fois extrait le nombre décimal avec un point, on remplace le point décimal par une virgule

:slight_smile: