[VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

Staple1600

XLDnaute Barbatruc
Bonjour à tous


Je n'arrive à trouver la solution au problème suivant:

Comment évaluer une chaine de caractères comme une formule?

Pourquoi le test 3 renvoie 0 alors que le test 2 fait bien la somme

Et comment faire pour le test 4,5 ?

Code:
Sub test_formula_string()
Dim x1#, x2#, x3#, x4#
Dim t_formu()  As Variant
Nombres = "4,8,1,3"
x = Split(Nombres, ",")
x1 = x(0)
x2 = x(1)
x3 = x(2)
x4 = x(3)
zz = Evaluate(x1 + x2 + x3 + x4)
zzz = [x1+x2+x3+x4]
t_formu = Array("x1/(x2/x3+x4)", "x1/(x2/x3-x4)", "x1/(x4-x2/x3)")
MsgBox x1 + x2 + x3 + x4 'ok
mess = "test 1 :" & Evaluate(x1 + x2 + x3 + x4) & Chr(13) 'ok
mess = mess & "test 2: " & zz & Chr(13) 'ok
mess = mess & "test 3: " & zzz & Chr(13) 'affiche la chaine
mess = mess & "test 4: " & t_formu(0) & Chr(13) 'affiche la chaine
mess = mess & "test 5: " & ["=t_formu(0)"] & Chr(13) 'pas ok
MsgBox mess
'MsgBox Evaluate(t_formu(0)) 'ne fonctionne pas
'MsgBox [t_formu(0)] ' ne fonctionne pas
MsgBox [=4/(8/1+3)] 'ok
End Sub
Merci à ceux qui pourront éclairer ma lanterne.
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

Bonjour Pascal


Le test3 est censé être l'écriture raccourcie de la méthode Evaluate

Code:
Sub test_i()
MsgBox Evaluate(2 * 8)
MsgBox [2*8]
MsgBox Evaluate("=SUM(3+5)")
MsgBox [SUM(3+5)]
End Sub
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

Re

Je ne vois pas l'intérêt de l'evaluate dans ton cas puisque tu as déclaré tes variables en double

Mais bon je n'ai peut-être pas tout suivi
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

Re


Le problème c'est que les formules son stockées dans le tableau t_formu

et

MsgBox Evaluate(t_form(0)) ne fonctionne pas
'avec t_formu(0) renvoyant: x1/(x2/x3+x4) comme une chaine de caractère
alors que Msgbox Evaluate(x1 + x2 + x3 + x4) fonctionne

Donc comment faire pour que le calcul se fasse.
 

tototiti2008

XLDnaute Barbatruc
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

Bonjour à tous,

si j'ai bien compris, Evaluate("SIN(45)") peut aussi s'écrire [SIN(45)] (exemple de l'aide)

donc dans ton code, quand tu mets

zzz = [x1+x2+x3+x4]

celà equivaut à

zzz = Evaluate("x1+x2+x3+x4")

En l'occurence, tu pourras observer qu'aucun des 2 ne fonctionne. Je ne crois pas que tu puisse utiliser de variables VBA dans ton Evaluate ou tes []

par contre, tu peux faire :

Evaluate(x1 & " + " & x2 & " + " & x3 & " + " & x4)

ce qui ne peut pas s'écrire avec des crochets, je crois...
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

Bonjour tototiti2008



Mais comment évaluer les formules stockées dans le tableau t_formu ?
 

pierrejean

XLDnaute Barbatruc
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

bonjour Staple

salut Pascal

Pourquoi ne pas ecrire:

Code:
 t_formu = Array(x1 / (x2 / x3 + x4), x1 / (x2 / x3 - x4), x1 / (x4 - x2 / x3))
Avec ceci (et sans Evaluate) t_formu(0) renvoie le nombre correct

Edit : salut Tototiti
 

tototiti2008

XLDnaute Barbatruc
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

pas sûr que ça te plaise mais ça fonctionne :

MsgBox Evaluate(Replace(Replace(Replace(Replace(t_formu(0), "x1", x1), "x2", x2), "x3", x3), "x4", x4))
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] String dans Formule , formules dans Tableau (array), comment faire svp ?

Re


Merci à vous tous

Pierrejean:

Effectivement, mais je croiyais qu'il fallait utiliser " " avec la syntaxe

Array( "chaine", "chaine")

Je m'en vais tester tout cela.


EDITION: ok ca marche, je reviendrai vers vous pour la suite .
 

Discussions similaires


Haut Bas