Microsoft 365 Générer facilement un QCM

M2C2

XLDnaute Nouveau
Bonjour,

Pour des besoins d'enseignements, j'ai besoin de générer souvent et rapidement des QCM pour mes étudiants.
J'ai rassemblé environ 80 questions et leurs réponses dans un fichier Excel (voir un extrait en PJ)
Pour chaque question, j'ai nommé les plages "Question01" ; "Question02" ; etc ...

Je voudrais pouvoir créer de nouvelles feuilles dans lesquelles seraient présentées un tirage aléatoire de X questions parmi les 80 (Voir un ex sur la Feuille 'Epreuve #1' dans lequel un tirage de 2 questions aurait été fait sur les 5 présente dans la Base de Questions) ?

J'ai fouillé sans trouver comment, via les formules d'Excel, comment on pourrait demander "sélectionne moi aléatoirement X plages de cellules dont le nom commence par 'QuestionXX' !"

Peut-être est-ce mon choix de présentation en lignes plutôt qu'en colonnes qui n'est pas le bon ?
(Le souci, c'est que chaque question contient un nombre variable de réponses possibles !)

Je vous remercie par avance de votre aide et bravo pour ce forum très utile que je viens de découvrir !
 

Pièces jointes

  • 20210326 QCM Extrait.xlsx
    11.4 KB · Affichages: 26
Solution
Voir le module de classe ListeAléat pour trouver les explications pour chaque méthode de ce type d'objet.
Le bouton peut être mis ailleurs.
Changez la procédure comme suit :
VB:
Sub Tirage()
   Dim Wsh As Worksheet, NomPlage As String, RngSrc As Range, RngCbl As Range, N As Byte
   Set Wsh = ThisWorkbook.Worksheets.Add
   Wsh.Name = Format(Date, "dd-mm-yyyy")
   Set RngCbl = Wsh.[A1]
   Randomize
   With New ListeAléat
      .Init 85
      For N = 1 To 45
         NomPlage = "Question" & Format(.Aléat(N), "00")
         On Error Resume Next
         Set RngSrc = Feuil1.Range(NomPlage)
         If Err Then MsgBox " Plage """ & NomPlage & """ inaccessible.", vbCritical, "Tirage": Exit Sub
         On Error GoTo 0
         RngSrc.Copy...

Staple1600

XLDnaute Barbatruc
Bonjour le fil, M2C2 (Bienvenue sur le forum)

[Suggestion en passant]
Trouver l'inspiration (ou pas) dans les archives
et/ou
Puiser dans l'existant pour éviter trop de fatigue ;)
[/Suggestion en passant]
 

Staple1600

XLDnaute Barbatruc
Re

Dans le lien que j'ai mis, il y a plusieurs fichiers exemple
Aucun ne te convient?
Notamment un de ceux proposés par kjin
 

M2C2

XLDnaute Nouveau
Merci infiniment à tous les deux
Je vais regarder ça mais j'utilise la Pack 365 sur Mac et ce que je découvre, c'est que ActiveX n'est pas aisément utilisable sur Mac !
Tout ça est trop compliqué pour mon petit besoin ... Je vais continuer à produire mes sujets "A la main" !
Merci encore pour votre aide
 

M2C2

XLDnaute Nouveau
Rhooooooo ... C'est -presque- le Nirvana !-)
Si je pouvais abuser ... C'est possible d'avoir le même mais avec deux changements :
1) le bouton sur la 1ere page
2) quand on clic dessus, il créer un nouvel onglet à la date du jour avec 45 questions tirées au hasard, parmi un total de 82 qui se situent sur la 1ere page

J'ai beau regarder votre code VBA ... j'y comprend couic !
 

Dranreb

XLDnaute Barbatruc
Voir le module de classe ListeAléat pour trouver les explications pour chaque méthode de ce type d'objet.
Le bouton peut être mis ailleurs.
Changez la procédure comme suit :
VB:
Sub Tirage()
   Dim Wsh As Worksheet, NomPlage As String, RngSrc As Range, RngCbl As Range, N As Byte
   Set Wsh = ThisWorkbook.Worksheets.Add
   Wsh.Name = Format(Date, "dd-mm-yyyy")
   Set RngCbl = Wsh.[A1]
   Randomize
   With New ListeAléat
      .Init 85
      For N = 1 To 45
         NomPlage = "Question" & Format(.Aléat(N), "00")
         On Error Resume Next
         Set RngSrc = Feuil1.Range(NomPlage)
         If Err Then MsgBox " Plage """ & NomPlage & """ inaccessible.", vbCritical, "Tirage": Exit Sub
         On Error GoTo 0
         RngSrc.Copy Destination:=RngCbl
         Set RngCbl = RngCbl.Offset(RngSrc.Rows.Count)
         RngCbl.Resize(, 2).ClearContents
         Set RngCbl = RngCbl.Offset(1)
         Next N
      End With
   RngCbl.Resize(50, 2).ClearContents
   End Sub
 
Dernière édition:

M2C2

XLDnaute Nouveau
Je viens d'intégrer votre code, @Dranreb et cela fonctionne parfaitement : me voilà un enseignant heureux !
Merci encore et bravo pour votre compétence et votre générosité !
Me voilà "Supporter XLD Bronze" de votre Forum
leonardo dicaprio bravo GIF
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 191
Membres
112 679
dernier inscrit
Yupanki