C8 : Enregistrement de macros et limites Dorat Rémi 1. Enregistrement des macros p 2 2.Protection de l'exécution des macros p 7 3.Organisation des interfaces : introduire des éléments réactifs p 7 4. Pourquoi les macros sont insuffisantes? p 10 1
1. Enregistrement des macros Le principe des macros Chacune des opérations que peut réaliser un utilisateur dans l'interface Excel peut s'écrire sous forme de code VBA. Enregistrer des macros consiste à lancer un enregistrement, à faire une série d'opérations, à stopper l'enregistrement. La machine enregistre les opérations qui on été effectuées par l'utilisateur sous la forme d'une macro, soit sous la forme de ligne de code. Après l'enregistrement, on peut retrouver ce code et réutiliser la macro, c'est à dire demander au logiciel l'exécution des mêmes opérations que celles réalisées par l'utilisateur lors de l'enregistrement. Le menu pour les macros Les macros enregistrées peuvent être trouvées sous l'onglet "Affichage", via le menu Macros : Un premier exemple En lançant l'enregistrement de macro, on obtient l'interface suivante : 2
Il s'agit d'abord de renseigner le nom de la macro. Ce nom permettra par la suite de retrouver la macro pour la réutiliser. Il est également possible de lui associer un raccourci clavier et une description. On enregistre une macro en faisant les opérations suivantes : On lance l'enregistrement et on complète l'interface : Selection de la cellule A1 Coloration en jaune de la cellule 3
Saisie de 100 dans la cellule A1 On met fin à l'enregistrement Accès à la macro Plusieurs possibilités existent à partir de là pour exécuter la macro : utiliser le raccourci clavier spécifié pour la macro, aller dans le menu Macros, demander l'affichage des macros puis selectionner une macro et l'exécuter. Utiliser le raccourci ALT-F8 pour accéder le menu sur les macros. Appuyer sur ALT-F11 pour aller sur l'interface VBE : Au sein de l'interface VBA, on peut ensuite explorer les modules jusqu'à trouver le code qui a été produit pour la macro. On trouvera le code obtenu à partir des opérations décrites sous cette forme : 4
Pour exécuter le code de la macros à partir de l'interface VBE, on place le curseur dans la macro et on utilise la touche F5. Notes sur l'enregistrement des macros 1. Le nom de la macro: il doit être en 1 seul mot, sans espaces, trait d'union, underscore,... 2. Le raccourci clavier. Ceci permet de démarrer la macro par une combinaison de touche. N'utilisez pas de raccourcis existants comme CTRL + G (gras), CTRL + I (italique), CTRL + U (souligné). Les raccourcis peuvent être constitués des touches <CTRL>, <ALT>, suivi ou non de <Shift>, suivi d'une lettre ou d'un chiffre. 3. Il est possible d'enregistrer les macros dans le classeur courant ou dans un nouveau classeur ou classeur de macros personnelles. Pour l'instant, on se contente de macros enregistrées dans le classeur courant 5
L'option de référence relative Lors de l'enregistrement des macros, il est possible de sélectionner une option de référence relative (l'option est disponible depuis la version 2003 d'excel). Par défaut, on est dans le mode d'enregistrement absolu. On considère un exemple pour tester la différence entre les deux modes. Soit l'enregistrement suivant : On sélectionne la cellule A1 On lance l'enregistrement On saisit 7 dans A1 On saisit 8 dans A2 On saisit =SOMME(A1:A2) dans A3. On arrête l'enregistrement En cliquant sur la cellule C5 et en exécutant la macro que l'on vient d'enregistrer, on constate ceci : 7 est introduit dans B5, 8 dans A2 et dans A3, =SOMME(A1:A2). En mode absolu, les cellules sont référencées de manière absolu : si lors d'un enregistrement je suis en A1 et que je clique A2, le logiciel enregistre que je sélectionne A2 et non pas que je sélectionne la cellule qui est une ligne plus bas. En vidant la feuille puis en exécutant la macro, les cases A1, A2 et A3 se trouvent remplies de la même manière. On peut implémenter les mêmes opérations selon le mode relatif. Dans ce cas, la machine enregistre que dans la cellule courante on introduit 7, dans la cellule de 1 ligne en dessous, on saisit 8, dans la cellule en dessous on introduit la formule qui donne la somme des deux cellules précédentes. Si on exécute cette macro lorsqu'une autre cellule que A1 est sélectionnée, les cases remplies le seront à partir de la case sélectionnée. Bien sûr l'enregistrement relatif peut poser des problèmes : par exemple, si on enregistre une série d'opérations comprenant notamment d'enregistrer une formule deux cellules au dessus de la cellule courante et que l'on tente ensuite d'exécuter cette macro à partir d'une cellule telle qu'il n'existe pas deux cellules au dessus : il y aura une erreur. 6
2.Protection de l'exécution des macros Pour chaque classeur, à un moment donné du temps, il est défini un niveau de sécurité par rapport à l'exécution des macros. Lorsque le niveau de sécurité est élevé, les macros ne s'exécutent pas. En effet, l'exécution des macros peut provoquer des dommages important sur une machine. Pour lever la protection et rendre possible l'exécution des macros, on va dans le menu macro -> niveau de sécurité. On choisit le niveau de sécurité faible. On ferme ensuite le classeur. Lorsqu'on l'ouvrira de nouveau, les macros seront utilisables. 3.Organisation des interfaces : introduire des éléments réactifs [Dans les versions antérieures à 2007] On commence par introduire le menu des contenus réactifs : Affichage -> Barre d'outils -> Boîte à outils Contrôles. Cette barre d'outil est de cette forme : On peut ensuite sélectionner la création de bouton. On dessine un bouton. En faisant un clic droit dessus et en choisissant le menu propriétés : 7
On peut ici changer le texte qui apparaît sur le bouton (caption), de même qu'un certain nombre de propriétés. Il est possible d'affecter une macro au bouton, ie, une macro qui s'exécutera lorsque le bouton sera cliqué : on fait un clic droit sur le bouton et on choisit "visualiser le code". On arrive à cette interface : 8
Dans ce cas, si la macro que l'on veut associer au bouton a pour nom macro1, on met : On peut fermer l'interface VBE. Pour finir, il faut sortir du mode création : 9
Une fois sorti du mode de création, on peut cliquer le bouton. La macro1 s'exécutera. Pour éditer de nouveau les propriétés du bouton : on reclique le bouton du mode création. Pour la version 2007, la manipulation est plus simple. Il est possible d'insérer différentes formes. Pour chacunes de ces formes, le clic droit permet de gérer les propriétés (macro affectée, nom, forme etc..) et une fois qu'une macro est affectée, le clic gauche exécute la macro affectée. 4. Pourquoi les macros sont insuffisantes? De la nécessité de passer à un langage de programmation Certaines fonctions n'existent pas en Excel, et les macros ne permettent pas de résoudre le problème : cf autocovariance par exemple. Capacité à faire des opérations massives : par exemple, récupérer les données d'une centaine de classeurs. Place limitée : le nombre de cellules reste limité en Excel, or certaines simulations massives demanderaient plus de données : pour certains calculs, des millions de tirages aléatoires vont être nécessaires. Dans certains problèmes de simulation, on fait évoluer des variables de manière rétroactives : ie A évolue => B 10
évolue => A évolue etc... En Excel, il n'est pas possible de spécifier des cellules qui se référencent circulairement (erreur de référence circulaire). Pour simuler il faut alors utiliser différentes cases pour les différentes valeurs de A au cours du temps. Lourdeur de l'implémentation. Par exemple, dans le cas de l'implémentation IS-LM proposée, les fonctions sont redéfinies sur différentes cases. Certaines opérations qui sont très simples et légères dans le cas d'un langage de programmation sont complexes et lourdres en mémoires si on veut les faire en Excel. Cf la Complexité pour déterminer l'équilibre dans le TD IS-LM. Evolutivité du code : si on change le nombre de cases d'une série sur laquelle on travaille, il faut chnager l'ensemble des déclarations/utilisations de plages. Le code pourrait être plus synthétique que celui généré à l'enregistrement. Certaines opérations sont impossibles. Comment faire pour concaténer une plage de chaîne de caractères en une chaine unique? Tester la manipulation suivante : Je commence à copier le contenu de la cellule A1 (qui conient la référence d'un classeur) Je fais CTRL + 'O' Je colle dans l'espace de récupération de fichiers. J'exécute en récupérant le contenu de la cellule A1 Que se passe t'il si on réexecuter la macro après avoir changer le contenu de la cellule A1. On pourrait reprendre chaque TD, chaque exercice en donnant pour chacun une résolution plus simple et plus légère en utilisant le code. 11