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.
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 ?
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.
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
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.
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
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
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
*****
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)
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.
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
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
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
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.
Retenez juste :
********
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.
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 :
Tu comprend mieux ?
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
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?