Revenir au début de macro sous condition + aléatoire

Benjo

XLDnaute Junior
Salut à tous,

je suis en trainde faire une petite macro qui m'aiderait à mieux gerer mon voc d'anglais (c'est dure la vie d'étudiant :D )

Mais j'ai un petit soucis :
J'ai un classeur excel avec une colonne pour les mots en fr et une colonne pour les mots en anglais. L'idée c'est d'avoir une macro qui me demande aléatoirement un mot en anglais avec une inputbox. Si je me mets le bon mot, on passe à un autre mot. Si j'appuis sur OK, ou Annuler, ou tout autre bouton, je sors du programme.
Par contre, si je me trompe, là j'ai une msgbox qui me demande si je veux recommencer. Si je click sur non, j'ai une autre msgbox qui m'affiche la solution. Par contre, si je click sur oui, (et c'est là où je bloque) je voudrais revenir au moment de la macro où il me demande un mot en anglais.

Pour le moment, je n'ai pas réussi à introduire la notion d'aléatoire. Je passe par une inputbox qui me demande la ligne... Vous savez comment faire pour passer à l'aléatoire ?

Je vous montre le début de code que j'ai pour le moment :

Code:
Sub interro()
Dim cell, reponse, correction
cell = InputBox("quelle ligne?")
reponse = InputBox(Cells(cell, 1).Value)
If reponse = Cells(cell, 2).Value Then
MsgBox ("Bonne réponse")
Else
MsgBox ("Mauvaise réponse")
If MsgBox("Voulez vous retenter ?", vbYesNo) = vbNo Then
MsgBox ("Le bonne réponse est " & Cells(cell, 2).Value)
Else


End If
End If

End Sub

Bref, vous l'avez vue, je bloque juste avant les 2 end if... Je ne sais pas remonter plus haut, et je n'ai pas hyper envie de faire mille If en cascade.

Vous pensez pouvoir m'aider?
Merci beaucoup les amis
@++
 
Dernière édition:

Benjo

XLDnaute Junior
Re : Revenir au début de macro sous condition + aléatoire

Ha oui, j'ai oublié une question :
Savez vous comment integrer un bouton, lorsque j'ai une bonne réponse, me permettant soit de passer à un nouveau mot (donc toujours le meme probleme de revenir plus haut dans la macro), soit de sortir de la macro...

Merci bien ;-)
 

Staple1600

XLDnaute Barbatruc
Re : Revenir au début de macro sous condition + aléatoire

Bonsoir

pour l'aléatoire

ici chiffre de 1 à 10
Code:
Sub interro()
Dim cell, reponse, correction
cell = InputBox("quelle ligne?", "Interro", Int(Rnd * 10) + 1)
reponse = InputBox(Cells(cell, 1).Value)
If reponse = Cells(cell, 2).Value Then
MsgBox ("Bonne réponse")
Else
MsgBox ("Mauvaise réponse")
If MsgBox("Voulez vous retenter ?", vbYesNo) = vbNo Then
MsgBox ("Le bonne réponse est " & Cells(cell, 2).Value)
Else
End If
End If
End Sub
 

Benjo

XLDnaute Junior
Re : Revenir au début de macro sous condition + aléatoire

Merci pour ta réponse.
En fait, si l'aléatoire rentre en compte, nous n'avons plus besoin d'utiliser d'inputbox.
Je prends alors ca :
"Cell = Int(Rnd * 2000 + 1) "

Merci en tout cas ;-)
 

skoobi

XLDnaute Barbatruc
Re : Revenir au début de macro sous condition + aléatoire

Bonsoir,

voici une proposition (en utilisant une boucle Do.....Loop):

Code:
Sub interro()
Dim LigX, reponse, correction
Do
  LigX = Int(Rnd * 5) + 1 'ligne aléatoire entre 1 à 5
  reponse = InputBox(Cells(LigX, 1).Value)
  If reponse = Cells(LigX, 2).Value Then
    MsgBox ("Bonne réponse")
'sort de la boucle si bouton annuler choisie
  ElseIf reponse = "" Then
    Exit Do
  Else
    MsgBox ("Mauvaise réponse")
    If MsgBox("Voulez vous retenter ?", vbYesNo) <> vbYes Then
      MsgBox ("Le bonne réponse est " & Cells(LigX, 2).Value)
      Exit Do 'sort de la boucle
    End If
  End If
Loop
End Sub
Edit: ouppsss, je suis à la bourre moi, pas rafraichi! Salut JM :)
 
Dernière édition:

Benjo

XLDnaute Junior
Re : Revenir au début de macro sous condition + aléatoire

Ha ba oui, je n'avais pas pensé à utiliser cette boucle :D
Merci beaucoup pour ton coup de main. Ca fonctionne ... presque :p

En fait, quand on selectionne "voulez vous retentez " OUI, on ne tombe pas sur le meme mot, mais sur un autre mot...

Sinon c parfait ! Merci beaucoup l'ami !
 

skoobi

XLDnaute Barbatruc
Re : Revenir au début de macro sous condition + aléatoire

Ha ba oui, je n'avais pas pensé à utiliser cette boucle :D
Merci beaucoup pour ton coup de main. Ca fonctionne ... presque :p

En fait, quand on selectionne "voulez vous retentez " OUI, on ne tombe pas sur le meme mot, mais sur un autre mot...

Sinon c parfait ! Merci beaucoup l'ami !

Re,

en couleur les changements/ajouts:

Code:
Sub interro()
Dim LigX, reponse, correction[COLOR=Blue][B], Retenter As Boolean[/B][/COLOR]
Do
  [COLOR=Blue][B]LigX = IIf(Not Retenter, Int(Rnd * 5) + 1, LigX)[/B][/COLOR] 'ligne aléatoire entre 1 à 5 ou même ligne si "retenter"
  [B][COLOR=Blue]Retenter = False[/COLOR][/B]
  reponse = InputBox(Cells(LigX, 1).Value)
  If reponse = Cells(LigX, 2).Value Then
    MsgBox ("Bonne réponse")
'sort de la boucle si bouton annuler choisie
  ElseIf reponse = "" Then
    Exit Do
  Else
    MsgBox ("Mauvaise réponse")
    If MsgBox("Voulez vous retenter ?", vbYesNo) <> vbYes Then
      MsgBox ("Le bonne réponse est " & Cells(LigX, 2).Value)
      Exit Do 'sort de la boucle
[COLOR=Blue][B]    Else: Retenter = True[/B][/COLOR]
    End If
  End If
Loop
End Sub
Voili voilou.
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
288

Statistiques des forums

Discussions
312 753
Messages
2 091 672
Membres
105 041
dernier inscrit
CHERRIERE