Bonjour,
Je vous poste aujourd'hui une petite fonction que j'ai créée pour mes propres besoins, et elle pourra peut-être servir à d'autre
Elle sert à faire un calcul à partir d'une chaine de caractère.
Par exemple, si on lui donne "
5 x 4 + 3 : 2", elle retourne "
21.5".
Elle fonctionne avec les signes : + (addition), - (soustration), : ou / (division) et x ou * (multiplication).
Mais elle ne prend pas en compte les parenthèses
Voici la fonction :
► Afficher le texte
Code : Tout sélectionner
$In = InputBox("","")
MsgBox(64,"Info",_Calcul($In))
Func _Calcul($In)
;Traitement de la chaine...
$In = StringReplace($In," ","")
$In = StringReplace($In,",",".")
$In = StringReplace($In,"x","*")
$In = StringReplace($In,":","/")
$In = StringReplace($In,"\","/")
While 1
If Not StringInStr($In,"*") And Not StringInStr($In,"/") And Not StringInStr($In,"+") Then
If Not StringInStr($In,"-") Then
ExitLoop
ElseIf StringLeft($In,1) = "-" Then
ExitLoop
EndIf
EndIf
$Split = StringSplit($In,"")
Dim $Return[16384]
$n = 0
For $i = 1 To StringLen($In) Step 1
If $Split[$i] = "*" Or $Split[$i] = "/" Or $Split[$i] = "-" Or $Split[$i] = "+" Then
$n += 1
$Return[$n] = $Split[$i]
$n += 1
Else
$Return[$n] &= $Split[$i]
EndIf
Next
For $i = 0 To 16383 Step 1
If $Return[$i] = "" Then ExitLoop
If $Return[$i] = "*" Then
$In = StringReplace($In,$Return[$i-1]&"*"&$Return[$i+1],$Return[$i-1]*$Return[$i+1])
$Return[$i+1] = $Return[$i-1]*$Return[$i+1]
EndIf
If $Return[$i] = "/" Then
$In = StringReplace($In,$Return[$i-1]&"/"&$Return[$i+1],$Return[$i-1]/$Return[$i+1])
$Return[$i+1] = $Return[$i-1]/$Return[$i+1]
EndIf
Next
For $i = 0 To 16383 Step 1
If $Return[$i] = "" Then ExitLoop
If $Return[$i] = "+" Then
$In = StringReplace($In,$Return[$i-1]&"+"&$Return[$i+1],$Return[$i-1]+$Return[$i+1])
$Return[$i+1] = $Return[$i-1]+$Return[$i+1]
EndIf
If $Return[$i] = "-" Then
$In = StringReplace($In,$Return[$i-1]&"-"&$Return[$i+1],$Return[$i-1]-$Return[$i+1])
$Return[$i+1] = $Return[$i-1]-$Return[$i+1]
EndIf
Next
WEnd
Return Number($In)
EndFunc
Voilà, je ne sais pas si ça vous sera utile, mais bon, on ne sais jamais