Boucle Loop while qui ne s'arrête pas

Bonsoir tout le monde !

Pour vous expliquer rapidos le contexte : j'ai créée un mini quizz pour mon stage ou les utilisateurs doivent répondre à 7 questions à la suite qui s'affichent sous forme d'InputBox (fichier joint pour mieux comprendre).

Je suis NOVICE en VBA et mon problème est que j'aimerai que ma boucle s'arrête si la réponse à la question est fausse ou si le score maximal est atteint (c'est sur 10 points).

La boucle continue même si c'est faux mais s'arrête au bout des 7 questions

Je sais que mon code est faux (bon évidemment mais au delà de l'erreur je pense qu'il est pas bien "codé"), si quelqu'un peut m'aider ou m'indiquer comment faire pour que la boucle respectent les conditions, je vous dit merci d'avance !

Jspr que mon post est compréhensible (dsl c'est un peu long)

Bonne soirée !

Ps : les questions ne veulent pour la plupart rien dire parce que j'ai retirée les données confidentielles (il est aussi censé m'inscrire le score obtenu mais je peux corriger ça)

Bonjour,

si une boucle DO / LOOP / WHILE ne s'arrête pas c'est que la condition de sortie n'est pas bonne...

Le while (je crois) se traduit par :

on boucle tant que "la condition soit vrai".

@ bientôt

LouReeD

Re bonsoir,

Dans votre code : risqueop As String

puis risqueop = le choix d'un InputBox

Pour moi (et seulement moi), je ferais deux variables une Réponse As String pour la réponse des InputBox et une En_Jeu As Boolean pour savoir si l'on doit "boucler" ou sortir et alors le LOOP serait :

Loop While En_Jeu = True

Pas de mélange des genres...

@ bientôt

LouReeD

Bonsoir,

Merci pour votre réponse, j'ai testée avec le boolean mais la boucle continue toujours...

Et oui en regardant de plus près le code ainsi que l'explication du jeu il y a un gros problème :

vous parlez de "mort subite" hors vos 7 questions sont posées dans la même "phase" de boucle...

Après chaque question, pour ne pas tout recoder, il vous suffit de mettre:

If En_Jeu= False Then Exit Do

Et puis surtout il n'y a pas besoin de boucle dans le cas où les 7 questions se suivent au niveau du code :

code première question

si pas bon goto fin

si bon

on pose la question 2

si pas bon goto fin

si bon

on pose la question 3

etc

puis après la dernière question

fin:

if En_Jeu = false then msgbox(" vous n'avez pas réussit les 7 à la suite"

else

"Vous avez réussi les 7 à la suite"

Fin du code

@ bientôt

LouReeD

Voici le fichier modifié "simplement" :

@ bientôt

LouReeD

Bonjour, salut LouReeD,

Je n'ai fait que survoler vos fichiers, pardon d'avance si ma réponse n'est pas adaptée !

Il est possible d'avoir une écriture très "light" en utilisant une boucle et des variables tableau. Voilà ma proposition (à compléter avec les vraies questions) :

Option Base 1
Sub Questionnaire()

Dim i As Integer, Questions(), Réponses(), Bon As Boolean
Questions = Array("Question 1 : Tatatata ?" & Chr(10) & "A : rép. A", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10") 'Liste des questions, comprenant les propositions de réponse
Réponses = Array("A", "B", "C", "D", "D", "C", "B", "A", "C", "B") 'Liste des réponses
Do 
    Bon = (UCase(InputBox(Questions(i + 1))) = Réponses(i + 1)) 'Si valeur saisie = réponse à la question, alors BON = VRAI
    i = i + Abs(Bon) 'Ajoute 1 au compteur si BON
Loop While Bon And i < 10 'Continue tant que c'est bon (et qu'on est pas à la fin)
If i = 10 Then MsgBox ("Félicitations, c'est un sans faute !") Else MsgBox ("Perdu ! Votre score est de : " & i & " points.")

End Sub

PS :

  • Cette version allégée ne dispose pas de l'inscription du score en face d'un nom sur la feuille, mais c'est très simple à rajouter si besoin...
  • Cet exemple ne gère que des choix de réponse unique, mais il est possible d'intégrer des réponses multiples avec une seconde boucle et une fonction SPLIT
  • J'ai utilisé une boucle DO... LOOP WHILE, mais on peut très bien faire une boucle FOR... NEXT avec la variable i (i = 1 To 10) et placer un EXIT FOR si BON = FAUX

Bonjour Pedro22,

comme annoncé sur mon poste, une modification simple, sinon je lui aurait conseiller d'aller voir mes applications...

ACADEMIE ou bien USERA, elles ne sont pas d'un code VBA excellent mais elles permettent de bien s'amuser...

@ bientôt

LouReeD

Merci beaucoup LouReeD, je planchais dessus depuis des jours !

Merci aussi Pedro22, je garde quand même tes lignes de code parce que j'aimerai apprendre à coder VBA (notamment parce que je m'en sers en cours), ca me permettra d'apprendre de nouvelles choses !

Un grand merci à vous deux ! Bonne journée !

Merci pour vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "boucle loop while qui arrete pas"