OVH Cloud OVH Cloud

VBA. Conversion en numérique...

5 réponses
Avatar
HD
Bonjour,

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...

Merci d'avance pour votre aide.
--
@+
HD

5 réponses

Avatar
AV
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))

PS : le mieux étant d'avoir le point comme séparateur décimal...
AV
Avatar
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

Avatar
HD
x = CDbl(Application.Substitute(TextBox1.Value, ",", "."))


Un grand MERCI à toi AV... ça a résolu mon problème !!!
--
@+
HD

Avatar
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
Avatar
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