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