Parametres regionaux // séparateur décimal

caesar3000 Messages postés 9 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juin 2004 - 7 juin 2004 à 14:58
Polack77 Messages postés 1095 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 13 mars 2008 à 14:17
Bonjour à tous :)

Je suis confronté à un sacré probleme :

imaginez une série de 10 textbox indexées de 0 à 9

et une onzieme qui contient le total des 10 precedentes.

Mon but est de trouver une fonction qui additionne les 10 textbox à chaque changement dans l'une d'entre elles en tenant compte des parametres regionaux...

voici donc ce que j'ai imaginé :

Private Sub txt_Change(Index As Integer)
Dim a, b As Double
'txtSomme.Caption = 0
a = 0
For i = 0 To nbrow - 1
If txt(i).Text <> "" Then a = a + CDbl(txt(i).Text)
Next i
txtSomme.Caption = a & " "
txtSomme.Refresh

If CDbl(txtSomme.Caption) > CDbl(lblNbDay(1).Caption) Then
txtSomme.BackColor = &HFF&
Else
txtSomme.BackColor = &HFF00FF
End If
End Sub

MAIS le probleme est que si j'utilise un carractere non numerique : ça plante.
si j'utilise la virgule alors que le separateur decimal est le point ça ne plante pas mais au lieu de compter 1,5 j'obtient 15....

bref une foule de petits bugs souvent dus à ces parametres regionaux...

étant debutant en VB, n'ayez pas peur de dire des choses banales.... elles ne le seront pas pour moi :)

Merci d'avance.

6 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
7 juin 2004 à 17:48
Bonjour

Essaie :
....
For i = 0 To nbrow - 1
txt(i).Text = Replace(txt(i).Text, ",", ".") ' ou le contraire
If Not Isnumeric(txt(i).Text) Then
MsgBox "Caractère non numérique"
Exit Sub
End If
....
0
caesar3000 Messages postés 9 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juin 2004
8 juin 2004 à 16:35
merci de ta reponse mais en fait voilà comment j'ai décidé de proceder :

je ne veux pas remplacer de carractere car ça obligerait les utilisateurs à avoir le meme separateur décimal que celui que j'aurais choisi.

je commence par verifier que le text est numérique et au cas ou il ne l'est pas , je supprime uniquement le dernier carractere ( puisque l'action est declenchée sur un evenement change, seul le dernier carractere peut etre incriminé )

D'ou ma nouvelle question : existe t il une fonction vb qui permette de supprimer le dernier carractere d'une chaine?

Quoi qu'il en soit merci de t'etre penché sur le pb rené38 :)
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
8 juin 2004 à 17:09
ChaineSansDernierCaractere = Left(Chaine, Len(Chaine) - 1)
0
caesar3000 Messages postés 9 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juin 2004
8 juin 2004 à 19:46
mille mercis :)

c exactement ce qu'il me fallait...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polack77 Messages postés 1095 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
13 mars 2008 à 14:13
Heeee je voie que ce topic date un peut mais bon, j'y suis je poste...
Attention il se peut que cela ne vienne pas du dernier carac. Imagine que je place mon curseur au milieu du text-box et que je tape un carac. L'évènement change survient alors... Ou encore un collé (copier collé) dans le textbox...
Personnellement j'utiliserais plutôt l'évènement "Validate" qui permet un cancel (attention que "CausesValidation" soit bien à true) ou encore "LostFocus" quitte à rendre le focus à ton text box en cas d'erreur.
Si tu veut vraiment supprimé le dernier carac si ton textbox n'est pas numérique utilise plutôt le code :
'8<-----------------------------------------------------------------------
While not isnumeric(chaine) and chaine <> vbnullstring 'Une chaine vide n'est pas numérique donc risque de boucle infini
    chaine = left(chaine, len(chaine) -1)
Wend
'----------------------------------------------------------------------->8
Amicalement
Pensez "Réponse acceptée"
0
Polack77 Messages postés 1095 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
13 mars 2008 à 14:17
Oups je raconte des conneries aussi grosse que moi (sa vas je suis pas trop épais ) dans le code que je viens de données si chaine = vbnullstring (soit "") on provoque une erreur et non pas une boucle infinie...
Enfin de toute façon il faut que, dans mon exemple si dessus, 'chaine' soit différant de 'chaine vide' si non c'est pas bon...

Amicalement
Pensez "Réponse acceptée"
0
Rejoignez-nous