Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ref.text en Décimal (VB2005 Express)

14 réponses
Avatar
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.

10 réponses

1 2
Avatar
Fred
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
Avatar
djmcg
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



Avatar
Fred
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
Avatar
djmcg
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







Avatar
djmcg
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







Avatar
Peekay
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.
Avatar
Peekay
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 !
Avatar
Fred
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
Avatar
Peekay
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.
Avatar
djmcg
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 !


1 2