Erreur nombre stocké sous forme de texte

Signaler
Messages postés
50
Date d'inscription
mardi 7 juillet 2009
Statut
Membre
Dernière intervention
28 août 2009
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour, j'ai encore un ti problème,

J'ai créé un Userform
Dedans ya des combobox et textbox. Grace au code ci-dessous je copie ce que j'ai écris dans le userform dans des cellule d'un classeur.

Cells(i + 2, 33).Value = Prix
Cells(i + 2, 39).Value = Prod_2009
Cells(i + 2, 44).Value = Prod_2010
Cells(i + 2, 49).Value = Prod_2011
Cells(i + 2, 54).Value = Prod_2012

Le problème est que ce sont des chiffres que je rentre et il y a une erreur dans la cellule qui apparaît ( nombre stocké sous forme de texte)

y at-il un moyen de dire que les textbox sont en fait des chiffresbox.

Merci

Roberto RIQUELME

14 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Salut
Non, c'est l'inverse.
- Chiffres --> TextBox
maTextBox.Text = CStr(monChiffre)
- TextBox --> ?
monChiffre = Val(maTextBox.Text)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
@jack : Val c'est du BASIC ... Faut utiliser CInt ou CByte

---
VB.NET is good ... VB6 is better
Messages postés
50
Date d'inscription
mardi 7 juillet 2009
Statut
Membre
Dernière intervention
28 août 2009

tu peux développer ghuys
jsui un peu à lamasse

Roberto RIQUELME
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Si ça ne fonctionnait pas à cause du typage, ce code devrait aller :
Cells(i + 2, 33).Value = CInt(Prix.Text)
Cells(i + 2, 39).Value = CInt(Prod_2009.Text)
Cells(i + 2, 44).Value = CInt(Prod_2010.Text)
Cells(i + 2, 49).Value = CInt(Prod_2011.Text)
Cells(i + 2, 54).Value = CInt(Prod_2012.Text)


---
VB.NET is good ... VB6 is better
Messages postés
181
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
4 février 2011

Hello,
Pour moi Val semble correspondre au besoin.

Cint ne serait ok que s'il s'agit de nombre entier(non?), dans la mesure où il existe un prix, c'est peu probable.
BR

USERRRQI115
Simple user
Great brain
Messages postés
50
Date d'inscription
mardi 7 juillet 2009
Statut
Membre
Dernière intervention
28 août 2009

ça marche du top avec Val.
le hic pour le prix par exemple c'est que les virgules ça marche pas dans les textbox faut mettre des point.
comment dire au code :
si virule dans cette textbox
[i]
/i alors message erreur pour l'utilisateur

merci
Roberto RIQUELME
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Avec CDbl y'a pas de problème.
Val n'était pas prévue pour ça : elle ne gère pas les paramètres régionnaux ...

---
VB.NET is good ... VB6 is better
Messages postés
181
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
4 février 2011

RE
Val ou Cdbl même combat, Val accepte mal les virgules et il semblerait que Cdbl ne ne fonctionne pas avec les points.(ex 15.5)
A moins de le combiner avec un val : Cdbl(val(15.5))
Sauf que ça revient tjrs au soucis de la virgule, je crois que le blocage de saisie sera plus simple:
Ci dessous balayage de la valeur de la textbox et police en rouge et message d'erreur si une virgule est trouvée.

For i = 1 To Len(TextBox1.Value)
If Right(Left(TextBox1.Value, i), 1) = "," Then
TextBox1.ForeColor = &HFF&
MsgBox ("Error")
Exit Sub
Else:
TextBox1.ForeColor = &H80000008
End If
Next i

BR

USERRRQI115
Simple user
Great brain
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
Alors faut faire un Replace avant de le passer à CDbl.
CDbl se base sur les paramètres régionnaux, vu que toi t'es francophone, tu as mis Français-France, donc le symbole de séparation décimale est la , et le symbole de séparation des milliers est le point.
J'pense qu'il y avait une astuce pour transformer le . du pavé num en , dans les textbox numériques ... mais j'ai oublié

---
VB.NET is good ... VB6 is better
Messages postés
181
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
4 février 2011

J'ai retrouvé

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 46 Then
KeyAscii = 44
End If
End Sub

Avec ce code tu remplace dès la saisie le point en virgule.
Et apprès on peut donc utilier CDbl

Merci pour cette piste ghuysmans99

USERRRQI115
Simple user
Great brain
Messages postés
50
Date d'inscription
mardi 7 juillet 2009
Statut
Membre
Dernière intervention
28 août 2009

si j'ai tout compris je remplace tout les val que j'ai mis par des CDbl
et après je rajoute le code de Great brain le parigo et après que je mettent un point ou une virgule dans la text box ça va marcher.

merci beaucoup ça fait plaisir

robibi
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Re
Oui, les fonctions de conversion sont plus adaptées, MAIS elles ont un talon d'Achile :
Lorsque tu utilises un CDbl sur un texte qui ne comporte pas que des chiffres ou caractères associés (virgule, signe), la fonction renvoie une erreur, alors que Val se contentera de convertir en ... zéro

Une bonne solution peut consister à coupler les deux fonctions :
monChiffre = CDbl(Val(monTexte))

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
12
J'trouve que c'est logique : ça informe que la valeur n'est pas 0, mais impossible.

---
VB.NET is good ... VB6 is better
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Oui, tu as raison, cela oblige à bien gérer les erreurs, ce qui est souvent passé au second plan dans un développement