Limites de la fonction "Evaluate"

Bonjour,

J'avais précédemment posté une demande sur ce forum sur comment faire pour transformer une formule qui est inscrite sous forme de texte (ex. 3*4+2), en résultat de calcul :

https://forum.excel-pratique.com/excel/obtenir-le-resultat-d-une-formule-presente-sous-format-texte-...

Il m'avait été conseillé par un membre d'utiliser l'ancienne fonction "Evaluer", sous la forme de nouvelle fonction à l'aide d'une macro VBA (cf. page en lien en ligne précédente). Cette méthode marche très bien, mais pas dans le cas de certaines fonctions, et je ne sais pas pourquoi. Voici un tel exemple de formule qui ne donne rien :

1.55481745661+0.405677146807*ln(5.16612903225806)-0.183604863481*(ln(5.16612903225806))^2+0.0158966701306*(ln(5.16612903225806))^3+0.0390862285103*(ln(5.16612903225806))^4-0.00730887260271*(ln(5.16612903225806))^5-0.00602041471614*(ln(5.16612903225806))^6+0.000155296442307*(ln(5.16612903225806))^7+0.000428618795701*(ln(5.16612903225806))^8+0.0000646316765106*(ln(5.16612903225806))^9+0.00000252182767165*(ln(5.16612903225806))^10

Si je demande à excel d'évaluer (fonction Evaluate) la formule pour en donner le résultat, je me retrouve avec une erreur #VALEUR!. Si je met manuellement un "=" devant pour vérifier que la formule est correcte, cela me donne bien une valeur (1.908...).

Même si je ne donne que les deux premiers termes de l'équation, cela ne marche pas (1.55481745661+0.405677146807*ln(5.16612903225806)), alors que si je met des valeurs pour le calcul du logarithme népérien beaucoup plus petites (ln(0.01)), je peux mettre jusque 8 termes sans problème (mais avec 10 ca ne marche toujours pas) donc je trouve ca vraiment bizarre.

Y aurait-il des limitations dont je n'aurais pas connaissance pour cette fonction ?

Je vous remercie.

PS: En pièce jointe la formule avec des explications sur le test fait avec un ln(x) plus faible.

Bonsoir,

votre "égal manuel" triche un peu car il y a des virgules en lieu et place des points !

@ bientôt

LouReeD

Bonjour,

il me semble que celui qui t'avais répondu attend encore un merci...
eric

Bonjour LouReeD,

Je vous remercie pour la proposition mais je n'ai pas compris la remarque. Il est vrai que j'utilise des points à la place des virgules "habituelles" car les préférences régionales de mon ordinateur définissent le point comme symbole décimal, donc cela peut être différent selon les personnes.

Si le problème venait vraiment de cet aspect, quand je diminue la valeur dont je cherche le logarithme naturel, cela ne fonctionnerait pas non plus alors qu'il s'agit toujours d'un nombre décimal.

Voici en PJ une version du document excel avec des virgules pour les personnes utilisant la virgule comme indicateur décimal.

Bonne journée.

Up. Any new idea ?

Quelqu'un aurait-il une idée ?

Bonjour

De mon côté Evaluate a fonctionné jusqu'à ^5, ensuite si je rajoute une expression, jusqu'à ^6 il m'affiche #Valeur...

Il faut peut-être couper par portion de 5 puis d'évaluer l'ensemble des resultats intermédiaires voir si c'est possible d'imbriquer les Evaluate...

Sinon pas plus pour moi, désolé.

@ bientôt

LouReeD

bonjour à tous

le paramètre de la méthode application.evaluate est limité à 255 caractères.

voici un fonction personnalisée alternative vite faite (pas sûr d'avoir testé tous les cas de figure)

on peut aussi copier la formule dans une cellule et exploiter le résultat (mais cela ne peut pas être utilisé pour en faire une fonction personnalisée excel)

Bonjour,

Je vous remercie, je vais explorer cette proposition.

Bonjour à tous,

une autre approche par fonction personnalisée:

dans un module standard =

Function Paullo(cel As Range)
Dim T, i As Integer
 T = Split(cel, "+")
 For i = LBound(T) To UBound(T)
    Paullo= Paullo+ Evaluate(T(i))
 Next
End Function

et dans la feuille : =Paullo(D4) où D4 contient l'expression à évaluer

Si cette expression ne contient pas de signes "+" ou s'il y a plus de 255 caractères entre deux signes "+" il y aura dysfonctionnement...

bonjour à tous

@algoplus,

Si cette expression ne contient pas de signes "+" ou s'il y a plus de 255 caractères entre deux signes "+" il y aura dysfonctionnement...

ou s'il y a une addition entre parenthèses. 2*(3+4)

ou s'il y a une addition entre parenthèses. 2*(3+4)

Ah oui... là ça marche moins bien....

Mais je crois que ce n'est pas prévu par Paullo

Bonjour à tous,

ça doit être obligatoirement avec une fonction personnalisée ?
Parce que travailler sur une cellule élimine tous ces problèmes (et ça c'est interdit dans une fonction, sauf usine à gaz instable).

Double-clique en D4, l'évaluation apparait en E4.
Là c'est un double-clique, ça pourrait être un bouton ou un autre événement qui traite un tableau de plusieurs chaines

.
eric

bonsoir à tous

@eriiic

ça doit être obligatoirement avec une fonction personnalisée ?

voir ma réponse du 18/10

Salut h2so4,

Ah oui, bien vu la recherche inverse de "(" depuis ")", malin.
Ca simplifie l'analyse de la syntaxe dans laquelle je n'ai pas voulu me lancer.
Bravo
eric

Bonsoir...

Bon ben, là c'est trop fort pour moi...

@ bientôt

LouReeD

Rechercher des sujets similaires à "limites fonction evaluate"