Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calcul dans textbox

9 réponses
Avatar
Florian
Bonjour
j'ai cette procédure qui fonctionne, mais le pb est que dans les texbox
lorsque je tape un montant, cela me met un point à la place des virgules
dans les textbox, mais si je saisi
un montant avec une virgule, cela ne me donne pas un calcul cohérent dans le
textbox comment faire ?
Merci beaucoup
Flo riant

Private Sub TextBox201_Change()
résultat
End Sub
Private Sub TextBox202_Change()
résultat
End Sub

Sub résultat()
TextBox214 = Val(Me.TextBox201) + Val(Me.TextBox202)
End sub

9 réponses

Avatar
Daniel
Bonsoir.
Regarde l'aide de la fonction Val :
"La fonction Val ne reconnaît que le point comme séparateur décimal (.).
Lors de l'utilisation d'autres séparateurs décimaux (applications
internationales, par exemple), convertissez la chaîne en nombre à l'aide de
la fonction CDbl"
Cordialement.
Daniel
"Florian" a écrit dans le message de news:

Bonjour
j'ai cette procédure qui fonctionne, mais le pb est que dans les texbox
lorsque je tape un montant, cela me met un point à la place des virgules
dans les textbox, mais si je saisi
un montant avec une virgule, cela ne me donne pas un calcul cohérent dans
le textbox comment faire ?
Merci beaucoup
Flo riant

Private Sub TextBox201_Change()
résultat
End Sub
Private Sub TextBox202_Change()
résultat
End Sub

Sub résultat()
TextBox214 = Val(Me.TextBox201) + Val(Me.TextBox202)
End sub



Avatar
Philippe Noss
Bonsoir,
la macro ci joint explique comment n'autoriser dans un textbox que des
valeurs numérique + le separateur decimal
A etudier !
PN
www.exefac.com
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = TxtBoxNum(KeyAscii, TextBox4, Ctldec, Nbdec)
End Sub

Function TxtBoxNum(ByVal Casci As Integer, ByVal TextboxV, Ctldec,
Nbdec)
Dim SepDec As String
'On recherche tout d'abord le séparateur décimal
SepDec = Application.International(xlDecimalSeparator)

'1. On remplace la virgule ou le point par le séparateur décimal (Asc
convertit le caractère en Ascii)
If Casci = 44 Or Casci = 46 Then
Casci = Asc(SepDec)
End If

'On teste si le caractère est le séparateur décimal :
'2.Le caractère n'est pas le séparateur décimal :
If Casci <> Asc(SepDec) Then
'si caractère non numérique, on le remplace par la valeur Ascii 0
If Casci < 48 Or Casci > 57 Then
TxtBoxNum = 0
Exit Function
End If
'Si caractère numérique, on compte le cas échéant (Nbdec <> False)
le nombre de décimale.
'Si le nombre de décimale est supérieur à la limite de Nbdec, on le
remplace par la valeur Ascii 0
If Ctldec = True And TextboxV <> "" And InStr(1, TextboxV, SepDec,
1) > 0 Then
If Len(Mid(TextboxV, InStr(1, TextboxV, SepDec, 1))) > Nbdec
Then
TxtBoxNum = 0
Exit Function
End If
End If

'3.Le caractère est le séparateur décimal :
Else
'Si le textbox contient déja un séparateur, on revoie le code de
caractère de la touche
If InStr(1, TextboxV, SepDec, 1) > 0 Then
TxtBoxNum = 0
Exit Function
End If
End If
'4. pas d'"erreur", on revoie le code de caractère de la touche
TxtBoxNum = Casci
End Function
Avatar
Florian
Bonsoir Daniel et merci pour ton aide.
Malheureusement, le fait de mettre Cdbl à la place de Val
me renvoie une erreur d'exécution 13
Flo riant

"Daniel" a écrit dans le message de news:
%
Bonsoir.
Regarde l'aide de la fonction Val :
"La fonction Val ne reconnaît que le point comme séparateur décimal (.).
Lors de l'utilisation d'autres séparateurs décimaux (applications
internationales, par exemple), convertissez la chaîne en nombre à l'aide
de la fonction CDbl"
Cordialement.
Daniel
"Florian" a écrit dans le message de news:

Bonjour
j'ai cette procédure qui fonctionne, mais le pb est que dans les texbox
lorsque je tape un montant, cela me met un point à la place des virgules
dans les textbox, mais si je saisi
un montant avec une virgule, cela ne me donne pas un calcul cohérent dans
le textbox comment faire ?
Merci beaucoup
Flo riant

Private Sub TextBox201_Change()
résultat
End Sub
Private Sub TextBox202_Change()
résultat
End Sub

Sub résultat()
TextBox214 = Val(Me.TextBox201) + Val(Me.TextBox202)
End sub







Avatar
Florian
Ok merci Philippe
je teste
Flo riant

"Philippe Noss" a écrit dans le message de news:

Bonsoir,
la macro ci joint explique comment n'autoriser dans un textbox que des
valeurs numérique + le separateur decimal
A etudier !
PN
www.exefac.com
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = TxtBoxNum(KeyAscii, TextBox4, Ctldec, Nbdec)
End Sub

Function TxtBoxNum(ByVal Casci As Integer, ByVal TextboxV, Ctldec,
Nbdec)
Dim SepDec As String
'On recherche tout d'abord le séparateur décimal
SepDec = Application.International(xlDecimalSeparator)

'1. On remplace la virgule ou le point par le séparateur décimal (Asc
convertit le caractère en Ascii)
If Casci = 44 Or Casci = 46 Then
Casci = Asc(SepDec)
End If

'On teste si le caractère est le séparateur décimal :
'2.Le caractère n'est pas le séparateur décimal :
If Casci <> Asc(SepDec) Then
'si caractère non numérique, on le remplace par la valeur Ascii 0
If Casci < 48 Or Casci > 57 Then
TxtBoxNum = 0
Exit Function
End If
'Si caractère numérique, on compte le cas échéant (Nbdec <> False)
le nombre de décimale.
'Si le nombre de décimale est supérieur à la limite de Nbdec, on le
remplace par la valeur Ascii 0
If Ctldec = True And TextboxV <> "" And InStr(1, TextboxV, SepDec,
1) > 0 Then
If Len(Mid(TextboxV, InStr(1, TextboxV, SepDec, 1))) > Nbdec
Then
TxtBoxNum = 0
Exit Function
End If
End If

'3.Le caractère est le séparateur décimal :
Else
'Si le textbox contient déja un séparateur, on revoie le code de
caractère de la touche
If InStr(1, TextboxV, SepDec, 1) > 0 Then
TxtBoxNum = 0
Exit Function
End If
End If
'4. pas d'"erreur", on revoie le code de caractère de la touche
TxtBoxNum = Casci
End Function
Avatar
AV
Quel que soit le séparateur utilisé et celui du système, ce code (avec
ajustement des noms et affecté à un bouton) devrait suffire

Private Sub CommandButton1_Click()
x = Application.International(xlDecimalSeparator)
txt1 = Application.Substitute(Application.Substitute(TextBox1, ",", x), ".", x)
* 1
txt2 = Application.Substitute(Application.Substitute(TextBox2, ",", x), ".", x)
* 1
TextBox3 = txt1 + txt2
End Sub

Exemple là :
http://cjoint.com/?gzh2AI7oNJ

AV
Avatar
Florian
Bonjour AV et merci
Est-il possible que le calcul se déclenche par la procédure change des
textbox ?
Flo riant

"AV" a écrit dans le message de news:
%23m$
Quel que soit le séparateur utilisé et celui du système, ce code (avec
ajustement des noms et affecté à un bouton) devrait suffire

Private Sub CommandButton1_Click()
x = Application.International(xlDecimalSeparator)
txt1 = Application.Substitute(Application.Substitute(TextBox1, ",", x),
".", x)
* 1
txt2 = Application.Substitute(Application.Substitute(TextBox2, ",", x),
".", x)
* 1
TextBox3 = txt1 + txt2
End Sub

Exemple là :
http://cjoint.com/?gzh2AI7oNJ

AV




Avatar
Florian
Bonjour et merci AV
J'ai trouvé, je mets directement le calcul dans la procédure change !
Encore merci
Flo riant

"Florian" a écrit dans le message de news:

Bonjour AV et merci
Est-il possible que le calcul se déclenche par la procédure change des
textbox ?
Flo riant

"AV" a écrit dans le message de news:
%23m$
Quel que soit le séparateur utilisé et celui du système, ce code (avec
ajustement des noms et affecté à un bouton) devrait suffire

Private Sub CommandButton1_Click()
x = Application.International(xlDecimalSeparator)
txt1 = Application.Substitute(Application.Substitute(TextBox1, ",", x),
".", x)
* 1
txt2 = Application.Substitute(Application.Substitute(TextBox2, ",", x),
".", x)
* 1
TextBox3 = txt1 + txt2
End Sub

Exemple là :
http://cjoint.com/?gzh2AI7oNJ

AV








Avatar
AV
J'ai trouvé,


Parfait !
AV

Avatar
Florian
avec en amont
On error resume next
Merci beaucoup
et bonne journée
Flo riant

"AV" a écrit dans le message de news:
%
J'ai trouvé,


Parfait !
AV