Programmation d'un QCM sur VBA

Fermé
Guizmowow Messages postés 1 Date d'inscription jeudi 23 janvier 2014 Statut Membre Dernière intervention 23 janvier 2014 - 23 janv. 2014 à 20:11
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 24 janv. 2014 à 14:17
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.

A voir également:

2 réponses

bibivanhoa Messages postés 3 Date d'inscription vendredi 24 janvier 2014 Statut Membre Dernière intervention 27 mars 2014 1
24 janv. 2014 à 10:04
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 24/01/2014 à 14:40
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