Calcul faux + boucle qui ne s'arrête pas
Re - Bonjour à tous,
je rencontre un autre problème, on me demande de faire un programme comme celui ci :
réaliser la procédure Sub nommée devis qui calcule du montant d’un devis correspondant à un séjour dans un gite rural.
Le prix par nuit par adulte est de 30 € et par enfant, de 20 €. Les clients peuvent réserver pour la durée qu’ils souhaitent. Ils peuvent éventuellement prendre le petit déjeuner et cela concerne forcément, dans cette hypothèse, la famille entière. Le prix est de 8 € par petit déjeuner quotidien pour les adultes et de seulement 3 € pour les enfants.
Le client peut bénéficier d'une remise en fonction de son ancienneté comme locataire du gite. Lorsqu'elle dépasse 10 ans, elle est de 20%. Entre 4 et 10 ans, elle est de 10% alors qu'il n'y en a pas en dessous de 4 ans.
Après la saisie des différentes éléments nécessaires au calcul (nombre d'adultes et nombre d'enfants, petits déjeuners, etc.), vous prévoirez l'affichage du taux de remise accordée puis du total TTC à payer.
J'ai écrit ce code ci dessous, seulement mon programme tourne en boucle (il repart du début après la fin du programme au lieu de s'arrêter), et à chaque il me dit que je n'ai pas le droit à la remise, malgré que j'ai plus de 3 années d'anciennetés.
Sub devis()
Dim NBA As Integer
Dim NBE As Integer
Dim DUREE As Integer
Dim ANCIEN As Integer
Dim HT As Currency
Dim REMISE As Currency
Dim TTC As Currency
Dim PTITDEJ As String * 1
Dim REP As String * 1
REP = "O"
Do While REP = "O"
NBA = InputBox("Entrez le nombre d'adultes")
NBE = InputBox("Entrez le nombre d'enfants")
DUREE = InputBox("Entrez la durée du séjour")
PTITDEJ = InputBox("Le client souhaite t'il prendre les petits déjeuners (O/N) ?")
HT = DUREE * (NBA * 30 + NBE * 20)
If PTITDEJ = "O" Then
HT = HT + DUREE * (NBA * 8 + NBE * 3)
End If
ANC = InputBox("Quelle est l'ancienneté du client ?")
If ANCIEN > 10 Then
REMISE = 20
MsgBox ("Remise accordée : 20%")
Else
If ANCIEN > 3 Then
REMISE = 10
MsgBox ("Remise accordée: 10%")
Else
REMISE = 0
MsgBox ("Pas de remise")
End If
End If
HT = HT * (1 - REMISE)
TTC = HT * 1.196
MsgBox ("Total à régler :" & TTC & "euros")
Loop
End Sub
Je ne vois pas d'où cela peut provenir.
Si quelqu'un a une idée..
Seb
Bonjour,
inputbox renvoie un string tu dois convertir pour avoir un nombre.
vérifie la variable que tu utilises pour determiner l'ancienneté
vérifie ton calcul de pourcentage
tu ne poses pas de question pour mettre une valeur à REP -> boucle infinie.
j'ai compris que c'est un exercice, donc je ne te donne pas la solution.
Bonjour,
inputbox renvoie un string tu dois convertir pour avoir un nombre.
vérifie la variable que tu utilises pour determiner l'ancienneté
vérifie ton calcul de pourcentage
tu ne poses pas de question pour mettre une valeur à REP -> boucle infinie.
j'ai compris que c'est un exercice, donc je ne te donne pas la solution.
J'ai en partie trouvé avec tes indications les différentes erreurs.
J'avais appelé ma variable ANC au lieu de ANCIEN ce qui fait que cela me renvoyait toujours 0.
Au niveau du calcul effectivement REMISE devait être modifiée et mettre tout cela en décimal.
Par contre je bloque toujours sur ma boucle qui tourne infiniment... même si je pose la question juste avant le programme continue à tourner...
Bonjour,
pour pouvoir sortir de la boucle, il faut poser la question dans la boucle. Par exemple juste avant l'instruction loop.
J'ignorais que la place du message à mettre avait une si grande importance.
Cela venait bien de cela.
J'ai ajouté:
REP = inputbox("Autre devis à réaliser (O/N) ?"
Loop
Et ça a bien fonctionné.
Merci !!