Programmation d'un QCM sur VBA

Guizmowow Messages postés 1 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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. bibivanhoa Messages postés 4 Statut Membre 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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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