Le code pour calculer la surface d'un trapèze

le noobs Messages postés 20 Date d'inscription samedi 27 mai 2006 Statut Membre Dernière intervention 22 octobre 2013 - 7 mars 2007 à 19:26
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 9 mars 2007 à 01:17
Dim gb, pb, h As Integer


gb = Val(textgb.Text)
pb = Val(textpb.Text)
h = Val(texth.Text)
r = (gb + pb) * h / 2
lblr.Caption = Str(r)

je suis débutant et je ne trouve pas de solution ... je vous remercie d'avance pour une aide ...

9 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 mars 2007 à 20:04
Salut

-1- Si tu dimensionnes tes variables en Integer, les valeurs ne pourront pas avoir de virgule et les valeurs mini et maxi sont -32768 à +32767
Utilises plutôt des variables de type Double (à virgule flottantes)

-2- Faux amis :
Dim gb, pb, h As Double
ne dimensionnes pas chaque variable en type Double.
Seule la dernière, h, le sera.
Il faut répéter chaque déclaration :
Dim gb As Double, pb As Double, h As Double

-3- La fonction Val est obsolète mais a un côté pratique :
Il vaut mieux utiliser les fonctions "propres" à tes types de variables. Ici  CDbl
gb = CDbl(textgb.Text)
Côté pratique de Val :
Si tu fais un  Val("coucou")  il te renverra 0, normal, alors que CDbl("coucou")  génèrera une erreur
A toi de voir s'il y a un risque que la personne saisisse des lettres à la place de chiffres ...

-4- Idem pour la fonction qui recrée une chaine à partir d'un chiffre
Il faut utiliser CStr :
lblr.Caption = CStr(r)
La fonction Str n'a rien à voir avec la conversion de type, regarde dans l'aide

-5- Fais aussi attention aux saisies.
En général, les utilisateurs saisissent des virgules comme séparateur de décimal. Cela peut sembler normal en France
Cela peut causer des soucis car VB raisonne avec des points comme séparateur.
Il te faut donc penser à convertir d'éventuelles virgules par des points avant de transformer ton texte en Double.
Utilise la fonction Replace, exemple :
textgb.Text = Replace(textgb.Text, ",", ".")

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

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
le noobs Messages postés 20 Date d'inscription samedi 27 mai 2006 Statut Membre Dernière intervention 22 octobre 2013
7 mars 2007 à 20:45
voila.. je te remercie pour tes conseils ,je connaissais pas... et j'ai bcp a apprendre cependant j'ai toujours un problème...
je te donne lensemble de mon code... merci d'y jetter un coup d'oeil
-------------------------------------------------------------------------------
Public CHOIX As String

Private Sub Label3_Click()

End Sub

Private Sub Label4_Click()

End Sub

Private Sub cmdc_Click()
Dim gb As Double, pb As Double, h As Double

gb = CDbl(textgb.Text)
pb = CDbl(textpb.Text)
h = CDbl(texth.Text)
r = (gb + pb) * h / 2
lblr.Caption = CStr(r)


End Sub

Private Sub cmdf_Click()
reponse = MsgBox("Voulez vous quitter l'application?", vbYesNo + vbExclamation)

If reponse = vbYes Then End
End Sub

Private Sub cmdr_Click()
Call Form_Load
End Sub

Private Sub Form_Load()
textgb.Text = Replace(textgb.Text, ",", ".")
textpb.Text = Replace(textpb.Text, ",", ".")
texth.Text = Replace(texth.Text, ",", ".")


End Sub
-------------------------------------------------------------------------------
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 mars 2007 à 23:46
Re
Bon, c'est une chose le code, mais explique un peu ce qui ne 'marche pas'.
As-tu un code/message d'erreur ? Où ?
Que donne le résultat ? Que devrait-il donner ?

PS : Les Replace doivent être placés dans ton cmdc_Click(), juste avant de commencer le transfert des TextBox dans tes variables.
+ cmdr_Click() ne sert plus
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 mars 2007 à 00:17
Bonsoir,

IL y a deux erreurs dans ce que tu veux faire... La première c'est d'utiliser la conversion des "Text" dans la Sub Form_Load() . En effet, cet événement se produit qu'une seule fois au chargement de la fenêtre (la form). Hors, ici la conversion doit se faire après l'évenement "Click du Bouton de calcul" (cmdc_Click)... donc il faut mettre la conversion des "Text" dans ce dernier.


Ensuite, il y a une petite erreur de syntaxe dans Replace. "Jack a dit"  Replace( ***,",","."), hors il faut inverser les deux derniers paramètres...

En bref, le code que tu dois derrière le bouton de calcul, doit être :

=

Private Sub CommandButton2_Click()



Dim gb As Double, pb As Double, h As Double



Textgb.Text = Replace(Textgb.Text, ".", ",")
textpb.Text = Replace(textpb.Text, ".", ",")
texth.Text = Replace(texth.Text, ".", ",")



gb = CDbl(Textgb.Text)
pb = CDbl(textpb.Text)
h = CDbl(texth.Text)


r = (gb + pb) * h / 2
lblr.Caption = CStr(r)



End Sub


=

Amicalement,
Us.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
8 mars 2007 à 08:13
Salut, au risque de dire une bétise, t'as formule calcul uniquement l'aire d'un trapèze isocèle! Et dans les autres cas? Peut-être n'en as tu pas besoin tu me dira!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
8 mars 2007 à 08:19
Re: effectivement j'ai dis une bêtise autant pour moi!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 mars 2007 à 08:24
Bonjour DriKce06,

Mal réveillé, hein ?
Prends une feuille de papier et un crayon...
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
8 mars 2007 à 08:32
lol! Oui c'est ça! Et j'ai pris le papier et le crayon après ma connerie!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 mars 2007 à 01:17
Salut DjFlyia
Ton message privé (auxquels je ne réponds pas) n'est qu'un copier/coller du listing que tu affiches dans le 3ème message.
Tu n'as pas tenu compte des conseils que je t'ai donné.
Ne compte pas sur moi pour t'écrire le code, essaye de comprendre et de tester, c'est tout simple.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés 
<-- C'est écrit là

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous