Je voudrais forcer la conversion en Double des valeurs d'un TextBox mais le
problème est que suivant les PC losqu'une personne saisie avec le clavier
numérique elle aura soit par exemple "14.5" ou soit "14,5"... En fait le
fait d'appuyer sur la touche "." du pavé numérique va soit générer un point
soit une virgule... CDbl va donc soit planter car il comprendra le "." (ou
le "," suivant les configs) comme du texte, soit fonctionner...
Je voudrais pouvoir forcer la conversion en numérique que l'utilisateur
saisisse du numérique avec un séparateur point ou avec une virgule...
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))
PS : le mieux étant d'avoir le point comme séparateur décimal... AV
MichDenis
Bonjour HD,
Si ta procédure ne gère pas le séparateur décimal utilisé, si tu ouvres ton classeur sur un autre ordinateur qui utilise un séparateur décimal autre que ton ordi où tu as développé ta procédure, ton programme va planter !
Salutations!
"HD" a écrit dans le message de news:
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))
Un grand MERCI à toi AV... ça a résolu mon problème !!! -- @+ HD
Bonjour HD,
Si ta procédure ne gère pas le séparateur décimal utilisé, si tu ouvres ton classeur sur un autre ordinateur qui utilise un
séparateur décimal autre que ton ordi où tu as développé ta procédure, ton programme va planter !
Salutations!
"HD" <hd@anti.spam.fr> a écrit dans le message de news: OgjiEdROFHA.2348@tk2msftngp13.phx.gbl...
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))
Un grand MERCI à toi AV... ça a résolu mon problème !!!
--
@+
HD
Si ta procédure ne gère pas le séparateur décimal utilisé, si tu ouvres ton classeur sur un autre ordinateur qui utilise un séparateur décimal autre que ton ordi où tu as développé ta procédure, ton programme va planter !
Salutations!
"HD" a écrit dans le message de news:
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))
Un grand MERCI à toi AV... ça a résolu mon problème !!! -- @+ HD
HD
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))
Un grand MERCI à toi AV... ça a résolu mon problème !!! -- @+ HD
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))
Un grand MERCI à toi AV... ça a résolu mon problème !!!
--
@+
HD
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))
Un grand MERCI à toi AV... ça a résolu mon problème !!! -- @+ HD
HD
Voila pourquoi j'ai adapté ce que m'a donné AV :
On error resume next TextBox2.Text = CDbl(TextBox2.Text) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ",", ".")) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ".", ",")) TextBox2.Text = Format(TextBox2.Text, "# ##0.00")
-- @+ HD
Voila pourquoi j'ai adapté ce que m'a donné AV :
On error resume next
TextBox2.Text = CDbl(TextBox2.Text)
If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ",", "."))
If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ".", ","))
TextBox2.Text = Format(TextBox2.Text, "# ##0.00")
On error resume next TextBox2.Text = CDbl(TextBox2.Text) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ",", ".")) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ".", ",")) TextBox2.Text = Format(TextBox2.Text, "# ##0.00")
-- @+ HD
MichDenis
Bonjour HD,
J'aurais plutôt tendance à utiliser ceci pour valider la saisie d'un textbox devant afficher un nombre
A ) permet la saisie de chiffres seulement.
B ) permet la saisie que de seulement un séparateur décimal , virgule ou point dans la boîte de saisie et ce d'après le système en vigueur sur la machine.
C ) Cette fonction peut servir à un nombre indéterminé de textbox de ton formulaire.
D ) En copiant cette fonction dans un module standard, elle peut être utilisé pour tous les formulaires de ton projet qui ont le même besoin.
Pour appeler la fonction pour chaque texbox voici le code à saisir :
---------------- Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)
End Sub ------------------
Voici la fonction à copier dans un module standard
------------------ Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)
Dim SepDec As String
With Application If Val(.Version) > 9 Then If .UseSystemSeparators = True Then SepDec = Application.International(xlDecimalSeparator) Else SepDec = .DecimalSeparator End If Else SepDec = Application.International(xlDecimalSeparator) End If End With
If Char = 44 Or Char = 46 Then If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then CheckLaSaisie = 0 Else CheckLaSaisie = Asc(SepDec) End If Else If Char < 48 Or Char > 58 Then CheckLaSaisie = 0 Else CheckLaSaisie = Char End If End If
End Function -------------------------------------
Salutations!
"HD" a écrit dans le message de news: d2rfdv$1aee$ Voila pourquoi j'ai adapté ce que m'a donné AV :
On error resume next TextBox2.Text = CDbl(TextBox2.Text) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ",", ".")) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ".", ",")) TextBox2.Text = Format(TextBox2.Text, "# ##0.00")
-- @+ HD
Bonjour HD,
J'aurais plutôt tendance à utiliser ceci pour valider la saisie d'un textbox devant afficher un nombre
A ) permet la saisie de chiffres seulement.
B ) permet la saisie que de seulement un séparateur décimal , virgule ou point
dans la boîte de saisie et ce d'après le système en vigueur
sur la machine.
C ) Cette fonction peut servir à un nombre indéterminé de textbox
de ton formulaire.
D ) En copiant cette fonction dans un module standard, elle peut être
utilisé pour tous les formulaires de ton projet qui ont le même besoin.
Pour appeler la fonction pour chaque texbox voici le code à saisir :
----------------
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)
End Sub
------------------
Voici la fonction à copier dans un module standard
------------------
Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)
Dim SepDec As String
With Application
If Val(.Version) > 9 Then
If .UseSystemSeparators = True Then
SepDec = Application.International(xlDecimalSeparator)
Else
SepDec = .DecimalSeparator
End If
Else
SepDec = Application.International(xlDecimalSeparator)
End If
End With
If Char = 44 Or Char = 46 Then
If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Asc(SepDec)
End If
Else
If Char < 48 Or Char > 58 Then
CheckLaSaisie = 0
Else
CheckLaSaisie = Char
End If
End If
End Function
-------------------------------------
Salutations!
"HD" <hd@anti.spam.fr> a écrit dans le message de news: d2rfdv$1aee$1@biggoron.nerim.net...
Voila pourquoi j'ai adapté ce que m'a donné AV :
On error resume next
TextBox2.Text = CDbl(TextBox2.Text)
If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ",", "."))
If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ".", ","))
TextBox2.Text = Format(TextBox2.Text, "# ##0.00")
J'aurais plutôt tendance à utiliser ceci pour valider la saisie d'un textbox devant afficher un nombre
A ) permet la saisie de chiffres seulement.
B ) permet la saisie que de seulement un séparateur décimal , virgule ou point dans la boîte de saisie et ce d'après le système en vigueur sur la machine.
C ) Cette fonction peut servir à un nombre indéterminé de textbox de ton formulaire.
D ) En copiant cette fonction dans un module standard, elle peut être utilisé pour tous les formulaires de ton projet qui ont le même besoin.
Pour appeler la fonction pour chaque texbox voici le code à saisir :
---------------- Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = CheckLaSaisie(TextBox1, KeyAscii)
End Sub ------------------
Voici la fonction à copier dans un module standard
------------------ Function CheckLaSaisie(Textbox As MSForms.Textbox, ByVal Char As Integer)
Dim SepDec As String
With Application If Val(.Version) > 9 Then If .UseSystemSeparators = True Then SepDec = Application.International(xlDecimalSeparator) Else SepDec = .DecimalSeparator End If Else SepDec = Application.International(xlDecimalSeparator) End If End With
If Char = 44 Or Char = 46 Then If InStr(1, Textbox, SepDec, vbTextCompare) > 0 Then CheckLaSaisie = 0 Else CheckLaSaisie = Asc(SepDec) End If Else If Char < 48 Or Char > 58 Then CheckLaSaisie = 0 Else CheckLaSaisie = Char End If End If
End Function -------------------------------------
Salutations!
"HD" a écrit dans le message de news: d2rfdv$1aee$ Voila pourquoi j'ai adapté ce que m'a donné AV :
On error resume next TextBox2.Text = CDbl(TextBox2.Text) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ",", ".")) If Err.Number <> 0 Then TextBox2.Text CDbl(Application.Substitute(TextBox2.Value, ".", ",")) TextBox2.Text = Format(TextBox2.Text, "# ##0.00")