Double boucle Do donne une vilaine boucle infinie
Bonsoir à tous,
Voici un code fonctionnel bien qu'esthétiquement douteux, à mon sens.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| Sub g()
Dim i, x, k, b As Integer
Dim o, p As String
Do
x = Int((10 * Rnd) + 1)
If x = b Then
Call g
Else
For i = 1 To 10
o = InputBox("combien font " & x & "x" & i & "?")
If Val(o) = x * i Then
MsgBox ("bravo nestor")
Else
MsgBox ("raté nestor, la bonne réponse était : " & x * i)
k = k + 1
End If
Next i
MsgBox ("votre nombre total d'erreurs est de : " & k)
p = InputBox("souhaitez-vous jouer à nouveau ? (y/n)")
x = b
End If
Loop While p = "y"
End Sub |
L'horrible Call g n'est présent que pour une seule raison :
Je n'ai pas réussi à intégrer une autre boucle Do dans ma boucle Do générale afin de vérifier que l'on n'avait pas la même table à jouer deux fois de suite (x≠b). Mon code commençait tel que : Do [incrément] Do et j'ai fait face à des boucles infinies qui m'ont fait la grâce, tout du moins la première, de retaper l'intégralité de mon code, heureusement saisi in extremis par screenshot.
Notez que si j'utilise une boucle Do c'est parce que je ne vois pas comment faire autrement avec des If.
Question 1 : comment remplacer le très peu orthodoxe Call g sans trop toucher à mon code ?
En fait, je ne sais comment faire quelque chose tel que :
Code:
1 2 3 4 5 6 7 8
| ...
Next i
MsgBox ("votre nombre total d'erreurs est de : " & k)
p = InputBox("souhaitez-vous jouer à nouveau ? (y/n)")
if y then
LOOP RETOURNE AU DEBUT DU PROGRAMME
else
exit sub |
Question 2 : comment faire une boucle de type If tel que je le souhaitais initialement ?