Cours Excel Vba
Cours Excel Vba
Cours Excel Vba
La Programmation en VBA
PLAN
I. Introduction à excel VBA 1
II. L’enregistreur de macro 2
Enregistrer une macro 2
Exécuter une macro 4
Exercice 4
III. L’environnement Visual Basic Editor 5
L’explorateur de projets 6
Les modules de code 7
Les procédures 8
Modifier une macro 9
Exercice 10
IV. Les divers moyens pour exécuter une macro 11
Exécuter une macro à partir d'un raccourci clavier 11
Exécuter une macro à partir d'un bouton d'une barre d'outils 12
Exécuter une macro à partir d'un menu 14
V. Le modèle objet d’Excel 16
Les objets 16
Les collections 16
L’accès aux objets 17
Exercice 17
Les propriétés des objets 18
Exercice 18
Les méthodes des objets 19
Exercice 19
Les événements 20
Exercice 22
L’explorateur d’objets 23
Comment obtenir de l’aide : quelques astuces 25
VI. Les fonctions définies par l’utilisateur 26
Créer une Fonction personnalisée 27
Exercice 28
Utiliser les fonctions intégrées d’Excel 29
Exercice 30
VII. Le langage VBA 31
Les variables et les constantes 31
La déclaration des variables 31
Le type des variables 32
La portée des variables 34
La déclaration des constantes 34
L’instruction With...End With 36
Exercice 36
Exécuter une procédure sans argument 37
Les entrées et sorties standards 38
La fonction MsgBox 38
La fonction InputBox 40
Récapitulatif sur les parenthèses et les listes d’arguments 41
Exercice 42
Les énoncés conditionnels 43
L’instruction If écrite sur une seule ligne 43
Le bloc If 43
Les énoncés itératifs 45
La boucle Do...Loop 45
Exercice 45
La boucle For...Next 46
La boucle For Each...Next 47
L’instruction Exit 47
Exercice 47
Les tableaux 48
Exercice 48
Le débogage 49
Les erreurs de compilation et d’exécution 49
Les erreurs Logiques 49
VIII. Les objets UserForm 53
Créer un objet UserForm 55
Afficher et fermer un objet UserForm 57
Afficher un objet UserForm 57
Fermer ou masquer un objet UserForm 57
Associer du code à un objet UserForm 58
Associer du code à un bouton de commande 59
Exercice 59
Initialiser un objet UserForm 60
Accéder aux contrôles d’un objet UserForm 62
Afficher un objet UserForm à partir d’un bouton d’une feuille de calcul 64
IX. Bibliographie 65
I. INTRODUCTION A EXCEL VBA
Cependant une macro ainsi créée ne s’exécutera que sur un ensemble de cellules
données et le code produit ne sera pas toujours très efficace. Pour pouvoir créer
des macros propres à ses besoins, efficaces et interactives, il faut apprendre à
programmer en VBA.
Page 1
II. L’ENREGISTREUR DE MACRO
Créer une macro MACRO1 qui écrit dans la cellule A1 le texte "AgroParisTech"
en caractères gras et dans la cellule G1 la date du jour en caractères italiques.
2) Les cellules dans une macro sont identifiées à l’aide d’une lettre (colonne)
suivie d’un chiffre (ligne), comme par exemple la cellule A1. Afin de faciliter la
lecture du code VBA généré, il est préférable de choisir la même identification
des cellules dans le classeur dans lequel est enregistré la macro. Si tel n’est pas
le cas, activer la commande OUTILS OPTIONS, cliquer sur l'onglet GENERAL et
décocher la case STYLE DE REFERENCE L1C1.
Page 2
6) Dans la zone ENREGISTRER LA MACRO DANS, sélectionner l'option CE
CLASSEUR ; la macro MACRO1 n’est alors disponible que dans le classeur T EST-
MACRO.XLS.
Page 3
EXECUTER UNE MACRO
3) Activer la commande
OUTILS MACRO MACROS.
4) Sélectionner la macro
MACRO1 et cliquer sur le
bouton EXECUTER.
EXERCICE
Créer une macro MACROMOIS qui écrit les noms de mois Janvier, Février et
Mars en colonne à partir de la cellule active. Utiliser l’enregistreur de macro
avec référence relative aux cellules.
Page 4
III. L’ENVIRONNEMENT VISUAL BASIC
EDITOR
III.1.
Page 5
L’EXPLORATEUR DE PROJETS
Page 6
LES MODULES DE CODE
Page 7
LES PROCEDURES
Une macro est appelée en VBA une procédure, c’est une suite d'instructions qui
ne retourne pas de valeur.
VBA permet également d’écrire des fonctions. Une fonction est une suite
d'instructions qui retourne une valeur. Nous les étudierons plus loin.
Une instruction exécute une tâche précise. Elle est généralement écrite sur une
seule ligne.
Exemple :
Range("A1").Select
Page 8
MODIFIER UNE MACRO
Modifier la macro MACRO1 pour que la date du jour soit écrite dans la cellule
G2 en caractères gras et italiques.
1) Pour que la date du jour soit écrite dans la cellule G2 (et non dans la cellule
G1) en caractères gras et italiques (et non plus seulement en italique), il faut :
(a) modifier l'instruction Range("G1").Select en remplaçant G1 par G2 ; (b)
ajouter à la fin de la procédure l'instruction Selection.Font.Bold=True.
2) Activer la commande FICHIER ENREGISTRER TEST-MACRO.XLS.
Page 9
EXERCICE
Modifier la macro pour que le nom de mois Avril soit écrit, en caractères gras et
italiques, dans la cellule qui se trouve dans la colonne de droite et sur la même
ligne que la cellule où est écrit Janvier.
Janvier Avril
Février
Mars
Page 10
IV. LES DIVERS MOYENS POUR EXECUTER
UNE MACRO
Nous vous présentons plusieurs moyens pour exécuter une macro dans EXCEL de
manière plus conviviale qu’à partir de la commande OUTILS MACRO MACROS.
6) Fermer la fenêtre MACRO en cliquant sur son bouton ANNULER ou sur son
bouton de fermeture ().
Page 11
EXECUTER UNE MACRO A PARTIR D'UN
BOUTON D'UNE BARRE D'OUTILS
3) Sélectionner BOUTON
PERSONNALISE dans la liste
COMMANDES et le faire glisser
vers la barre d'outils.
4) Le bouton MODIFIER LA
SELECTION devient alors actif.
Cliquer dessus et activer la
commande AFFECTER UNE
MACRO…
Page 12
COMMENT CREER UNE NOUVELLE BARRE D'OUTILS ?
Page 13
EXECUTER UNE MACRO A PARTIR D'UN
MENU
Page 14
COMMENT CREER UN NOUVEAU MENU ?
3) Sélectionner NOUVEAU
MENU dans la liste COMMANDES
et le faire glisser vers la barre
de menu entre les menus
FENETRE et ? d’EXCEL.
Page 15
V. LE MODELE OBJET D’EXCEL
LES OBJETS
LES COLLECTIONS
Page 16
L’ACCES AUX OBJETS
Pour faire référence à une plage de cellules donnée, il faut utiliser l’objet
Range.
Exemple : Range("A1:B4") permet de faire référence à la plage de cellules
A1:B4 et renvoie un objet Range.
Pour faire référence à un objet dans une collection, on peut soit utiliser le
numéro de sa position dans la collection, soit son nom.
Exemple :
Worksheets(1) permet de faire référence à la première feuille de calcul du
classeur actif et renvoie un objet Worksheet.
Workbooks("Classeur1.xls").Worksheets("Feuil1") permet de faire référence
à la feuille de calcul de nom Feuil1 du classeur de nom Classeur1.xls et
renvoie un objet Worksheet.
EXERCICE
Page 17
LES PROPRIETES DES OBJETS
Chaque objet est défini par un ensemble de propriétés, qui représentent les
caractéristiques de l’objet.
Pour faire référence à une propriété d’un objet donné, il faut utiliser la syntaxe
Objet.Propriété.
Exemple :
La propriété Value de l’objet Range désigne la valeur de l’objet spécifié.
Range("A1").Value = "AgroParisTech" affecte la valeur AgroParisTech à
la cellule A1.
La propriété ActiveCell de l’objet Application renvoie un objet Range, qui
fait référence à la cellule active de la feuille de calcul.
ActiveCell.Font.Bold = True permet d’affecter le style gras à la cellule
sélectionnée (Font est une propriété de l’objet Range qui retourne un objet
Font contenant les attributs de police (taille, couleur, style, ...) de l’objet
Range. Bold est une propriété booléenne de l’objet Font qui correspond au
style gras).
La propriété Selection de l’objet Application renvoie l’objet sélectionné
dans la fenêtre active. Le type de l'objet renvoyé dépend de la sélection en
cours.
EXERCICES
Page 18
LES METHODES DES OBJETS
Les méthodes représentent les actions qui peuvent être effectuées par un objet
ou que l'on peut appliquer à un objet.
Pour faire référence à une méthode d’un objet donné, il faut utiliser la syntaxe
Objet.Méthode.
Exemple :
La méthode Select de l’objet Range permet de sélectionner une cellule ou une
plage de cellules.
Range("A1").Select sélectionne la cellule A1.
EXERCICES
Sub MacroSelection()
Range("A1:B6").Select
Selection.Font.Bold = True
Selection.Value = "Bonjour"
End Sub
Compléter cette macro pour que Bonsoir soit écrit dans la cellule B6.
Page 19
LES EVENEMENTS
Nous verrons plus loin que les contrôles placés dans une boîte de dialogue
(boutons de commande, zones de texte, ...) peuvent répondre à des événements.
Les classeurs et les feuilles de calcul peuvent également répondre à des
événements.
Pour qu’un objet réponde à un événement, il faut écrire du code VBA dans la
procédure associée à l’événement considéré.
Ecrire une procédure qui détecte chaque nouvelle plage de cellules ou cellule
sélectionnée par l’utilisateur dans la feuille de calcul F EUIL1 du classeur TEST-
MACRO.XLS et colorie son fond en bleu.
Page 20
1) Ouvrir le classeur TEST-MACRO.XLS, puis l’éditeur de Visual Basic (activer la
commande AFFICHAGE BARRE D'OUTILS VISUAL BASIC et cliquer sur l'objet
VISUAL BASIC EDITOR).
zone
zone Objet qui référence tous les objets contenus dans Procédure
le module qui référence toutes les procédures et fonction
de code.
Page 21
L’instruction Selection.Interior.ColorIndex = 41 semble intéressante
puisqu’elle parle de couleur. Pour obtenir de l’aide sur cette instruction,
sélectionner dans le code la propriété ColorIndex et appuyer sur la touche F1.
L’aide en ligne de l’éditeur de Visual Basic permet d’obtenir les informations
suivantes :
La propriété Interior d’un objet Range renvoie un objet Interior qui
correspond à la couleur de fond d’une plage de cellules.
La propriété ColorIndex d’un objet Interior permet de déterminer la couleur
de fond.
Pour obtenir de l’aide sur un objet, une propriété ou une méthode donnée,
sélectionner dans le code cet objet, cette propriété ou cette méthode et
appuyer sur la touche F1.
EXERCICE
Ecrire une procédure qui affiche Bonjour ! dans la cellule active avec la police
suivante : taille 12, style italique, couleur rouge, à chaque fois que l’utilisateur
active la feuille de calcul FEUIL2.
Page 22
L’EXPLORATEUR D’OBJETS
L’explorateur d’objets recense l’ensemble des objets disponible dans VBA, leurs
propriétés, leurs méthodes et les événements qui leur sont associés.
Pour ouvrir l’explorateur d’objets, aller dans l’éditeur de Visual Basic et activer
la commande AFFICHAGE EXPLORATEUR D'OBJETS.
Double cliquer sur l’objet voulu dans la colonne CLASS (le membre dans la
colonne MEMBRE) de la zone RESULTATS DE LA RECHERCHE, pour le voir
apparaître dans la zone CLASSES (la zone MEMBRES) située en dessous.
Page 23
La zone CLASSES affiche l’ensemble des objets disponibles dans la bibliothèque
sélectionnée.
Des icônes permettent de distinguer les objets, les propriétés, les méthodes et les
événements.
icône désignant un objet
icône désignant une propriété
icône désignant une méthode
icône désignant un événement
Pour obtenir de l’aide sur un objet ou un membre, sélectionner cet objet dans
la zone CLASSES ou ce membre dans la zone MEMBRES et cliquer sur la touche
F1.
EXERCICE
Rechercher la fonction qui permet de tester si une cellule est vide (« empty » en
anglais).
Ecrire une procédure qui colorie une cellule en rouge si elle est vide et en bleu
sinon à chaque fois que l’utilisateur double clic sur une cellule du classeur.
Page 24
COMMENT OBTENIR DE L’AIDE :
QUELQUES ASTUCES
Utiliser l’explorateur d’objets pour découvrir les objets disponibles dans VBA
et les propriétés, méthodes et événements qui leur sont associés.
Utiliser la touche F1 pour obtenir de l’aide sur un objet, une propriété, une
méthode ou un événement, dans un module de code ou dans l’explorateur
d’objets.
Page 25
VI. LES FONCTIONS DEFINIES PAR
L’UTILISATEUR
VBA offre la possibilité de créer ses propres fonctions, qui peuvent être utilisées
dans EXCEL comme n’importe quelle fonction intégrée.
Une fonction est une suite d'instructions qui retourne une valeur. Elle
commence par le mot clé Function suivi du nom de la fonction et d’une liste
d’arguments entre parenthèses, qui peut être vide. Elle se termine par le mot clé
End Function. Une fonction a la syntaxe suivante :
Function NomFonction([argument_1,..., argument_n])
Instructions
...
NomFonction = Expression ‘valeur de retour
...
End Function
Une fonction indique la valeur à retourner en initialisant son nom avec la valeur
de retour.
Attention : Dans VBA, les arguments d’une fonction sont séparés par des
virgules, alors que dans EXCEL ils sont séparés par des points-virgules.
Page 26
CREER UNE FONCTION PERSONNALISEE
Ecrire une fonction qui calcule la surface d’un cercle à partir de son rayon.
Attention : Dans VBA les réels sont écrits avec des points, alors qu’ils sont
écrits avec des virgules dans EXCEL.
Page 27
EXERCICE
Page 28
UTILISER LES FONCTIONS INTEGREES
D’EXCEL
Pour utiliser une fonction intégrée d’E XCEL dans VBA, il faut préciser à VBA
où peut être trouvée cette fonction. Pour cela, il faut faire précéder le nom de la
fonction de l’objet WorkSheetFunction.
Attention : Toutes les fonctions intégrées d’EXCEL ne sont pas disponibles dans
VBA !
Pour connaître les fonctions intégrées d’EXCEL disponibles dans VBA, activer la
commande AFFICHAGE EXPLORATEUR D'OBJETS dans l’éditeur de Visual Basic et
rechercher les membres de l’objet WorkSheetFunction.
Attention : Il est fortement conseillé d’utiliser une fonction intégrée d’E XCEL
pour faire un calcul donné, si cette dernière existe, plutôt que de définir sa
propre fonction, qui serait moins efficace en terme de temps de calcul.
Page 29
EXERCICE
Page 30
VII.LE LANGAGE VBA
Nous présentons dans ce chapitre les éléments du langage VBA qui sont
communs à toutes les applications MICROSOFT OFFICE et plus largement aux
langages de programmation, même si la syntaxe et les mots clés varient d’un
langage à l’autre.
Une variable permet de stocker une valeur pouvant être modifiée au cours de
l’exécution d’un programme.
Exemple :
Sub MacroTestVariable()
valeur = Range("A1").value
If valleur >= 18 And valleur <= 20 Then Range("B1").value = "OK"
End Sub
Quelque soit la valeur de la cellule A1, cette macro n’écrira pas "OK" dans la
cellule B1. Pourtant VBA ne détecte aucune erreur dans le code.
Page 31
Option Explicit
Sub MacroTestVariable()
Dim valeur
valeur = Range("A1").value
If valleur >= 18 And valleur <= 20 Then Range("B1").value = "OK"
End Sub
VBA détecte une erreur à la compilation : la variable valleur n’est pas définie.
Par défaut, une variable non typée est du type Variant, qui permet de stocker
n’importe quel type de données.
Dans un soucis d’efficacité du code, il est préférable de typer ses variables. Une
variable de type Variant prend, en effet, plus de mémoire que n’importe quel
autre type et utilise plus de ressource système pour son traitement (identification
du type effectif de la variable et éventuellement conversion).
Page 32
Exemple :
Dim Nom As String
Nom = "Jean " & "Dupond" ‘l’opérateur & permet de concaténer des
chaînes de caractères
Dim Age As Byte
Age = 23
Remarque sur l’initialisation des variables : Selon leur type, les variables ne sont
pas initialisées avec la même valeur :
les variables de type Byte, Integer ou Long sont initialisées à 0 ;
les variables de type Single, Double ou Currency sont initialisées à 0 ;
les variables de type Boolean sont initialisées à False ;
les variables de type String sont initialisées à "" (la chaîne vide) ;
les variables de type Date sont initialisées à 00:00:00 ;
les variables de type Variant sont initialisées à "" (la chaîne vide) (il en est
de même pour les variables déclarées implicitement).
Page 33
La portée des variables
Exercice
Une constante permet d’attribuer un nom à une valeur fixe. La déclaration d’une
constante se fait à l’aide du mot clé Const comme suit :
Const NomConstante [As Type] = valeur
Page 34
Exemple :
Public Const Pi As Single = 3.14159265358979
Function SurfaceCercle (Rayon As Double) As Double
SurfaceCercle = Pi * Rayon * Rayon
End Function
Page 35
L’instruction With...End With
L’instruction With...End With est utile lorsque les références à un objet sont
répétées plusieurs fois dans une petite section de code.
Exemple :
Sub ModifiePolice(MaPlage As Range)
MaPlage.Select
Selection.Font.Size = 12
Selection.Font.ColorIndex = 3
Selection.Font.Italic = True
End Sub
Exercice
Page 36
EXECUTER UNE PROCEDURE SANS
ARGUMENT
Les procédures avec arguments et les fonctions ne peuvent être exécutées que
par d’autres procédures ou fonctions et n'apparaissent pas dans la liste des
macros de la boîte de dialogue M ACRO (commande OUTILS MACRO MACROS de
EXCEL).
Page 37
LES ENTREES ET SORTIES STANDARDS
La fonction MsgBox
La fonction MsgBox affiche un message dans une boîte de dialogue, attend que
l'utilisateur clique sur un bouton, puis renvoie un entier indiquant le bouton
choisi par l'utilisateur. Elle a la syntaxe suivante (les arguments entre crochets
sont facultatifs) :
MsgBox(prompt[,buttons][,title][,helpfile, context])
où prompt est le message affiché dans la boîte de dialogue, buttons correspond
au type de boutons de la boîte de dialogue et title est le titre de la boîte de
dialogue (cf. aide en ligne de l’éditeur de Visual Basic à l’aide de la touche F1.).
Exemple :
Dans l’instruction Call MsgBox("Bonjour ! ", , "Accueil"), les valeurs des
arguments sont spécifiées par position : les arguments doivent alors être saisis
dans le bon ordre et des virgules supplémentaires doivent être inclues pour les
arguments manquants.
Cette instruction peut être réécrite en spécifiant les valeurs des arguments par
nom comme suit : Call MsgBox(prompt:="Bonjour ! ", Title:="Accueil")
L’ordre entre les arguments n’a alors plus d’importance et il n’y a pas besoin de
virgules supplémentaires pour les arguments manquants.
Page 38
Il existe deux manières de spécifier les valeurs des arguments d’une
fonction : par position ou par nom. Lorsque les valeurs des arguments sont
spécifiées par nom, il faut utiliser le signe := entre le nom de l’argument et
sa valeur.
Dans l’exemple précédent, une question est posée à l’utilisateur, mais sa réponse
n’est pas récupérée : on ne sait pas s’il a passé une bonne journée. Il se pose
alors le problème de récupérer la valeur de retour de la fonction MsgBox. Pour
ce faire, il ne faut pas utiliser l’instruction Call pour appeler MsgBox.
reponse = MsgBox(prompt:="Avez-vous passé une bonne journée?")
Page 39
La fonction InputBox
La fonction InputBox affiche une invite dans une boîte de dialogue, attend que
l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le contenu de la
zone de texte sous la forme d'une chaîne de caractère. Elle a la syntaxe suivante
(les arguments entre crochets sont facultatifs) :
InputBox(prompt[,title][,default][,xpos][,ypos] [,helpfile,context])
où prompt est le message affiché dans la boîte de dialogue et title est le titre de
la boîte de dialogue (cf. aide en ligne de l’éditeur de Visual Basic).
Page 40
RECAPITULATIF SUR LES PARENTHESES
ET LES LISTES D’ARGUMENTS
Les procédures et les fonctions peuvent avoir des arguments. Voici un petit
récapitulatif sur leur appel avec arguments.
Il existe un autre moyen pour appeler une procédure ou une fonction dont on ne
veut pas récupérer la valeur de retour : ne pas utiliser l’instruction Call et ne pas
placer ses arguments entre parenthèses.
Exemple :
MsgBox "Bonjour ! ", , "Accueil"
Lors de l’appel d’une procédure ou d’une fonction, les valeurs de ses arguments
peuvent être spécifiées par position ou par nom.
Exemple :
‘arguments spécifiés par position
Call MsgBox("Bonjour ! ", , "Accueil")
Page 41
EXERCICE
Ecrire une procédure qui calcule la surface d’un cercle à partir du rayon donné
par l’utilisateur.
Page 42
LES ENONCES CONDITIONNELS
Les sections Then et Else d’une instruction If ne peuvent contenir qu’une seule
instruction et doivent être écrites sur une seule ligne.
Exemple :
If test = True Then Call MsgBox("Vrai") Else Call MsgBox("Faux")
Le bloc If
Page 43
VBA offre la possibilité d’utiliser les opérateurs logiques suivants : Or, Xor (ou
exclusif), And, Not.
Exemple :
Sub BonjourHeureIf()
Dim heure As Integer
Dim mes As String
heure = Left(Time, 2) 'récupération de l'heure, 2 caractères les plus à gauche
‘de la valeur de retour de la fonction Time
If heure > 7 And heure < 12 Then
mes = "Bonjour"
ElseIf heure >= 12 And heure < 18 Then
mes = "Bon après-midi"
ElseIf heure >= 18 And heure < 22 Then
mes = "Bonne soirée"
Else
mes = "Bonne nuit"
End If
Call MsgBox(mes)
End Sub
Exercice
Ecrire une procédure qui teste si la cellule active est vide ou non. Si elle n’est
pas vide, la procédure affiche un message avec sa valeur.
Page 44
LES ENONCES ITERATIFS
VBA fournit deux structures pour répéter en boucle les mêmes instructions :
l’instruction Do...Loop et l’instruction For...Next.
La boucle Do...Loop
La boucle Do...Loop est utilisée lorsque l’on veut que la répétition des
instructions s’arrête quand une condition donnée est vérifiée. On distingue
plusieurs syntaxes possibles.
Avec ces deux boucles, les instructions peuvent ne jamais être exécutées. Pour
qu’elles soient exécutées au moins une fois, on peut utiliser l’une des deux
syntaxes suivantes :
Exercice
Que fait la boucle suivante (la fonction LCase convertit tous les caractères en
minuscules) ? La Réécrire avec l’instruction Do...Loop While.
Do
rep = InputBox("Voulez-vous continuer ? (O/N)")
Loop Until LCase(rep) = "n"
Page 45
La boucle For...Next
Exercice
Ecrire une procédure qui permet de calculer la surface d’un rectangle tant que
les valeurs de sa hauteur et de sa largeur situé dans les colonnes A et B sont
connues (les cellules ne sont pas vides).
Page 46
La boucle For Each...Next
L’instruction Exit
Exemple :
La boucle suivante s’arrête lorsque la réponse rep est n ou N :
Do
Rep = InputBox("Voulez-vous continuer ? (O/N)")
If LCase(rep) = "n" Then Exit Do
Loop
Exercice
Vous pourrez utiliser la boucle For Each...Next. pour parcourir les lignes
(propriété Rows de l’objet Range) de la plage de cellules MaPlage.
Page 47
LES TABLEAUX
Exemple :
Dim TabInt(10) As Integer ‘tableau de 10 entiers
TabInt(0)=12 ‘accès au premier élément du tableau
TabInt(9)=36 ‘accès au dernier élément du tableau
Les tableaux sont très utiles pour traiter des listes d’éléments. La fonction Array
renvoie une variable de type Variant contenant un tableau.
Exemple :
Dim ListeJours As Variant
ListeJours = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi",
"Samedi", "Dimanche")
Exercice
Page 48
LE DEBOGAGE
Il s’agit maintenant de corriger les erreurs logiques qui sont les plus difficiles à
repérer. L’éditeur de Visual Basic propose plusieurs outils de débogage dans le
menu DEBOGAGE.
Page 49
1) Ouvrir le classeur ELEVES.XLS.
Page 50
6) Insérer de nouveau des lignes dans la liste de données pour obtenir la même
liste de données que celle du point (1).
Page 51
11) Une solution possible au bogue est de dérouler une boucle commençant par
la dernière cellule de la liste de données.
Sub SupprLignesVidesCorrigée()
Dim compteur As Integer
Dim DerLigne As Integer
Dim MaPlage As Range
Set MaPlage = Range("A1:A19")
DerLigne = MaPlage.Rows.Count
For compteur = DerLigne To 1 Step -1
If IsEmpty(Range("A" & compteur)) Then Rows(compteur).Delete
Next compteur
End Sub
Pour information
Les principaux outils de débogage proposés par l’éditeur de Visual Basic dans le
menu DEBOGAGE sont les suivants.
Exécution pas à pas : pour exécuter un programme pas à pas, placer le
curseur dans la procédure à exécuter et activer la commande D EBOGAGE PAS
A PAS DETAILLE. L’exécution d’une procédure pas à pas permet d’en
examiner le déroulement instruction après instruction. La procédure est dite
en mode arrêt. On peut à tout moment retourner à un mode d’exécution
normal.
Les bulles d’aide : pour visualiser la valeur d’une variable, activer la
commande OUTILS OPTIONS, cliquer sur l’onglet EDITEUR et cocher la case
INFO-BULLES AUTOMATIQUES. Lorsque le curseur est placé au dessus d’une
variable, la valeur de celle-ci apparaît dans une bulle d’aide.
La fenêtre Variables locales : pour visualiser la valeur des variables et
constantes aux différents stades de l’exécution pas à pas d’un programme,
activer la commande AFFICHAGE FENETRE VARIABLES LOCALES.
Les points d’arrêt : les points d’arrêt permettent d’interrompre l’exécution
d’un programme sur une instruction précise. Pour définir un point d’arrêt sur
une instruction douteuse, activer la commande DEBOGAGE BASCULER LE
POINT D’ARRET.
Les espions : pour espionner la valeur d’une variable, activer la commande
DEBOGAGE AJOUTER UN ESPION. Pour afficher la fenêtre ESPIONS, activer la
commande AFFICHAGE FENETRE ESPIONS.
La pile d’appels : la pile d’appels recense toutes les procédures ou fonctions
en cours d’exécution, selon leur ordre d’appel. Pour afficher la pile des
appels, activer la commande AFFICHAGE PILE DES APPELS.
Page 52
VIII. LES OBJETS USERFORM
Les objets UserForm sont des boîtes de dialogue définies par l’utilisateur.
2) Pour renommer la feuille de calcul FEUIL1, cliquer avec le bouton droit sur
l'onglet FEUIL1, activer la commande RENOMMER et taper CLIENTS.
Page 53
On peut distinguer deux phases dans la création d’un objet UserForm :
Page 54
CREER UN OBJET USERFORM
fenêtre objet associée boîte à outils qui apparaît lorsque la fenêtre objet a
à l’objet USERFORM1
Page 55
On veut créer l’objet UserForm suivant :
Zone de texte Zone de liste modifiable
Intitulé
bouton de commande
Cet objet est composé des contrôles suivants : un I NTITULE et une ZONE DE LISTE
MODIFIABLE pou saisir le titre du client (Madame, Mademoiselle ou Monsieur),
trois INTITULES et trois ZONES DE TEXTE pour saisir le nom, le prénom et le
téléphone du client et deux BOUTONS DE COMMANDE OK et Annuler.
Pour placer un contrôle dans l’objet UserForm, cliquer sur l’objet voulu de
la BOITE A OUTILS et le faire glisser vers l’objet UserForm. Dès qu’un contrôle a
été placé sur l’objet UserForm, définir son nom grâce à la propriété NAME.
Attention : Il est recommandé d’utiliser des noms évocateurs pour ses contrôles,
qui permettent d’identifier le type d’objet qu’ils représentent et leur utilité.
Page 56
AFFICHER ET FERMER UN OBJET
USERFORM
Page 57
ASSOCIER DU CODE A UN OBJET
USERFORM
Les contrôles placés sur un objet UserForm et l’objet UserForm lui même sont
réceptifs aux événements utilisateurs qui les affectent (clic souris sur un bouton
de commande, saisie d'une valeur dans une zone de texte…). On peut ainsi créer
des procédures dites procédures événementielles, qui se déclencheront lorsque
l’événement correspondant sera repéré.
Page 58
Associer du code à un bouton de commande
Exercice
Page 59
Initialiser un objet UserForm
Page 60
3) Compléter la procédure événementielle UserForm_Initialize qui apparaît
comme suit :
Private Sub UserForm_Initialize()
Dim i As Integer
i=1
Do Until IsEmpty(Worksheets("Divers").Range("A" & i))
Call Me.ComboBoxTitre.AddItem(Worksheets("Divers"). _
Range("A" & i).Value)
i=i+1
Loop
End Sub
Remarque : Pour écrire une instruction sur plusieurs lignes, il faut, à la fin de
chaque ligne, taper sur la barre d’espace et sur le trait continu (_).
Page 61
Accéder aux contrôles d’un objet UserForm
Jusqu’à présent, nous avons créé un objet UserForm pour saisir de nouveaux
clients, et, ouvert et fermé cet objet. Cependant, si l’utilisateur saisit des données
dans l’objet UserForm, ces dernières ne sont pas recopiées dans liste de
données EXCEL correspondante.
Page 62
Attention : Si, dans les procédures événementielles ButtonOK_Click et
ButtonAnnuler_Click, on utilise la méthode Hide pour masquer l’objet
UserForm à la place de l’instruction Unload, les ressources mémoires de
l’objet UserForm ne sont pas libérées. Lors d’un nouvel affichage de l’objet
UserForm avec la méthode Show, les différents contrôles de l’objet ont alors
les mêmes valeurs que lorsqu’il a été masqué.
Page 63
AFFICHER UN OBJET USERFORM A
PARTIR D’UN BOUTON D’UNE FEUILLE DE
CALCUL
1) Aller dans EXCEL et cliquer sur l’onglet CLIENTS. Positionner le curseur sur
une cellule vide de la feuille de calcul CLIENTS et activer la commande
AFFICHAGE BARRE D'OUTILS FORMULAIRES.
Page 64
IX. BIBLIOGRAPHIE
Paul McFedries. Excel pour Windows 95, Secrets d’experts. SAM’S, 1995.
Rob Bovey, Stephen Bullen, John Green, Robert Rosenberg. VBA pour Excel
2002 La référence du programmeur. CampusPress, 2002.
Page 65