Introduction VBA
Introduction VBA
Introduction VBA
Mathieu Boudreault
École d’actuariat
Département d’informatique et de génie logiciel
Université Laval
Note : Puisque la plupart du temps en Excel nous manipulons des chiffres, il n’est pas
nécessaire d’utiliser une commande comme Val ou CDbl pour convertir du texte en nombre.
Voici une vue d’ensemble des objets et collections les plus couramment utilisés en Visual
Basic pour Excel. N’oubliez pas qu’une collection est un ensemble d’objets ou d’autres
collections pouvant avoir certaines propriétés et pouvant aussi interagir avec d’autres
éléments.
Objets et collections
Visual Basic pour Excel
Workbooks
(Objet et collection)
Pour débuter la programmation, il suffit de sélectionner la feuille Excel dans laquelle la routine
sera composée et d’aller dans le menu Affichage, Code.
Nous voulons reproduire le même tableau que dans la section précédente. Pour ce faire,
nous pouvons créer une macro Excel qui fera ce boulot.
Introduction à Visual Basic pour Microsoft Excel 6
End Sub
Nous allons construire ce qui est inclus dans les cellules B1:C1. La construction du contenu
des autres cellules sera expliquée un peu plus loin.
Sub CreerTableau()
'Ces deux lignes servent à saisir l'information dans les cellules
Range("B1").Value = "Prestation de décès"
Range("C1").Value = 10000
Note : L’objet Font n’appartient pas qu’à l’objet Range ; il peut aussi servir par exemple, à
l’objet ChartTitle qui est aussi un objet.
Introduction à Visual Basic pour Microsoft Excel 7
Syntaxe
Range("cellule")
Range("plage")
Range("cellule1,cellule2,…,celluleN")
Range("plage1,plage2,…,plageN")
Exemple
Columns ou Rows
Syntaxe
Columns("lettre de colonne")
Columns(# de colonne)
Rows(# de ligne)
Exemple
Selection
Syntaxe
Selection
Exemple
ActiveCell
Syntaxe
ActiveCell
Retourne un objet de type Range correspondant à la cellule active. Par exemple, si la cellule
A1 est active, la saisie d’information au clavier se fera alors pour la cellule A1.
Exemple
Offset
Syntaxe
Exemple
Cells
Syntaxe
Exemple
Activate
Syntaxe
ObjetRangeCellule.Activate
Méthode qui permet d’activer une cellule. Par exemple, si la cellule A1 est active, la saisie
d’information au clavier se fera alors pour la cellule A1.
Exemple
Range("A1").Activate
Select
Syntaxe
ObjetRange.Select
Exemple
Range("A1:A15,C2:C26").Select
Remarque
Pour obtenir le contenu (valeurs ou textes) compris dans un certain objet Range et le stocker
à l’intérieur d’une variable, il faut avoir un objet Range comprenant QU’UNE seule cellule.
Introduction à Visual Basic pour Microsoft Excel 10
Sub CreerTableau()
End Sub
Introduction à Visual Basic pour Microsoft Excel 11
Tout d’abord, regardons les diverses commandes à exécuter pour manipuler des objets de
type classeur (Workbook) et feuilles de calcul (Worksheet).
Workbooks
Syntaxe
Workbooks("nom du classeur")
Workbooks(# du classeur)
Remarque
La spécification du nom du classeur n’est pas obligatoire (par exemple si vous voulez utiliser
certaines méthodes relatives aux classeurs en général, vous verrez plus loin). Par contre, si
vous devez manipuler un classeur spécifique, l’argument devient obligatoire.
Exemple
Workbooks("Classeur1")
Workbooks(1)
‘Même chose, mais correspond au premier classeur ouvert.
Introduction à Visual Basic pour Microsoft Excel 12
ActiveWorkbook
Syntaxe
ActiveWorkbook
Exemple
Worksheets ou Sheets
Syntaxe
Remarque
La spécification du nom de la feuille de calcul n’est pas obligatoire (par exemple si vous
voulez utiliser certaines méthodes relatives aux feuilles en général). Par contre, si vous devez
manipuler une feuille de calcul spécifique, l’argument devient obligatoire.
Exemple
Sheets("Feuil1")
‘Retourne un objet de type Worksheet correspondant à la feuille de calcul Feuil1
Worksheets("Donnees").Range("A1").Value
‘Permet d’obtenir le contenu de la cellule A1. La cellule A1 est un objet de type
Range. Un objet de type Range appartient à un objet de type Worksheet
(Worksheets("Donnees") permet d’obtenir un objet de type Worksheet correspondant à
la feuille Donnees). Puis, Value est une propriété associée à un objet de type
Range (Range("A1") permet d’obtenir un objet Range correspondant à la cellule A1).
Introduction à Visual Basic pour Microsoft Excel 13
ActiveSheet
Syntaxe
ActiveSheet
Exemple
ActiveSheet.Cells(1,1).Value
‘Retourne le contenu de la cellule A1 de la feuille active.
Il est parfois très utile de pouvoir ouvrir un classeur Excel afin de pouvoir lire l’information
contenue dans ce classeur.
Syntaxe
Exemple
La commande ci-haut vous permettra d’ouvrir le classeur nommé Classeur dans le dossier
Mes documents sur le disque C.
Voici la commande qui vous permettra d’ouvrir un nouveau classeur Excel ne contenant
aucune information :
Syntaxe
Workbooks.Add
Afin de pouvoir accéder à l’information contenue dans une feuille ou dans un classeur donné,
il est essentiel de sélectionner la feuille ou le classeur dans lequel les commandes exécutées
s’appliqueront.
Introduction à Visual Basic pour Microsoft Excel 14
ObjetWorkbook.Activate
Exemple
Workbooks("Classeur1").Activate
Syntaxe - Activation et sélection d’une feuille de travail
ObjetWorksheet.Activate
ObjetWorksheet.Select
Exemple
Sheets("feuil1").Select
Après avoir modifier l’information contenue dans un classeur, il peut être utile de vouloir
sauvegarder cette information.
Exemple
Cette méthode vous permet de sauvegarder le classeur actif sous le nom classeur1.xls dans
le dossier Mes documents sur le disque C.
ObjetWorkbook.Save
Exemple
Workbooks("Classeur1").Save
Fermer les classeurs non utilisés est une bonne habitude de programmation puisqu’elle
permet de réduire le nombre de fichiers actifs.
Syntaxe
ObjetWorkbook.Close
Introduction à Visual Basic pour Microsoft Excel 15
Exemple
Voici la commande qui vous permettra de fermer un classeur dont l’utilisation n’est plus
requise.
Workbooks("Classeur1").Close
Déclaration de variables
Rappel provenant des sections précédentes
Variable : Espace en mémoire réservé pour y stocker de l’information. Une variable peut être
de plusieurs types : numérique (entier, réel), booléen (ou logique), texte (ou chaîne de
caractères, aussi appelé string).
Syntaxe
Variables dont le contenu est conservé à l’intérieur d’une procédure ou d’une fonction (portée
de niveau procédure)
Dim scalaire as Type
Dim scalaire1, scalaire2, …, scalaireN as Type
Dim scalaire1 as Type1, scalaire2 as Type2, …, scalaireN as TypeN
Variables dont le contenu est conservé tant et aussi longtemps que le programme principal
n’est pas interrompu (portée de niveau module)
Private scalaire as Type
Private scalaire1, scalaire2, …, scalaireN as Type
Private scalaire1 as Type1, scalaire2 as Type2, …, scalaireN as TypeN
Remarque
Les variables à portée de niveau module doivent être déclarées avant toutes les procédures
du module.
Introduction à Visual Basic pour Microsoft Excel 16
Types de données
Il existe aussi les types de données String (chaînes de caractères), Date, etc.
Exemple
Private salaire as Double ‘Variable à portée de niveau module
Sub calculeBonus()
Dim bonus as Double ‘Variable à portée de niveau procédure
End Sub
Syntaxe
Légende
• bi1 Î représente l’adresse de la borne inférieure de la 1ère dimension du tableau.
• bs1 Î représente l’adresse de la borne supérieure de la 1ère dimension du tableau.
• n1 Î représente le nombre d’éléments dans la 1ère dimension du tableau.
Introduction à Visual Basic pour Microsoft Excel 17
Remarques
• Les bi1, bs1, n1, etc. doivent être des nombres entiers entrés par le programmeur.
Ils ne peuvent représenter le contenu d’une variable.
• Si aucune adresse n’est définie, Visual Basic utilisera celle spécifiée par Option Base.
Si la ligne Option Base n’est pas présente et que les adresses des bornes ne sont pas
définies, les bornes iront de 0 jusqu’à ni-1
• Si les dimensions d’une variable tableau ne sont pas définies, aucun contenu ne peut y
être stocké tant et aussi longtemps que Visual Basic ne connaît pas ses dimensions.
Vous pouvez redéfinir les dimensions d’une variable tableau à l’aide de la commande
ReDim (voir plus loin).
Exemple # 1
À quoi pourraient servir les adresses des variables matrice ? Disons que vous simulez la
performance d’un indice boursier entre 2003 et 2050. Déclarer la variable de cette façon…
Dim IndicesBoursiers(2003 to 2050) as Double
… et obtenir la simulation de l’année 2023…
SimulationVoulue = IndicesBoursiers(2023)
... est beaucoup plus simple que…
Dim IndicesBoursiers(48) as Double
SimulationVoulue = IndicesBoursiers(21)
Exemple # 2
Option Base 1
Sub NomRoutine()
Dim Tableau4dimensions(10, 20, 30, 40) as Integer
End Sub
est équivalent à
Sub NomRoutine()
Dim Tableau4dimensions(1 to 10, 1 to 20, 1 to 30, 1 to 40) as Integer
End Sub
Exemple
Dim TableStandard(1 to 50, 1 to 25) as Double ‘Déclaration de la variable matrice
TableStandard(2,3) = 1434 ‘Stocker la valeur 1434 dans la 2e ligne, 3e colonne de
la matrice Table standard.
Exemple (suite)
Range("C1").Value = TableStandard(2,3) ‘Affiche dans la cellule C1 le contenu de
la variable TableStandard à la ligne 2, colonne 3.
Redim
Nous avons mentionné plus tôt que les dimensions d’une variable matrice doivent être
spécifiées explicitement (nombres entrés directement par le programmeur) ou pas spécifiées
du tout. L’instruction Redim permet de redimensionner une variable matrice. Contrairement à
l’instruction Dim, Redim peut accepter le contenu d’une variable.
Syntaxe
Exemple
Dim nbresim as Integer
Dim Simulations() as Double
nbresim = 1000
Redim Simulations(2003 to 2003 + nbresim - 1) as Double
‘car Dim Simulations(2003 to 2003 + nbresim - 1) as Double est illégal
Il s’agit maintenant de donner un nom à la macro sous Nom de la macro. Il est possible
d’attribuer une touche de raccourci à cette macro. Généralement, l’enregistrement de la
macro se fait dans Ce classeur. Il est possible d’entrer une brève description de la macro.
2. Appuyez sur OK. La barre d’outils Arrêt de l’enregistrement s’affiche, indiquant que
l’enregistrement de la macro est en cours.
Il ne reste plus qu’à exécuter (dans l’ordre) tout ce qui doit se retrouver dans la macro. Par
exemple, quelqu’un pourrait écrire le chiffre 28 dans la cellule A1, changer le format de cellule
en « monétaire » pour obtenir 28,00 $ (bouton droit sur la cellule, Format de cellule, sélection
de Monétaire sous l’onglet Nombre, ok), mettre la cellule en gras, pour ensuite arrêter
l’enregistrement en appuyant sur le bouton carré de la barre d’outils Arrêt de l’enregistrement.
5. Appuyez sur Exécuter. La macro s’exécute, et refait ce que vous avez entré au
préalable.
Il est possible d’aller voir la programmation qui a été nécessaire à la création de cette macro,
et ce de deux façons. Vous pouvez retourner à la boîte de dialogue Macro (montrée ci-haut),
et sélectionner Modifier. L’éditeur Visual Basic s’ouvrira et montrera les codes. Vous pouvez
également tout simplement ouvrir Visual Basic en cliquant sur Macro, Visual Basic Editor du
menu Outils.
Introduction à Visual Basic pour Microsoft Excel 20
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 2002-11-18 par James Bond
'
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "28"
Range("A1").Select
Selection.NumberFormat = "#,##0.00 $"
Selection.Font.Bold = True
End Sub
Finalement, il est possible d’insérer un bouton dans la feuille Excel qui, lorsqu’on appuie
dessus, exécute une macro.
1. Sous le menu Affichage, sélectionnez Barre d’outils, Formulaires. Une boîte à outils
apparaît, que vous pouvez insérer dans la Barre d’outils et de menus en haut de
l’écran.
2. Cliquez sur Bouton, représenté par un petit bouton gris. Votre curseur devient une
croix. Il vous suffit maintenant de dessiner un bouton de la taille désirée.
Excel ouvre ensuite automatiquement la boîte de dialogue Affecter une macro. Vous pouvez
maintenant sélectionner la macro que vous venez de créer et appuyer sur OK. Le bouton est
maintenant fonctionnel, et exécutera la macro lorsque l’utilisateur appuie dessus. À noter
qu’il est possible de changer le texte apparaissant sur le bouton, en cliquant dessus avec le
bouton droit, puis le gauche. Note importante : Les macros que vous affectez à un bouton
ne doivent pas recevoir d’arguments obligatoires.
Syntaxe
Remarques
• Un peu comme une variable, la routine peut avoir une portée privée ou publique, c’est-
à-dire être disponible à un certain module Excel ou à tous les modules. Si le mot
private ou public est omis, la routine sera publique.
• Il n’est pas nécessaire de spécifier des arguments à la routine. Vous pouvez aussi
spécifier des arguments optionnels avec des valeurs par défaut. Voir la façon de
procéder dans les fonctions personnelles, plus loin.
• Il est également possible d’assigner à un bouton une procédure créée de cette façon si
la routine n’a aucun argument obligatoire.
Introduction à Visual Basic pour Microsoft Excel 21
Exemple
Syntaxe
Call NomDeLaRoutineSansArgument
Call NomDeLaRoutineAvecArguments(Arg1, Arg2, …)
‘Deuxième façon
NomDeLaRoutineSansArgument
NomDeLaRoutineAvecArguments Arg1, Arg2,…
Exemple
‘Deuxième façon
Programme
Initialisation "autoexec.bat"
NomArgument As Type
[Optional] NomArgument As Type =(Valeur par défaut)
Introduction à Visual Basic pour Microsoft Excel 22
Remarques
• Un peu comme une variable, la fonction peut avoir une portée privée ou publique,
c’est-à-dire être disponible à un certain module Excel ou à tous les modules. Si le mot
private ou public est omis, la routine sera privée.
• Pour que la fonction puisse retourner une valeur, on doit absolument retrouver au
moins une ligne de code ayant NomDeLaFonction = expression. Sinon la fonction
retourne 0 et est inutile.
• La déclaration des arguments se fait la plupart du temps de la première façon, c’est-à-
dire, NomArgument As Type.
• Un argument peut aussi être optionnel, c’est-à-dire que l’utilisateur pourrait appeler la
fonction de façon correcte sans spécifier de valeur pour cet argument. Par contre, une
valeur par défaut doit être présente. Une valeur par défaut est une valeur utilisée par
un programme si l’utilisateur n’en spécifie aucune.
• Les arguments optionnels doivent être déclarés à la fin.
• La structure des arguments présentée dans cette section s’applique aussi aux
routines.
Exemple
Voici la création d’une fonction avec un argument qui spécifie une valeur par défaut. Nous
verrons comment appeler des fonctions avec des arguments par défaut et la différence. Plus
bas, la même fonction est présentée, sans argument optionnel.
Exemple
Je voudrais calculer ma cotisation au régime des rentes du Québec avec mon salaire.
Dim MonSalaire, MaCotisation as Double
MonSalaire = 45000
Programmation conditionnelle
La programmation conditionnelle permet d’exécuter certaines commandes selon la réalisation
de certains événements ou l’obtention de certains résultats. Pour mieux comprendre les
différentes possibilités, le programmeur peut utiliser un diagramme de flux. Vous remarquerez
que la programmation conditionnelle à l’intérieur de Visual Basic pour applications est la
même qu’à l’intérieur de Visual Basic.
SI mon argent de
poche est inférieur à
20$ ALORS
VRAI FAUX
Opérateurs de comparaison
Opérateurs logiques
Les opérateurs logiques servent à unir les comparaisons pour former une condition.
And ET (intersection)
Or OU (union)
Notons tout d’abord OPcomp pour opérateur de comparaison et OPlog pour opérateur logique.
Syntaxe
Remarque
Exemple
‘Ce programme détermine si un étudiant va être engagé dans la firme d’actuaires ABC
Dim nbreexams as Integer
Dim moyenne as Double
Dim cyclesuperieur as Boolean
nbreexams = 3
moyenne = 3.23
cyclesuperieur = False
‘Exemples de condition pour engager un étudiant (n’est pas basé sur la réalité…
exemple fictif)
‘L’employeur veut que l’étudiant ait au moins 2 examens professionnels ET une
moyenne cumulative d’au moins 3. La condition est donc :
‘nbreexams >= 2 And moyenne >= 3 ‘Retourne vrai car VRAI ET VRAI = VRAI
‘L’employeur considère qu’un diplôme de cycle supérieur équivaut aux deux examens.
La condition est donc :
‘(nbreexams >= 2 Or cyclesuperieur = True) And moyenne >= 3 ‘Retourne vrai car
(VRAI OU FAUX = VRAI) ET VRAI = VRAI
nbreexams = 1
Introduction à Visual Basic pour Microsoft Excel 25
cyclesuperieur = True
moyenne = 3.51
Syntaxe
If condition Then
commandes si condition est vraie (1)
Else
commandes si condition est fausse
End If
Remarques
• Peu importe la complexité de la condition, celle-ci doit être vraie pour exécuter les
commandes en (1).
• Il est aussi possible d’imbriquer plusieurs blocs If.
Syntaxe
If condition1 Then
commandes si condition1 est vraie
If condition2 Then
commandes si condition1 ET condition2 sont vraies
Else
commandes si condition1 est vraie ET condition2 est fausse
End If
Else
commandes si condition1 est fausse
If condition3 Then
commandes si condition1 est fausse ET condition3 est vraie
Else
commandes si condition1 ET condition3 sont fausses
End If
End If
• On peut aussi laisser tomber le Else dans le cas où le programme ne devrait rien faire
si la condition n’est pas respectée.
Introduction à Visual Basic pour Microsoft Excel 26
Syntaxe
Remarques
Programmation itérative
Il arrive très fréquemment en programmation que certaines instructions doivent être répétées
constamment. Le nombre de répétitions peut soit être fixée d’avance par une variable ou
constante, ou le nombre de répétitions peut être conditionnel à l’évolution d’une certaine
condition. Dans le premier cas, on utilisera les itérations simples, dans le second, les
itérations conditionnelles.
Introduction à Visual Basic pour Microsoft Excel 27
Syntaxe
Remarques
• L’itération illustrée dans la syntaxe produira (bornesup-borneinf+1) itérations.
• Pour répéter n fois une certaine instruction, la forme la plus commune d’itération
simple est
For compteur = 1 to n
Instructions
Next compteur
• Il est également possible d’utiliser un compteur avec un pas différent de 1. En effet, si
on inscrit For compteur = borneinf to bornesup Step s, la variable compteur prendra
comme valeurs : borneinf, borneinf +s, borneinf +2s, etc. et l’itération arrêtera
une fois que la borne supérieure sera rencontrée.
Syntaxe
Instructions d’initialisation
While condition
Instructions si condition est vraie
Wend
Remarques
• Les instructions d’initialisation sont celles qui permettent d’entrer dans la boucle et
celles qui donnent une certaine information (tel qu’un compteur).
• Un des éléments formant la condition DOIT se mettre à jour à l’intérieur de l’itération.
• La condition est bâtie de la même façon qu’à l’aide de la programmation
conditionnelle.
• Si vous voulez utiliser un compteur, vous devrez le créer (en déclarant une variable) et
l’incrémenter vous-mêmes à l’intérieur de la boucle.
• Attention aux boucles à l’infini ! Assurez-vous qu’il est possible que la condition passe
de vrai à faux un jour !
Introduction à Visual Basic pour Microsoft Excel 28
Syntaxe
Arguments
"question posée" est le texte qui apparaîtra dans la boîte de dialogue, qui est
généralement une question posée à l’utilisateur.
"titre de la boite" est facultatif et représente le titre de la boîte de dialogue; s’il est
omis, le nom de l’application apparaîtra.
"valeur par défaut" est lui aussi facultatif, correspond au texte apparaissant par défaut
dans la zone de texte lors de l’affichage de la boîte de dialogue.
Exemple
Admettons que l’on veuille obtenir le salaire annuel de l’utilisateur. Cette procédure stockerait
le salaire obtenu de l’utilisateur dans la variable « salaire » :
Sub Salaire_annuel()
End Sub
Introduction à Visual Basic pour Microsoft Excel 29
À noter qu’il est possible d’insérer des variables dans la fonction InputBox avec l’opérateur de
concaténation « & ». Par exemple, si le nom de l’utilisateur est inscrit dans la cellule A1, on
pourrait avoir le programme suivant :
Sub Salaire_annuel()
nom = Range("a1")
salaire = InputBox(" " & nom & ": Veuillez entrer votre salaire annuel:", _
"Saisie du salaire de l'utilisateur", 150000)
End Sub
MsgBox "Message"
MsgBox("Message", Icône, "Titre de la boîte")
Arguments
Exemple
Sub Investigation()
End Sub
Introduction à Visual Basic pour Microsoft Excel 30
Il est également possible d’obtenir des informations de la part de l’utilisateur avec la boîte
MsgBox, lorsqu’il s’agit de répondre à une question par l’affirmative ou la négative.
Arguments
Remarques
Note : Ces deux tableaux sont tirés du livre Excel 2000 et Visual Basic pour Applications 6
Exemple
Si par exemple nous désirons afficher une boîte de dialogue contenant le symbole
« Question », dans laquelle l’utilisateur pourra répondre à la question posée par « Oui » ou
« Non », l’argument BoutonsEtIcone sera égal à 36 : 4 pour les boutons + 32 pour le symbole.
Les trois instructions suivantes sont équivalentes et produisent la même boîte :
Trucs de débogage
Commande Exécuter
La commande Exécuter permet de mettre en marche la macro construite avec VBA. Il existe
deux façons de procéder à l’exécution de la macro. La façon la plus rapide consiste à
appuyer sur la touche située dans le haut de la fenêtre de commande. Pour exécuter la
macro sans accéder à l’éditeur VBA, on doit choisir Outils/Macro/Macros comme l’illustre la
figure suivante :
Introduction à Visual Basic pour Microsoft Excel 33
Pour exécuter un programme VBA pas à pas, on doit adopter la procédure suivante :
(1) Placer le curseur à la ligne où vous souhaitez démarrer l’exécution pas à pas dans la
fenêtre de code de la procédure à tester;
(2) Enfoncer la touche F8 pour exécuter la première ligne du code;
(3) À chaque pression de la touche F8, la ligne de code suivante sera exécutée.
Introduction à Visual Basic pour Microsoft Excel 34
Si vous êtes convaincu de l’exactitude de votre programme jusqu’à une certaine ligne,
positionnez votre curseur à cette ligne, appuyez sur CTRL+F8 (appuyez sur CTRL et
maintenez enfoncé, puis appuyez sur F8). Visual Basic aura exécuté les lignes avant le
curseur et est prêt à exécuter les prochaines lignes, pas-à-pas, avec vous.
Truc : lors de la lecture pas à pas d’une procédure, il peut être intéressant de voir ce que
contiennent les variables au fur et à mesure qu’elles se remplissent. Lorsque vous exécutez
une procédure en mode pas à pas, vous n’avez qu’à placer le curseur de la souris pour voir
ce que contient une variable.
Points d’arrêt
Les points d’arrêt permettent d’interrompe l’exécution d’un programme sur une instruction
précise. Cette possibilité est particulièrement intéressante lorsque vous soupçonnez l’origine
d’une erreur. Vous pouvez ainsi exécuter normalement toutes les instructions ne posant pas
de problèmes et définir un point d’arrêt pour une instruction dont vous n’êtes pas sûr.
La procédure à adopter afin d’insérer un point d’arrêt est simple :
1. Placez le curseur sur l’instruction voulue;
2. Choisir la commande Basculer le point d’arrêt du menu Débogage ou appuyer sur la
touche F9;
3. Pour supprimer le point d’arrêt, procéder de la même façon que pour insérer un point
d’arrêt.
Autre technique
Fenêtre espions
Les espions permettent d’espionner les valeurs de variables ou de toute expression
renvoyant une valeur dans un contexte déterminé.
(2) Mettre en surbrillance la variable à espionner dans la fenêtre de code, cliquer sur cette
variable et la glisser dans la fenêtre espions en maintenant enfoncée la touche de
gauche de la souris.
En exécutant le code en mode pas-à-pas ou à l’aide de points d’arrêt, vous serez en mesure
de voir le contenu des variables (placées dans la fenêtre espion) se mettre à jour.
Introduction à Visual Basic pour Microsoft Excel 36
Messages d’erreurs
Le débogage consiste donc à régler les erreurs directement liées au code du programme et
indépendantes de l’environnement dans lequel s’exécute le programme. Trois principaux
types d’erreurs peuvent affecter un programme VBA soit les erreurs de compilation, les
erreurs d’exécution et les erreurs logiques.
Erreurs de compilation
Ce type d’erreur survient lorsque VBA rencontre une instruction qu’il ne reconnaît pas; par
exemple, lorsqu’un mot clé contient une faute d’orthographe. On remarque que ce type
d’erreur est généralement le plus fréquent. Si on se réfère à l’exemple précédent, on aurait pu
obtenir ce message d’erreur :
Erreurs d’exécution
Ce type d’erreur survient après que la compilation du programme a été effectuée avec
réussite. Une erreur d’exécution peut par exemple, être liée à l’utilisation de données
incompatibles. Dans notre exemple, si on avait déclarer la variable nom comme un double, on
aurait obtenu le message d’erreur suivant si on avait entré un nom en lettres lors de
l’exécution du programme.
Introduction à Visual Basic pour Microsoft Excel 37
Erreurs logiques
Ce type d’erreur est le plus ardu à corriger. Contrairement aux erreurs de compilation et
d’exécution, elles laissent le programme s’exécuter. Le résultat obtenu ne sera pas celui que
vous escomptiez. Les erreurs logiques découlent généralement d’une lacune de l’algorithme.
Une combinaison de la méthode pas à pas et de l’utilisation des espions est une bonne
méthode pour contrer ce type d’erreurs.
Introduction à Visual Basic pour Microsoft Excel 38
Les lignes qui suivent comprennent tout le code nécessaire pour reproduire l’illustration
suivante.
'Avec ce programme, les cellules C4:C9 ne seront pas mises à jour si on change
'la prestation de décès. Il faudra exécuter le programme à chaque fois que la
prestation
'change.
'Cette routine est fonction d'une pretation de décès optionnelle
Sub CreerTableau(Optional Prestation As Double = 10000)
PlageTitre.Font.Name = Arial
PlageTitre.Font.Size = 12
PlageTitre.Font.Bold = True
PlageTitre.WrapText = True
PlageTitre.VerticalAlignment = xlVAlignCenter
PlageTitre.HorizontalAlignment = xlHAlignCenter
PlageTitre.Interior.ColorIndex = 34
With PlageContenu
.Font.Name = Arial
.Font.Size = 12
.HorizontalAlignment = xlHAlignCenter
.Interior.ColorIndex = 6
.Columns(2).NumberFormat = "0.000"
.Columns(3).Style = "currency"
End With
With Range("A3:B9")
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
End With
With Range("A4:C9")
.Borders(xlEdgeTop).Weight = xlThick
.Borders(xlEdgeBottom).Weight = xlThick
.Borders(xlEdgeLeft).Weight = xlThick
.Borders(xlEdgeRight).Weight = xlThick
End With
Range("A3:A9").Borders(xlEdgeRight).Weight = xlThin
'Les valeurs xlThin, xlThick, etc. sont des nombres dont la valeur
Introduction à Visual Basic pour Microsoft Excel 40
Remarques
• Pour que les cellules C4:C9 soient mises à jour dès que l’on modifie la prestation de
décès, on peut enlever la ligne
PlagePrimes.Cells(i + 1).Value = Prestation * Cells(4 + i, 2).Value
et utiliser la propriété Formula associé à un objet Range.
Exemple
Range("C4").Formula = "=B4*$C$1"
• Vous pouvez aussi mettre en pratique toutes vos connaissances de Visual Basic et
Visual Basic pour Excel en faisant l’exercice actuariel # 5 et en parcourant rapidement
les travaux pratiques de l’année 2000.
Introduction à Visual Basic pour Microsoft Excel 41
Références
Bidault, Mikaël. Excel 2000 & Visual Basic pour Applications 6. Campus Press, Simon &
Schuster Macmillan. 1999. 534 pages.