TD4 – Entrée/Sortie et Coloriage

Transcription

TD4 – Entrée/Sortie et Coloriage
Licence de math-éco - semestre 6
Université Louis Pasteur
Informatique
2008/09
TD4 – Entrée/Sortie et Coloriage
1
Gestion des erreurs
L’entrée d’informations par l’utilisateur dans VBA peut se faire de différentes manières : on peut, par
exemple, utiliser InputBox ou Application.InputBox. La différence principale entre ces deux fonctions
est que la fonction Application.InputBox est capable d’effectuer elle-même la vérification et conversion
du texte saisi en un type particulier, alors que InputBox renvoie uniquement la chaı̂ne de caractère saisie.
On se propose dans cette première partie de réaliser l’implémentation d’une fonction MyInputBox
utilisant InputBox et effectuant une vérification du type passé en paramètre. Pour cela, on va se baser
sur les fonctions de conversion de type CType définies en VBA :
Nom de le fonction
CBool(expression)
CInt(expression)
CDbl(expression)
CLng(expression)
CStr(expression)
...
Utilité
Convertit expression en booléen
Convertit expression en entier
Convertit expression en réel
Convertit expression en entier long
Convertit expression en chaı̂ne de caractères
...
Cependant ces fonctions génèrent une erreur, qui va interrompre l’exécution du programme VBA, si
l’expression passée en paramètre ne correspond pas au type visé.
Exemple : CDble( ”chaine” ) ou CDble( ”12,,45” ) génèreront des erreurs, qui vont stopper l’exécution.
L’objectif ici est que MyInputBox soit capable de lire un booléen, une chaı̂ne de caractères ou un
entier de manière robuste : on souhaite donc parer les éventuelles erreurs qui pourraient survenir lors de
la conversion.
1- Écrire trois fonctions MyIBString, MyIBBool, MyIBInt permettant respectivement la saisie d’une
chaı̂ne, d’un booléen et d’un entier. Les paramètres de la fonctions seront le texte de saisie et le titre de
l’InputBox. La saisie sera proposée à l’utilisateur tant que celui-ci n’a pas entré le bon format.
2- Écrire la fonction MyInputBox permettant indifféremment la saisie d’une chaı̂ne de caractères, d’un
booléen ou d’un entier. Cette fonction devra permettre de choisir le type désiré lors de son appel et
devra retourner une valeur du type correspondant. Réfléchissez bien à la manière dont les types sont
gérés, notamment au niveau du retour de la fonction.
3- Ré-écrivez la fonction MyInputBox en gérant le fait que l’utilisateur puisse annuler la saisie (l’annulation
de la saisie dans une InputBox provoque le retour d’une chaı̂ne vide ””). Quelles sont les conséquences
au niveau du prototype de la fonction et de sa valeur de retour ?
2
Dessins
On rappelle que l’on peut modifier la couleur de la cellule i, j de la feuille courante en utilisant l’instruction : Cells(i,j).Interior.Color = RGB(255,0,0)
On peut effacer la couleur de toules les cellules de la feuille courante en utilisant l’instruction :
Cells.Interior.Pattern = xlNone
Enfin, la procédure suivante permet d’effacer les couleurs de la feuille courante et de rendre ses cellules
carrées (les instructions nécessaires ont été trouvées en enregistrant une macro) :
1
Sub InitExoTd4()
Cells.Interior.Pattern = xlNone
Cells.ColumnWidth = 3
Cells.RowHeight = 19.5
End Sub
1- Spécifiez et écrivez une macro Excel pour colorer en bleu le rectangle de cellules dont la cellule en
haut à gauche est située à la 3ème ligne et 5ème colonne et la cellule en bas à droite à la 15ème ligne et
12ème colonne.
Écrivez une macro avec des entrées/sorties qui permette de colorier un rectangle de cellules comprises
entre deux bornes (extrémité en haut à gauche, et extrémité en haut et à droite) demandées à l’utilsateur. Après une version simple et non robuste, faites une version où les entrées sont contrôlées (la
cellule en haut à gauche doit avoir un numéro de ligne inférieure à la cellule en bas à droite, par exemple).
2- Même question avec un losange vertical défini par son extrémité supérieure et la longueur du coté
(attention, pour contrôler les entrées/sorties, il faudra faire attention que le losange ne ”sorte” pas de la
feuille).
3
Damier
Cet exercice est tiré du livre de A. Brygo et al. ”Programmation et algorithmique en VBA pour Excel”.
On y propose d’écrire plusieurs implantations de la procédure colorier Damier qui colorie en noir et
blanc un damier de n cases de coté.
Question 1 - Dans un premier temps, écrire une procédure colorierDamier8sur8 qui étant donnés
deux entiers x0 et y0 , colorie en noir et blanc un damier de 8 × 8 cases dont la première case
(i.e. en haut à gauche) est la cellule de coordonnées (x0 , y0 ). On appliquera la règle de coloriage suivante : la première case est noire et la couleur d’une case (i, j) est calculée en fonction de la parité de i+j.
Question 2 - En utilisant le même algorithme, qui calcule la couleur en fonction de la parité de i + j,
écrire une procédure colorierDamier qui colorie en noir et blanc un damier de n × n cases et dont la
première case est la cellule de coordonnées x0 et y0 . Tester méticuleusement cette procédure.
Question 3 - Écrire une autre implantation de la procédure précédente, en écrivant d’abord la définition
d’une fonction qui, étant donnée un couleur (noir ou blanc), renvoie l’autre couleur ; puis la définition
d’une procédure qui colorie L cellules de la ligne i à partir de la colonne j en commençant par la couleur
premCouleur puis en alternant les deux couleurs.
Question 4 - On veut réaliser un algorithme de remplissage du damier selon le principe ligne 1, colonne
1, puis ligne 2, colonne 2, ... puis ligne k, colonne k, etc. ”ligne k, colonne k” signifiant que l’on remplit
les k premières cellules de la ligne k et les k premières cellules de la colonne k. Ecrire une procédure de
remplissage du damier suivant cet algorithme.
2