Générer aléatoirement une question

altefqhatre

XLDnaute Junior
Bonjour,

Je vais devoir passer un examen sous forme de "questions à choix multiples".

Ayant déjà développer en vba, geek comme je suis, je me demandais s'il était possible de répertorier toutes les questions possibles avec leurs réponses respectives et de créer une macro qui en pioche une aléatoirement. Ceci me servirai d'entraînement en quelques sortes :)

J'ai lu plusieurs postes concernant des nombres générés automatiquement, mais je n'ai rien trouver à propos de phrases entières.

Je pense bien qu'il faudrait que je les écrive toutes dans un code, mais comment les générer une par une de façon aléatoire?

Merci d'avance!

a++
 

Pierrot93

XLDnaute Barbatruc
Re : Générer aléatoirement une question

Bonjour,

peut être placer tes phrases sur une feuille de calcul plutot que directement dans le code.... ensuite tu tires aléatoirement un numéro qui correspondrait à un numéro de ligne.... A voir...

bon après midi
@+
 

CBernardT

XLDnaute Barbatruc
Re : Générer aléatoirement une question

Bonjour,

tirage aléatoire de questions tirées d'une liste de question jusqu'à épuisement des questions. Aucune répétition de question pendant la série en cours.
 

Pièces jointes

  • TirageAleatoireSérieQuestions.xls
    48.5 KB · Affichages: 87

altefqhatre

XLDnaute Junior
Re : Générer aléatoirement une question

Bonjour et merci beaucoup pour vos réponses :D

J'en profite pour demander autre chose.

J'ai attribué un nom à la plage de cellules contenant la question 1. Est-il possible d'afficher une référence dans une msgbox?

Merci!

a++
 

altefqhatre

XLDnaute Junior
Re : Générer aléatoirement une question

Effectivement c'est pas tout à fait ça Pierrot ;-)

Cette MsgBox me renvoie: "=QuestionsALL!$A$1:$B:6"

Je crois que je me complique la vie enfait à vouloir utiliser des références... lol

Bernard merci pour ton code qui fonctionne parfaitement :)

J'essaye maintenant d'insérer la réponse à la question affichée en appuyant sur OK dans la MsgBox.

La réponse se trouve dans la cellule à droite de chaque question.

Malheureusement je n'arrive pas à renvoyer cette valeur via une MsgBox.

Voilà comment j'ai procédé:

Code:
Dim Derlig As Integer, i As Byte, Tablo, Coll As Collection, Y As Byte
' Mise en tableau ddes questions
With Sheets("Questions")
Derlig = .Range("A65536").End(xlUp).Row
Tablo = .Range("A2:A" & Derlig)
' Tirage des joueurs
Set Coll = New Collection
Do
    Y = Int((UBound(Tablo, 1) * Rnd) + 1)
    On Error Resume Next
    Coll.Add Tablo(Y, 1), CStr(Tablo(Y, 1))
    If Err.Number = 0 Then
    
  MsgBox Tablo(Y, 1), , ("Question")
  
   MsgBox Tablo(Y, 1).Offset(0, 1).Value, ("Réponse")                Cette ligne ne réagit pas, rien ne se passe :-(
    
    'Message pour la prise de décision d'imprimer des pages de la première feuille
    If MsgBox(("Voulez-vous passer à la question suivante ?"), vbQuestion + vbYesNo, ("Confirmation")) = vbNo Then Exit Sub
    On Error GoTo 0
    
    End If
    
     
    
Loop Until Coll.Count = UBound(Tablo, 1)
End With

Merci du coup de main en tout cas!
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Générer aléatoirement une question

Re,

regarde ceci :
Code:
Dim c As Range, p As String, s() As String, t
s = Split(Mid(Range("maplage").Name, 2), "!")
For Each c In Sheets(s(0)).Range(s(1))
    t = t & c.Value & vbLf
Next c
MsgBox t

bon après midi
@+
 

altefqhatre

XLDnaute Junior
Re : Générer aléatoirement une question

Merci beaucoup à tout le monde!

Voilà le code final, ajusté à mes besoins:

Code:
Sub Aléatoire()

Dim Derlig As Integer, i As Byte, Tablo, Coll As Collection, Y As Byte
' Mise en tableau ddes questions
With Sheets("QUESTIONS")
Derlig = .Range("A65536").End(xlUp).Row
Tablo = .Range("A2:B" & Derlig)
' Tirage des joueurs
Set Coll = New Collection
Do
    Y = Int((UBound(Tablo, 1) * Rnd) + 1)
    On Error Resume Next
    Coll.Add Tablo(Y, 1), CStr(Tablo(Y, 1))
    If Err.Number = 0 Then
    ' Question
    If MsgBox(Tablo(Y, 1) & vbLf & vbLf & "Pour obtenir la réponse à la question, cliquer sur 'Oui.", vbYesNo, ("Question")) = vbYes Then
    ' Réponse
    MsgBox Tablo(Y, 1) & Chr(13) & Chr(13) & Chr(13) & "Réponse:" & Chr(9) _
     & Chr(9) & Tablo(Y, 2), vbOKOnly, "Réponse à la question"
    End If
    'Message pour passer ou non à la question suivante
    If MsgBox(("Voulez-vous passer à la question suivante ?"), vbQuestion + vbYesNo, ("Confirmation")) = vbNo Then Exit Sub
    On Error GoTo 0
    End If
Loop Until Coll.Count = UBound(Tablo, 1)
End With

End Sub

a++
 

Statistiques des forums

Discussions
312 495
Messages
2 088 964
Membres
103 992
dernier inscrit
Christine 974