RoseMartin
XLDnaute Nouveau
Bonjour,
Je souhaiterais réaliser un questionnaire sur VBA. Cependant, je rencontre quelques difficultés Voilà ou j'en suis:
Le programme questionne l'utilisateur en tirant au hasard une question et en vérifiant la réponse donnée par l'utilisateur avec celle attendue. Si la réponse donnée est la bonne, alors le programme positionne en colonne A un booléen VRAI. Ainsi, la prochaine question posée ne sera pas l'une des questions correctement répondues précédemment.
Voilà: http://cjoint.com/?0EyvVJycEYe
Le support est sur la feuille quizz.
Et voilà les questions ou j'ai du mal:
Rédiger la signature de chaque sous-fonction et sous-procédure.
Remplir le corps de chaque sous-fonction et sous-procédure avec une instruction par défaut.
Déclarer les constantes COLONNE_INDICATEUR_FAIT, COLONNE_QUESTION et COLONNE_REPONSE, ainsi que la variable globale ligneMax en tête de module en spécifiant leur type et éventuellement une valeur compatible avec l'énoncé. Préciser de plus pourquoi la variable ligneMax n'est pas déclarée en constante. (fait mais je ne suis pas sure)
Remplacer le corps de chaque sous-fonction par son implémentation, en supposant que le numéro de ligne tiré par le programme est la ligne numéro 1.
Pour rappel, l'accès à la cellule d'une feuille de calcul peut s'effectuer via l'objet Cells(i, j) pour accéder la cellule de la i-ème ligne et j-ième colonne de la feuille. Utiliser autant que possible les constantes déclarées en tête de module, pour améliorer la lisibilité du programme.
Implémenter la fonction trouverNumeroProchaineQuestion.
Le programme va effectuer le tirage d'un nombre compris entre 1 et le nombre de questions renseignées dans la feuille de calcul. Puis, il va renvoyer le numéro de la première ligne trouvée pour laquelle la valeur booléenne n'est pas égale à VRAI ; c'est-à-dire pour laquelle le joueur n'a pas encore donné la bonne réponse.
Attention, à gérer correctement le numéro de la ligne de la dernière question.
Ajouter un compteur indiquant à l'utilisateur, en fin de partie, combien de fois il a joué et trouvé de bonnes réponses.
Voici la ou j'en suis:
' Macro principale
Public Sub quizz()
Dim numeroLigne As Integer
Dim actionRejouer As Integer
Dim reponse As String
Dim COLONNE_INDICATEUR_FAIT As Integer
Dim COLONNE_QUESTION As Integer
Dim COLONNE_REPONSE As Integer
' Instruction 2 : Détection de la dernière ligne utilisée pour une question
ligneMax = Cells(1, COLONNE_QUESTION).End(xlDown).Row
' Instruction 3 : Que fait la ligne suivante ?
Range(Cells(1, COLONNE_INDICATEUR_FAIT), Cells(ligneMax, COLONNE_INDICATEUR_FAIT)).Clear
' Initialisation des tirages.
Randomize
' Algorithme
actionRejouer = vbYes
numeroLigne = trouverNumeroProchaineQuestion()
While numeroLigne <> -1 And actionRejouer = vbYes
reponse = poserQuestion(numeroLigne)
If estBonneReponse(numeroLigne, reponse) Then
compterBonneReponse (numeroLigne)
Else
MsgBox ("Dommage ! " & vbCr & "La bonne réponse était : " & recupererReponse(numeroLigne))
End If
actionRejouer = MsgBox("Voulez-vous rejouer ?", vbYesNo)
numeroLigne = trouverNumeroProchaineQuestion()
Wend
End Sub
Je suis surement très loin du résultat..
Merci d'avance
Je souhaiterais réaliser un questionnaire sur VBA. Cependant, je rencontre quelques difficultés Voilà ou j'en suis:
Le programme questionne l'utilisateur en tirant au hasard une question et en vérifiant la réponse donnée par l'utilisateur avec celle attendue. Si la réponse donnée est la bonne, alors le programme positionne en colonne A un booléen VRAI. Ainsi, la prochaine question posée ne sera pas l'une des questions correctement répondues précédemment.
Voilà: http://cjoint.com/?0EyvVJycEYe
Le support est sur la feuille quizz.
Et voilà les questions ou j'ai du mal:
Rédiger la signature de chaque sous-fonction et sous-procédure.
Remplir le corps de chaque sous-fonction et sous-procédure avec une instruction par défaut.
Déclarer les constantes COLONNE_INDICATEUR_FAIT, COLONNE_QUESTION et COLONNE_REPONSE, ainsi que la variable globale ligneMax en tête de module en spécifiant leur type et éventuellement une valeur compatible avec l'énoncé. Préciser de plus pourquoi la variable ligneMax n'est pas déclarée en constante. (fait mais je ne suis pas sure)
Remplacer le corps de chaque sous-fonction par son implémentation, en supposant que le numéro de ligne tiré par le programme est la ligne numéro 1.
Pour rappel, l'accès à la cellule d'une feuille de calcul peut s'effectuer via l'objet Cells(i, j) pour accéder la cellule de la i-ème ligne et j-ième colonne de la feuille. Utiliser autant que possible les constantes déclarées en tête de module, pour améliorer la lisibilité du programme.
Implémenter la fonction trouverNumeroProchaineQuestion.
Le programme va effectuer le tirage d'un nombre compris entre 1 et le nombre de questions renseignées dans la feuille de calcul. Puis, il va renvoyer le numéro de la première ligne trouvée pour laquelle la valeur booléenne n'est pas égale à VRAI ; c'est-à-dire pour laquelle le joueur n'a pas encore donné la bonne réponse.
Attention, à gérer correctement le numéro de la ligne de la dernière question.
Ajouter un compteur indiquant à l'utilisateur, en fin de partie, combien de fois il a joué et trouvé de bonnes réponses.
Voici la ou j'en suis:
' Macro principale
Public Sub quizz()
Dim numeroLigne As Integer
Dim actionRejouer As Integer
Dim reponse As String
Dim COLONNE_INDICATEUR_FAIT As Integer
Dim COLONNE_QUESTION As Integer
Dim COLONNE_REPONSE As Integer
' Instruction 2 : Détection de la dernière ligne utilisée pour une question
ligneMax = Cells(1, COLONNE_QUESTION).End(xlDown).Row
' Instruction 3 : Que fait la ligne suivante ?
Range(Cells(1, COLONNE_INDICATEUR_FAIT), Cells(ligneMax, COLONNE_INDICATEUR_FAIT)).Clear
' Initialisation des tirages.
Randomize
' Algorithme
actionRejouer = vbYes
numeroLigne = trouverNumeroProchaineQuestion()
While numeroLigne <> -1 And actionRejouer = vbYes
reponse = poserQuestion(numeroLigne)
If estBonneReponse(numeroLigne, reponse) Then
compterBonneReponse (numeroLigne)
Else
MsgBox ("Dommage ! " & vbCr & "La bonne réponse était : " & recupererReponse(numeroLigne))
End If
actionRejouer = MsgBox("Voulez-vous rejouer ?", vbYesNo)
numeroLigne = trouverNumeroProchaineQuestion()
Wend
End Sub
Je suis surement très loin du résultat..
Merci d'avance
Dernière édition: