VBA

senoritalolotte Messages postés 6 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 29 mai 2012 - 21 févr. 2012 à 22:46
senoritalolotte Messages postés 6 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 29 mai 2012 - 22 févr. 2012 à 11:47
Bonsoir,

Après avoir créer la fonction max pour extraire l'une des hauteurs (ha,hc,hb) la plus grande parmi ces 3 là, je dois également indiquer à quel côté (a, b, ou c) correspond cette hauteur maximale.

Voici un extrait de mon code :

a = InputBox("Veuillez entrer la longueur du côté a du triangle.")
b = InputBox("Veuillez entrer la longueur du côté b du triangle.")
c = InputBox("Veuillez entrer la longueur du côté c du triangle.")

p = a + b + c
MsgBox (" Le périmètre du triangle est de " & p)
demi = p / 2

s = Sqr(((demi * (demi - a)) + (demi * (demi - b)) + (demi * (demi - c))))
MsgBox ("La surface est de " & s)

ha = (2 * s) / a
hb = (2 * s) / b
hc = (2 * s) / c

hmax = Application.WorksheetFunction.Max(ha, hb, hc)

MsgBox ("La hauteur la plus grande est de " & hmax & " , correspondant au côté )

Je n'arrive pas a trouvé la solution à mon problème, pourriez vous m'apporter votre aide svp.

En vous remerciant d'avance.

6 réponses

Utilisateur anonyme
22 févr. 2012 à 00:23
Bonjour,
Pourquoi tu ne fais un petit test?
ha = (2 * s) / a 
hb = (2 * s) / b 
hc = (2 * s) / c 
if ha > hb and ha > hc then
   msgbox "La ligne ha est la plus grande"
elseif hb > ha and hb > hc then
   msgbox "La ligne hb est la plus grande"
elseif hc > ha and hc > hb then
   msgbox "La ligne hc est la plus grande"
end if


Bien sur que si jamais deux valeurs sont égales ça va poser problème...

Et aussi concernant ton titre, j'ai imaginé un moment que c'était Voulez-vous Bien Aider

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 févr. 2012 à 07:31
Bonjour,
Tu aurais du ouvrir cette discussion dans la section Langages dérivés > VBA
Note le pour la prochaine fois
C'est très important, car VBA et VB6 ne sont pas la même chose. La preuve :

VBA/Excel t'offre la possibilité de typer ta boîte de dialogue === >>
ouvre ton aide VBA sur Application.Inputbox (qui n'est pas Inputbox seul, hein)
Reviens ensuite

PS : il est de bon ton et logique, lorsque l'on expose une difficulté, de dire toiut du problème.
Tu avais un message d'erreur (au moins un) sur la toute première division car on ne peut diviser du texte

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 févr. 2012 à 07:34
Ah oui :
et je rigole dans ma barbe en lisant :
p = a + b + c

tu as du avoir une jolie concaténation, je devine, puisque ni a, ni b, ni c ne sont typés en numériques (résultats de ton inputbox)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 févr. 2012 à 10:44
Allez ===>> je vais te mettre sur la bonne voie (tu vas voir) :
regarde ce que fait ceci :
Private Sub CommandButton3_Click()
  Dim a As Single, b As Single, c As Single, p As Single
  a = toto("longueur du côté a du triangle.")
  b = toto("longueur du côté b du triangle.")
  c = toto("longueur du côté c du triangle.")
  p = a + b + c
  MsgBox "le périmètre de ce triangle est donc " & p
End Sub

Private Function toto(msg As String) As Single
  toto = 0
  Do While Not IsNumeric(toto) Or toto = 0
    toto = Application.InputBox(Title:=msg, prompt:="un nombre entier ou decimal uniquement" & vbCrLf & "séparateur décimal : ,", Type:=1)
  Loop
End Function

Vu ? tu as ainsi d'emblée tes numériques pour les 3 côtés et peut faire avec toutes les opérations de ton choix.
Note : j'ai ici calculé le seul périmètre, juste pour te montrer que a,b et c sont maintenant bien des numériques.

Je ne partage pas tes approches du calcul de la surface, etc ...
Les miennes sont différentes, mais je ne veux pas traiter ici des aspects de calculs, donc des connaissances mathématiques (et pas de développement, seule vocation de ce forum).



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 févr. 2012 à 11:17
Efforce-toi au moins, avec ta méthode, d'écrire ainsi :
s = Sqr(demi * ((demi - a) + (demi - b) + (demi - c)))

plus clair, pour la même surface.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
senoritalolotte Messages postés 6 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 29 mai 2012
22 févr. 2012 à 11:47
Merci pour toutes ces remarques. Je m'excuse de ne pas avoir posté mon message dans le bon forum, c'est la toute première que j'utilise ce recours.
Pour information, je suis en première année économie/gestion, et je n'ai eu que deux cours de VBA, je n'ai jamais fait de langage auparavant.

Concernant mes méthodes de calculs, elles me sont imposées dans mon fascicule de travaux dirigés.

Voici l'intégralité de mon code, qui s’exécute sans problème bien qu'il ne soit écrit comme un professionnel du VBA.

Sub triangle1()

Dim a As Double
Dim b As Double
Dim c As Double
Dim p As Double
Dim demi As Double
Dim s As Double
Dim ha As Double
Dim hb As Double
Dim hc As Double
Dim y As Double
Dim hmax As Double

a = InputBox("Veuillez entrer la longueur du côté a du triangle.")
b = InputBox("Veuillez entrer la longueur du côté b du triangle.")
c = InputBox("Veuillez entrer la longueur du côté c du triangle.")

p = a + b + c
MsgBox (" Le périmètre du triangle est de " & p)
demi = p / 2

s = Sqr(((demi * (demi - a)) + (demi * (demi - b)) + (demi * (demi - c))))
MsgBox ("La surface est de " & s)

ha = (2 * s) / a
hb = (2 * s) / b
hc = (2 * s) / c

hmax = Application.WorksheetFunction.Max(ha, hb, hc)

MsgBox ("La hauteur la plus grande est de " & hmax)

If ha > hb And ha > hc Then
MsgBox "La ligne ha est la plus grande"
ElseIf hb > ha And hb > hc Then
MsgBox "La ligne hb est la plus grande"
ElseIf hc > ha And hc > hb Then
MsgBox "La ligne hc est la plus grande"
End If

End Sub

Merci à Acive, mon problème est résolu.

Cordialement.
0
Rejoignez-nous