Cette fonction recoit en paramètre une chaine contenant une formule de math simple (4 opérateurs).. du type : "2+9*51-25/5", et renvoie le résultat (ici 456)...
Pour faire ca, j'isole chaque sous-partie (Nombre, Separateur, Nombre), je la calcule, et la ré-insère dans la formule une fois calulée... puis au suivant.. tant qu'il y a un separateur...
Source / Exemple :
Public Function Evaluate(Formule As String) As Double
Dim PosCour, PosSep, PosAV, PosAP, Av, Ap, Res
Dim Separateurs(3), NumSep, Formule2
'liste des separateurs
Separateurs(0) = "/"
Separateurs(1) = "*"
Separateurs(2) = "+"
Separateurs(3) = "-"
For NumSep = 0 To 3
PosSep = InStr(1, Formule, Separateurs(NumSep))
While PosSep > 0
'on determine le nombre AVANT le separateur
PosCour = PosSep - 1
While (IsNumeric(Mid(Formule, PosCour, 1)))
PosCour = PosCour - 1
If PosCour = 0 Then GoTo suite:
Wend
suite:
PosAV = PosCour + 1
Av = Mid(Formule, PosAV, PosSep - PosAV)
'on determine le nombre APRES le separateur
PosCour = PosSep + 1
While IsNumeric(Mid(Formule, PosCour, 1))
PosCour = PosCour + 1
Wend
PosAP = PosCour
Ap = Mid(Formule, PosSep + 1, PosAP - PosSep - 1)
'On calcule la sous-partie isolée
Select Case NumSep
Case 0: '/
Res = Val(Av) / Val(Ap)
Case 1: '*
Res = Val(Av) * Val(Ap)
Case 2: '+
Res = Val(Av) + Val(Ap)
Case 3: '-
Res = Val(Av) - Val(Ap)
End Select
'on réécrit la formule avec la sous-partie calculée
Formule = Left(Formule, PosAV - 1) & Trim(Str(Res)) & Mid(Formule, PosAP)
PosSep = InStr(1, Formule, Separateurs(NumSep))
Wend
Next
Evaluate = Val(Formule)
End Function
Conclusion :
Bon, le code est pas parfait, loin de là, mais c'est l'algo qui compte non... ;)
N'hésitez pas a m'insulter parceque je gère pas les erreurs, j'utilise un goto, et parce que je gère pas les parenthèses aussi...
m'enfin voilà koi... si vous pouvez le completer, n'hezitez pas...
Merci à DoDoDODo ;p
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.