OVH Cloud OVH Cloud

Quand VBA prend des points pour des virgules !

11 réponses
Avatar
garnote
Rebonsoir,

J'ai une question pour vous dans le code.

Sub nono()
Dim t As String
t = "x^2+1"
i = 2
'La suivante est OK :
MsgBox Evaluate(Replace(t, "x", i))
i = 0.5
'La suivante ne fonctionne pas :
MsgBox Evaluate(Replace(t, "x", i))
'Suis-je obligé de faire cet incroyable détour ? :
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
'Pourtant, i ne contient pas de virgule !!!
End Sub

Curieux, non ?

Serge

10 réponses

1 2
Avatar
j
chez moi xl97 replace ne marche pas, alors je teste
worksheetfunction.substitute

MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", 0.5)) marche mais
j'utilise le point comme séparateur numérique
si je change le séparateur pour vitgule ça ne marche plus

par contre
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", "0.5"))
marche dans tous les cas
--

http://jacxl.free.fr/





"garnote" a écrit dans le message de news:
%94Ab.18475$
Rebonsoir,

J'ai une question pour vous dans le code.

Sub nono()
Dim t As String
t = "x^2+1"
i = 2
'La suivante est OK :
MsgBox Evaluate(Replace(t, "x", i))
i = 0.5
'La suivante ne fonctionne pas :
MsgBox Evaluate(Replace(t, "x", i))
'Suis-je obligé de faire cet incroyable détour ? :
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
'Pourtant, i ne contient pas de virgule !!!
End Sub

Curieux, non ?

Serge




Avatar
garnote
par contre
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", "0.5"))
marche dans tous les cas
Ouais, mais comment lui passer une valeur de i sans Replace(i,",",".")

i=0.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", i))
i = 1.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", Replace(i, ",", ".")))

Je trouve ça absurde.
Sur une feuille de calcul, je dois écrire 1,5
En VBA, je dois écrire 1.5 mais le code ne sait pas que je viens d'écrire un
point.
C'est comme si le module se prenait pour une feuille de calcul !!!


???

Serge

Avatar
j
et si tu faisais
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", cstring(i)))
(pas testé...)


"garnote" a écrit dans le message de news:
Zr5Ab.18579$
par contre
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", "0.5"))
marche dans tous les cas
Ouais, mais comment lui passer une valeur de i sans Replace(i,",",".")

i=0.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", i))
i = 1.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", Replace(i, ",",
".")))


Je trouve ça absurde.
Sur une feuille de calcul, je dois écrire 1,5
En VBA, je dois écrire 1.5 mais le code ne sait pas que je viens d'écrire
un

point.
C'est comme si le module se prenait pour une feuille de calcul !!!


???

Serge





Avatar
garnote
J'avais essayé, mais rien n'y fait, bout de baptême !

;-)

Serge

"" a écrit dans le message de news:

et si tu faisais
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", cstring(i)))
(pas testé...)


"garnote" a écrit dans le message de news:
Zr5Ab.18579$
par contre
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", "0.5"))
marche dans tous les cas
Ouais, mais comment lui passer une valeur de i sans Replace(i,",",".")

i=0.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", i))
i = 1.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", Replace(i, ",",
".")))


Je trouve ça absurde.
Sur une feuille de calcul, je dois écrire 1,5
En VBA, je dois écrire 1.5 mais le code ne sait pas que je viens
d'écrire


un
point.
C'est comme si le module se prenait pour une feuille de calcul !!!


???

Serge









Avatar
Michel Pierron
Bonsoir Garnote;
Puisque i n'est pas déclaré, c'est un type variant; tu peux donc écrire
i = "0.5"
MsgBox Evaluate(Replace(t, "x", i))
et ça devrait rouler.

MP

"garnote" a écrit dans le message de
news:%94Ab.18475$
Rebonsoir,

J'ai une question pour vous dans le code.

Sub nono()
Dim t As String
t = "x^2+1"
i = 2
'La suivante est OK :
MsgBox Evaluate(Replace(t, "x", i))
i = 0.5
'La suivante ne fonctionne pas :
MsgBox Evaluate(Replace(t, "x", i))
'Suis-je obligé de faire cet incroyable détour ? :
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
'Pourtant, i ne contient pas de virgule !!!
End Sub

Curieux, non ?

Serge




Avatar
Michel Pierron
Mille excuses, je n'avais pas développé l'arborescence.
MP

"garnote" a écrit dans le message de
news:Zr5Ab.18579$
par contre
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", "0.5"))
marche dans tous les cas
Ouais, mais comment lui passer une valeur de i sans Replace(i,",",".")

i=0.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", i))
i = 1.5
MsgBox Evaluate(WorksheetFunction.Substitute(t, "x", Replace(i, ",",
".")))


Je trouve ça absurde.
Sur une feuille de calcul, je dois écrire 1,5
En VBA, je dois écrire 1.5 mais le code ne sait pas que je viens d'écrire
un

point.
C'est comme si le module se prenait pour une feuille de calcul !!!


???

Serge





Avatar
garnote
Oui mais je ne pourrai pas faire de boucles sur i !

Sub PasOK()
Dim t As String
Dim i As Double
t = "x^2+1"
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", i))
Next i
End Sub

Sub OK()
Dim t As String
Dim i As Double
t = "x^2+1"
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
Next i
End Sub

Serge



"Michel Pierron" a écrit dans le message de news:

Bonsoir Garnote;
Puisque i n'est pas déclaré, c'est un type variant; tu peux donc écrire
i = "0.5"
MsgBox Evaluate(Replace(t, "x", i))
et ça devrait rouler.

MP

"garnote" a écrit dans le message de
news:%94Ab.18475$
Rebonsoir,

J'ai une question pour vous dans le code.

Sub nono()
Dim t As String
t = "x^2+1"
i = 2
'La suivante est OK :
MsgBox Evaluate(Replace(t, "x", i))
i = 0.5
'La suivante ne fonctionne pas :
MsgBox Evaluate(Replace(t, "x", i))
'Suis-je obligé de faire cet incroyable détour ? :
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
'Pourtant, i ne contient pas de virgule !!!
End Sub

Curieux, non ?

Serge








Avatar
garnote
Sub BizzPourMoéEnToutCas()
k = 1.5
Debug.Print "k = " & k
End Sub

Au secours ! Je veux comprendre les forces occultes !!!

;-)))

Serge
Avatar
Michel Pierron
Bien sur que si:
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", Str(i)))
Next i

MP

"garnote" a écrit dans le message de
news:q96Ab.18590$
Oui mais je ne pourrai pas faire de boucles sur i !

Sub PasOK()
Dim t As String
Dim i As Double
t = "x^2+1"
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", i))
Next i
End Sub

Sub OK()
Dim t As String
Dim i As Double
t = "x^2+1"
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
Next i
End Sub

Serge



"Michel Pierron" a écrit dans le message de news:

Bonsoir Garnote;
Puisque i n'est pas déclaré, c'est un type variant; tu peux donc écrire
i = "0.5"
MsgBox Evaluate(Replace(t, "x", i))
et ça devrait rouler.

MP

"garnote" a écrit dans le message de
news:%94Ab.18475$
Rebonsoir,

J'ai une question pour vous dans le code.

Sub nono()
Dim t As String
t = "x^2+1"
i = 2
'La suivante est OK :
MsgBox Evaluate(Replace(t, "x", i))
i = 0.5
'La suivante ne fonctionne pas :
MsgBox Evaluate(Replace(t, "x", i))
'Suis-je obligé de faire cet incroyable détour ? :
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
'Pourtant, i ne contient pas de virgule !!!
End Sub

Curieux, non ?

Serge












Avatar
garnote
Et mes yeux churent de leurs écailles !!!
J'utilisais obstinément CStr, enfer et damnation.

;-)))

Serge

"Michel Pierron" a écrit dans le message de news:

Bien sur que si:
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", Str(i)))
Next i

MP

"garnote" a écrit dans le message de
news:q96Ab.18590$
Oui mais je ne pourrai pas faire de boucles sur i !

Sub PasOK()
Dim t As String
Dim i As Double
t = "x^2+1"
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", i))
Next i
End Sub

Sub OK()
Dim t As String
Dim i As Double
t = "x^2+1"
For i = -1 To 1 Step 0.5
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
Next i
End Sub

Serge



"Michel Pierron" a écrit dans le message de
news:



Bonsoir Garnote;
Puisque i n'est pas déclaré, c'est un type variant; tu peux donc
écrire



i = "0.5"
MsgBox Evaluate(Replace(t, "x", i))
et ça devrait rouler.

MP

"garnote" a écrit dans le message de
news:%94Ab.18475$
Rebonsoir,

J'ai une question pour vous dans le code.

Sub nono()
Dim t As String
t = "x^2+1"
i = 2
'La suivante est OK :
MsgBox Evaluate(Replace(t, "x", i))
i = 0.5
'La suivante ne fonctionne pas :
MsgBox Evaluate(Replace(t, "x", i))
'Suis-je obligé de faire cet incroyable détour ? :
MsgBox Evaluate(Replace(t, "x", Replace(i, ",", ".")))
'Pourtant, i ne contient pas de virgule !!!
End Sub

Curieux, non ?

Serge
















1 2