VBA

Signaler
Messages postés
6
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 mai 2012
-
Messages postés
6
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 mai 2012
-
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


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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
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
Messages postés
6
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 mai 2012

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.