QCM avec macro [Fermé]

Signaler
Messages postés
13
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2014
-
Messages postés
13
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2014
-
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

Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
49
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
13
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2014

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.
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
49
Haha c'est beaucoup de blabal pour pas grand chose.

Retenez juste :

'Déclaration d'une variable
Dim Nom_variable as Type 'Type = (String, Integer, Long, Booléan, autres...


********
Si vous voulez plus de détails :

Explicit signifie qu'on précise le type de la variable. (Chaine de caractère, nombre entier)

Il est important de définir le type de la variable car cela évite des erreurs et permets de mieux comprendre l'origine d'autres erreurs.

Sub erreur ()
Dim X as String
X= 5
Msgbox X*100 'Cette ligne va crée une erreur car on essaye de multiplier une chaine de caractère. On ne peux que multiplier des Types "nombres" (Integer, Long, Double,etc).
End Sub


Donc en gros il faut a tout pris éviter de faire des variables implicite.
C'est un peu un outils du flemmard qui veux pas déclarer ses variables.

Pour moi la seul utilité c'est de l'utilisé pour un variable qui retourne une réponse d'une message box :

Sub Variables ()
'Avec variable Explicit
Dim R1 as integer ' R= Réponse
R1 = Msgbox ("Quel est la réponse ?", vbYesNo)
Select Case R1
Case vbyes
Msgbox "La réponse est Oui"
Case vbNo
Msgbox "La réponse est Non"
End Select

' Avec variable implicite 
R2 = Msgbox ("Quel est la réponse ?", vbYesNo) ' On économise une ligne
Select Case R2
Case vbyes
Msgbox "La réponse est Oui"
Case vbNo
Msgbox "La réponse est Non"
End Select

'Comment je fait personnellement :
Select Case Msgbox ("Quel est la réponse ?", vbYesNo)
Case vbyes
Msgbox "La réponse est Oui"
Case vbNo
Msgbox "La réponse est Non"
End Select

End Sub


Tu comprend mieux ?
Messages postés
13
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2014

aah d'accord, en gros tu a mis la variable =R1, car la réponse change en fonction que l'on choisit "oui" ou "non" c'est bien ça ?
Cependant, dans le module on ne peut pas laisser la variable avec [as type], mais un autre critère (String, Integer, Long, Booléan,...), que signifie ces critères, et quand les utiliser ?
Merci pour ta réponse
Messages postés
938
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2016
49
Une Msgbox renvoie une valeur réponse.

Msgbox ("Quel est la réponse ?", vbYesNo) 'vbYesNo signifie que la msgbox affiche un bouton "oui" et un bouton "non"


Quand tu appuies sur un bouton dans la message box elle retourne une valeur :

Si tu appuies sur "oui" elle retourne la constante "vbYes" qui est égale à 6
Si tu appuies sur "non" elle retourne la constante "vbNo" qui est égale à 7

(plus de détails : https://docs.microsoft.com/fr-fr/previous-versions/visualstudio/visual-studio-2008/139z2azd(v=vs.90)?redirectedfrom=MSDN

*****
Une variable dois toujours avoir un nom (ici : "R1" et "R2") et un type (ici : R1 = Integer [Nombre entier] et R2 = Variant (Une variable est de type Variant quand on la déclare de manière implicite)

(String, Integer, Long, Booléan,...) sont des types de variables.

String = Chaine de caractère // Exemple : "Hello World !"
Integer = Nombre entier // Exemple : 1 (comprises entre -32 768 et 32 767)
Long = Nombre // Exemple : 3.25 (comprises entre -2 147 483 648 et 2 147 483 647)
Boolean = Alternative (Vrai/Faux) // Exemple : True (Soit True soit False)
Byte = Nombre entier // 3 (comprise entre 0 et 255)

(Autres types variables il en existe beaucoup plus : https://www.excel-downloads.com/threads/vba-types-de-variables.81052/

Avant le choix du type était très important, surtout pour les variables avec des nombres. Comme la mémoire était limité il fallait évaluer quel valeur pourrait avoir la variable et prendre le type minium requis.

Un Byte prend moins de mémoire qu'un Long, car il y a moins de possibilité.

A l'heure actuelle, a moins que tu ne fasse une très grosse application, ou que tu travaille sur des ordinateurs fossils, il n'y a plus besoin d'être autant miutieux avec le type de variables.

*****

La c'est vraiment la base des variables car il y a plien de choses à savoir sur elle, mais tu apprendra petit à petit.

Tu peux aussi avoir des tableaux de variables, Tu peux crée tes propres types de variables, tu peux analysé les variables, etc.

//

Tu comprends mieux?
Messages postés
13
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2014

Beaucoup mieux, merci pour cette réponse rapide.
Messages postés
12936
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
25 février 2021
2 133
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
Messages postés
13
Date d'inscription
jeudi 5 juin 2014
Statut
Membre
Dernière intervention
3 juillet 2014

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
Messages postés
12936
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
25 février 2021
2 133
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