Microsoft 365 Calcul TTC Textbox

eric72

XLDnaute Accro
Bonjour 0 TOUS,
J'ai un userform avec 3 textbox
dans la 1ère je met le Montant H.T
dans la 2ème je met le Taux de T.V.A
dans la 3ème je voudrais avoir le montant T.T.C
C'est apparemment tout simple mais si je saisis 12,58 avec un taux de 20% Le résultat est 14.40 au lieu de 15.09
Il ne tient pas compte du "0.58" il le calcule sur 12 au lieu de 12.58
Auriez-vous une idée?
Merci pour votre aide.
Eric
 

Pièces jointes

  • test TVA.xlsm
    23.1 KB · Affichages: 15
Solution
Bonjour
Sacré Eric72 va ;)😂
le problème avec val en vba
msgbox val("12,58") ' va donner "12" car val ne supporte que le point
msgbox cdbl("12.58") donnera 12 car cddbl ne supporte que la virgule
conclusion il faut replacer le point par virgule et ce servir de CDbl
et ne faire le calcule uniquement quand il y a au moins un chiffre apres la virgule
donc passer par une variable ICI!!"percent" pour mettre le pourcentage soit à 0 soit a la valeur du textbox11 pour ne pas déclencher l'erreur cdbl(vide)
à cela tu ajoute l'arrondi automatique par VBA qui nous donne dans cet exemple 15,10
et pour info
pour 20% de sup c'est fois 1,2 donc ((20+100)/100)
pour 20% de moins c'est fois 0.8 donc fois ABS(((20-100)/100))
...

patricktoulon

XLDnaute Barbatruc
Bonjour
Sacré Eric72 va ;)😂
le problème avec val en vba
msgbox val("12,58") ' va donner "12" car val ne supporte que le point
msgbox cdbl("12.58") donnera 12 car cddbl ne supporte que la virgule
conclusion il faut replacer le point par virgule et ce servir de CDbl
et ne faire le calcule uniquement quand il y a au moins un chiffre apres la virgule
donc passer par une variable ICI!!"percent" pour mettre le pourcentage soit à 0 soit a la valeur du textbox11 pour ne pas déclencher l'erreur cdbl(vide)
à cela tu ajoute l'arrondi automatique par VBA qui nous donne dans cet exemple 15,10
et pour info
pour 20% de sup c'est fois 1,2 donc ((20+100)/100)
pour 20% de moins c'est fois 0.8 donc fois ABS(((20-100)/100))

VB:
Function calc() As Double
    Dim percent#
    TextBox10 = Replace(TextBox10, ".", ",")
    TextBox11 = Replace(TextBox11, ".", ",")
    percent = IIf(TextBox11 = "", 0, TextBox11)
    If IsNumeric(TextBox10) And IsNumeric(percent) Then 'on teste les deux au cas ou en est a la virgule
        calc = Round(CDbl(TextBox10) * ((CDbl(percent) + 100) / 100), 3)
    End If
End Function
Private Sub TextBox10_AfterUpdate()
    TextBox10.Value = Format(TextBox10.Value, "0.00 €")
End Sub
Private Sub TextBox10_Change()
    TextBox12 = Format(calc, "0.00 €")
End Sub
Private Sub TextBox11_Change()
    TextBox12 = Format(calc, "0.00 €")
End Sub
Private Sub TextBox12_AfterUpdate()
    TextBox12.Value = Format(TextBox12.Value, "0.00 €")
End Sub
Public Sub Textbox10_KeyPress(ByVal keyascii As MSForms.ReturnInteger)
    With TextBox10
        If keyascii = 46 Then keyascii = 44
        If Chr(keyascii) Like "[!0-9|,-]" Then keyascii = 0
        If (Len(.Value) = 0 Or .Value Like "*,*") And Chr(keyascii) = "," Then keyascii = 0
        If Chr(keyascii) = "-" And .Value <> "" Then keyascii = 0
    End With
End Sub
 

Discussions similaires

Réponses
4
Affichages
390
Réponses
2
Affichages
426