Convertir une fraction obtenue en Inputbox en une variable numérique

Convertir une fraction obtenue en Inputbox en une variable numérique - VB/VBA/VBS - Programmation

Marsh Posté le 18-01-2008 à 11:59:24    

Bonjour,
 
Grace à une inputbox, j'obtiens une fraction au format string
Mais lorsque je veux faire des calculs sur cette variable, ceci est impossible
J'ai essayé en la déclarant en variant mais cela ne marche pas.
 
 
Comment puis-je faire? merci
 

Reply

Marsh Posté le 18-01-2008 à 11:59:24   

Reply

Marsh Posté le 18-01-2008 à 12:10:23    

C'est difficile à dire sans voir une seule ligne de code.
Cependant, c'est peut-être une conversion à faire avec CDbl.

Reply

Marsh Posté le 18-01-2008 à 12:17:56    

Option Explicit
Public S, K, vol, r, T, rép, N, Nin As String, q As Byte
Dim d1 As String, d2 As Double
 
Private Sub CommandButton1_Click()
 
'Déclaration des variables
 
rép = ComboBox1.Value
 
'Formule pour un call classique
UserForm1.Hide 'cache l'userform
S = InputBox("Quel est le cours spot?" )
If S = "" Then Exit Sub ' si on clique sur le bouton annuler,la macro s'arrette
K = InputBox("Quel est le strike de l'option?" )
If K = "" Then Exit Sub
T = InputBox("Quelle est la durée de vie de l'option (en années)?" )
If T = "" Then Exit Sub
vol = InputBox("Quelle est la volatilité de l'option?" )
If vol = "" Then Exit Sub
r = InputBox("Quel est la valeur du taux sans risque?" )
If r = "" Then Exit Sub
q = 0
 
If rép = "call européen" Or "put européen" Then
    d1 = (Log(S / K) + (r - q + vol * vol * 0.5) * T) / (vol * Sqr(T))
    d2 = (Log(S / K) + (r - q - vol * vol * 0.5) * T) / (vol * Sqr(T))
 
..............
 
End sub
 
 
Lorsque par exemple je veux rentrer 5 mois pour la valeur de T, je tape 5/12
 
mais lorsque je calcule mon d1, il ne le comprend pas...
 
J'ai essayé avec Cdbl mais cela ne marche pas..

Reply

Marsh Posté le 18-01-2008 à 12:19:56    

c'est à dire ? dans ta textbox t'as "1/4" par exemple ?
 
je doute qu'un CDbl permette de résoudre le problème.
 
par contre, tu peux tenter de faire ça (mais c'est crade) :
 

Code :
  1. Dim coin
  2. Dim plop as Double
  3. coin = split(matextbox.text, "/" )
  4. if ubound(coin) > lbound(coin) then
  5.  ' yo j'ai une fraction
  6.  if CDbl(coin(ubound(coin))) <> 0 Then
  7.    plop = CDbl(coin(lbound(coin))) / CDbl(coin(ubound(coin)))
  8.  else
  9.    Msgbox("Division par zéro, proutch, toussa..." )
  10.  end if
  11. else
  12.  plop = CDbl(coin(lbound(coin)))
  13. end if


Message édité par MagicBuzz le 18-01-2008 à 12:20:38
Reply

Marsh Posté le 18-01-2008 à 13:52:31    

Ca marche. merci!!! :-)

Reply

Marsh Posté le 20-01-2008 à 19:21:15    

La fonction evaluate serait pour moi plus efficace  

Code :
  1. Dim res as string
  2.     On Error Resume Next
  3.     res = Application.Evaluate(str_to_eval)
  4.     If (Err.Number <> 0) Then
  5.         MsgBox ("Error on evaluate" & str_to_eval & " with message " & Err.Description)
  6.         End
  7.     End If
  8.     'utiliser res

Reply

Marsh Posté le 20-01-2008 à 23:01:33    

Effectivement en VBA.
Ne pas oublier le "on error goto 0" après le "end if"

Reply

Marsh Posté le 20-01-2008 à 23:13:59    

Exact, c'est vrai que je suis un peu "monomaniaque" du VBA (Excel qui plus est)...
 
Je ne me suis pas plus intéressé que ça au contexte il est vrai...
 
Désolé

Reply

Marsh Posté le 21-01-2008 à 09:46:17    

Je préciserais même en VBA pour Excel (qui n'est pas la seule syntaxe VBA).
Sous Word je ne connais pas de fonction d'évaluation et sous Access, elle s'appelle .Eval au lieu de .Evaluate
Je n'ai pas cherché sous Outlook, FrontPage, PowerPoint, Visio, etc.
Les joies des produits Microsoft :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed