Académique Documents
Professionnel Documents
Culture Documents
VBA
Version 4.2
Avril 2019 Semestre 4 www.arsene-ayi.info
contact@arsene-ayi.info
ESPC / Cours de Programmation VBA Semestre 4
Objectifs du Cours
À l’issue de ce cours, les élèves ingenieurs seront capables de :
B. Saisir un chiffre........................................................................................................... 12
7- Conversion de types............................................................................................................. 36
Chapitre V : DECLARATION DES VARIABLES ET DES CONSTANTES EN
VBA ............................................................................................................................... 37
I. Les variables .................................................................................................................. 37
II. Les constantes............................................................................................................. 39
III. Les outils d’interactions.............................................................................................. 40
1- La MsgBox ........................................................................................................................... 40
2- L’InputBox ........................................................................................................................... 41
CHAPITRE VII : QUELQUES ASTUCES EN VBA .................................................. 42
I- Mise en forme du projet VBA ........................................................................................ 42
II- L’exécution du programme ........................................................................................ 43
III- Débogage .................................................................................................................... 44
EXERCICES PRATIQUES ............................................................................................ 46
I) Conception de la boîte de dialogue ................................................................................. 46
II) Programmation des contrôles de la boîte .................................................................... 47
III) Améliorations possibles .............................................................................................. 49
IV) Création d'une commande spécifique ......................................................................... 50
✓ La première méthode est de double cliquez sur l’icône suivant situé sur le
bureau :
Pour démarrer rapidement un logiciel souvent utilisé, il est conseillé d’avoir un raccourci
sur le Bureau de Windows. Pour le créer, il faut procéder comme suit : Cliquez sur le bouton
« Démarrer », situé sur la barre des tâches (ou bien appuyez sur la touche Windows de
votre clavier).
Cliquez ensuite sur « Tous les programmes ». Puis, faites un clic droit sur le logiciel choisi
et sélectionner « envoyer vers » dans le menu contextuel qui s’affiche. Cliquez enfin sur «
Bureau (Créer un raccourci ». L’icône du logiciel apparaît alors sur le Bureau avec une
petite flèche noire. Vous venez donc de créer le raccourci du logiciel.
Pour lancer votre programme il suffit de Double-cliquez sur son raccourci sur le bureau ou
passer par le menu Démarrer en cliquant sur son icône.
La fenêtre principale d’un logiciel est ce qui s’affiche à l’écran au démarrage de celui-ci.
Lorsqu’on passe le pointeur sur un bouton ou une étiquette, une « info-bulle » explicative
s’affiche généralement. Une info-bulle est un rectangle qui contient une information
décrivant l’objet pointé.
Pour activer un bouton, il faut cliquez dessus. Il change alors de couleur.
La fenêtre principale comprend divers éléments communs aux logiciels Microsoft
Office 2007 (cf. chapitre précédent)
La barre de titre par exemple située en haut de l’écran, porte le nom du fichier ouvert
suivi du nom du logiciel utilisé.
A son extrémité droite, elle comprend trois boutons servant à réduire, agrandir ou restaurer
et fermer la fenêtre.
La barre de titre est composée du nom du logiciel (ici Microsoft Excel) puis du nom que
l’on va donner au classeur Excel. Par défaut, Excel nomme son premier classeur
« classeur1». Un classeur est Excel c’est la même chose que vous avez chez vous. C’est un
espace de travail mis à votre disposition pour construire vos tableaux. Il est composé de 3
feuilles que l’on peut voir en bas à gauche. On peut ajouter ou retirer des feuilles a ce
classeur.
Une feuille est organisée en lignes et en colonnes. Les lignes sont identifiées par des
nombres (de 1 à 65536) et les colonnes sont identifiées par des lettres (de A à IV soit 256
colonnes).
La cellule est l’élément de base de la feuille et se trouve à l’intersection d’une ligne et
d’une colonne. Chaque cellule est identifiée par une référence spécifique, qui fait appel
aux numéros de ligne et de colonne où elle se trouve dans une feuille. Par exemple, dans
chaque feuille, la cellule qui se trouve à l’intersection de la colonne A et de la ligne 1 est
donc identifiée par sa référence A1.
Une cellule peut recevoir :
✓ Des données numériques ou alphanumériques,
✓ Des formules de calcul,
✓ Des commentaires.
La cellule active est celle qui apparaît en sur brillance à l’écran. C’est la cellule
sélectionnée dans laquelle vous travaillez. On peut voir aussi la référence de la cellule
active dans la barre de formule.
Lorsque vous copiez une référence utilisant des références relatives, Excel ajuste
automatiquement les références contenues dans la formule collée pour faire référence
aux différentes cellules par rapport à la position de la formule. Dans l'exemple suivant, la
formule =A1 qui est dans la cellule B2 a été copiée dans la cellule B3. Excel a ajusté la
formule de la cellule B3 en la changeant en =A2, qui fait référence à la cellule située à
une cellule au-dessus et une cellule à gauche de la cellule B3.
Si vous ne voulez pas que Excel ajuste les références lorsque vous copiez une
formule dans une autre cellule, utilisez une référence absolue.
Par exemple, si votre formule multiplie la cellule A5 par la cellule C1 (=A5*C1) et que vous
la copiez dans une autre cellule, Excel ajuste les deux références. Vous pouvez créer une
référence absolue en plaçant le signe $ avant les éléments de la référence qui ne doivent
pas être modifiés.
Par exemple, pour créer une référence absolue à la cellule C1, ajoutez les signes $ à la
formule : =A5*$C$1
4) Créer un classeur
Par défaut, au démarrage du logiciel un classeur vierge contenant trois feuilles de calcul
vierges est ouvert à l’écran. Si ce n’est pas le cas, cliquez sur le bouton au
niveau du bouton office pour ouvrir un nouveau classeur Excel. La boîte de dialogue
suivante apparaît alors :
Dans cette boîte de dialogue, choisissez un modèle de classeur (vierge ou que vous avez
créé) ou un modèle conçu par Microsoft.
Remarque : Si vous choisissez la dernière solution (Modèle conçu par Microsoft), il
faudra que vous ayez un accès Internet pour pouvoir vous connectez à Microsoft
Online. Puis cliquez sur le bouton Créer .
5) Ouvrir un classeur existant
Pour ouvrir un classeur existant soit vous cliquez sur le bouton suivant dans le
menu affiché par le bouton démarrer. La boîte de dialogue suivante apparaît :
Il suffit alors de naviguer dans vos dossiers pour trouver le fichier que vous souhaitez
ouvrir. Vous double cliquez sur ce fichier pour l’ouvrir à l’écran.
Vous pouvez sélectionner un support de stockage différent (clé USB, CD ROM (D) …) en
cliquant sur l’explorateur de Windows dans la colonne à l’extrême gauche. Par défaut ces
dans mes documents que MS Excel vous envoie.
Vous pouvez ouvrir un dossier en cliquant sur son nom puis en cliquant sur le bouton Ouvrir
ou en double cliquant sur son nom.
Vous pouvez ouvrir un fichier en cliquant sur son nom puis en cliquant sur le bouton Ouvrir
ou en double cliquant sur son nom. Le document se charge alors.
6) Manipulation des feuilles de calcul
a) Renommer une feuille de calcul
Vous avez deux solutions pour renommer une feuille de calcul :
✓ Vous choisissez l’onglet Accueil puis le groupe cellule puis vous
sélectionnez renommer la feuille dans le menu Format
✓ Vous double cliquez sur l’onglet de la feuille à renommer en bas à gauche
➢ il suffit de cliquer sur le bouton situé juste à côté du nom des feuilles
➢ vous allez dans le groupe cellule de l’onglet Accueil puis vous sélectionnez
insérer une feuille dans le menu insérer.
➢ Vous pouvez aussi utiliser la combinaison des touches MAJ + F11 du clavier
voulu.
e) Supprimer une feuille de calcul d’un classeur
Pour supprimer une feuille de calcul d’un classeur, il faut se placer sur la feuille que
l’on veut supprimer. Ensuite, il suffit de choisir Supprimer une feuille dans le groupe
cellule de l’onglet Accueil.
Remarque : Toutes les données présentes sur votre feuille supprimées seront
définitivement perdues après enregistrement du classeur.
8) La fermeture du logiciel
Pour fermer le fichier en cours, cliquez sur la croix en haut à droite (case rouge). S’il était
le seul fichier ouvert, on quitte également l’application. Pour le fermer sans quitter
l’application : bouton Office > cliquez sur la commande Fermer.
Pour fermer tous les documents ouverts dans l’application, et pour quitter l’application :
bouton Office > Quitter l’application (bouton × situé en bas à droite de la fenêtre).
D’une façon générale, une croix sur une fenêtre ou un volet permet de le fermer.
B. Saisir un chiffre
Pour saisir un chiffre, utilisez le pavé numérique situé sur la partie droite du clavier. Il faut
que le bouton VERR NUM soit allumé pour que les chiffres apparaissent.
Par défaut, les chiffres sont alignés à droite. Il est inutile de saisir les zéros après la virgule
car Excel ne les mémorisent pas.
Pour saisir une date, il faut saisir les barres de fractionnement entre les le jour, le mois et
l’année (/). Pour saisir une heure, il faut ajouter les deux points entre les heures et les
minutes.
Si vous voulez sélectionner par exemple la cellule DE12012, vous pouvez le faire avec les
flèches de direction mais ça sera assez long. Excel nous offre une possibilité d’atteindre
une cellule rapidement. Choisissez Atteindre dans le groupe Edition contenu dans l’onglet
Accueil. La boîte de dialogue suivante apparaît :
Dans la zone référence, saisissez la référence de la cellule que vous voulez atteindre, puis
cliquez sur le bouton OK. Excel, vous place alors à l’endroit que vous lui avez indiqué.
Pour enlever la sélection, il suffit soit de cliquer à un endroit sur la feuille, soit se déplacer
avec une des flèches de direction.
tout en maintenant la touche CTRL enfoncée, il faut cliquer sur les cellules que l’on veut
sélectionner. L’image suivante vous montre la sélection de cellule non adjacente :
Comme pour la sélection de plusieurs lignes, il faut cliquer sur la première colonne
que l’on veut sélectionner. Tout en maintenant le clic enfoncé, il suffit de déplacer la souris
vers la droite ou vers la gauche. L’image suivante vous montre la sélection de plusieurs
colonnes :
G. Modifier un tableau
1- Déplacer une cellule
Si vous avez saisi du texte dans une cellule et que vous vous êtes trompés de
cellule, il n’est pas nécessaire de supprimer tout ce qu’il y a dans la cellule et de le retaper
dans une autre cellule. Pour déplacer une cellule, sélectionner la cellule que vous voulez
déplacer. Mettez votre souris sur un des bords de la cellule puis cliquer. Tout en
maintenant cliquer, déplacer la cellule sur la cellule en question.
carré noir. La souris devient un petit + noir. Maintenant, cliquez et déplacez dans les cellules
de droites ou du dessous. Normalement, une suite logique vient de se former.
Remarque : Cette technique est très employée pour copier des formules de calcul assez
complexe.
Choisissez le bouton « Décaler les cellules vers la droite » ou « décaler les cellules vers le
bas » puis cliquez sur le bouton OK.
4- Supprimer une cellule
Pour supprimer une cellule de la feuille sur laquelle vous êtes en train de travailler,
il suffit de cliquer sur la flèche situé juste à côté de l’outil Supprimer dans le groupe
Cellules localisé dans l’onglet Accueil. Sélectionnez ensuite Supprimer des cellules dans
le menu déroulant. Voici les boîtes de dialogue due vous devez avoir :
+ addition = égal à
> supérieur à
- soustraction < inférieur à
* multiplication >= supérieur ou égal à
/ Division <= inférieur ou égal à
^ élévation à la puissance <> différent de
Exemples de
Fonctions Commentaires
syntaxe
addition =B7+B8 additionne le contenu des cellules B7 et B8
soustraction =C5-C8 soustrait le contenu de la fonction C8 du contenu
de la cellule C5
multiplication =A5*A7 multiplie le contenu de la cellule A5 par celui de la
cellule A7
division =F5/F6 divise le contenu de la cellule F5 par celui de la
cellule F6
somme =SOMME(A5:A8) effectue la somme des cellules A5 à A8
produit =PRODUIT(E4:E9) effectue le produit des cellules E4 à E9
maximum =MAX(R5:R9) sélectionne le plus grand contenu des cellules R5
à R9
Minimum =MIN(E5:E12) sélectionne le plus petit contenu des cellules E5 à
E12
moyenne =MOYENNE(A2:A15) calcule la moyenne arithmétique des cellules A2 à
A15
le menu Insertion ou de cliquer sur l’icône suivant dans l’onglet Formules. La boîte
de dialogue suivante apparaît :
Il suffit de sélectionner une catégorie pour voir les fonctions de cette catégorie apparaître
au bas de la fenêtre. Voici quelques fonctions intéressantes :
A- Fonction SOMME
La fonction SOMME additionne, une liste de cellule les unes à la suite des autres.
C’est comme si on faisait une addition.
C- La fonction MAX
La fonction MAX donne la valeur maximale d’une plage de cellule. Si dans la plage
sélectionnée, il n’y a aucune valeur, la fonction MAX renvoie la valeur 0.
Dans la cellule D1, la valeur qui sera renvoyée par la fonction MAX sera 15.
D- La fonction MIN
La fonction MIN donne la valeur minimale d’une plage de cellule. Si dans la plage
sélectionnée, il n’y a aucune valeur, la fonction MIN renvoie la valeur 0.
Dans la cellule D1, la valeur qui sera renvoyée par la fonction MIN sera 6.
F- La fonction NB()
Il permet d’obtenir le nombre d’entrées numériques dans un champ numérique d’une plage
ou d'une matrice de nombres.
Syntaxe : =NB(valeur1;valeur2;...)
valeur1,valeur2, ... représentent les 1 à 30 arguments qui peuvent contenir ou référer
à différents types de données, mais seuls les nombres sont comptés.
G- La fonction NBVAL()
Cette fonction compte le nombre de cellules qui ne sont pas vides.
Syntaxe : =NBVAL(valeur1;valeur2;...)
valeur1,valeur2, ... représentent les 1 à 30 arguments correspondant aux valeurs à
compter
H- La fonction NB.SI()
Compte le nombre de cellules à l'intérieur d'une plage qui répondent à un critère donné.
Syntaxe : =NB.SI(plage; critère)
Plage : représente la plage de cellules dans laquelle vous voulez compter les cellules.
Critère : représente le critère, ex primé sous forme de nombre, d'expression ou de texte,
qui détermine les cellules à compter.
Exemple :
=NB.SI(plage,"pommes") : Nombre de cellules contenant pommes dans la plage
• champ : indique la colonne utilisée dans la f onction. Vous pouvez spécifier l'argument
champ sous forme de texte en mettant l'étiquette de colon ne entre guillemets, par
exemple, "Age" ou "Rendement", ou sous forme d'un nombre représentant la position de
la colonne dans la liste : 1 pour la première colonne, 2 pour la deuxième colonne et ainsi
de suite.
• critères : représente la plage de cellules qui contient les conditions spécifiées. Vous
pouvez utiliser n' importe quelle plage comme argument critères, à condition toutefois
qu'elle comprenne au moins une étiquette de colonne et au moins une cellule située
sous l'étiquette de colonne pour spécifier la condition.
Les fonctions ET() et OU() vont être utilisées dans la condition (ou test) posée en fonction
du résultat attendu
➢ La fonction ET().
Les conditions posées seront multiples et pour que la réponse aux conditions soit "VRAI",
il faudra qu’elles se vérifient toutes.
Syntaxe: =SI(ET(Cond1;Cond2;...;CondN);action à réaliser si les N conditions sont
satisfaites;action à réaliser si au moins une des conditions n'est pas satisfaite)
➢ La fonction OU()
Les conditions posées seront multiples et pour que la réponse aux conditions soit "VRAI",
il faudra que l'une au moins se vérifie.
L- La fonction RECHERCHEV()
Cherche une valeur donnée dans la colonne située à l'extrême gauche d'une matrice et
renvoie une valeur correspondante dans une autre colonne. Utilisez la fonction
RECHERCHEV lorsque les valeurs sont en colonne et RECHERCHEH lorsque vos valeurs
de comparaison se trouvent en ligne.
Syntaxe : =RECHERCHEV(valeur_cherchée; table_matrice; no_index_col;
valeur_proche)
▪ valeur_cherchée est la valeur à trouver dans la première colonne de la matrice.
L'argument valeur_cherchée peut être une valeur, une référence ou une chaîne de
texte.
▪ table_matrice est la table de données dans laquelle est exécutée la recherche
de la valeur. Utilisez une référence à une plage ou un nom de plage, par exemple
Base de données ou Liste.
▪ no_index_col est le numéro de la colonne de l'argument table_matrice dont la
valeur correspondante doit être renvoyée. Si l'argument no_index_col est égal à 1,
la fonction renvoie la valeur dans la première colonne de l'argument table_matrice
; si l'argument no_index_col est égal à 2, la valeur est renvoyée dans la deuxième
colonne de l'argument table_matrice, et ainsi de suite. Si l'argument no_index_col
est inférieur à 1, la fonction RECHERCHEV renvoie la valeur d'erreur #VALEUR! Et
si l'argument no_index_col est supérieur au nombre
de colonnes de l'argument table_matrice, la fonction RECHERCHEV renvoie la
valeur d'erreur #REF!
• valeur_proche représente une valeur logique indiquant si vous souhaitez que la
fonction RECHERCHEV recherche une valeur exacte ou voisine de celle que vous avez
spécifiée. Si cet argument est VRAI ou omis, une donnée proche est renvoyée.
En d’autres termes, si aucune valeur exacte n’est trouvée, la valeur immédiatement
inférieure à valeur_cherchée est renvoyée. Si valeur_proche est FAUX, la fonction
RECHERCHEV renvoie exactement la valeur recherchée. Si aucune valeur ne correspond,
la valeur d'erreur #N/A est renvoyée.
Travaux Dirigés
Mlle NATI dirige la société Palace spécialisé dans la vente de parfums et des produits de
beauté. Il désire informatiser le salaire des commerciaux. La société dispose d’une
vingtaine de commerciaux.
Les commerciaux sont rémunérés sur la base d’un salaire fixe de 8 000 FCFA par mois et
d’une prime de 12% du chiffre d’affaire réalisé par mois.
Une prime de 5% du chiffre d’affaire est ajoutée au salaire de chaque employé si le Chiffre
d’Affaire mensuel est supérieur ou égal à 70 000 FCFA.
En fin d’année un bonus de 7% du chiffre d’affaire est accordé aux commerciaux dont le
chiffre d’Affaire est supérieur ou égal à 840 000 FCFA. Ce bonus est directement ajouté
au salaire du mois de Décembre sur la fiche de l’application.
Etablir la liste des formules permettant de calculer les primes, les salaires mensuels, le
Chiffre d’Affaire Total et le Montant du bonus annuel.
Si vous utilisez une version d'Excel antérieure à 2007, ajoutez les barres "Boîtes à
outils Contrôles" et "Formulaires" :
Pour travailler avec du code VBA, nous avons besoin d'un éditeur, celui-ci est déjà
installé et vous pouvez l'ouvrir avec le raccourci "Alt F11" :
1) Les projets
Une application sous Excel est appelée projet. Un projet regroupe, un ensemble
d'éléments comprenant des objets Microsoft Excel, qui sont les feuilles de calcul du
classeur considéré, des boîtes de dialogue, des modules et des modules de classe. Un
projet est rattaché en fait à chaque classeur, et contient toutes les feuilles du classeur,
mais aussi les éventuels modules, les boîtes de dialogue, etc. comme on le verra par la
suite. Tout programme VBA un tant soit peu complexe contient plusieurs de ces éléments.
La commande Affichage/Explorateur de projet fait apparaître une fenêtre permettant
d'explorer les projets de tous les classeurs ouverts. Par défaut, le projet associé à un
classeur quelconque s'appelle VBA Project.
2) Les procédures
En Visual Basic, une unité de programme s’appelle une procédure, ou une macro. Une
procédure est une liste d’instructions, en nombre généralement restreint, respectant la
syntaxe du langage Visual Basic, et auxquelles on a donné un nom.
Une procédure commence par Sub et termine par End Sub. Elle exécute des actions mais
ne renvoie pas de valeurs.
Une macro comporte une suite d’instructions qui vont s’exécuter les unes après les
autres. La première ligne indique le nom de la macro et (éventuellement) les variables
qu’elle doit traiter et la dernière ligne termine toujours par End Sub.
Exemple1:
Sub Essai()
Suite d’instructions
‘commentaires éventuels
End Sub
Exemple 2: Procédure pour dire bonjour
Sub AfficherBonjour()
MsgBox "Bonjour M.AYI"
End Sub
NB
Lorsque vous taper une apostrophe ‘ le texte qui suit n’est pas considéré comme une
instruction exécutable, mais comme un commentaire. Cela permet de préciser certaines
informations utiles au programmeur.
3) Les fonctions
Une fonction répète une action bien précise. Nous allons programmer une fonction et apprendre à
l'utiliser. On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par
simple appel dans le corps du programme principal. Cette notion de sous-programme est généralement
appelée fonction (ou procédure) dans la plupart des langages de programmation.
Une fonction accepte un ou plusieurs arguments en entrée et retourne un argument.
Elle commence par Function et se termine par End Function
En VBA, on distingue deux types de procédures :
• Les procédures Sub, ensemble d'instructions ne retournant pas de valeur
• Les procédures Function, ensemble d'instructions retournant une valeur en sortie
Les procédures permettent d'exécuter dans plusieurs parties du programme une série
d'instructions, cela permet une simplicité du code et donc une taille de programme minimale.
D'autre part, une fonction peut faire appel à elle-même, on parle alors de fonction récursive (il
ne faut pas oublier de mettre une condition de sortie au risque sinon de ne pas pouvoir arrêter
le programme...).
VBA comporte des fonctions financières et mathématiques, etc dont on peut trouver la liste
dans l’explorateur d’objets, à l’intérieur de la librairie VBA.
Néanmoins comme le montre la figure ci-dessous pour les fonctions mathématiques, le nombre
de fonctions est très modeste. Ceci est évidemment la conséquence du fait que l’on a déjà à
notre disposition l’ensemble des fonctions mathématiques, statistiques, financières, etc.
d’Excel. Pour faire appel à ces fonctions sous VBA, il convient soit de taper
Application.WorksheetFunction ou plus simplement WorksheetFunction en appliquant ceci soit
à un nombre, soit à une variable, soit à une plage. Ainsi pour calculer la racine carrée de 49, on
pourra si l’on utilise la fonction Racine (Sqrt en anglais) d’Excel soit taper directement :
WorksheetFunction.Sqrt(49)
Si 49 est par exemple la valeur contenue dans la cellule B4 alors on pourra écrire :
WorksheetFunction.Sqrt(Range(‘‘B4’’))
Arsène AYI / www.arsene-ayi.info Page 29 / 51
ESPC / Cours de Programmation VBA Semestre 4
Ou encore :
WorksheetFunction.Sqrt(Cells(4,2))
Si 49 est la valeur affectée à une variable de type Double appelée x alors on a:
WorksheetFunction.Sqrt(x)
4) Les modules
Les modules contiennent le code d'une application. Il est possible de structurer les
programmes en plusieurs modules. Chaque module contiendra alors le code rattaché à
une action particulière. Excel offre des caractéristiques très intéressantes, qui facilitent
l'édition du code. Ainsi, le code est affiché avec différentes couleurs permettant de
différencier les mots clés ou réservés, les commentaires, etc.
De plus, la syntaxe est automatiquement vérifiée en arrière-plan et les procédures et
fonctions sont clairement séparées.
Lorsque vous quittez le module de programmation, cette macro sera incluse dans la liste
des macros, et vous pourrez en demander l’exécution. Cette macro sera liée au classeur
en cours, mais son exécution pourra concerner des données contenues dans d’autres
classeurs.
5) Les boîtes de dialogue
Les boîtes de dialogue ou userforms sont des feuilles particulières, destinées à
gérer les interactions entre l'utilisateur et le programme. Lors de la conception de la boîte
de dialogue, le programmeur dispose d'un certain nombre d'objets, qu'il peut insérer dans
la boîte de dialogue. Ces objets font partie de la boîte à outils que l'on active par la
commande Affichage/Boîte à outils. Il suffit alors de sélectionner l'élément désiré et de
les créer dans la boîte de dialogue. Il appartient ensuite au programmeur d'écrire les
procédures permettant de gérer la boîte de dialogue obtenue, par exemple pour récupérer
la valeur d'une saisie réalisée dans une zone de saisie. Le code ad hoc est à placer dans
le module de classe associé à la boîte de dialogue, que l'on active par exemple par le
bouton ad hoc dans l'explorateur de projet, si la boîte en question est sélectionnée.
A- Les opérateurs
1- Opérateurs arithmétiques
Les opérateurs suivants permettent de réaliser les opérations élémentaires : + ; - ; * ; /
De plus, les opérateurs Mod et / permettent de déterminer respectivement le reste et le quotient
d'une division entière. Enfinn & permet de concaténer deux chaînes de caractères.
2- Opérateurs de comparaison
Les opérateurs suivants permettent de réaliser les comparaisons classiques : = ; <> ;< ;> ; <= ;
>=
Il n'y a donc pas de différence entre l'opérateur d'affectation et l'opérateur de comparaison. Les
opérateurs Like et Is permettent, de plus, respectivement de comparer deux chaînes de
caractères et deux variables de type objet.
3- Opérateurs logiques
Les principaux opérateurs suivants permettent les opérations classiques : Not ; And ; Or ; Xor
4- Structures conditionnelles
a) If Then Else ElseIf
L'instruction If Then Else permet d'écrire une structure conditionnelle.
La syntaxe est la suivante :
If <condition> then
<instruction1>
Else
<instruction2>
End If
Arsène AYI / www.arsene-ayi.info Page 32 / 51
ESPC / Cours de Programmation VBA Semestre 4
Lorsque la condition est réalisée, la première suite d'instructions est exécutée. Dans le cas
contraire, c'est bien sûr la deuxième suite d’instructions qui est exécutée. Noter que l'instruction
Else est facultative.
Dans le cas où il est nécessaire d'imbriquer plusieurs structures conditionnelles, on peut utiliser
l'instruction ElseIf :
If <condition> Then
<instructions>
ElseIf <condition>
<instructions>
End If
Remarque :
La structure conditionnelle ne présente qu'une instruction, il est également possible de l'écrire
sur une seule ligne en omettant l'instruction End If. La syntaxe proposée ici a l'avantage d'être
plus claire et de permettre le rajout ultérieur d'instructions supplémentaires.
b) Select Case
L'instruction Select Case permet d'écrire une structure conditionnelle dans laquelle une
expression doit être comparée à plusieurs valeurs. Elle remplace alors avantageusement
l'instruction ElseIf. La syntaxe est la suivante :
Select Case <variable>
Case valeur1:
<instructions>
Case valeur2:
<instructions>
...
Case Else:
<instructions>
End Select
Lorsque la variable est égale à une valeur répertoriée, les instructions correspondantes sont
exécutées, et l'instruction Select Case se termine. La ligne Case Else permet d'inclure toutes les
occurrences de la variable non répertoriées auparavant. Elle est facultative.
5- Les Boucles
a) Do While Loop
L'instruction Do While Loop permet de réaliser une boucle conditionnelle. La syntaxe est la
suivante :
Do While <condition>
<instructions>
Loop
La condition est évaluée au début du traitement. Si elle est vraie, les instructions sont exécutées.
Ensuite la condition est réévaluée, et ainsi de suite.
b) Do Until Loop
L'instruction Do Until Loop est similaire à Do While Loop. Cependant, les instructions
contenues dans le corps de l'instruction sont d'abord exécutées, à la suite de quoi la condition
est évaluée. La syntaxe est donc la suivante :
Do
<instructions>
Loop Until <condition>
c) For Step Next
L'instruction For Step Next est utilisée pour répéter une action selon un nombre d'itérations
déterminé. La syntaxe est la suivante :
For <variable> = valeur1 To valeur2 Step <pas>
<Instructions>
Next <variable>
Step sert à indiquer le pas d'itération. Cette précision est toutefois facultative : par défaut, la
valeur du pas utilisé est 1.
d) For Each In Next
For Each In Next est une variante de l'instruction For Step Next. Elle permet de réaliser une
itération en parcourant tous les objets contenus dans une collection. La syntaxe est la suivante:
For Each <objet> In <collection>
<instructions>
Next <object>
Le code suivant permet par exemple de renommer toutes les feuilles de calcul du classeur actif:
Dim i As Integer
Dim feuille As sheet
...
i=0
For Each feuille In ActiveWorkbook.Sheets
i=i+1
'Cstr (i) permet de convertir l'entier i en une chaîne de caractères
feuille.Name = "Feuil" + CStr(i)
Next feuille
A noter dans le programme ci-dessus la ligne de commentaire introduite par une apostrophe.
6- Gestion des programmes
a) Exit
Arsène AYI / www.arsene-ayi.info Page 34 / 51
ESPC / Cours de Programmation VBA Semestre 4
L'instruction Exit permet de sortir de la séquence en cours. Par exemple, pour terminer
prématurément une procédure, on écrira :
Sub essai()
...
If <condition> Then
Exit Sub
End If
...
End Sub
De même, les commandes Exit Do et Exit Next permettent de quitter une structure
conditionnelle et une boucle For Next.
b) End et Stop
L'instruction End permet de mettre fin à une séquence, comme on l'a déjà vu avec les
instructions End Sub, End Function ou End If.
L'emploi de End de façon isolée est plus intéressant et permet de mettre fin au programme en
cours, en éliminant de la mémoire les variables utilisées, les boîtes de dialogue éventuellement
chargées, les fichiers ouverts par la commande Open, etc.
En effet, par défaut, toutes ces informations sont conservées en mémoire à la fin de l'exécution
d'un programme.
L'instruction Stop stoppera de façon analogue le programme en cours, mais conservera cette
fois l'ensemble des informations en cours.
c) On Error GoTo
L'instruction On Error Goto permet de gérer les erreurs qui peuvent apparaître dans un
programme. Le programmeur a ainsi la possibilité de prévoir les erreurs possibles, en réagissant
en conséquence. La syntaxe est la suivante :
Sub essai()
On Error GoTo <étiquette>
...
<étiquette>:
'traitement de l'erreur
End Sub
L'instruction On Error GoTo 0 permet à tout moment d'invalider le contrôle des erreurs par la
séquence On Error GoTo. Pour traiter correctement l'erreur, il est possible d'utiliser la
propriété Number de l'objet Err.
Celle-ci renvoie le numéro d'erreur. Enfin, l'instruction Resume permet de reprendre le cours
normal du programme en ignorant la cause de l'erreur et la commande On Error Resume Next
permet d'ignorer systématiquement les erreurs, en sautant les instructions correspondantes.
Voici une illustration du mécanisme de traitement des erreurs
Sub essai()
Dim i As Integer
On Error GoTo erreur
'ouverture du fichier 'classeur1.xls'
Workbooks.Open ("classeur1.xls")
...
erreur:
'message d'information
i = MsgBox("Impossible d'ouvrir le fichier 'classeur1.xls'!", vbCritical)
'reprise du programme
Resume
End Sub
7- Conversion de types
Il est parfois nécessaire d'opérer des conversions de types. VBA permet d'effectuer ces
opérations grâce à une série d'instructions, dont voici quelques exemples :
▪ CInt : conversion en type de données entier ;
▪ CStr : conversion en type de données string ;
▪ CBdl : conversion en type de données double ;
▪ CDate : conversion en type de données date ;
▪ CVar : conversion en type de données variant.
En VB, la déclaration des variables n’est pas obligatoire tant que l’option Explicit
n’est pas activée. La déclaration des variables en VB est de la forme suivante :
X=X+1
La variable X contient 11
Ici, le X à gauche du signe = fait référence au « récipient » tandis que le X à
droite fait référence à son contenu.
Remarque
Le signe « = » est une instruction d’affectation (et non de comparaison). Cette
instruction se lit donc comme : « mettre dans le récipient X son contenu plus 1 »
Il est évident qu’on ne peut pas mettre dans une variable des valeurs d’un autre
type
Par exemple :
DIM X as Integer
X = « Hello », produit une erreur car on essaie de mettre une chaîne de caractères
dans une variable de type numérique de même :
DIM Montexte as String
Montexte = 10
Il faut donc faire attention lorsqu’on veut mettre le contenu d’une cellule dans une
variable.
Le nom d’une variable doit commencer par une lettre, et ne doit ensuite contenir que des
lettres ou des chiffres (surtout pas d’espace, ni de lettre accentuées comme é, à, …)
Les lettres minuscules ou majuscules ne sont pas différenciées
Il est conseillé de donner des noms qui évoquent le contenu de la variable (exemple : Moy).
Cela facilite simplement la lecture du programme mais ce n’est pas obligatoire.
Les types de données utilisés pour les variables en VBA sont récapitulés dans le tableau
ci-dessous :
Const remise=0.05
Dans l’exécution du programme il sera alors impossible d’exécuter une nouvelle affectation de
valeur à la variable remise.
Il existe aussi des constantes prédéfinies. Selon qu’elles sont des constantes d’Excel, de VBA
ou d’Office, elles comportent le préficexe xl, vb ou mso.
Ainsi, sous VBA, les couleurs sont définies par les constantes vbRed, vbGreen, vbGrey,etc. .
Sous Excel, les directions des déplacements verticaux vers le haut ou vers le bas sont définies
par les constantes xlUp et xlDown, tandis que les directions horizontales vers la gauche et vers
la droite sont définies par les constantes xlToLeft et xlToRight.
MsgBox(message,[boutons],[titre],[autresvariables])
✓ MsgBox(“message”,“sélection”)
✓ MsgBox(“message”,vbYesNo,“sélection”)
✓ MsgBox(“message ”,vbYesNoCancel,“sélection”)
Lorsque les boutons comportent un choix, par exemple pour vbYesNo ou vbYesNoCancel, il
est nécessaire de stocker la réponse dans un objet (soit une variable de type string, soit de type
variant). La valeur stockée sera alors soit vbYes, soit vbNo, soit vbCancel et on peut alors
utiliser cette valeur pour construire une boucle de contrôle conditionnellement à cette valeur
dans le programme.
2- L’InputBox
MsgBox permet seulement des réponses codées binaires (oui/non) ou ternaires
(oui/non/annulation). Parfois il est nécessaire de renvoyer une réponse qui soit un nombre ou
un mot. Pour donner ces réponses, on peut utiliser l’autre boîte de dialogue qu’est l’inputBox.
Un exemple utilisant l’InputBox est celui représenté sur la figure ci-dessous :
L’input comporte un titre (”nom de la feuille ”), un contenu (”Entrez le nom de la feuille que
vous voulez activer ”), une zone de saisie où l’on peut taper la réponse souhaitée, et enfin deux
boutons pour terminer l’utilisation de l’inputBox (avec les deux boutons OK, annuler). Même
si d’autres arguments peuvent être définis, ceux cités peuvent suffire pour la plupart des
applications. Pour obtenir l’inputBox de la feuille, on a tapé :
q=InputBox(’’ Entrez le nom de la feuille que vous voulez activer ’’, ’’ nom de la feuille ’’)
q est la variable dans laquelle on va stocker la réponse. Elle peut être soit une variable de type
variant, soit selon la nature de la réponse une variable de type string (pour les chaînes de
caractère), de type integer, double pour les nombres, etc.
Lorsque le projet devient suffisamment important il est alors conseillé tout d’abord de multiplier
les commentaires au sein de chaque procédure, comme le montre la figure ci-dessous, pour
rappeler la version du programme et rendre aussi lisible que possible les différentes étapes du
programme.
Ensuite il est souvent souhaitable d’expliciter les différentes parties de chaque programme,
voire de séparer le programme en plusieurs procédures.
Enfin, si le projet comporte de multiples procédures, il est conseillé de les lister dans un
module (appelé par exemple contenu) en y précisant l’objet de chaque procédure et
sa place dans la hiérarchie du programme, comme le montre la figure ci-après :
Application.ScreenUpdating=False
à laquelle correspondra à la fin du programme la commande inverse :
Application.ScreenUpdating=True
Comme ce gel de l’image peut enlever à l’utilisateur des repères au cours de l’exécution, il
convient parfois de substituer à l’image des messages apparaissant sur la barre de statut d’Excel
en utilisant des syntaxes du genre :
Arsène AYI / www.arsene-ayi.info Page 43 / 51
ESPC / Cours de Programmation VBA Semestre 4
Application.StatusBar=False
Enfin, pour gérer la possible absence de la barre d’état à l’écran, il peut être utile de la faire
apparaître en codant au début du programme :
Application.DisplayStatusBar=True
III- Débogage
Sauf miracle, la rédaction de chaque programme comportera toujours des erreurs qui
provoqueront des dysfonctionnements lors des premières exécutions, et l’affichage d’agaçantes
fenêtres comme celle-ci.
Comme on peut le voir sur cet exemple, elle offre la possibilité d’un débogage. L’activation de
cette option conduira l’ordinateur à faire pointer une flèche jaune sur la ligne comportant
l’erreur.
Si l’on pointe sur les éléments de cette ligne, la bulle information donnera alors soit la valeur
des éléments, soit l’erreur à l’origine du bug. Ainsi dans l’exemple, la variable y est un vecteur
colonne comportant 5 composantes alors que la boucle For...Next itère sur 6 composantes.
Aussi pour i = 6, il est impossible d’affecter sin(22 _ i=56) au vecteur y. D’où le message :
<L’indice n’appartient pas à la sélection>, qui était également le message de la fenêtre d’erreur
initiale (mais sans avoir l’information qu’elle s’appliquait à la variable y.
Pour accélérer la détection des bugs, il est cependant conseillé avant tout lancement du
programme de procéder à un debugage. Le menu de debugage offre la possibilité entre plusieurs
options.
Le debugage pas à pas détaillé permet d’itérer le programme ligne par ligne. En utilisant le
raccourci clavier de la touche F8.
On passe ainsi de ligne en ligne, en vérifiant que le code s’exécute correctement ou non. Si le
programme est trop long, ou s’il comporte des boucles longues, il convient alors d’introduire
des points d’arrêt qui permettront l’exécution normale jusqu’au point d’arrêt. Ainsi sur la figure
ci-dessous, en cliquant sur le bord de la fenêtre de code au niveau du début de la seconde boucle,
on a introduit un point d’arrêt (en rouge). Si l’on déclenche normalement le programme il
s’exécutera (sauf présence d’erreurs) jusqu’à ce point puis s’arrêtera on pourra alors soit le
relancer normalement, soit en cliquant la touche F8 passer en débogage au pas par pas détaillé.
EXERCICES PRATIQUES
On se propose de réaliser une macro permettant la saisie d'informations à l'écran. Plus
précisément, on souhaite concevoir une boîte de dialogue dans laquelle l'utilisateur rentrera son
nom, sa qualité et sa date de naissance. Les informations saisies devront alors être reportées
dans une feuille de calcul Excel.
La première étape consiste à créer la boîte de dialogue. Pour cela, insérer une nouvelle boîte de
dialogue sous l'éditeur en utilisant la commande Insertion/UserForm. Faire ensuite apparaître
la boîte à outils grâce à la commande Affichage/boîte à outils. Créer deux zones d'édition
(Text-Box) pour la saisie du nom et de la date de naissance, en indiquant avec deux zones de
texte (Label) le nom du champ considéré. Pour la saisie de la qualité, une liste déroulante
permettant le choix entre plusieurs champs prédéfinis (Mlle, Mme et M.) est tout indiqué. Créer
enn les deux boutons classiques OK et Annuler.
Penser à dénir correctement les propriétés Cancel et Default des boutons.
Ne pas oublier aussi de donner un titre à la boîte de dialogue (propriété Caption) et également
de se préoccuper de l'ordre de tabulation.
Lors de la conception d'une boîte de dialogue, utiliser la barre d'outils Userform et le menu
Format de l'éditeur pour améliorer sa mise en forme.
La boîte de dialogue finale devrait ressembler à la figure ci-dessous :
Une fois la boîte de dialogue créée, il reste à affecter des noms personnalisés aux différents
contrôles utilisés. Cette opération n'est pas obligatoire mais facilitera la programmation par la
suite. Pour cela, afficher les propriétés de chaque objet et modifier le champ nom. On choisira
par exemple les noms suivants :
❖ zone de saisie du nom : nom ;
❖ zone de saisie de la date de naissance : date_naissance ;
❖ zone déroulante : qualité ;
❖ bouton OK: bouton_ok ;
❖ bouton Annuler : bouton_annuler ;
Une fois la boîte créée, il est nécessaire de programmer le comportement des différents
contrôles. Il faut pour cela inclure du code dans le module de classe associé à la boîte de
dialogue.
Il est nécessaire tout d'abord de prévoir, lors de l'initialisation de la boîte de dialogue, le
remplissage de la zone déroulante. Ensuite, il faut programmer le comportement des deux
boutons créés.
Lorsque l'utilisateur appuie sur Annuler, il faut fermer la boîte de dialogue. Un clic sur OK
devra provoquer la fermeture de la boîte de dialogue et l'écriture des informations saisies dans
une feuille de calcul. Voici le code permettant de réaliser ces traitements :
'force la déclaration explicite des variables
Option Explicit
'procédure évènement gérant un clic sur le bouton OK
Private Sub bouton_ok_Click()
'écriture des saisies dans la feuille de calcul
'Feuil1 (cellules A1, B1 et C1)
With Sheets("Feuil1")
.Range("A1").Value = qualité.Text
.Range("B1").Value = nom.Text
.Range("C1").Value = date_naissance.Text
End With
'fermeture de la boîte de dialogue
Hide
End Sub
'procédure évènement gérant un clic sur le bouton Annuler
Private Sub bouton_annuler_Click()
'fermeture de la boîte de dialogue
Hide
End Sub
Dim i As Integer
'message d'erreur
'plus de renseignements
With date_naissance
.SetFocus
.Text = ""
End With
'fin de la procédure
Exit Sub
End If
With Sheets("Feuil1")
.Range("A1").Value = qualité.Text
.Range("B1").Value = nom.Text
.Range("C1").Value = date_naissance.Text
End With
Hide
Else
'message d'erreur
End If
End Sub
vbCritical, "Erreur")