Remplacer une virgule par un point dans un TextBox

Messages postés
13
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
19 février 2003
- - Dernière réponse : VBrifi
Messages postés
21
Date d'inscription
samedi 15 février 2003
Statut
Membre
Dernière intervention
28 avril 2003
- 17 févr. 2003 à 17:45
Bonjour,

La situation est la suivante : j'ai un TextBox nommé Coefficient qui peut recevoir une valeur décimale. Mais quand je rentre un nombre en utilisant le point (par ex : 1.5) ça ne fonctionne pas (ça marche si je rentre 1,5 mais je veux laisser libre l'utilisateur de rentrer le nombre comme il le veux, en utilisant soit le point, soit la virgule). J'ai trouvé sur ce site une question similaire et on suggérait d'utliser les fonctions de conversion comme CSng(Var) qui transforme une variable en single et qui tient compte des paramètres Windows. Voilà donc ce que j'ai écrit :

Dim Facteur As Single

Private Sub Coefficient_AfterUpdate()
Facteur = CSng(Coefficient.Value)
...
End Sub

Et ça ne marche pas !!!
J'obtiens une erreur de type 13 : "Incompatibilité de type" et je ne comprends pas pourquoi !!

Pouvez-vous m'aider ?

Merci d'avance.
Afficher la suite 

8 réponses

Messages postés
82
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
12 mars 2003
0
Merci
je pense que tu devrais utiliser la fonction "replace" qui te permettra dans ton code de remplacer un point par une virgule (dans ton chiffre ) en faisant F1 tu auras l'explication de son fonctionnement. j'ai utilisé cette fonction pour une application qui contient des chiffres décimal , et ça marche du tonnerre.
Messages postés
13
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
19 février 2003
0
Merci
Je vais essayer... mais j'aimerais quand même bien savoir pourquoi ça ne fonctionne pas avec la fonction CSng !
En tout cas, merci pour ta réponse !
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
9
0
Merci
Salut

Private Sub Coefficient_KeyPress(Index As Integer, KeyAscii As Integer) If KeyAscii 44 Then KeyAscii 44 'remplace , par .
End Sub
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
9
0
Merci
pardonIf KeyAscii 44 Then KeyAscii 46 'remplace , par .
Messages postés
13
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
19 février 2003
0
Merci
Merci, je pense que ça peut marcher mais mon problème va en fait au delà : ça dépend des options régionales de Windows. Si le séparateur décimal Windows est la virgule alors je veux remplacer les points par des virgules mais si le séparateur Windows est un point, alors je veux faire l'inverse, remplacer la virgule par un point. Dans tous les cas, je veux que mon programme roule quel que soit le format décimal que l'utilisateur choisit (1.5 ou 1,5), et ce quel que soit le séparateur Windows. Je sais c'est tordu mais c'est à ce résultat que j'aimerais arriver. vois-tu un moyen ?

En tout cas, merci pour ton aide.
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
9
0
Merci
Si tu veux que CSng fonctionne, il faut que Coefficient contienne un décimal au format reconnu par VB, c'est à dire avec un point.
CSng renvoie alors le nombre avec le séparateur décimal choisi dans les options régionales de Windows.
Messages postés
13
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
19 février 2003
0
Merci
Non, je crois que VB tiens compte des options régionales de Windows. J'ai fait le test : si je mets la virgule comme séparateur décimal et que je tape 1.5, alors
Facteur = CSng(Coefficient.Value) plante. Mais si je mets le point comme séparateur dans les options régionales et que je tape toujours 1.5 (ou 1,5 !!), alors ça ne plante plus ! C'est à n'y plus rien comprendre...
Messages postés
21
Date d'inscription
samedi 15 février 2003
Statut
Membre
Dernière intervention
28 avril 2003
0
Merci
Non en fait tu devrais entrer le code suivantIf KeyAscii 46 Then KeyAscii 44 ' remplace le point par la virgule