caesar3000
Messages postés9Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention21 juin 2004
-
7 juin 2004 à 14:58
Polack77
Messages postés1095Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 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 :)
cs_rene38
Messages postés1858Date d'inscriptionsamedi 29 juin 2002StatutMembreDernière intervention17 octobre 201311 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
....
caesar3000
Messages postés9Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention21 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 :)
Polack77
Messages postés1095Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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"
Polack77
Messages postés1095Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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...