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 !!

Rechercher des sujets similaires à "calcul faux boucle qui arrete pas"