XL 2019 Problème calcul % sur calculatrice

  • Initiateur de la discussion Initiateur de la discussion Nathe
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Nathe

XLDnaute Junior
Bonjour à toutes et tous,

Je suis en train d'essayer de monter un projet calculatrice sur excel mais je peine sur l'adaptation du calcul du pourcentage,
Si une personne saurai comment effectué le code qui irai bien.

Merci à tous
Nathe

Animation.gif
 

Pièces jointes

Bonjour à toutes et tous,

Je suis en train d'essayer de monter un projet calculatrice sur excel mais je peine sur l'adaptation du calcul du pourcentage,
Si une personne saurai comment effectué le code qui irai bien.

Merci à tous
Nathe

Regarde la pièce jointe 1213472
Hello Nathe dit "Le shérif",
je ne sais pas exactement ce que tu veux calculer dans ton exemple mais en mettant des parenthèses cela fonctionne :
(92-10)% = 0,82
92-(10)%=91,90
Ami calmant, J.P
 
re
correction
ancien
VB:
Private Sub btnVirgule_Click()
    If Len(expression) = 0 Or Right(expression, " ") Then
        AjouterElement ("0.")
    ElseIf InStrRev(expression, ".") = 0 Then
        AjouterElement (".")
    End If
End Sub
Nouveau
Code:
If Len(expression) = 0 Or Right(expression, 1) = " " Then
        AjouterElement ("0.")
    ElseIf InStrRev(expression, ".") = 0 Then
        AjouterElement (".")
    End If
le problème avec ton raisonnement c'est que tu ne peux pas faire par exemple 0.6+0.4 le 2d separateur n'est pas accepter
en fait il te faut évaluer chaque expression entre les symboles"+,-,*, /)
 
Bonjour.
Cette réécriture de la Sub AjouterElement semble arranger les choses :
VB:
' Ajoute un élément à l'expression et met à jour l'affichage
Private Sub AjouterElement(ByVal Element As String)
   Dim P As Integer
   If DernierResultat <> "" And Not Element Like "#" Then
    ' Si un résultat a été affiché et qu'on ajoute un opérateur, on continue l'opération
      expression = DernierResultat
      DernierResultat = ""
      End If
   If Element = "%" Then
      For P = Len(expression) To 1 Step -1
         If Not Mid$(expression, P, 1) Like "#" Then Exit For
         Next P
      If P > 0 Then
         expression = Left$(expression, P - 1) & "*(1" & Mid$(expression, P)
         Element = "%)"
         End If
      End If
   expression = expression & Element
   Me.txtExpression = expression ' Met à jour l'affichage en temps réel
   End Sub
 
Dernière édition:
re
le mieux qui va nous simplifier la tache
c'est de faire une evaluation de la formulation complète
c'est assez simple comme raisonnement la separateur decimal doit aller apres un chiffre de 0 à 9
un simple test like sur le right(expression,1)
donc pour le bouton virgule se sera donc
Code:
Private Sub btnVirgule_Click()
    If Len(expression) = 0 Or Not Right(expression, 1) Like "[0-9]" Then expression = expression & "0"
    If Not IsError(Evaluate(expression & ".1")) Then AjouterElement (".")
End Sub
ton "0" est ajouté comme ton ancienne version si il est maquant
mais on évalue la formule avec une decimal temp avant
maintenant tu peux faire une opération avec plusieurs nombres décimals
il y a encore des soucis avec les parenthèses mais j'y travaille
 
je pense avoir trouver le moyen de gérer le séparateur décimal
j'ai mis des commentaire pour expliquer ce que je fait
VB:
Private Sub btnVirgule_Click()
   'patricktoulon
    Dim expr, symb, i&
    symb = Split("+,-,x,/,*", ",") 'les operateur Numerique
    expr = Replace(Replace("|" & expression & ".1", "(", ""), ")", "") 'on replace toute les parenthèses dans la formule
    For i = 1 To UBound(symb) 'boucle sur les opérateurs et remplacement par le "|"
        expr = Replace(expr, symb(i), "|")
    Next
    expr = Split(expr, "|") 'on coupe la chaine coupé par les opérateurs

    'si le len (expression)= 0  on ajoute le "0" et on met la variable expression  à  jour
    If Len(expression) = 0 Then AjouterElement ("0"): expression = txtExpression

    'si le dernier caractère de expression est un opérateur on ajoute le "0" et on met la variable expression à jour
    'avec un like inversé qui teste tout en un
    If " + - x / " Like "* " & Right(expression, 1) & " *" Then AjouterElement ("0"): expression = txtExpression

    'si le dernier caractère du dernier élément de la chaine replacée et coupée est un chiffre  alors...
    If Right(expr(UBound(expr)), 1) Like "[0,1,2,3,4,5,6,7,8,9]" Then
        'si dernier élément de la chaine coupée et replacée + ( le ".1" temporaire)  reste une chaine numérique valide alors on ajoute le "."
        If TypeName(Evaluate(expr(UBound(expr)))) = "Double" Then AjouterElement (".")
    End If
End Sub
et il y a bien d'autre problème dans tes raisonnements pour les autres actions
en tout cas pour le séparateur ça parait bon maintenant à tester dans tout les sens
 
Attention aussi a ta formulation
par exemple si tu met par exemple
1740222384183.png


le calculateur va l'interpréter comme ceci
1740222098982.png

c'est là que l'on se rend compte que nous les vieux qui avons appris avec les parenthèses
étions plus dans le juste alors que les plus jeunes à qui l'on a bombardé les règles de priorité des opérateurs de calcul
font parfois des erreurs

car en ce qui me concerne la chaine où!!! le résultat dans le userform n'est pas valable
celui de google oui il est claire et net d'ailleurs c'est lui même qui a ajouté les parenthèses pour la division

patrick
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
782
Réponses
9
Affichages
275
Réponses
3
Affichages
77
Retour