- 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
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