Introduction à la programmation en VBA

ATTENTION: 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 Macro

Nous 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.

  • Démarrez Excel.
  • Sélectionnez le menu Outils / Macros / Enregistrer une nouvelle macro. Une boîte de dialogue vous permet de choisir le raccourci (shortcut). Inscrivez "a" dans cette case (le raccourci doit être une lettre). Il est possible d'enregistrer la macro dans le fichier actuel ou dans un autre fichier. Vous pouvez aussi changer le nom et ajouter une description à la macro commande. Conservez les paramètres par défaut.
  • Dans la cellule A1, tapez "1".
  • Dans la cellule A2, tapez "+A1+1".
  • Copiez cette formule dans les 8 cases suivantes.
  • Cliquez sur "Arrêter l'enregistrement" dans la barre d'outil qui est apparue au début de l'enregistrement de la macro.

C'est tout ! La macro commande est enregistrée.

Enregistrez votre fichier Excel sous le nom de votre choix.

Utilisation de la macro commande

Utilisation du raccourci

  • Effacez toutes les cellules que vous avez remplies
  • Tapez CTRL-a : la macro est exécutée et les cellules sont remplies automatiquement.

Utilisation du menu Macros

  • Effacez toutes les cellules que vous avez remplies
  • Sélectionnez Outils/Macros/Macros. Une liste apparaît avec toutes les macros enregistrées pour ce fichier.
  • Sélectionnez la macro appelée Macro1, que vous venez d'enregistrer.
  • Choississez Run : la macro est exécutée et les cellules sont remplies automatiquement.

Options du menu Macros

Sé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 à Excel

Examinez le code ci-dessus. Rappelez-vous qu'il s'agit d'un enregistrement de commandes que vous avez effectuées dans Excel.

  • La commande Range("A1").Select permet de sélectionner une cellule. Dans ce cas-ci la cellule A1.
  • Ensuite, la commande ActiveCell.FormulaR1C1 permet d'insérer une formule dans la case actuellement séectionnée. Dans ce cas-ci, on insère simplement le chiffre "1". Les formules sont spécifiées entre guillemets. Le mot-clef ActiveCell désigne la cellule active.
  • La commande Range.Select est ensuite utilisée pour sélectionner la cellule suivante (A2) et entrer la formule "+R[-1]C+1". Cette formule signifie : "sélectionner la case qui se trouve une rangée plus haut et dans la même colonne (R[-1]C) et ajouter (+1). Le symbole "+" au début indique qu'il s'agit d'une formule.
  • La commande Selection.Copy entre en mode "copier/coller" (l'équivalent de CTRL-C).
  • La commande Range.Select est utilisée pour sélectionner les cellules de A3 à A10.
  • La commande ActiveSheet.Paste est ensuite utilisée pour "coller" la sélection (l'équivalent de CTRL-V).
  • Les deux dernières lignes peuvent différer selon ce que vous avez effectué avant de quitter le mode "enregistrement". Dans le code ci-dessus, la commande Appplication.CutCopyMode = False signifie que l'on quitte le mode "copier/coller" (l'utilisateur avait appuyé sur la touche Échap, par exemple), et ensuite, on a utilisé la commande Range.Select pour sélectionner la cellule "A10". Cette cellule est donc active à la fin de l'exécution de la macro.

Édition du code d'une macro

Ajoutez 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 :

  • Effacez toutes les cellules que vous avez remplies
  • Tapez CTRL-a : la macro est exécutée, les cellules sont remplies automatiquement et la somme est affichée dans la cellule A11, qui est affichée en caractères gras.

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 relatives

La 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 relatives

Nous allons maintenant enregistrer la même macro, mais cette fois-ci en références relatives.

  • Sélectionnez d'abord une cellule quelconque, disons "B3"
  • Sélectionnez le menu Outils / Macros / Enregistrer une nouvelle macro.
  • Cliquez sur "référence relatives" pour passer dans ce mode
  • Inscrivez "b" comme raccourci. Conservez les autres paramètres par défaut.
  • Dans la cellule active (B3), tapez "1".
  • Dans la cellule située en dessous, tapez "+A1+1".
  • Copiez cette formule dans les 8 cases suivantes.
  • Cliquez sur "Arrêter l'enregistrement" dans la barre d'outil qui est apparue au début de l'enregistrement de la macro.

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 chiffrier

Nous 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
Page modifiée le 16/02/06