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

Messages postés
20
Date d'inscription
samedi 27 mai 2006
Statut
Membre
Dernière intervention
22 octobre 2013
- - Dernière réponse : cs_Jack
Messages postés
14008
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 ...
Afficher la suite 

9 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
20
Date d'inscription
samedi 27 mai 2006
Statut
Membre
Dernière intervention
22 octobre 2013
0
Merci
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
-------------------------------------------------------------------------------
Commenter la réponse de le noobs
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
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
Commenter la réponse de cs_Jack
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
0
Merci
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.
Commenter la réponse de us_30
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
5
0
Merci
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:
Commenter la réponse de drikce06
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
5
0
Merci
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:
Commenter la réponse de drikce06
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Bonjour DriKce06,

Mal réveillé, hein ?
Prends une feuille de papier et un crayon...
Commenter la réponse de jmfmarques
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
5
0
Merci
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:
Commenter la réponse de drikce06
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
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)
Commenter la réponse de cs_Jack