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

fonction Eval de ScriptControl ne fonctionne pas avec des chaines de caractères

6 réponses
Avatar
rederon
Bonjour à tous,

J'essaye d'évaluer une expression du type :
string1 = string2

Bizarrement, ça fonctionne parfaitement lorsque les 2 valeurs sont des
nombres, mais pas quand ce sont des chaines de caractère.

Voici ci-dessous un exemple lorsque ça fonctionne.
Je suis sous W2000 avec Excel 2002 (SP2).
J'ai ajouté Microsoft Script Control 1.0 dans le projet et j'ai
déclaré au début de mon module la fonction suivante :

<<<<<<<<<<<<<<<<
Public Function Eval(ByVal strExpression As String) As Variant
Dim objScript As New ScriptControl

objScript.Language = "VBScript"
Eval = objScript.Eval(strExpression)

End Function
>>>>>>>>>>>>>>>>

Ensuite, j'écris cela dans ma procédure :

<<<<<<<<<<<<<<<<
A = "3"
B = "4"
operateur = " = "
resultat = Eval(A & operateur & B)
msgbox ("Resultat=" & resultat)
>>>>>>>>>>>>>>>>

A l'execution, le résultat est "FALSE" -> OK

Mais lorsque je remplace A et B par des chaines de caractères et que
cela ne plante pas, le résultat est toujours "TRUE".

Car cela peut aussi planter en générant une erreur de type "run-time
error '1002'" (l'exécution du code s'arrête alors sur l'expression de
sortie de la fonction -> Eval = objScript...) lorsque l'une des deux
chaines de caractère A ou B commence par un nombre (comme par exemple
A = "2a").

J'ajoute que lorsque je supprime la variable relative à l'opérateur,
cela fonctionne parfaitement :
<<<<<<<<<<<<<<<<
resultat = Eval(A = B)
>>>>>>>>>>>>>>>>
Bien évidemment, j'ai besoin de conserver cette variable dans le cadre
de mon application.

Je me suis dit que j'avais peut-être oublié d'introduire des fonctions
de conversion comme 'CBool' ou 'CStr' mais je ne m'en suis pas sorti.

Je vous remercie par avance pour vos suggestions.

Stéphane

6 réponses

Avatar
Pascal B.
Bjr,

Et si tu disais à Eval que tu utilises du texte en ajoutant des guillemets?

Exemple (non testé):

A = """Albert"""
B = """Gustave"""
operateur = " = "
resultat = Eval(A & operateur & B)
msgbox ("Resultat=" & resultat)

Pascal B.

"rederon" wrote in message news:
| Bonjour à tous,
|
| J'essaye d'évaluer une expression du type :
| string1 = string2
|
| Bizarrement, ça fonctionne parfaitement lorsque les 2 valeurs sont des
| nombres, mais pas quand ce sont des chaines de caractère.
|
| Voici ci-dessous un exemple lorsque ça fonctionne.
| Je suis sous W2000 avec Excel 2002 (SP2).
| J'ai ajouté Microsoft Script Control 1.0 dans le projet et j'ai
| déclaré au début de mon module la fonction suivante :
|
| <<<<<<<<<<<<<<<<
| Public Function Eval(ByVal strExpression As String) As Variant
| Dim objScript As New ScriptControl
|
| objScript.Language = "VBScript"
| Eval = objScript.Eval(strExpression)
|
| End Function
| >>>>>>>>>>>>>>>>
|
| Ensuite, j'écris cela dans ma procédure :
|
| <<<<<<<<<<<<<<<<
| A = "3"
| B = "4"
| operateur = " = "
| resultat = Eval(A & operateur & B)
| msgbox ("Resultat=" & resultat)
| >>>>>>>>>>>>>>>>
|
| A l'execution, le résultat est "FALSE" -> OK
|
| Mais lorsque je remplace A et B par des chaines de caractères et que
| cela ne plante pas, le résultat est toujours "TRUE".
|
| Car cela peut aussi planter en générant une erreur de type "run-time
| error '1002'" (l'exécution du code s'arrête alors sur l'expression de
| sortie de la fonction -> Eval = objScript...) lorsque l'une des deux
| chaines de caractère A ou B commence par un nombre (comme par exemple
| A = "2a").
|
| J'ajoute que lorsque je supprime la variable relative à l'opérateur,
| cela fonctionne parfaitement :
| <<<<<<<<<<<<<<<<
| resultat = Eval(A = B)
| >>>>>>>>>>>>>>>>
| Bien évidemment, j'ai besoin de conserver cette variable dans le cadre
| de mon application.
|
| Je me suis dit que j'avais peut-être oublié d'introduire des fonctions
| de conversion comme 'CBool' ou 'CStr' mais je ne m'en suis pas sorti.
|
| Je vous remercie par avance pour vos suggestions.
|
| Stéphane
Avatar
ng
Salut,

Pourquoi tiens tu à évaluer des chaines de caracères ainsi ?
Que répresentent t-elles ?

Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

rederon wrote:
Bonjour à tous,

J'essaye d'évaluer une expression du type :
string1 = string2

Bizarrement, ça fonctionne parfaitement lorsque les 2 valeurs sont des
nombres, mais pas quand ce sont des chaines de caractère.

Voici ci-dessous un exemple lorsque ça fonctionne.
Je suis sous W2000 avec Excel 2002 (SP2).
J'ai ajouté Microsoft Script Control 1.0 dans le projet et j'ai
déclaré au début de mon module la fonction suivante :

<<<<<<<<<<<<<<<<
Public Function Eval(ByVal strExpression As String) As Variant
Dim objScript As New ScriptControl

objScript.Language = "VBScript"
Eval = objScript.Eval(strExpression)

End Function


































Ensuite, j'écris cela dans ma procédure :

<<<<<<<<<<<<<<<<
A = "3"
B = "4"
operateur = " = "
resultat = Eval(A & operateur & B)
msgbox ("Resultat=" & resultat)


































A l'execution, le résultat est "FALSE" -> OK

Mais lorsque je remplace A et B par des chaines de caractères et que
cela ne plante pas, le résultat est toujours "TRUE".

Car cela peut aussi planter en générant une erreur de type "run-time
error '1002'" (l'exécution du code s'arrête alors sur l'expression de
sortie de la fonction -> Eval = objScript...) lorsque l'une des deux
chaines de caractère A ou B commence par un nombre (comme par exemple
A = "2a").

J'ajoute que lorsque je supprime la variable relative à l'opérateur,
cela fonctionne parfaitement :
<<<<<<<<<<<<<<<<
resultat = Eval(A = B)

































Bien évidemment, j'ai besoin de conserver cette variable dans le cadre
de mon application.

Je me suis dit que j'avais peut-être oublié d'introduire des fonctions
de conversion comme 'CBool' ou 'CStr' mais je ne m'en suis pas sorti.

Je vous remercie par avance pour vos suggestions.

Stéphane


Avatar
rederon
Super, Pascal !
Effectivement ça fonctionne en rajoutant les guillemets.
Merci beaucoup pour l'astuce.
Simple mais encore fallait-il avoir l'idée.
Stéphane



"Pascal B." wrote in message news:<OAr5R$...
Bjr,

Et si tu disais à Eval que tu utilises du texte en ajoutant des guillemets?

Exemple (non testé):

A = """Albert"""
B = """Gustave"""
operateur = " = "
resultat = Eval(A & operateur & B)
msgbox ("Resultat=" & resultat)

Pascal B.

"rederon" wrote in message news:
| Bonjour à tous,
|
| J'essaye d'évaluer une expression du type :
| string1 = string2
|
| Bizarrement, ça fonctionne parfaitement lorsque les 2 valeurs sont des
| nombres, mais pas quand ce sont des chaines de caractère.
|
| Voici ci-dessous un exemple lorsque ça fonctionne.
| Je suis sous W2000 avec Excel 2002 (SP2).
| J'ai ajouté Microsoft Script Control 1.0 dans le projet et j'ai
| déclaré au début de mon module la fonction suivante :
|
| <<<<<<<<<<<<<<<<
| Public Function Eval(ByVal strExpression As String) As Variant
| Dim objScript As New ScriptControl
|
| objScript.Language = "VBScript"
| Eval = objScript.Eval(strExpression)
|
| End Function
| >>>>>>>>>>>>>>>>
|
| Ensuite, j'écris cela dans ma procédure :
|
| <<<<<<<<<<<<<<<<
| A = "3"
| B = "4"
| operateur = " = "
| resultat = Eval(A & operateur & B)
| msgbox ("Resultat=" & resultat)
| >>>>>>>>>>>>>>>>
|
| A l'execution, le résultat est "FALSE" -> OK
|
| Mais lorsque je remplace A et B par des chaines de caractères et que
| cela ne plante pas, le résultat est toujours "TRUE".
|
| Car cela peut aussi planter en générant une erreur de type "run-time
| error '1002'" (l'exécution du code s'arrête alors sur l'expression de
| sortie de la fonction -> Eval = objScript...) lorsque l'une des deux
| chaines de caractère A ou B commence par un nombre (comme par exemple
| A = "2a").
|
| J'ajoute que lorsque je supprime la variable relative à l'opérateur,
| cela fonctionne parfaitement :
| <<<<<<<<<<<<<<<<
| resultat = Eval(A = B)
| >>>>>>>>>>>>>>>>
| Bien évidemment, j'ai besoin de conserver cette variable dans le cadre
| de mon application.
|
| Je me suis dit que j'avais peut-être oublié d'introduire des fonctions
| de conversion comme 'CBool' ou 'CStr' mais je ne m'en suis pas sorti.
|
| Je vous remercie par avance pour vos suggestions.
|
| Stéphane


Avatar
rederon
Le but est d'évaluer une chaine de caractère beaucoup plus complexe
que celle que j'ai présenté dans l'example ci-dessous.
L'application finale me permettra de faire une fonction de filtre et
de tri évolués (avec plus de 2 valeurs comme c'est le cas avec les
fonctions de Excel) et customisable par l'opérateur (avec des
opérateurs conditionnels comme =, >, <, >=, <=, Like, etc...).
Mais je butais sur la façon d'intégrer l'opérateur en passant par une
variable.



"ng" wrote in message news:...
Salut,

Pourquoi tiens tu à évaluer des chaines de caracères ainsi ?
Que répresentent t-elles ?

Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

rederon wrote:
> Bonjour à tous,
>
> J'essaye d'évaluer une expression du type :
> string1 = string2
>
> Bizarrement, ça fonctionne parfaitement lorsque les 2 valeurs sont des
> nombres, mais pas quand ce sont des chaines de caractère.
>
> Voici ci-dessous un exemple lorsque ça fonctionne.
> Je suis sous W2000 avec Excel 2002 (SP2).
> J'ai ajouté Microsoft Script Control 1.0 dans le projet et j'ai
> déclaré au début de mon module la fonction suivante :
>
> <<<<<<<<<<<<<<<<
> Public Function Eval(ByVal strExpression As String) As Variant
> Dim objScript As New ScriptControl
>
> objScript.Language = "VBScript"
> Eval = objScript.Eval(strExpression)
>
> End Function
>>>>>>>>>>>>>>>>>
>
> Ensuite, j'écris cela dans ma procédure :
>
> <<<<<<<<<<<<<<<<
> A = "3"
> B = "4"
> operateur = " = "
> resultat = Eval(A & operateur & B)
> msgbox ("Resultat=" & resultat)
>>>>>>>>>>>>>>>>>
>
> A l'execution, le résultat est "FALSE" -> OK
>
> Mais lorsque je remplace A et B par des chaines de caractères et que
> cela ne plante pas, le résultat est toujours "TRUE".
>
> Car cela peut aussi planter en générant une erreur de type "run-time
> error '1002'" (l'exécution du code s'arrête alors sur l'expression de
> sortie de la fonction -> Eval = objScript...) lorsque l'une des deux
> chaines de caractère A ou B commence par un nombre (comme par exemple
> A = "2a").
>
> J'ajoute que lorsque je supprime la variable relative à l'opérateur,
> cela fonctionne parfaitement :
> <<<<<<<<<<<<<<<<
> resultat = Eval(A = B)
>>>>>>>>>>>>>>>>>
> Bien évidemment, j'ai besoin de conserver cette variable dans le cadre
> de mon application.
>
> Je me suis dit que j'avais peut-être oublié d'introduire des fonctions
> de conversion comme 'CBool' ou 'CStr' mais je ne m'en suis pas sorti.
>
> Je vous remercie par avance pour vos suggestions.
>
> Stéphane


Avatar
ng
Salut,

Ok, dans ce cas il faut en effet utiliser des guillements (car je savais pas
si t'es chaines étaient censées representer des variables ou simplement un
chaine fixe) comme te l'as dit Pascal.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

rederon wrote:
Le but est d'évaluer une chaine de caractère beaucoup plus complexe
que celle que j'ai présenté dans l'example ci-dessous.
L'application finale me permettra de faire une fonction de filtre et
de tri évolués (avec plus de 2 valeurs comme c'est le cas avec les
fonctions de Excel) et customisable par l'opérateur (avec des
opérateurs conditionnels comme =, >, <, >=, <=, Like, etc...).
Mais je butais sur la façon d'intégrer l'opérateur en passant par une
variable.



"ng" wrote in message
news:...
Salut,

Pourquoi tiens tu à évaluer des chaines de caracères ainsi ?
Que répresentent t-elles ?

Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

rederon wrote:
Bonjour à tous,

J'essaye d'évaluer une expression du type :
string1 = string2

Bizarrement, ça fonctionne parfaitement lorsque les 2 valeurs sont
des nombres, mais pas quand ce sont des chaines de caractère.

Voici ci-dessous un exemple lorsque ça fonctionne.
Je suis sous W2000 avec Excel 2002 (SP2).
J'ai ajouté Microsoft Script Control 1.0 dans le projet et j'ai
déclaré au début de mon module la fonction suivante :

<<<<<<<<<<<<<<<<
Public Function Eval(ByVal strExpression As String) As Variant
Dim objScript As New ScriptControl

objScript.Language = "VBScript"
Eval = objScript.Eval(strExpression)

End Function


































Ensuite, j'écris cela dans ma procédure :

<<<<<<<<<<<<<<<<
A = "3"
B = "4"
operateur = " = "
resultat = Eval(A & operateur & B)
msgbox ("Resultat=" & resultat)


































A l'execution, le résultat est "FALSE" -> OK

Mais lorsque je remplace A et B par des chaines de caractères et que
cela ne plante pas, le résultat est toujours "TRUE".

Car cela peut aussi planter en générant une erreur de type "run-time
error '1002'" (l'exécution du code s'arrête alors sur l'expression
de sortie de la fonction -> Eval = objScript...) lorsque l'une des
deux chaines de caractère A ou B commence par un nombre (comme par
exemple A = "2a").

J'ajoute que lorsque je supprime la variable relative à l'opérateur,
cela fonctionne parfaitement :
<<<<<<<<<<<<<<<<
resultat = Eval(A = B)

































Bien évidemment, j'ai besoin de conserver cette variable dans le
cadre de mon application.

Je me suis dit que j'avais peut-être oublié d'introduire des
fonctions de conversion comme 'CBool' ou 'CStr' mais je ne m'en
suis pas sorti.

Je vous remercie par avance pour vos suggestions.

Stéphane






Avatar
ng
> savais pas si t'es chaines étaient censées representer des variables


On lira "tes" bien entendu :/

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

ng wrote:
Salut,

Ok, dans ce cas il faut en effet utiliser des guillements (car je
savais pas si t'es chaines étaient censées representer des variables
ou simplement un chaine fixe) comme te l'as dit Pascal.


rederon wrote:
Le but est d'évaluer une chaine de caractère beaucoup plus complexe
que celle que j'ai présenté dans l'example ci-dessous.
L'application finale me permettra de faire une fonction de filtre et
de tri évolués (avec plus de 2 valeurs comme c'est le cas avec les
fonctions de Excel) et customisable par l'opérateur (avec des
opérateurs conditionnels comme =, >, <, >=, <=, Like, etc...).
Mais je butais sur la façon d'intégrer l'opérateur en passant par une
variable.



"ng" wrote in message
news:...
Salut,

Pourquoi tiens tu à évaluer des chaines de caracères ainsi ?
Que répresentent t-elles ?

Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

rederon wrote:
Bonjour à tous,

J'essaye d'évaluer une expression du type :
string1 = string2

Bizarrement, ça fonctionne parfaitement lorsque les 2 valeurs sont
des nombres, mais pas quand ce sont des chaines de caractère.

Voici ci-dessous un exemple lorsque ça fonctionne.
Je suis sous W2000 avec Excel 2002 (SP2).
J'ai ajouté Microsoft Script Control 1.0 dans le projet et j'ai
déclaré au début de mon module la fonction suivante :

<<<<<<<<<<<<<<<<
Public Function Eval(ByVal strExpression As String) As Variant
Dim objScript As New ScriptControl

objScript.Language = "VBScript"
Eval = objScript.Eval(strExpression)

End Function


































Ensuite, j'écris cela dans ma procédure :

<<<<<<<<<<<<<<<<
A = "3"
B = "4"
operateur = " = "
resultat = Eval(A & operateur & B)
msgbox ("Resultat=" & resultat)


































A l'execution, le résultat est "FALSE" -> OK

Mais lorsque je remplace A et B par des chaines de caractères et
que cela ne plante pas, le résultat est toujours "TRUE".

Car cela peut aussi planter en générant une erreur de type
"run-time error '1002'" (l'exécution du code s'arrête alors sur
l'expression de sortie de la fonction -> Eval = objScript...)
lorsque l'une des deux chaines de caractère A ou B commence par un
nombre (comme par exemple A = "2a").

J'ajoute que lorsque je supprime la variable relative à
l'opérateur, cela fonctionne parfaitement :
<<<<<<<<<<<<<<<<
resultat = Eval(A = B)

































Bien évidemment, j'ai besoin de conserver cette variable dans le
cadre de mon application.

Je me suis dit que j'avais peut-être oublié d'introduire des
fonctions de conversion comme 'CBool' ou 'CStr' mais je ne m'en
suis pas sorti.

Je vous remercie par avance pour vos suggestions.

Stéphane