QCM avec macro

ELADAOUI Messages postés 14 Statut Membre -  
ELADAOUI Messages postés 14 Statut Membre -
Bonjour,
je souhaite créer un QCU (Questionnaire à Choix Unique) où il n'y a pas de mauvaise réponses, mais chaque réponse apporte un certain nombre de points.
A la fin du QCM, j'aimerai insérer un commentaire et une image, qui changeront en fonction du nombre total de points.
En fait, je veux faire exactement comme ce fichier qui ce trouve sur ce lien
https://www.excel-downloads.com/threads/aide-pour-creer-un-qcm-dynamique-avec-word-exel.179585/ sous le nom de qcm.xls

Mais avec mes questions et ajouter un texte et une image à la fin.
J'ai trouvé celui-ci dans un forum datant de 2006, et l'auteur ne répond (ce qui est un peu normal).
Je travail avec excel 2010 sous windows 7 et excel 2011 sous mac
Je ne connais rien en macro, donc si vous pouvez m'expliquer comment faire ou me donner une macro générale où il faudra juste modifier les questions,... Ou autre, je suis preneur.
Merci d'avance.

2 réponses

  1. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    Bonjour,

    C'est très simple.

    Il suffis d'utiliser un userform par question.

    Le bouton passe d'un userform à un autre.

    Il faut aussi crée un userform par "Résultat" (fin du QCM).

    Et l'avant dernier userform à un sub qui en fonction du total de points choisi différents userform.

    Si tu est pas très doué en macro je peux le faire pour toi.
    1
    1. ELADAOUI Messages postés 14 Statut Membre
       
      Bonjour, je te remercie mais j'aimerai apprendre car je vais devoir faire plusieurs QCM. Comment passe-tu d'un useform à un autre ? Cela ce fait automatiquement ?

      Merci beaucoup pour ta réponse.
      0
    2. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Pour cela il te faudra déjà une base en conaissence VBA tu peux trouvé un tutoriel ici : https://openclassrooms.com/fr/courses/825502-analysez-des-donnees-avec-excel/822888-premiers-pas-en-vba

      Ensuite tu devras utiliser des userform et ses différents objets tu peux trouver de l'aide ici :

      https://silkyroad.developpez.com/VBA/UserForm/ et https://silkyroad.developpez.com/VBA/ControlesUserForm/

      Par exemple si tu as deux formulaire : "Question1" et "Question2" et que tu veux passez du 1er au 2e il te faut ce genre de code dans un Bouton :

      La question peux être répondu par oui ou non avec une case à cocher

      Private Sub BTN_Clik
      'Code pour récupéré le résultat 
      If Case_a_Cocher_Oui.Value = True Then 'Si "oui" Cocher
      Sheets("Réponses").Cells(2, 2) = "Oui" 'écrire "Oui" dans la feuille "Réponses" dans la cellule B2
      Elseif Case_a_Cocher_Non.Value = True Then ' Si "non" Cocher
      Sheets("Réponses").Cells(2, 2) = "Non"  'écrire "Non" dans la feuille "Réponses" dans la cellule B2
      Else ' Si aucune des deux cocher
      Msgbox "Vous n'avez pas répondu." 'Message qui averti qu'ils n'ont pas répondu
      Exit Sub 'Sortir de la procédure pour ne pas passer à la question 2
      End If
      Question2.Show 'Affiche la question 2
      Unload Me 'Quitter la question 1
      End Sub


      La encore c'est incomplet car si la personne répond oui et non alors la réponse sera oui.

      Mais si vous voulez je veux volontier vous coacher pour vos débuts, si vous êtes motiver.
      0
    3. ELADAOUI Messages postés 14 Statut Membre
       
      merci pour votre réponse, je suis actuellement en train de lire le tutoriel sur VBA et je trouve ça très intéressant. Pour votre offre, j'aimerai, en effet, votre aide pour mes débuts sur VBA. Merci beaucoup
      0
    4. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      SUper. Si vous avez des question ou des doutes n'hésitez pas a poser une question dans la section "Programmation : VBA/VB"

      Il y a plien de gens pour vous aider ou vous donner des conseils.
      0
    5. ELADAOUI Messages postés 14 Statut Membre
       
      Ok merci.
      Par contre, je bloque sur un chapitre du tutoriel que vous m'avez envoyé, concernant les variables implicites et explicites et leur syntaxe. Pouvez-vous me l'expliquer ?
      Merci d'avance.
      0
  2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Un petit exemple de macro

    Les questions et réponses et autres éléments nécessaires sont dans une feuille masquée Questions (Clic droit sur l'onglet de Feuil 2 et Afficher pour la démasquer)
    On peut rajouter autant de questions que l'on veut la macro s'adapte

    https://www.cjoint.com/?0GbqQBLJHzD

    Cdlmnt
    0
    1. ELADAOUI Messages postés 14 Statut Membre
       
      Bonjour, ton exemple est franchement excellent, je te remercie.
      Par contre peux-tu m'expliquer étape par étape la création de ta macro ?
      Et comment modifier l'image ?
      Merci d'avance
      0
    2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      1) macro principale lancée par le bouton lancer le questionnaire :
      Private Sub CommandButton1_Click()
      'rend le bouton pour lancer le jeu invisible
      CommandButton1.Visible = False
      ' RAZ du total
      total = 0
      'Boucle de 1 à la valeur en A1 (le plus fort n°)
      For n = 1 To Sheets("questions").Range("A1")
      'affecte X à la variable R
      'la variable R est modifié lorsqu'on clic sur un bouton d'option dans l'Userform QCM (voir macros jointes à QCM)
      'Elle prend alors les valeurs soit D, F ou H soit les colonnes de Questions où il y a les points
      r = "X"
      With QCM
      'Remise à faux (non coché des 3 boutons de l'UF)
      .OptionButton1.Value = False
      .OptionButton2.Value = False
      .OptionButton3.Value = False
      'Modification du n° question dans l'UF
      .Label1.Caption = "Question " & n
      'Modification texte question dans UF (lecture de la cellule Bn dans Questions)
      .question = Sheets("Questions").Range("B" & n + 1)
      'modification des 3 propositions de réponses (lecture dans Questions)
      .p1 = Sheets("Questions").Range("C" & n + 1)
      .p2 = Sheets("Questions").Range("E" & n + 1)
      .p3 = Sheets("Questions").Range("G" & n + 1)
      'affichage de l'UF QCM (et rien ne se passe tant que pas Valider la réponse ; voir macros liées à QCM)
      .Show
      End With
      ' une fois réponse validé passage à question suivante
      Next
      'Une fois toutes les questions posées:
      'lecture du max de points possible calculé en M2 de Questions
      maxi = Sheets("questions").Range("M2")
      'calcul du % de bonnes réponses
      pourcent = total / maxi
      'lecture du % tranche haute (=>1er commentaire)en J2et du % tranche basse en J4
      pmax = Sheets("Questions").Range("J2")
      pmin = Sheets("Questions").Range("J4")
      'lecture des 3 commentaires possibles en K2, K3 et K4
      c1 = Sheets("Questions").Range("k2")
      c2 = Sheets("Questions").Range("k3")
      c3 = Sheets("Questions").Range("k4")
      'choix du commentaire et du n° de la forme à afficher en fonction du %
      If pourcent >= pmax Then commentaire = c1: k = 1 Else If pourcent <= 0.4 Then commentaire = c3: k = 3 Else commentaire = c2: k = 2
      ' Masque l'UF QCM
      QCM.Hide
      ' Rend visible la forme (Sourire 1, 2 ou 3)
      Shapes("Sourire " & k).Visible = True
      With result
      ' affichage des poinst dans l'UF result
      .points = total & "/" & maxi
      ' affichage du commentaire dans l'UF result
      .com = commentaire
      'affichage de l'UF result
      .Show

      End With
      End Sub

      2) les variables utilisées dans plusieurs macro ont été déclarées dans le Module 1
      Public n As Integer
      Public r As String
      Public total As Integer
      Public k As Integer

      3) macro associée à la feuille2 pour les affichages
      Private Sub Worksheet_Activate()
      ' a l'activation de la feuille :
      ' rend bouton pour lancer le jeu visible
      CommandButton1.Visible = True
      ' rend les 3 formes invisibles
      Shapes("Sourire 1").Visible = False
      Shapes("Sourire 2").Visible = False
      Shapes("Sourire 3").Visible = False
      End Sub

      4) macros associées à luserform QCM :

      Private Sub CommandButton1_Click()
      ' au clic sur Valider recupere les points en fonction de la réponse dans la bonne colonne (variable r) et dans la ligne correspondant au n° de question +1 (n+1)
      pts = Sheets("Questions").Range(r & n + 1)
      ' ajout des points au total
      total = total + pts
      QCM.Hide
      End Sub

      ' au clic sur un des boutons d'option, attribue une lettre à la variable r (lettre de la colonne : voir macro principale)
      Private Sub OptionButton1_Click()
      r = "D"
      End Sub

      Private Sub OptionButton2_Click()
      r = "F"
      End Sub

      Private Sub OptionButton3_Click()
      r = "H"
      End Sub


      Enfin les 3 images dans la feuille sont simplement 3 formes placées dans la feuille et nommées Sourire 1, Sourire 2 et Sourire 3 et qui sont masquées quand on sélectionne la feuille (voir macro du 3)) En fonction des résultats la macro principale rend visible l'une des 3 formes
      Tu peux remplacer ces formes par des images, (Excel va les nommer Image 1, Image 2 etc dans la zone Nom à gauche de la barre de formule) il te suffira dans les macros de remplacer Sourire par Image

      Cdlmnt
      0