Ref.text en Décimal (VB2005 Express)

Le
djmcg
Bonjour,

A votre avis pourquoi cette ligne lève une erreur à l'exécution

UnArticle.PrixKilo = CType(tbx_pkMarch.Text, Decimal)

'
En résumé :
J'ai une structure dans un module :

Public Structure FicheMarchandises
<VBFixedString(15)> Dim RefMarchandises As String
<VBFixedString(35)> Dim NomMarchandises As String
<VBFixedString(35)> Dim NomFournisseur As String
Dim PrixKilo As Decimal
End Structure

et à l'éxécution de ces lignes :
et dans un évènement bouton click,
lbl_NumFicheMarch.Visible = True : tbx_NumFicheMarch.Visible = True
lbl_RefMarch.Visible = True : tbx_RefMarch.Visible = True
lbl_NomMarch.Visible = True : tbx_NomMarch.Visible = True
lbl_FourMarch.Visible = True : tbx_FourMarch.Visible = True
lbl_pkMarch.Visible = True : tbx_pkMarch.Visible = True

Un erreur est levée sur cette ligne :
UnArticle.PrixKilo = CType(tbx_pkMarch.Text, Decimal)

Si quelqu'un peux m'aider a comprendre, un grand merci.
Jean-Marie.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred
Le #12177971
Dans : news:OT$,
djmcg disait :
Bonjour,



Bonjour,

A votre avis pourquoi cette ligne lève une erreur à l'exécution



(Quelle erreur ?)

UnArticle.PrixKilo = CType(tbx_pkMarch.Text, Decimal)



Parce qu'un String n'est pas un Decimal.
Il faut utiliser la classe Convert, ou bien Decimal.TryParse

--
Fred
djmcg
Le #12177961
Bonjour,
Merci d'avoir pris la peine de répondre.

Je mets les ligne imports en tête du module (??) je ne suis pas sûr que
je peux.

Voici l'erreur déclaré et même après avoir mis la ligne imports.
La conversion de la chaîne "" en type 'Decimal' n'est pas valide.

Je n'ai même pas eu le temps d'encoder une info !!

JM

Fred a écrit :
Dans : news:OT$,
djmcg disait :
Bonjour,



Bonjour,

A votre avis pourquoi cette ligne lève une erreur à l'exécution



(Quelle erreur ?)

UnArticle.PrixKilo = CType(tbx_pkMarch.Text, Decimal)



Parce qu'un String n'est pas un Decimal.
Il faut utiliser la classe Convert, ou bien Decimal.TryParse



Fred
Le #12177951
Dans : news:,
djmcg disait :

Bonjour,
Merci d'avoir pris la peine de répondre.




Je détaille :

If Not Decimal.TryParse(tbx_pkMarch.Text, UnArticle.PrixKilo) Then
'Traitement si le texte saisi n'est pas la représentation d'un
décimal valide
Else
'La saisie est valide et UnArticle.PrixKilo en contient la valeur
End If





--
Fred
djmcg
Le #12177941
Ben Alors comment j'aurais pu trouvé ça ?
J'avais bien vu dans les doc le tryparse mais j'ai rien compris et
toujours pas.
Maintenant mes texbox s'affiche
Dans le else je suppose que je doit remettre le Ctype...
Bon je revois la doc pour comprendre la syntaxe tryparse.

Merci Fred.


Fred a écrit :
Dans : news:,
djmcg disait :

Bonjour,
Merci d'avoir pris la peine de répondre.




Je détaille :

If Not Decimal.TryParse(tbx_pkMarch.Text, UnArticle.PrixKilo) Then
'Traitement si le texte saisi n'est pas la représentation d'un
décimal valide
Else
'La saisie est valide et UnArticle.PrixKilo en contient la valeur
End If







djmcg
Le #12177931
Ah non, le masket textbox (et le textbox) ne peut pas être converti en
decimal. Donc pas de ctype...



Fred a écrit :
Dans : news:,
djmcg disait :

Bonjour,
Merci d'avoir pris la peine de répondre.




Je détaille :

If Not Decimal.TryParse(tbx_pkMarch.Text, UnArticle.PrixKilo) Then
'Traitement si le texte saisi n'est pas la représentation d'un
décimal valide
Else
'La saisie est valide et UnArticle.PrixKilo en contient la valeur
End If







Peekay
Le #12177921
djmcg a écrit :
Ben Alors comment j'aurais pu trouvé ça ?
J'avais bien vu dans les doc le tryparse mais j'ai rien compris et
toujours pas.
Maintenant mes texbox s'affiche
Dans le else je suppose que je doit remettre le Ctype...



Oublie CType ... fait CDec par exemple! Regarde si ta chaine est valide
(point ou virgule, autres caratères que de 0 à 9 ...)

Sinon pour tes maskedbox, tu peux fournir le type et obtenir directement
ce que tu veux (Integer, Double ...) mais je l'ai fait une fois et je
regrette car c'est assez compliqué ...
Si tu n'arrive déjà pas à convertir du texte en décimal, ne complique
pas trop !
Prend ton temps, relit les docs et fait des essais en pas à pas ou en
tapant les fonctions dans la fenêtre de débuggage pour mieux comprendre
leur fonctionnement.

Bon courage.
Peekay
Le #12177911
djmcg a écrit :
Voici l'erreur déclaré et même après avoir mis la ligne imports.
La conversion de la chaîne "" en type 'Decimal' n'est pas valide.



Il est clair que convertir une chaine vide, ca n'aide pas ...
Cherche ton problème en amont !
Fred
Le #12177901
Dans : news:46029b1b$0$6320$,
Peekay disait :

Oublie CType ... fait CDec par exemple!



C'est la même chose en plus restreint. Juste une facilité syntaxique
pour pouvoir continuer à programmer à la VB6.
Le CDec plantera aussi si le format de la chaîne est incorrect.

Regarde si ta chaine est
valide (point ou virgule, autres caratères que de 0 à 9 ...)



C'est ce que fait le TryParse en mieux et la conversion en plus.
TryParse renvoie False quand la chaîne ne correspond pas à un décimal
valide (quand utilisé avec Decimal)
Si la chaîne correspond à un décimal valide, TryParse renvoie True et le
résultat de la conversion est stocké dans le second paramètre passé par
référence.

Le TryParse existe pour tous (ou presque ?) types de données. Il tient
compte des paramètres de culture du système. Si la représentation chaîne
que l'on veut convertir n'est pas exprimée dans la culture du système,
on peut forcer la conversion à partir de la culture que l'on souhaite
avec un troisième paramètre.

De manière générale, et pour ne pas prendre ou garder de mauvaises
habitudes avec des fonctions obsolètes, je désactive l'importation du
Namespace Microsoft.VisualBasic (propriété du projet - onglet
References)

--
Fred
Peekay
Le #12177891
Fred a écrit :
Regarde si ta chaine est
valide (point ou virgule, autres caratères que de 0 à 9 ...)



C'est ce que fait le TryParse en mieux et la conversion en plus.
TryParse renvoie False quand la chaîne ne correspond pas à un décimal
valide (quand utilisé avec Decimal)



Ce que je voulais dire, c'est qu'il regarde lui-même cette chaine ...
Je pense qu'il y a une connerie avant et qu'il se focalise sur le
mauvais truc. De plus, l'utilisation de la MaskedTestBox n'est pas aisée
de prime abord.

Il a l'air d'être perdu avec des trucs tous cons, donc je lui disais de
reprendre avec le debuggage et tout ca, sinon il n'y comprendra rien et
on ne pourra même pas l'aider.
djmcg
Le #12177881
En fait, il déclarait l'erreur au moment ou les textbox.visible=true.
A la compilation pas d'erreur.
Je trouvais cela bizarre et je ne comprend pas très bien comment il fait
pour me déclaré une erreur alors qu'il ne ma pas encore donné le focus
pour que j'encode la donnée.
J'ai suivi Fred : donc abandon du ctype et j'utilise le parse et là plus
d'erreur.
Merci pour votre aide.


Peekay a écrit :
djmcg a écrit :
Voici l'erreur déclaré et même après avoir mis la ligne imports.
La conversion de la chaîne "" en type 'Decimal' n'est pas valide.



Il est clair que convertir une chaine vide, ca n'aide pas ...
Cherche ton problème en amont !


Publicité
Poster une réponse
Anonyme