Parametres regionaux // séparateur décimal

Signaler
Messages postés
9
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juin 2004
-
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
-
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

Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
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
....
Messages postés
9
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juin 2004

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 :)
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
ChaineSansDernierCaractere = Left(Chaine, Len(Chaine) - 1)
Messages postés
9
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
21 juin 2004

mille mercis :)

c exactement ce qu'il me fallait...
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
1
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"
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
1
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"