Programmation d'un QCM sur VBA

Bonjour à tous et à toutes,

Je viens vers vous afin d'obtenir les lumières des génies de visual basic.
En effet je suis pompier et je souhaite, pour mon travail, créer un grand QCM.

Ce QCM permettrait à mes collègues de réviser les différents référentiels pompiers de manière plus intéressante et ludique.

Je suis un grand débutant de VBA, je me suis pas mal renseigné sur la conduite à tenir pour créer un QCM et ça ne m'a pas l'air insurmontable. Mais il y a un problème...

J'ai plusieurs livres référentiels et dans chacun de ces livres j'ai environ 300 questions.
Si je suis le guide que j'ai trouvé sur internet, mes collègues vont se retrouver avec 3000 questions d'un coup .

Je souhaite créer une base de données de questions et donc que ma programmation pioche au hasard 10 questions par référentiel et me les rassemble de manière "pot pourri" pour me créer le QCM. Et donc à chaque lancement d'un QCM ce sont de nouvelles questions qui tombent.

Est-ce possible à faire? Comment faut-il faire? Connaissez-vous un logiciel spécialisé dans la progr. de QCM et simple d'utilisation?

J'espère avoir été clair et surtout désolé pour ce long mail à lire.
Merci aux courageux et bonne soirée.

2 réponses

  1. Contributeur
    Bonjour

    On suppose qu'en feuille2 tu as la liste des 300 questions en colonne A à partir de la ligne 1 ?

    si oui
    proposition à adapter à ta présentation (à l'avenir,merci d'^tre plus précis dans tes questions)
    https://www.cjoint.com/?3AyoMUANbob

    les macros
    Option Explicit
    Public Qcm As Object
    '--------------------------------
    Sub nouveau_QCM()
    Dim Cptr As Integer
    '------initialisations
    Set Qcm = CreateObject("scripting.dictionary")
    For Cptr = 1 To 300
    Qcm.Add Cptr, ""
    Next
    End Sub
    '---------------------------------
    Sub questionner()
    Dim Cptr As Integer, Ligne As Integer
    Randomize
    For Cptr = 1 To 10
    Ligne = Int(Rnd * 300) + 1
    If Qcm.exists(Ligne) Then
    Sheets(1).Range("A" & Cptr) = Sheets(2).Range("A" & Ligne)
    Qcm.Remove (Ligne)
    End If
    Next
    End Sub

    Michel
    0
    1. Bonjour,

      pour generer un nombre aleatoire entre 1 et 300 en vba tu peux ecrire ceci:

      
      Sub nbalea()
      Dim valeur As Integer
      
      Randomize
      valeur = Int(300 * Rnd) + 1
      
      End Sub
      
      


      ensuite pour generer une liste de 10 chiffres au hasard et differents s'inscrivant dans la plage A1:A10 de ta Feuil1, tu peux ecrire:

      
      Sub nbalea()
      
      Dim valeur As Integer
      
      Randomize
      
      For i = 1 To 10
          Do
              valeur = Int(300 * Rnd) + 1
              Cells(i, 1).Value = valeur
      
          Loop While WorksheetFunction.CountIf(Worksheets("Feuil1").Range("A1:A10"), valeur) = 0
          
      Next i
      
      End Sub
      
      


      Donc ensuite tu peux utiliser cette liste de 10 valeurs aleatoires comprises entre 1 et 300 pour faire une recherche dans ta base de donnees!

      bibivanhoa
      1