' Fonction pour calculer le résultat de l'expression
Private Sub CalculerResultat()
    'remastered the percent operation by patricktoulon
    Dim Resultat As Variant
    Dim expr As String
    Dim t, symb, ex, i
    symb = Split("+,-,x,/,*", ",")
    ' Vérifie si l'expression est vide
    If Len(expression) = 0 Then Exit Sub
    ' Remplacement des erreurs de formatage
    expr = Replace(expression, "x", "*") ' Remplace "x" par "*" pour Evaluate
    expr = Replace(expr, ",", ".") ' Remplace les virgules par des points (format anglais)
    ex = expr 'on clone expr
    ex = Replace(Replace(ex, "(", ""), ")", "") 'on replace les parenthèses dans le clone
    For i = 0 To UBound(symb) 'boucle sur les symbols
        ex = Replace(ex, symb(i), "|") 'on les replace par un separateur indentique
    Next
    ex = Split(ex, "|") 'on coupe le clone de expr (ex) par le separateur
    For i = 0 To UBound(ex) 'on boucle sur les item du split du clone
        'si il y a un "%" dans la chaine de l'element du split
        ' on replace  ce pourcentage cette fois ci  ddans le expr par la formule  | "*(1 - " & Val(ex(i)) & "/100)" |(+ ou -)
        If InStr(ex(i), "%") Then
           ' MsgBox Val(ex(i))juste pour voir si la formule est bonne
            If InStr(expr, "-" & Val(ex(i)) & "%") > 0 Then expr = Replace(expr, ex(i), "*(" & 1 - (Val(ex(i)) / 100) & ")")
            If InStr(expr, "+" & Val(ex(i)) & "%") > 0 Then expr = Replace(expr, ex(i), "*(" & 1 + (Val(ex(i)) / 100) & ")")
        End If
    Next
    'on replace les symbols double(-*  ou +* etc... dans expr
    expr = Replace(Replace(Replace(Replace(expr, "-*", "*"), "+*", "*"), "**", ""), "/*", "")
    'je laisse le msgbox mais il faudra l'enlever
    MsgBox expr
    ' Essayer d'évaluer l'expression
    On Error Resume Next
    Resultat = Evaluate(Replace(expr, ",", ".")) ' Évalue l'expression
    On Error GoTo 0
    ' Vérification et affichage du résultat
    If IsError(Resultat) Or IsEmpty(Resultat) Then
        Me.txtValeur = "Erreur"
    Else
        If Resultat = Int(Resultat) Then
            Me.txtValeur = Format(Resultat, "0")
        Else
            Me.txtValeur = Format(Resultat, "0.00")
        End If
        DernierResultat = Me.txtValeur ' Stocke le dernier résultat pour la continuité
    End If
    ' Met à jour l'affichage avec le signe égal
    Me.txtExpression = expression & "=" & Me.txtValeur ' Conserve l'expression avec le signe égal
End Sub