Esgf Vba
Esgf Vba
Eric Ducros
Docteur en sciences de gestion
(e.ducros1@[Link])
Plan de la formation
Historique
• 1964 : Thomas Kurtz et John Kemeny, deux professeurs de
mathématiques du Dartmouth College en Californie créent le
B.A.S.I.C
Historique
• 1993 : lancement de VBA avec Microsoft Excel 5
• Le VBA est inclus dans tous les logiciels de la suite Office mais il
est surtout utilisé dans Excel
Utilité de VBA
• Automatiser des taches répétitives. Pour cela, on écrit ce que
l’on appel des macros. Les macros peuvent ensuite être
« appelées » pour exécuter la suite de tâches pour laquelle elles
sont conçues.
Utilité de VBA
• Créer des formulaires personnalisés : les formulaires sont des
boites de dialogue composées de zones de textes, listes
déroulantes, boutons… auxquels peut être associé du code VBA.
Vous pourrez ainsi créer des interfaces conviviales pour la saisie
ou l’affichage d’information.
Avantages
• Facile à apprendre
Inconvénients
• Langage interprété ==> peut être lent pour certaines tâches
Paramètres de sécurité
Paramètres de sécurité
3 4
Découverte de l’EDI
Paramètres de sécurité
Barre
d’outil
Explorateur de
projet
Explorateur de
projet
Découverte de l’EDI
L’enregistreur de macros
• Il est possible d’enregistrer les actions de l’utilisateurs sous
forme de code VBA
L’enregistreur de macros
• Exemple : enregistrer le changement de couleur d’une cellule
Découverte de l’EDI
L’enregistreur de macros
• Exemple : enregistrer le changement de couleur d’une cellule
Découverte de l’EDI
L’enregistreur de macros
• Exemple : enregistrer le changement de couleur d’une cellule
Découverte de l’EDI
L’enregistreur de macros
• Exemple : enregistrer le changement de couleur d’une cellule
Découverte de l’EDI
L’enregistreur de macros
• Exemple : enregistrer le changement de couleur d’une cellule
Découverte de l’EDI
Exercices
Exercice 1 : Essayer de reproduire les environnement de développement
présentés dans les captures d’écran ci-dessous grâce au menu Affichage
EDI N°1
Découverte de l’EDI
Exercices
Choisir « Explorateur de projet » dans le menu Affichage
EDI N°2
Découverte de l’EDI
Exercices
Choisir « Fenêtre Variables locales » dans le menu Affichage
EDI N°3
Découverte de l’EDI
Exercices
Réarranger « Explorateur de projet » et « Variables locales »
EDI N°4
Découverte de l’EDI
Exercices
Choisir « Fenêtre Exécution » dans le menu Affichage
EDI N°5
Découverte de l’EDI
Exercices
Exercice 2 :
Récupérer le code permettant de dessiner des bordures sur une plage de cellule
à l’aide l’enregistreur de macros.
Découverte de l’EDI
Exercices
Exercice 3 :
Récupérer le code permettant d’ouvrir un fichier Excel (ou autre) à l’aide
l’enregistreur de macros.
Plan de la formation
Introduction
• Travailler sur Excel c’est manipuler les éléments qui le
constituent :
‒ Excel lui-même ;
‒ les classeurs ;
‒ les feuilles ;
‒ les cellules.
Introduction
• On peut comparer les objets aux poupées russes.
Application
Excel
Introduction au modèle objet d’Excel
Introduction
• On peut comparer les objets aux poupées russes.
Application Classeurs
Excel Excel
Introduction au modèle objet d’Excel
Introduction
• On peut comparer les objets aux poupées russes.
Introduction
• On peut comparer les objets aux poupées russes.
Introduction
• Ce n’est là qu’une minuscule partie du modèle objet Excel, on
peut aller un peu plus loin :
Introduction au modèle objet d’Excel
Introduction
• Quel est l’intérêt de connaître cette représentation ?
Manipuler efficacement ces objets en VBA
Introduction
• Désigner un fichier Excel dans un dossier nécessite de parcourir
le chemin d’accès en séparant chaque dossier par un « \ » :
Introduction
• On comprend donc qu’il est nécessaire de connaître un peu le
modèle objet d’Excel afin de faire référence de manière claire
aux objets que l’on désire manipuler.
Introduction
• Si l’on devait à chaque fois préciser tout le chemin pour accéder
à une cellule cela deviendrait très vite ingérable et aurait pour
effet de produire un code illisible.
• Ainsi, certains préfixes sont toujours implicites et il n’y a donc
aucune nécessité de les préciser.
• La cellule A1 désignée dans le programme ci-dessus sera
considérée comme étant celle de la feuille active du classeur
dans lequel nous tapons le code
Du coup à quoi sert de connaître le chemin d’accès à un objet, je ne
comprends plus ?
Introduction au modèle objet d’Excel
Introduction
• La nécessité de préciser un chemin d’objet complet se fera
sentir lorsque nous travaillerons avec :
‒ deux feuilles du même classeur ;
‒ deux feuilles de deux classeurs différents ;
‒ Plusieurs feuilles de plusieurs classeurs.
Introduction au modèle objet d’Excel
• Les méthodes d’un objet sont les actions qu’il est possible de
faire sur un objet :
‒ Ouvrir/fermer un classeur
‒ Activer une feuille ou une cellule
‒ Copier le contenu d’une cellule
Introduction au modèle objet d’Excel
Exercice
Exercice 4 :
1) Ecrire une macro qui va ajouter une feuille en utilisant la
méthode « Add » de l’objet Worksheets.
Introduction
• Les instructions que l’on peut donner à un ordinateur se
regroupent en 4 catégories communes à beaucoup de langages
de programmation :
‒ l’affectation de variables
‒ La lecture et l’écriture
‒ les structures conditionnelles (tests)
‒ les structures itératives (les boucles)
• Mais il est également possible d’écrire dans toutes les cellules d’une
plage de valeurs à la fois. Par exemple, Système anglo-saxon, on utilise le
point pour les nombre comportant
des décimales
Range("C4:E6") = 100.4
cela permet d’écrire le nombre 100,4 dans toutes les cellules contenu
dans la plage C4 à E6.
Instructions de base du langage VBA
Range("F1") = Range("C4")
• Autre exemple :
Range("F1:F6") = Range("C4")
Range("C4") = Range("F1:F6")
L’affectation
• Dans les exemples qui précédent, on a utilisé le symbole « = »
pour écrire dans une cellule (ou plage de cellule).
Range("F1") = Range("C4")
L’affectation
• L’affectation se fait toujours dans le même sens : ce qu’il y a à
droite du symbole « = » est affecté à ce qu’il y a gauche. Il ne
faut donc jamais écrire :
36 = Range("C4")
• Attention !!!
Il ne faut pas confondre le symbole « = » de VBA avec le symbole
mathématique. Cela de désigne pas la même opération. En VBA
nous pourrons avoir une expression de la sorte :
x = x + 1
Instructions de base du langage VBA
Range("A1") = "salut"
Range("B1") = Range("A1")
et
Range("B1") = Range("A1")
Range("A1") = "salut"
?
Instructions de base du langage VBA
Range("B1") = 3 * 1 / (10 ^ 3 + 1)
Range("B1") = 1 + Sqr(3 ^ 2 + 2 ^ 4)
Exercices
Exercice 5 :
Ecrire une macro effectuant les taches suivantes :
‒ Ecrire « Société » dans la cellule A1
‒ Ecrire « Type de titre » dans cellule B1
‒ Ecrire « Ouverture » dans la cellule C1
‒ Ecrire « Fermeture » dans la cellule D1
‒ Ecrire « Iliad » dans la cellule A2
‒ Ecrire « Exon » dans la cellule A3
‒ Ecrire « Action » dans la cellule B2
‒ Copier le contenu de B2 dans B3
‒ Ecrire le nombre 100 dans les cellules C2 à D3
Instructions de base du langage VBA
Exercices
Exercice 6 :
Ecrire une macro produisant le résultat suivant en utilisant le moins
d’instructions possible (la feuille au départ est vide) :
Instructions de base du langage VBA
Exercices
Exercice 7 :
Vous disposez du tableau suivant :
1) Ecrire une macro qui ajoute le libellé « Cours moyen » en A5 et place le résultat du
calcul en B5 : p p
t t 1
p
2
2) Ecrire une macro qui ajoute le libellé « Ecart-type » en A6 et place le résultat en B6 :
p pt p 2 pt 1 p 2
Instructions de base du langage VBA
Exercices
Exercice 8 :
1) Ecrire une macro qui va demander une valeur numérique à
l’utilisateur et la placer dans la cellule E3.
2) Ecrire une deuxième macro qui va afficher la valeur de la cellule
E3 multipliée par 0,2 dans une boîte de dialogue…
Plan de la formation
Définition
• Dans un programme informatique, il est en permanence
nécessaire de stocker provisoirement des valeurs. Cela peut être
une valeur issue d’une cellule, le résultat d’un calcul
intermédiaire, etc
• L’image la plus simple que l’on puisse donner d’une variable c’est
de la comparer à une cellule d’un classeur Excel. En effet, une
variable va garder en mémoire une donnée comme une cellule
Excel. La différence réside dans le fait que la variable représente
un espace au sein de la mémoire vive de l’ordinateur (la RAM).
Variables et types de données
Définition
• Pourquoi ne pas toujours utiliser les cellules Excel ?
Déclaration
• La première chose à faire avant de pouvoir utiliser une variable
est de créer réserver un espace mémoire et de lui donner un
nom. Ceci se fait tout au début de l’algorithme, avant même les
instructions proprement dites. C’est ce qu’on appelle la
déclaration des variables.
Déclaration
• Une fois déclarée on peut faire deux choses avec une variable :
‒ lui affecter une valeur en utilisant l’opérateur d’affectation « = » ;
‒ accéder à son contenu tout simplement en « l’appelant ».
Déclaration
• Exemple : On réserve un espace mémoire
nommé CA_HT et destiné à
contenir uniquement des
nombres entiers.
• Exemple :
Dim s As String
s = "salut"
L’opérateur de concaténation
• On à déjà vu que l’on pouvait effectuer des opérations avec les
types numériques (addition, multiplication…).
• Il existe également une opération que l’on peut faire avec les
chaines de caractères que l’on appelle la concaténation.
L’opérateur de concaténation
• Exemple :
Alternance de parties
fixes et de parties
variables
Variables et types de données
L’opérateur de concaténation
• Exemple :
Variables et types de données
L’opérateur de concaténation
• Utilisation redondante de l’opérateur « & » :
Variables et types de données
Le type booléen
• En VBA, le type de données correspondant aux booléens est le
type Bool. On y stocke uniquement les valeurs logiques Vrai ou
Faux (ou leurs équivalents : Oui ou Non, Présent ou Absent et
finalement 1 ou 0).
• Exemple :
Dim Flag As Boolean
Flag = True
Le type Date
• Le type Date (qui en VBA s’écrit Date) est un type composite en
ce sens qu’il est constitué de 3 éléments : le jour, le mois et
l’année qui sont stockés en mémoire sous forme de nombres
entiers.
• Exemple :
Dim jour As Date
jour = #1/13/2008#
Le type Date
• Exemple :
Variables et types de données
L’option Explicit
• En VBA, il n’est pas obligatoire de déclarer les variables, il est
cependant très fortement conseillé de le faire.
Option Explicit
Le type Variant
• Il existe également un type spécial en VBA appelé Variant.
• On utilise ce type que s’il existe une bonne raison de le faire (par
exemple pour les variables tableaux).
Variables et types de données
Exercices
Exercice 9 :
Essayer de déterminer mentalement les résultats des macros ci-
dessous avant de les taper.
1) Qu’y aura-t-il dans les cellules A1 et B1 après l’exécution de
cette macro.
Sub Macro1()
Dim a As Integer
Dim b As Integer
a = 1
b = a + 3
a = 3
Range("A1") = a
Range("B1") = b
End Sub
Variables et types de données
Exercices
2) Qu’y aura-t-il dans les cellules A1, B1 et C1 après l’exécution de
cette macro.
Sub Macro2()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = 5
b = 3
c = a + b
a = 2
c = b - 1
Range("A1") = a
Range("B1") = b
Range("C1") = c
End Sub
Variables et types de données
Exercices
3) Qu’y aura-t-il dans les cellules A1 et B1 après l’exécution de
cette macro.
Sub Macro3()
Dim a As Integer
Dim b As Integer
a = 5
b = a + 4
a = a + 1
b = a - 4
Range("A1") = a
Range("B1") = b
End Sub
Variables et types de données
Exercices
4) Qu’y aura-t-il dans les cellules A1 et B1 après l’exécution de
cette macro.
Sub Macro4()
Dim a As Integer
Dim b As Integer
a = 5
b = 2
a = b
b = a
Range("A1") = a
Range("B1") = b
End Sub
Que se passe-t-il si on inverse les instructions en vert ?
Variables et types de données
Exercices
Exercice 10 :
Ecrire une macro inversant le contenu des cellules A1 et B1 (on
suppose bien sûr qu’elles contiennent déjà quelque chose).
Plan de la formation
Introduction
• Jusqu’ici nous avons codé des macros qui sont des programmes
déclarés de la manière suivante :
Sub nom_macro()
…
End Sub
• Il est possible d’associer un bouton pour déclencher l’exécution
d’une macro :
Codage de nouvelles fonctions en VBA
Les fonctions
• Il est également possible d’écrire des fonctions que l’on pourra
ensuite appeler dans une formule Excel (comme la fonction
Somme() par exemple).
Les fonctions
• Ainsi, pour définir une fonction soi-même, il faut indiquer quels sont les
paramètres (et leur type) nécessaires au calcul, il faut aussi définir le résultat
(et son type).
• Syntaxe générale :
avec :
‒ nom_fonction est le nom donnée à la fonction.
‒ arguments est la liste des paramètres de la fonction
‒ type_retourné est le type du résultat de la fonction
‒ valeur_renvoyé est le résultat de la fonction.
Codage de nouvelles fonctions en VBA
Les fonctions
• Exemple :
Les fonctions
• Une fonction peut aussi être exécutée depuis une macro :
Codage de nouvelles fonctions en VBA
Les fonctions
• Attention, dans VBA, une fonction ne peut jamais être exécutée
directement, elle doit toujours être appelée depuis une macro.
Exercices
Exercice 11 :
Question 1 :
Ecrire une fonction Mensualite_Constante (K, i , n) qui va calculer la
mensualité constante d’un emprunt à partir de la formule :
i
K
M= 12
12 n
i
1 1
12
avec K : le montant du capital emprunté en euros ;
i : le taux d’intérêt ;
n : la maturité de l’emprunt en années.
Codage de nouvelles fonctions en VBA
Exercices
Question 2 :
Ecrire une macro qui va demander à l’utilisateur d’entrer le capital K,
le nombre d’années n et le taux d’actualisation i et stocker chacune
de ses données dans des variables dont vous déterminerez le type.
Définition
• Une structure conditionnelle donne à un programme la possibilité
de « réagir » en fonction de certains évènements prévus.
Expression booléenne
• Une expression booléenne prendra la forme d’une égalité ou d’une inégalité
entre une variable et une va leur, deux variables ou même des cellules Excel :
‒ Variation_portefeuille < -5%
‒ CA_TTC >= 20 %
‒ Fonction_employé = « Cadre »
avec :
‒ expression_booléenne : égalité ou inégalité prenant la valeur vraie ou faux ;
‒ instructions : les instructions qui seront exécutées dans le cas où
expression_booléenne est vraie.
Structures conditionnelles
Sub test1()
Dim a As Integer
a = Range("A1")
If a > 0 Then
Range("B1") = "Positif"
End If
End Sub
Structures conditionnelles
If expression_booléenne Then
instructions_1
Else
instructions_2
End If
avec :
‒ expression_booléenne : égalité ou inégalité prenant la valeur vraie ou faux ;
‒ instructions_1 : les instructions qui seront exécutées dans le cas où
Expression_booléenne est vraie ;
‒ instructions_2 : les instructions qui seront exécutées dans le cas où
Expression_booléenne est fausse.
Structures conditionnelles
Sub test2()
Dim a As Integer
a = Range("A1")
If a > 0 Then
Range("B1") = "Positif"
Else
Range("B1") = "Negatif ou nul“
End If
End Sub
Structures conditionnelles
Sub test3()
Dim a As Integer
a = Range("A1")
If a > 0 Then
Range("B1") = "Positif"
ElseIf a = 0 Then
Range("B1") = "Nul"
Else
Range("B1") = "Negatif"
End If
End Sub
• Remarque : ici nous testons si a est égal à 0 avec a = 0. Dans un certain contexte le « = » est vu
comme le symbole mathématique et non pas comme l’opérateur d’affectation.
Tests imbriqués
• Il est possible d’imbriquer un test dans un test (et ainsi de suite…) :
If a>=0 Then
If a < 10 Then
Range("B1") = "inferieur à 10"
Else
Range("B1") = "superieur à 10"
End If
End If
Remarque : l’indentation (les tabulations du code entre les if, les else et
les end if) prend ici toute son importance afin d’identifier clairement la
structure du code.
Structures conditionnelles
on écrira plutôt :
C1 Or C2 C2 Vrai C2 Faux
C1 Vrai Vrai Vrai
C1 Faux Vrai Faux
Structures conditionnelles
Exercice
Exercice 12 :
Proposer 2 structures conditionnelles if différentes utilisant un
opérateur logique pour tester l’expression mathématique
suivante :
Var1 ∉ [8 ; 13]
8 13
Var1
Structures conditionnelles
Exercice
Exercice 13 :
a) Écrire une fonction qui prend 2 nombres entiers en paramètre et renvoie le plus grand des
2.
b) Écrire une fonction qui prend en paramètre un nombre entier et qui renvoie vrai si le
nombre est pair ou faux sinon (utiliser l’opérateur Mod et le type booléen).
c) Ecrire une fonction qui prend en paramètre un nombre entier et qui renvoie vrai si le
nombre est compris entre 10 et 20, ou faux sinon (utiliser le type booléen).
d) Même chose mais cette fois-ci, la fonction renvoi vrai si le nombre n’est pas compris entre
10 et 20 (utiliser le type booléen).
e) Écrire une fonction qui prend en paramètre la température de l'eau et renvoi une chaine
indiquant si elle est sous forme liquide, solide ou gazeuse (utiliser le type String pour le
Structures conditionnelles
Exercice
Exercice 14 :
Ecrire une fonction qui prend en paramètre l’âge d’un enfant et
donne comme résultat sa catégorie pour l’exercice d’une activité
sportive :
a) "Hors catégorie" pour les moins de 6 ans
b) "Poussin" de 6 à 7 ans
c) "Pupille" de 8 à 9 ans
d) "Minime" de 10 à 11 ans
e) "Cadet" après 12 ans
Structures conditionnelles
Exercice
Exercice 15 :
Les habitants de Zorglub paient l’impôt selon les règles suivantes :
‒ les hommes de plus de 20 ans paient l’impôt
‒ les femmes paient l’impôt si elles ont entre 18 et 35 ans
‒ les autres ne paient pas d’impôt
Définition
• Une structure itérative appelée aussi boucle est un ensemble
d’instructions permettant de répéter des lignes de codes.
Définition
• Il existe 2 types de boucles :
Do…Loop
• Cette boucle permet de répéter du code tant qu’une condiftion
est vérifiée ou jusqu’à ce qu’une condition soit vérifiée.
Do…Loop
• Comme le montre l’exemple précédent il est toujours possible
d’analyser une situation nécessitant une boucle Do…Loop de
deux façon amenant chacune à une version différente de Do…
Loop :
Do…Loop
• Syntaxe Do…Loop While :
Do
Instructions
Do…Loop
• Syntaxe Do…Loop Until :
Do
Instructions
Do…Loop
• Dans cet exemple nous allons demander l’âge de la personne
jusqu’à ce que ce que l’utilisateur entre un nombre positif :
Exemple 1
Sub Controler_Age()
Do
age = InputBox("Quel est ton age")
Loop While Age < 0
End Sub
Structures itératives
Do…Loop
Exemple 2
Sub Controler_Age()
Do
Le sens de l’inégalité
age = InputBox("Quel est ton age") change lorsqu’on
Loop Until Age > 0 utilise Until
End Sub
Structures itératives
Do…Loop
• Dans les exemples précédents les instructions While et Until se
trouvaient au niveau du Loop.
• Il est aussi possible de les faire figurer au niveau du Do comme
dans l’exemple qui suit :
Sub Controler_Age()
End Sub
Structures itératives
Do…Loop
• L’exemple précédent peut être intéressant si dans certain cas il
ne faut même pas réaliser une itération.
For…Next
• Dans les situations où le nombre d’itérations est connu alors on
utilise la boucle For…Next.
• Syntaxe For…Next :
For Var = début To fin
Instructions
Next
‒ Var est une variable
‒ Début et fin sont des nombres entiers (ou des expressions ayant pour
résultat un nombre entier)
‒ Instructions est une suite d’instructions
Structures itératives
For…Next
• Le nombre d’itérations sera égal à (début – fin + 1). Par exemple
si on écrit :
For i = 3 to 9
Instructions
Next
le nombre d’itérations sera 9 – 3 + 1 = 7.
For…Next
• Dans Excel les boucles For…Next servent souvent à parcourir un
tableau de données. Nous allons écrire une macro qui va afficher
une par une dans une boite de dialogue les données contenues
dans le tableau suivant :
Structures itératives
For…Next
On utilise l’instruction Cells() et la variable compteur i qui
permet de repérer les lignes :
Structures itératives
Exercice
Exercice 16 :
a) Ecrire une macro qui demande à l’utilisateur un nombre
compris entre 1 et 3 jusqu’à ce que la réponse convienne.
Exercice
Exercice 17 :
a) Ecrire une fonction permettant de calculer la factorielle d’un nombre.
c) Ecrire une macro que calcule et affiche dans une boite de dialogue la
somme des valeurs contenues dans une plage de cellule.
d) Ecrire une macro qui affiche dans une boite de dialogue le contenu des
cellules d’une plage de valeur. Attention, on souhaite que tout soit
affiché dans une seule boite !