1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
| Dim nb_questions As Integer
Static Sub generer_questions()
Dim plage_questions As Range
Dim tirage As Integer, questions_possibles As Integer, nb_reponses As Integer, fin_du_questionnaire As Integer, bonnes_reponses As Integer
Dim question As String
Dim Cbx As OLEObject
Dim L As Integer, T As Integer
'raz questionnaire precedent
Sheets("feuil2").Range("A:A").ClearContents
Sheets("feuil2").Range("D:D").ClearContents
Sheets("feuil2").CheckBoxes.Delete
'Nombre de questions du questionnaire
nb_questions = Sheets("feuil2").Range("H1").Value
'Nombre de questions possibles
questions_possibles = Sheets("feuil2").Range("H2").Value
'Messages d'erreur si le nombre de questions est trop important
If nb_questions > 99 Then
MsgBox "Le nombre de questions est supérieur au nombre total de questions disponibles"
ElseIf nb_questions > questions_possibles Then
MsgBox "Le nombre de questions doit être inférieur au nombre de questions possibles"
End If
'Etablissement de la plage des questions
Set plage_questions = Sheets("feuil2").Range("A1:A1000")
L = 110
T = 2 * Range("A1").Height
'Au début le questionnaire commence à la ligne 2
fin_du_questionnaire = 2
Randomize
'Boucle de généréation des questions aléatoires
For i = 0 To nb_questions - 1
'Tirage au sort d'un chiffre entre 1 et les questions possibles
Do
tirage = Int((questions_possibles * Rnd) + 1)
'Sélection de la question correspondant au tirage
question = WorksheetFunction.Index(Sheets("feuil1").Range("A2:A100"), tirage)
'Vérification que la question n'existe pas déjà
Loop Until Application.CountIf(plage_questions, question) = 0
'Affichage de la question
Cells(fin_du_questionnaire, 1) = question
nb_reponses = Sheets("feuil1").Cells(tirage + 1, 2)
'Génération des check boxes
For j = 1 To nb_reponses
Sheets("feuil2").CheckBoxes.Add(Left:=L, Top:=T, Width:=130, Height:=16).Select
Selection.Characters.Text = Sheets("feuil1").Cells(tirage + 1, j + 3)
Selection.Name = "Q" & tirage & "Rep" & j
T = T + Range("A1").Height
Next
'Pour la question suivante, il faut sauter un nombres de lignes correspondant au nombre de réponses
fin_du_questionnaire = fin_du_questionnaire + nb_reponses + 1
T = fin_du_questionnaire * Range("A1").Height
Next
End Sub
Sub bonnes_reponses_en_vert()
Dim BR As Integer
For i = 0 To 99
BR = Split(Sheets("feuil1").Cells(2 + i, 3), ",", -1)
nb_bonnes_reponses = UBound(BR)
For j = 0 To nb_bonnes_reponses
Sheets("feuil1").Cells(2 + i, BR(j) + 3).Interior.Color = RGB(0, 255, 0)
Next
Next
End Sub
Sub correction_du_questionnaire()
Dim intitule_question As String, nom_checkbox As String, numeros_reponses As String
Dim tout_juste As Boolean
Dim nb_de_points As Integer, ligne_questionnaire As Integer
Dim couleur_reponse As Long
'On fixe la ligne du questionnaire à 1
ligne_questionnaire = 1
'Le nombre de points est à 0
nb_de_points = 0
'On détermine le nombre de questions
nb_questions = Sheets("feuil2").Range("H1").Value
For i = 1 To nb_questions
'Détermination de la ligne de la prochaine question
ligne_questionnaire = Sheets("feuil2").Cells(ligne_questionnaire, 1).End(xlDown).Row
'Sélection de la question
intitule_question = Sheets("feuil2").Cells(ligne_questionnaire, 1).Value
'Recherche de cette question dans le tableau de la feuille 1
Set q = Sheets("feuil1").Range("A:A").Find(intitule_question)
'On en déduit le numéro de la question
numero_question = q.Row - 1
'Détermination du nombre de réponses
nb_reponses = Sheets("feuil1").Cells(numero_question + 1, 2)
'Affichage des bonnes réponses
numeros_reponses = Sheets("feuil1").Cells(numero_question + 1, 3).Value
Cells(ligne_questionnaire, 4) = "bonnes_reponses : " & numeros_reponses
'Mise en place du flag pour les réponses justes
tout_juste = False
'Boucle de vérification des réponses
For j = 1 To nb_reponses
nom_checkbox = "Q" & numero_question & "Rep" & j
couleur_reponse = Sheets("feuil1").Cells(numero_question + 1, j + 3).Interior.Color
Sheets("feuil2").Shapes(nom_checkbox).Select
If (Selection.Value = 1 And couleur_reponse = 65280) Or (Selection.Value = -4146 And couleur_reponse = 16777215) Then
tout_juste = True
Else:
tout_juste = False
Exit For
End If
Next
'Calcul des points
If tout_juste = True Then
nb_de_points = nb_de_points + 2
Else: nb_de_points = nb_de_points - 1
End If
Next
'Affichage des points
Range("H4").Value = nb_de_points
End Sub |
Partager