Introduction à la programmation en VBAATTENTION: les pages suivantes présupposent une connaissance de base d'Excel (créations de formules, copie/coller, graphiques, manipulations de colonnes/rangées, formatage, etc.)Démarrage d'Excel - création d'une première MacroNous allons d'abord créer une première macro à l'aide du logiciel Excel. Il est possible d'enregistrer une série de commandes et de les regrouper sous un nom. Ce groupe de commande est appelé macro et peut être invoqué au moyen d'un raccourci (CTRL-a, par exemple). Les instructions seront donc exécutées.
C'est tout ! La macro commande est enregistrée. Enregistrez votre fichier Excel sous le nom de votre choix. Utilisation de la macro commandeUtilisation du raccourci
Utilisation du menu Macros
Options du menu MacrosSélectionnez Outils/Macros/Macros. La boîte de dialogue qui apparaît permet d'activer ou de supprimer une macro. Le bouton Edit permet de voir le code, nous l'utiliserons ci-dessous. Le bouton Step Into permet d'entrer en mode débogage et d'effectuer les commandes en mode pas-à-pas, comme avec le compilateur Visual Basic .Net. Le bouton Options permet de changer le raccourci associé à une macro. Le code enregistréDans la même boîte de dialogue, cliquez sur le bouton Edit. Le compilateur Visual Basic 6 apparaît. Il est semblable au Visual Basic .Net. En fait il s'agit de la version qui précède le VB .Net. On y retrouve l'éditeur de code, la fenêtre de propriétés, etc.
Dans l'éditeur de code, les couleurs du texte sont semblables à celles de l'éditeur VBA .Net. La syntaxe du langage est la même. On retrouve des commentaires et des instructions de type objet.propriété = valeur. Remarquez que chaque macro est une procédure (Sub... End Sub). Il est possible d'ajouter du code directement ici à celui qui avait été enregistré automatiquement. Toutes les instructions en Visual Basic sont valables : tests If... Then, boucles For... Next, etc. On peut déclarer des variables, afficher leur contenu dans des cellules du chiffrier Excel. On peut aussi utiliser des valeurs contenues dans des cellules dans le programme ainsi que des fonctions pré-définies d'Excel (comme moyenne, pour calculer la moyenne d'une colonne de chiffre). Quelques commandes de base reliées à ExcelExaminez le code ci-dessus. Rappelez-vous qu'il s'agit d'un enregistrement de commandes que vous avez effectuées dans Excel.
Édition du code d'une macroAjoutez la ligne suivante à votre macro, avant la commande End Sub Range("A11").Select
ActiveCell.FormulaR1C1 = "=+SUM(R[-10]C:R[-1]C)" ' en francais, utiliser SOMME
ActiveCell.Font.Bold = True
La commande Range.Select est d'abord sélectionnée et la formule utilisée (SUM) est effectue la somme des cellules situées 10 rangées plus haut (R[-10]) à 1 rangée plus haut (R[-1]), dans la même colonne (C). La dernière ligne permet d'activer l'option bold (caractères gras). Dans le chiffrier :
Vous avez donc créer une macro de façon automatique (en enregistrant des commandes effectuées dans un chiffrier Excel) ainsi qu'en écrivant directement des commandes en langage Visual Basic for Applications (VBA). Il existe une multitude de commandes relatives à Excel (comme Range.Select). Comme le VBA est également utilisé pour d'autres logiciels, les commandes spécifiques à Excel elles ne sont pas valables pour ceux-ci. Par exemple, pour Corel Draw, on aura toute une autre série de commandes spécifiques à ce logiciel. Exécution des macros dans un fichier - notion de sécuritéFermez le fichier que vous venez de créer et quittez Excel. Redémarrez ensuite Excel et ouvrez votre fichier. Il se peut qu'un message apparaisse, indiquant que les macros sont désactivées parce que le niveau de sécurité est trop élevé. Pour une version plus vieille d'Excel, vous aurez plutôt une boîte de dialogue vous demandant d'activer ou de désactiver les macros. Si c'est le cas vous pouvez simplement cliquer sur "activer les macros". Si non, vous devez sélectionner le menu Outils/Options et l'onglet Sécurité et le bouton Sécurité des macros. Vous aurez alors le choix entre différents niveaux de sécurité. Les niveaux "moyen" et "bas" permettront à vos macros d'être exécutées. Cette sécurité est prévue dans Excel pour éviter les macros-virus, c'est-à-dire des macros pouvant effectuer des opérations non-désirées par l'utilisateur. Deuxième macro - références absolues et relativesLa macro enregistrée ci-dessus permet de remplir les cases A1 à A10 (et même A11 si vous avez ajouté les deux lignes à la macro). Le mode d'enregistrement utilisé était celui de références absolues, i.e. les adresses exactes des cellules sont utilisées. Il existe également un autre mode d'enregistrement, qui permet de spécifier des références Enregistrement d'une macro avec références relativesNous allons maintenant enregistrer la même macro, mais cette fois-ci en références relatives.
Votre macro a été enregistrées en références relatives. Ceci signifie qu'elle sera exécutée à partir de la cellule active, peut importe où. Placez votre curseur dans la cellule "D2" par exemple et tapez CTRL-b pour exécuter la macro.
Dans le menu Outils/Macros/Macros sélectionnez la 2e macro et cliquer sur Edit. Le code suivant apparaît : Sub Macro2()
'
' Macro2 Macro
' Macro recorded 3/22/2004 by Jean Proulx
'
' Keyboard Shortcut: Ctrl+b
'
ActiveCell.FormulaR1C1 = "1"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=+R[-1]C+1"
ActiveCell.Select
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1:A8").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveCell.Offset(7, 0).Range("A1").Select
End Sub
On retrouve approximativement les mêmes commandes, mais elles sont en références relatives. La première ligne est directement l'instruction ActiveCell.FormulaR1C1 = "1", car la macro débute avec la cellule active (elle ne débute pas à une cellule spécifique, comme A1 par exemple, mais plutôt celle qui est actuellement sélectionnée dans le chiffrier). La différence principale avec les commandes en référence absolues est que les cellules sont référées par rapport à la cellule active. Par exemple, pour se déplacer une rangée plus bas et demeurer dans la même colonne, on aura ActiveCell.Offset(1,0).Range("A1").Select. La commande Offset(rangées, colonnes) permet de se déplacer d'un nombre de rangées et colonnes spécifiées par rapport à la cellule actuellement sélectionnée (ActiveCell). Ensuite la commande Range.Select permet de sélectionner cette nouvelle cellule. On utilise alors "A1" qui ne veut pas dire ici l'adresse absolue A1, mais plutôt une "rangée et une colonne" (donc une cellule). De même "A1:A8" signifie de sélectionner une colonne de 8 cellules à partir de la cellule désignée par la commande Offset précédente. Le mode de design - création de contrôles sur un chiffrierNous allons compléter ce tutoriel en ajoutant un contrôle sur notre chiffrier Excel. Nous allons placer un bouton de commande et lui attacher du code. Nous utiliserons ici le code de la 2e macro, qui produit une colonne de 10 chiffres et nous ajouterons les deux lignes pour faire le total. Ouvrez votre fichier avec les macros créées ci-dessus. En cliquant sur le bouton de droite sur l'entête d'Excel (dans la zone des barres d'outils), assurez vous que la boîte à outils des contrôles (Control Toolbox) est affichée.
Cliquez sur le premier icône, qui permet de passer en mode de conception (design mode). Cette boîte à outil est similaire à celle du compilateur Visual Basic .Net et permet d'insérer des contrôles sur le chiffrier. Beaucoup moins d'outils sont disponibles, car ils sont spécifiques à Excel. Cliquez ensuite sur l'icône de bouton de commande (le 6e) et placez un bouton sur le chiffrier. Vous pouvez changer la taille du bouton ou le déplacer à votre guise. Note : en maintenant la touche ALT enfoncée, le bouton sera "magnétisé" par les lignes du chiffrier, ce qui permet d'aligner des contrôles ensemble.
Double-cliquez ensuite sur le bouton de commande pour accéder au code qui y est attaché. L'éditeur de texte VBA apparaît avec le corps de la procédure CommandButton1_Click() déjà écrit, comme dans le cas de boutons de commande en VB .Net. Les propriétés du bouton peuvent être modifiées dans la fenêtres de propriétés. Changer la propriété Caption (l'équivalent de la propriété Text en VB .Net) et tapez "Exécuter macro 2". Dans la fenêtre projet, vous trouverez le module contenant les macros enregistrées plus tôt (Module1) et les feuilles du chiffrier lui-même. Le code du bouton de commande est situé dans la feuille #1 du chiffrier. Nous allons y copier le code de la macro commande #2. Sélectionnez Module1 et le code de la macro #2. Copiez-collez ce code dans la procédure reliée au bouton de commande. Ajoutez les trois dernières lignes pour effectuer la somme et l'afficher en caractères gras. Private Sub CommandButton1_Click()
' Code de la macro 2
' Sera exécuté lorsque l'on clique sur le bouton
ActiveCell.FormulaR1C1 = "1"
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=+R[-1]C+1"
ActiveCell.Select
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1:A8").Select
ActiveSheet.Paste
Application.CutCopyMode = False
' Ajout de ces lignes pour faire la somme
ActiveCell.Offset(8, 0).Range("A1").Select
ActiveCell.FormulaR1C1 = "=+SUM(R[-10]C:R[-1]C)"
ActiveCell.Font.Bold = True
End Sub
De retour dans le chiffrier, sortez du mode commande en cliquant sur le premier icône de la boîte de contrôle. Le bouton est maintenant "cliquable". Placez votre curseur dans la cellule C4 et appuyez sur le bouton de commande.
Enregistrez votre projet. Vous avez vu comment il est simple d'enregistrer et de modifier des macros dans Excel. Ces macros sont en Visual Basic et il est donc possible de les modifier en ajoutant des commandes en VB. De plus, si on ignore comment coder une action dans Excel, il suffit de l'enregistrer comme macro et d'aller voir et modifier le code dans l'éditeur VB. À l'aide ! (documentation Visual Basic for Applications)L'aide en ligne du compilateur VBA (menu ?) est très complète et comporte plusieurs exemples. Il existe également une grande quantité de livres traitant de la programmation en VBA. Commentaires
& Suggestions : Jean
Proulx
|