THE CALLAN PERIODIC TABLE OF INVESTMENT RETURNS ANNUAL RETURNS FOR SHARES (2000 2007) 1 Mallika Gillieron
Sommaire 1. Introduction... 2 1.1 Définition de Visual Basic... 2... 1.2 Objectif du projet... 2 2. Marche à suivre... 3 2.1 Création des données... 3 2.2 Découverte de Visual Basic... 4 2.3 Démarches...4 3. Macro... 4 5 3.1 Création d une macro...4-5 4. Projet VBA...6-10 4.1 Classement par ordre décroissant... 6 4.2 Coloration de l arrière plan d une cellule...7-8 4.3 Application de la macro pour tout le tableau...9-10 5. Conclusion... 10 1. Introduction 1.1. Définition de Visual Basic Visual Basic est un environnement de programmation de Microsoft dans lequel un programmeur emploie une interface utilisateur graphique pour choisir et modifier les sections présélectionnées du code écrites dans le langage de programmation de basic. Visual Basic Editor est destiné à automatiser des tâches dans des applications bureautiques telles qu Excel, Access ou Word. En fait, Visual Basic permet de créer des programmes manuellement qui sont visuels à l écran. Ces programmes sont associés à des codes spécifiques du langage Visual Basic, c est-à-dire une suite de commandes et de fonctions stockées dans un module de Visual Basic. Sources : http://www.labo-microsoft.com/def/12901/ http://www.dicodunet.com/annuaire/def-1265-visual-basic.htm http://translate.google.com/translate?hl=fr&sl=en&u=http://searchvb.techtarget.com/sdefinition/0,, sid8_gci213309,00.html&sa=x&oi=translate&resnum=6&ct=result&prev=/search%3fq%3dvb% 2Bd%25C3%25A9finition%26hl%3Dfr http://www.cathyastuce.com/excel/macros.php 1.2. Objectif du projet Dans le cadre de notre formation «Finance and Risk Management», nous avons comme projet d élaborer une macro sur le programme Excel à l aide de Visual Basic Editor. Notre but est d établir nous-mêmes un tableau «Callan Asset Periodic», c est-à-dire mettre en place un tableau avec des actions faisant parties du SMI (indice suisse) triées dans l ordre décroissant par rapport à leurs performances d une année à l autre et coloriées les cellules par type d actions. 2 Mallika Gillieron
2. Marche à suivre 2.1. Création des données Pour commencer, nous avons posé les données. Nous avons choisi six indices faisant parti du SMI (indice suisse) : Novartis,,, Crédit, Abb et. Nous avons commencé dès l année 2000 car c est à partir de cette date que toutes les actions sont en bourse. Pour le premier rendement (année 2000), nous avons calculé la performance de l action par rapport à son année de base, c est-à-dire si l action a fait ses débuts en bourse en 1998, son premier résultat sera celui de base pour le premier calcul. Puis, pour les années suivantes, nous nous sommes basées sur le résultat de l année précédente. Les performances sont en pourcentage. Le calcul est : (rendement t rendement 0) Rendement 0 1996 1997 1998 2000 2001 2002 2003 2004 2005 2006 2007 Novartis 1528 2255 2860 57.15 53.8 57.55 57.75 69.5 72.5 1316 2800 3600 351 306 317 325 399.75 434.5 2150 411 278 83.2 71.4 85.7 97.2 128.9 75.6 Crédit 120.5 300 322 72.45 32.45 45.65 49.3 69.75 86.2 1656 184 169.5 18.3 4.42 6.27 6.62 13.35 21.4 1220 1032 95.25 56 81.15 57.7 63.6 83.95 Il n y a pas de données pour l année 1999 car aucune action que nous avons choisie n est entrée en bourse cette année. 2000 2001 2002 200 2004 2005 2006 2007 26.83 % -98 % -5.86 % 6.97 % 0.35 % 20.35 % 4.32 % Novartis Novartis Novartis Novartis Novartis Novartis Novartis 147.58 % Novartis 212.77 % 19.12 % 248.96 % 28.57 % -32.36 % 7.33 % -90.25 % -70.07 % -77.5 % -12.82 % -14.18 % -55.21 % 3.59 % 20.03 % 40.68 % 2.52 % 13.42 % 8 % 23 % 32.61 % 41.48 % 8.69 % -41.35 % 23.58 % 11.11 % -7.88 % -89.2 % -75.85 % 41.86 % 5.58 % 101.66 % 60.3 % 100 % -15.41 % -90.77 % -41.21 % 44.91 % -28.9 % 10.23 % 32 % 3 Mallika Gillieron
2.2. Découverte de Visual Basic Comme première approche pour découvrir Visual Basic, nous nous sommes aidées du livre «Applications financières sous Excel en Visual Basic» de Fabrice RIVA, 2 ème édition. Nous avons débuté en faisant des essais en rapport aux exemples donnés par le livre. L option «aide» sur Excel nous a également dirigées pour faire une première approche de Visual Basic. Nous nous sommes également beaucoup aidées, des différents sites Internet sur Visual Basic. Nous avons trouvé de nombreuses aides sur les forums d Excel. 2.3. Démarches Notre macro concerne premièrement le classement par ordre décroissant des cellules, la coloration de l arrière plan des cellules selon le nom de ces dernières. Par exemple de colorier toutes les cellules concernant les actions Novartis en rouge. 3. Macros 3.1. Création d une macro Outils / Macro / Nouvelle macro Dans la zone «Nom de la macro», il faut nommer la macro en fonction de son utilité. Par exemple, si la macro sert à trier dans l ordre croissant des cellules automatiquement, on nommera la macro «Trier». Par contre, on ne peut pas mettre d espace dans le nom. Dans la liste déroulante «Enregistrer la macro», il faut afficher «Classeur personnel» ce qui permet de mettre la macro à disposition de tous les fichiers du disque dur. Concernant l option «Description», il faut bien indiquer la fonction de la macro et faire une description complète de celle-ci. Puis ok. 4 Mallika Gillieron
Exemple : Une barre d outils doit apparaître Pour enregistrer une macro, cliquer sur «Référence relative» A partir de maintenant, Excel va enregistrer toutes les actions et les transformer en langage Visual Basic. Pour arrêter l enregistrement, il faut sélectionner le carré («arrêter l enregistrement») La macro a été crée. Cet exemple démontre comment classer des cellules par ordre décroissant. Toutes les actions effectuées dans Excel, par exemple trier les cellules, sont directement traduites en langage Visual Basic. Source : http://www.cathyastuce.com/excel/macros.php 5 Mallika Gillieron
4. Projet VBA 4.1 Classement par ordre décroissant Nous avons débuté notre macro par le classement par ordre décroissant car cette fonction concerne toute la colonne. Puis par la suite, notre macro se concentre sur les cellules par la coloration de ces dernières. Nous avons utilisé l enregistreur de macro pour nous permettre d écrie ce code. Toutefois, nous avons du couper la cellule en plusieurs cellules distinctes, afin de séparer les chiffres, les espaces, le signe des pourcentages ainsi que les noms. Sélection de la colonne Copier / Coller sur une plage vide à l extérieur du tableau Données / Convertir / Délimité / Espace / Terminé Une fois chaque caractère séparé dans des colonnes différentes, nous avons volontairement placé les chiffres en premier lors de la saisie afin de simplifier le triage, nous avons trié les données par ordre décroissant. Puis, nous avons utilisé la formule «concaténer», dans le but de remettre toutes ces données dans la même cellule à l intérieur de notre tableau dans l ordre voulu. Nous avons placé en première position dans notre formule le nom de la cellule, un espace (qui doit être entre deux guillemets pour permettre l identification par Excel), la suite du nom si besoin (par exemple, crédit suisse), un espace, les chiffres, un espace, et le signe du pourcentage (%). =CONCATENER(M5;" ";N5;" ";K5;" ";L5) Puis nous avons copié cette nouvelle colonne, que nous avons collée à l aide d un collage spécial par valeurs dans la colonne correspondante à l intérieur du tableau. 6 Mallika Gillieron
4. 2 Coloration de l arrière-plan d une cellule Pour la coloration de l arrière plan d une cellule, nous avons utilisés la fonction If Then Else. La fonction If Then Else est une fonction de condition. On inscrit If = la condition, si la condition est vraie, les rapports suivants sont exécutés grâce au Then, si la condition est fausse, on exécute un rapport avec Else. Table des couleurs Afin de connaître les nombres correspondant aux couleurs, nous nous sommes aidés de ce tableau. Ci-dessous, la macro correspondant à la coloration des cellules de notre tableau Excel. Il n y avait pas encore de chiffres ni de pourcentage. 7 Mallika Gillieron
Puis, nous nous sommes rendues compte que lorsque nous ajoutions des chiffres (négatifs ainsi que positifs), des espaces ainsi que des pourcentages (%), notre code ne fonctionnait pas. Nous avons donc séparé l intérieur de notre cellule en plusieurs cellules distinctes, afin que la macro fasse une reconnaissance uniquement sur la cellule contenant le texte qui permet l identification ainsi que la coloration de la cellule. Cependant, nous avons du trouver une autre formule afin de colorier la cellule qui se situait à l intérieur de notre tableau et non la cellule correspondant à la cellule qui nous permettait l identification des différents noms. Lors de la séparation des termes situés dans la cellule, nous avons utilisé la plage (K5 : N10). La colonne sur laquelle nous avons effectués la fonction If Then Else est la K, car les noms des différentes actions se situent dans cette colonne. Une fois l identification des termes effectués, nous avons utilisé la fonction en gras ci-dessous pour que la macro colorie la colonne B située à l intérieur du tableau. If ActiveCell.Text = "Novartis" Then ActiveCell.Offset(0, -9).Range("A1").Select With Selection.Interior.ColorIndex = 3.Pattern = xlsolid End With ActiveCell.Offset(0, 9).Range("A1").Select ElseIf ActiveCell.Text = "" Then ActiveCell.Offset(0, -9).Range("A1").Select With Selection.Interior.ColorIndex = 4.Pattern = xlsolid End With ActiveCell.Offset(0, 9).Range("A1").Select Else End If Cette formule permet d effectuer l action demandée 9 colonnes avant la colonne permettant l identification du nom (cette colonne se situe à l intérieur du tableau). Donc si la cellule est égale à Novartis, il faut colorier la cellule en bleu dans le tableau Le If permet à la macro de reconnaître le texte demandé (Novartis,, ) et d y applique une condition, dans notre cas la coloration de la cellule. Source : http://www.admexcel.com/trucmacro.htm http://www.admexcel.com/trucmacro.htm http://gershwin.ens.fr/vdaniel/doc-locale//langages-program-scientific/fortran/manuel- F77/node49.html http://www.csidata.com/custserv/onlinehelp/vbsdocs/vbs587.htm 8 Mallika Gillieron
4. 3 Application de la macro pour tout le tableau Notre macro commence et se termine par la fonction suivante : Application.ScreenUpdating = false (ou true) Cette fonction permet à Excel d effectuer la macro plus vite et que cette dernière ne soit pas visible. Source : http://www.admexcel.com/trucmacro.htm Afin que notre macro s exécute pour chaque cellule de chaque colonne de notre tableau, nous avons du utiliser la fonction For Each. Cette dernière sert à appliquer des instructions, qu on appelle une boucle, à tout un groupe de cellule. Pour simplifier cette fonction, il est préférable de nommer les cellules concernées dans la feuille Excel. Une fois la boucle terminée, si nous voulons relancer une autre boucle, il faut inscrire Next avant la nouvelle instruction. L instruction Exit For sert à sortir d une boucle à tout moment et passe à la prochaine instruction située en général après le Next. Nous avons appliqué cette fonction pour la coloration des cellules de chaque colonne. Nous avons nommé la plage «K» («K5 :K10») car lors de la décomposition de la cellule, les noms, qui se trouve en première position, se situent dans cette plage. La macro effectue la reconnaissance des noms à partir de cette plage et va colorier directement la cellule correspondante dans le tableau. Source : http://www.info-3000.com/vbvba/foreach.php Nous n avons pas pus utilisé la fonction For Each pour que la macro s applique a toutes les colonnes de notre tableau, car nous copions à plusieurs reprises la colonne que nous désirons manipulée à un intervalle de 9 colonnes. De ce fait, nous n avons pas trouvé une fonction qui nous permettait de faire évoluer ces chiffres automatiquement. Par exemple, lorsque nous avons fini d exécuter la formule «concaténer», nous demandons à l ordinateur de copier la cellule 8 colonnes plus tôt soit de passer de la colonne J à la colonne B. Puis nous recopions l intérieur de la cellule 9 colonnes plus loin afin de faire la reconnaissance des noms pour la coloration des cellules, soit de la colonne B à la colonne K. pour garder cette même marche à suivre pour la colonne C, nous sommes obligées de réduire l écart afin de conserver les mêmes colonnes où les modifications sont effectuées, soit de la colonne J à la colonne C (ce qui fait un espace de 7 colonnes) et de la colonne C à la colonne K (ce qui fait un écart de 8 colonnes). ActiveCell.Offset(0, -8).Range("A1").Select ( ) ActiveCell.Offset(0, 9).Range("A1").Select 9 Mallika Gillieron
La dernière partie de la macro correspond à la mise en page du tableau. Une fois que la macro est lancée pour la modification de l intérieur des cellules de notre macro, la mise en forme de ce dernier se fait automatiquement. Les titres de chaque colonnes (les années) se colorient en gris, sont centrés et une bordure générale pour tout le tableau se met en forme. Range("B4:I10").Select Selection.Font.Bold = True With Selection.HorizontalAlignment = xlgeneral.orientation = 0.AddIndent = False.IndentLevel = 0.ShrinkToFit = False.ReadingOrder = xlcontext.mergecells = False End With ( ) With Selection.Interior.ColorIndex = 15.Pattern = xlsolid End With Range("B5:I10").Select Selection.Font.Bold = False 5. Conclusion Nous avons trouvé très intéressant de mener à terme un projet tel que celui-ci malgré le fait que nous avons rencontré de nombreux problèmes durant la création de cette macro. Nous avons appris beaucoup sur VBA et sur son langage, que nous comprenons beaucoup mieux et plus facilement qu avant. Nous n avons pas augmenté le nombre d actions dans le tableau, car nous estimons que six actions différentes à l intérieur du tableau démontrent déjà relativement bien le fonctionnement de la macro. Pour que la macro fonctionne, il est important de souligner qu il faut que le tableau soit sous sa forme initiale. De ce fait, nous avons inscrit les données brutes du tableau dans la deuxième feuille du classeur («Données»), car si la macro est exécutée sur les données déjà triées, le classement par ordre décroissant sera biaisé car les chiffres ne se trouveront plus en première position, donc la macro ne pourra également plus faire la reconnaissance à partir des noms pour le coloriage car les noms ne seront également plus à leur bonne place. Pour chaque utilisation de la macro, il est important de remettre les données brutes dans la feuille («The Callan Periodic Table»). La prochaine page contient notre tableau définitif, effectué après la macro. 10 Mallika Gillieron
11 Mallika Gillieron