Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Petite fonction qui ne marche pas avec des décimaux

2 réponses
Avatar
Didier
Bonsoir,

Je bricole avec difficultés et en copiant sur le net à droite et à
gauche une fonction qui extrait des nombres d'une chaîne et fait le calcul :
Exemple en L1C1 une chaîne et en L1C2 l'appel à la fonction ci-dessous
avec L1C1 contenant "5 crayons + 3 gommes" j'ai bien 8 en L2C2
"(5crayons + 3gommes) * 10 tiroirs" me donne bien 80

mais dès que j'utilise des nombres décimaux (avec virgule ou avec point)
cela me renvoie une erreur #valeur!
Je ne m'en sort pas.
Voici la fonction censée faire le travail :

Function CalculExp(Expression)
Application.Volatile
Numeriques = ",()+*-/^0123456789"
For i = 1 To Len(Expression.Value)
If InStr(1, Numeriques, Mid(Expression, i, 1)) Then sExp = sExp +
Mid(Expression, i, 1)
Next
CalculExp = Evaluate(sExp)
End Function

Quelqu'un a-t-il une idée pour me dépanner ?
Merci d'avance

Didier

2 réponses

Avatar
Modeste
Bonsour® Didier avec ferveur ;o))) vous nous disiez :

Bonsoir,

Je bricole avec difficultés et en copiant sur le net à droite et à
gauche une fonction qui extrait des nombres d'une chaîne et fait le
calcul : Exemple en L1C1 une chaîne et en L1C2 l'appel à la fonction
ci-dessous
avec L1C1 contenant "5 crayons + 3 gommes" j'ai bien 8 en L2C2
"(5crayons + 3gommes) * 10 tiroirs" me donne bien 80

mais dès que j'utilise des nombres décimaux (avec virgule ou avec
point) cela me renvoie une erreur #valeur!
Je ne m'en sort pas.
Voici la fonction censée faire le travail :

Function CalculExp(Expression)
Application.Volatile
Numeriques = ",()+*-/^0123456789"
For i = 1 To Len(Expression.Value)
If InStr(1, Numeriques, Mid(Expression, i, 1)) Then sExp = sExp +
Mid(Expression, i, 1)
Next
CalculExp = Evaluate(sExp)
End Function


VBA utilise le séparateur décimal "." en lieu et place du séparateur décimal local ","

Function CalculExp(Expression)
Application.Volatile
Numeriques = ",()+*-/^0123456789"
For i = 1 To Len(Expression.Value)
If InStr(1, Numeriques, Mid(Expression, i, 1)) Then sexp = sexp & Mid(Expression, i, 1)
Next
sexp = Application.Substitute(sexp, ",", ".")
CalculExp = Evaluate(sexp)
End Function

--
--
@+
;o)))

Avatar
Didier

VBA utilise le séparateur décimal "." en lieu et place du séparateur décimal local ","

Function CalculExp(Expression)
Application.Volatile
Numeriques = ",()+*-/^0123456789"
For i = 1 To Len(Expression.Value)
If InStr(1, Numeriques, Mid(Expression, i, 1)) Then sexp = sexp & Mid(Expression, i, 1)
Next
sexp = Application.Substitute(sexp, ",", ".")
CalculExp = Evaluate(sexp)
End Function




Réponse super rapide !!! et tout fonctionne
merci beaucoup
Didier