Re : realisations de macros
Exercice 1: Manipulation de la collection Sheets et de la feuille active
Dans le document excel support de TD 9 :
1. Ecrire une macro permettant de créer trois nouvelles feuilles de calcul dans votre document
A noter: observez la position des feuilles créées
2. Ecrire une macro permettant de renommer les feuilles nouvellement créées en essai1, essai2,essai3.
3. Ecrire une macro permettant d'activer une feuille et de sélectionner sa première ligne, en demandant le numéro de la feuille à l'utilisateur au moyen d'une inputBox
Exercice 2: Lecture et écriture de cellules de la feuille active avec une macro, en utilisant la propriété Range
A partir de la feuille « notes » du support de TD 9 :
1. Ecrire une macro permettant de mettre la plage de cellule sélectionnée en gras, 12 points avec l'intérieur jaune (code couleur 6)
2. Appliquez cette macro à la ligne de titre de la feuille notes du document excel du TD
3. Reprendre (ou écrire) une fonction permettant de calculer la mention associée à une note.
4. Ecrire une macro permettant d'écrire la mention de Dupond dans la cellule C2
5. Ecrire une macro permettant cette fois d'écrire dans les cellules de la colonne C une formule de calcul de la mention (en utilisant la fonction mention)
Pour réaliser ces deux questions, vous pourrez utiliser la propriété value d'une cellule pour le premier cas, et la propriété Formula d'une cellule dans le second cas.
Vous consulterez le cours pour en savoir plus sur les objets et la manière de les manipuler.
Exercice 3 : Manipulation de la collection des cellules de la feuille cours de bourse
Cet exercice utilise la feuille « cours de bourse » du support de TD 9.
1. Soit 10 cours de bourse mis dans les cellules C2:C11. Ecrire un programme qui attribue la valeur "Achat" ou "Non Acheté" aux cellules de la plage D1😀11 selon la valeur de chaque cours (achat pour les actions qui coutent moins de 12 euros et non achat pour celles qui coutent plus de 12 euros).
2. Soit 10 taux de variation mis dans les cellules B2:B11. Ecrire un programme qui calcule la moyenne de ces taux et qui calcule le nombre de taux >1,4. Les résultats doivent être mis au-dessous des taux au sein de la même colonne.
Méthode : l'utilisateur sélectionne la plage des cellules étudiées avant de lancer l'exécution du programme. La plage des cellules est alors définie par Set plage = Selection.
plage.Count donne le nombre de cellules de la plage sélectionnée.
Exercice 4 : Manipulation de la collection des cellules de la feuille PIB
Cet exercice utilise la feuille « PIB » du support de TD 9.
1. Ecrire une fonction tendance_eco, qui à partir de deux valeurs de PIB pour une année (par exp. 2007) et une année suivante (par ex 2009) renvoie la chaîne de caractères « décroissante » si la différence entre le PIB 2009 et le PIB 2007 est négative, « presque nulle » si la croissance est de moins de 1%, « croissante » si la croissance est entre 1% et 3%, « fortement croissante » au delà.
Pour évaluer le pourcentage de croissance, il suffit de diviser la différence PIB2009-PIB2007 par le PIB2007.
2. Ecrire une macro qui calcule la tendance pour chaque pays et l'écrit dans les cellules de la colonne E, en utilisant la collection cells de la feuille active.
3. Pourrait-on réaliser ceci sans utiliser la macro de la question 2?
Exercice 5 : Quizz
Cet exercice utilise la feuille « Quizz » du support de TD 9.
Les sous-fonctions et sous-procédures permettent de cacher la complexité d'un programme et d'en améliorer la lisibilité. Il vous est ici proposé de rédiger des fonctions pour compléter un programme prédéfini.
L'objet de cet exercice est la création d'un jeu de type Questionnaire.
Les informations sont organisées de la façon suivante :
Sur chaque ligne, depuis la première de la feuille de calcul courante, figure une question (en colonne B) et sa réponse (en colonne C). L'objet du jeu est le suivant : 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.
1. La macro principale a été rédigée. Analyser-la au regard du fonctionnement du jeu : quel est le sens de la méthode End ? que font les instructions indiquées 2 et 3 ?
' Macro principale
Public Sub quizz()
Dim numeroLigne As Integer
Dim actionRejouer As Integer
Dim reponse As String
' 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
2. Identifier les sous-fonctions et sous-procédures auxquelles cette macro fait appel. Rédiger la signature de chaque sous-fonction et sous-procédure. Faites les précéder d'un commentaire indiquant quelles en sont les entrées et la sortie.
3. Remplir le corps de chaque sous-fonction et sous-procédure avec une instruction par défaut.
Vérifier en exécution en pas-à-pas que le fonctionnement de ce programme.
4. 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.
5. 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. (Le corps de la fonction trouverNumeroProchaineQuestion fera l'objet de la question suivante).
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.
6. 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.
7. Ajouter un compteur indiquant à l'utilisateur, en fin de partie, combien de fois il a joué et trouvé de bonnes réponses.