Cours VBA
Cours VBA
Excel
Programmation VBA
(Visual Basic for Applications)
Issam DRIDI
2
Généralités sur la programmation
ALGORITHMIE - PROGRAMMATION
3
Algorithmie vs. Programmation
Algorithmie Programme
4
Mode compilé vs. Mode interprété
5
Etapes de la conception d’un programme (une application)
1. Déterminer les besoins et fixer les objectifs : que doit faire le logiciel, dans quel cadre va-
t-il servir, quels seront les utilisateurs types ? On rédige un cahier des charges avec le
commanditaire du logiciel (Remarque : commanditaire = maître d’ouvrage ; réalisateur =
maître d’œuvre)
2. Conception et spécifications : quels sont les fonctionnalités du logiciel, avec quelle
interface ?
3. Programmation : modélisation et codage
4. Tests : obtient-on les résultats attendus, les calculs sont corrects, y a-t-il plantage et dans
quelles circonstances ? (tests unitaires, tests d’intégration, etc.)
5. Déploiement : installer-le chez le client (vérification des configurations, installation de
l’exécutable et des fichiers annexes, etc.)
6. Maintenance : corrective, traquer les bugs et les corriger (patches) ; évolutive (ajouter
des fonctionnalités nouvelles au logiciel : soit sur l’ergonomie, soit en ajoutant de
nouvelles procédures)
6
L’ÉDITEUR VBE ET LE MODÈLE
OBJET VBA
7
L’éditeur (Visual Basic Editor)
Alt + F11
8
Insertion d’un module dans l’éditeur
9
Enregistrer une macro
10
Enregistrer une macro
11
Impact dans l’éditeur
12
Le modèle objet dans VBA
• Un objet est constitué d’attributs (ou propriétés) et de méthodes qui lui sont
associées
• Les objets existants sont constitués en hiérarchie (relation de composition)
Application
13
Les collections
• Concept clé
• On rajoute un « s »!
– Workbooks : collection des objets Workbook
– Worksheets : collection des objets Worksheet
– … etc.
14
Hiérarchie : Accéder aux objets
• Opérateur point ( . )
– Exemple:
[Link]("[Link]").Worksheets(1).Range("A1").Value=9
– Worksheets(1).Range("A1").Value=9
15
Propriétés d'un objet
16
Méthode d'un objet
• Exemples:
– Worksheets("Feuil1").Activate
– Range("A1").Copy Range("B1")
17
Programme : suite d’instructions manipulant des données
18
Visual Basic possède tous les attributs d’un langage de programmation
Visual Basic n’est pas « case sensitive », il ne différencie pas les termes écrits en
minuscule et majuscule.
19
Type de données
• Numérique qui peut être réel (double) ou entier (long). Les opérateurs
applicables sont : +, -, *, / (division réelle), \ (division entière), mod (modulo)
Exemple : 5 / 2 2.5 ; 5 \ 2 2 ; 5 mod 2 1
• Booléen (boolean) qui ne prend que deux valeurs possibles : True et False. Les
opérateurs sont : not, and, or.
Exemple : True and False False
• Chaîne de caractères (string) qui correspond à une suite de caractères délimitée par des
guillemets ‘’ ’’. Les opérateurs possibles sont la concaténation, la suppression d’une sous-
partie, la copie d’une sous-partie, etc.
Exemple : ‘’toto’’ est une chaîne de caractères, toto on ne sait pas ce que c’est (pour l’instant)
20
Type de données
• Type • Valeurs
• Boolean • Vrai, faux
• Integer • Entiers
• Long • Entiers
• Single • Réels
• Double • Réels
• Currency • 4 chiffres après la ,
• Date • 1/1/100 à 31/12/9999
• String • Chaines de caractères
• Object • Tout objet
• Variant • N'importe quel type
21
Opérateurs de comparaison
Exemples
22
Fonctions mathématiques
23
Fonctions mathématiques
24
Fonctions de dates
25
Variables et premières instructions
Les variables correspondent à des identifiants auxquels sont associés des valeurs d’un type
donné. Elles matérialisent un espace mémoire avec un contenu que l’on peut lire ou écrire.
26
Ecriture et utilisation des fonctions personnalisées dans Excel
FONCTIONS PERSONNALISÉES
27
Programmation des fonctions personnalisées
Une fonction personnalisée est une fonction VBA qui peut être
appelée dans un classeur Excel. Elle prend en entrée des
informations en provenance des feuilles du classeur
(principalement) et renvoie une valeur insérée dans une cellule (le
plus souvent également).
Formalisme Function NomFonction(paramètres) As type de donnée
28
Programmation dans Visual Basic Editor
29
Utilisation de la fonction dans une feuille Excel
30
Fonction avec plusieurs paramètres
31
Plus loin avec la programmation…
STRUCTURES ALGORITHMIQUES
32
Branchement conditionnel IF
If condition Then
bloc d’instructions
si la condition est vraie
Syntaxe
Else
bloc d’instructions
si la condition est fausse
End If
33
Branchement conditionnel IF – Un exemple
34
Branchement conditionnel IF/ElseIf – Un exemple
35
Branchement multiple SELECT CASE
Permet d’activer une partie du code en fonction des valeurs prises par une
variable de contrôle. Peut se substituer au IF, mais pas toujours, tout dépend
de la forme de la condition (condition composée, on doit passer par un IF).
Case valeur 2
bloc d’instructions
...
Case Else
bloc d’instructions
End Select
(1) Variable est la variable de contrôle, elle peut être de n’importe quel type en VBA, y compris un
réel ou une chaîne de caractères
(2) Valeur doit être de type compatible avec variable
(3) La partie Case Else est facultative
(4) L’imbrication avec un autre IF ou un autre Select Case (autre variable de contrôle) est possible.
36
Branchement multiple SELECT CASE – Un exemple
37
Branchement multiple SELECT CASE – Plages de valeurs
bloc d’instructions
Case Else
bloc d’instructions
End Select
38
Branchement multiple SELECT CASE – Plages de valeurs – Un exemple
39
Boucle POUR (FOR)
bloc d’instructions
...
Next indice
40
Boucle FOR – Un exemple
Entrée : n (entier)
Sortie : S (réel)
Calcul : S = 1² + 2² + … + n²
41
Boucle TANT QUE… FAIRE (DO WHILE…LOOP)
Do While condition
Syntaxe
Bloc d’instructions...
...
Loop
Entrée : n (entier)
Sortie : S (réel)
Calcul : S = 1² + 2² + … + n²
43
Boucle FAIRE…TANT QUE (DO…LOOP WHILE)
Do
Bloc d’instructions
Syntaxe
...
...
Loop While condition
44
Les variantes des boucles DO
Les boucles DO contrôlées par une condition sont très riches en VBA.
45
Le type « plage de cellules » spécifique à Excel
LE TYPE RANGE
46
Le type RANGE
Le type RANGE désigne une plage de cellules, c’est un type spécifique à Excel.
49
Type spécial qui peut contenir toutes sortes de valeur
LE TYPE VARIANT
50
Le type Variant
Le type de variant peut gérer tout type de valeurs. Il est très souple,
particulièrement commode quand on ne connaît pas à l’avance le type à
utiliser. Mais attention, il ne faut pas en abuser, il est très lent parce que
multiplie les vérifications à chaque accès à la variable correspondante.
51
Le type Variant est vraiment très souple
On peut s’en servir pour renvoyer un tableau. Une fonction peut donc renvoyer
plusieurs valeurs d’un coup, à l’instar des fonctions matricielles d’Excel (il faut valider
la saisie de la fonction avec la séquence de touches CTRL + MAJ + ENTREE).
52
Programmation des macros – Travailler directement sur les feuilles
53
Macros ?
Les macros sont également des procédures que l’on crée à l’intérieur d’un module.
Mais, à la différence des Function, ce sont des Sub() sans paramètres qui peuvent
manipuler (accéder et modifier) directement les objets Excel (classeurs, feuilles,
cellules, graphiques, scénarios, tableaux croisés dynamiques…).
Ils ne s’exécutent pas de la même manière. Au lieu de les insérer dans une cellule, ils
se lancent globalement via le bouton MACROS dans le ruban DEVELOPPEUR.
54
Enregistreur de macros
Une manière simple de générer une macro est de lancer l’enregistreur de macros.
Du code VBA est automatiquement généré.
Un nouveau module
« Module1 » est
automatiquement créé.
55
Enregistreur de macros - Bilan
Avantages :
• Il n’y a pas plus simple pour produire du code, on peut créer et exécuter une macro
sans aucune notion de programmation
• Il nous donne des indications précieuses sur les commandes associées aux objets
Excel
Inconvénients :
• On travaille à structure fixée, si la configuration de la feuille change, il n’est pas
possible de lancer la macro
• On ne bénéficie pas de la puissance des structures algorithmiques
En définitive :
• Il peut nous aider à rédiger notre code en nous donnant des pistes sur la syntaxe
des commandes et les objets adéquats à manipuler (ex. imprimer automatiquement
des feuilles, on lance l’enregistreur une fois, on intègre son code dans le notre à
l’intérieur d’une boucle).
56
Ecriture des macros – Les trois principaux objets
Ecrire directement des macros est simple une fois assimilé la philosophie de
l’approche, et identifié les principaux objets et l’accès à leurs propriétés et méthodes
(l’enregistreur peut nous y aider).
Activer (sélectionner) le
Classeurs Workbooks(‘’[Link]’’).Activate classeur dont le nom de
fichier est ‘’[Link]’’
57
Exemple de macros – Simulation valeurs de TVA
Ecrire une macro qui insère différentes valeurs de
TVA en B2 et récupère les valeurs de prix TTC en B3. Les différentes valeurs de TVA testées doivent être
retranscrites au fur et à mesure dans la colonne D.
58
Travailler sur les sélections de l’utilisateur
59
Sélection simple
Comment programmer une macro qui manipule directement une plage de cellules
sélectionnée par l’utilisateur ? Attention, nous ne sommes pas dans la même
configuration que les fonctions personnalisées ici, nous n’insérons pas un résultat
dans une cellule, nous manipulons et modifions directement la plage sélectionnée.
60
Sélection simple – On aurait pu écrire…
61
Sélection simple – Un second exemple
Sub MonMinBleu()
'variables intermédiaires
'min va servir de cellule témoin
Dim cellule As Range, min As Range
'initialisation du témoin sur la 1ère cellule
Set min = [Link](1, 1)
'parcourir
For Each cellule In Selection Range est un objet. Une
'comparer avec le contenu de la cellule témoin affectation pour une variable
If ([Link] < [Link]) Then objet doit être réalisée à
'màj de la cellule témoin
l’aide de l’instruction Set
Set min = cellule
End If
Next cellule
'mettre la couleur pour la cellule minimale
[Link] = 5
End Sub
62
Sélections multiples
Une sélection peut être multiple aussi c.-à-d. contenant plusieurs ‘’zones’’
Un exemple de sélection
multiple avec 3 zones.
63
Sélection multiple – Un exemple
Pour chaque zone, mettre en
Sub MonMinZoneBleu()
police bleue la cellule contenant
'var. intermédiaires
Dim zone As Range, min As Range la valeur minimale.
'pour chaque zone [Link] est une collection. On peut
For Each zone In [Link] utiliser un For Each. On aurait pu aussi passer
'à l'intérieur de chaque zone par un accès indicé. Par ex.
'initialisation For k = 1 to [Link]
Set min = [Link](1, 1) Set zone = [Link](k)
Etc…
'parcours des cellules
For Each cellule In zone
'comparer
If ([Link] < [Link]) Then
'màj de la variable témoin
Résultat…
Set min = cellule
End If
Next cellule
'mettre la couleur pour la cellule minimale
[Link] = 5
'passage à la zone suivante
Next zone
End Sub
64
BOÎTES DE DIALOGUE
65
Boîtes de dialogue standards
Sub MesBoitesDeDialogue()
'var. intermédiaire
Dim prenom As String
'saisie
prenom = InputBox("Entrer votre prénom", "Saisie", "")
'affichage
MsgBox ("Bonjour " & prenom)
End Sub
67
Ma MsgBox
68
EXPLOITER LES FONCTIONS
NATIVES D’EXCEL
69
Accéder aux fonctions natives d’Excel dans nos programmes
Excel dispose de fonctions natives puissantes. Nous
pouvons y accéder dans nos programmes VBA.
Exemple : Vérifier qu’une sélection est simple (une
Sub MaMoyenneSelection() seule zone), puis calculer et afficher la moyenne
'var. intermédiaire des valeurs dans une boîte de dialogue.
Dim moyenne As Double
'vérifier la sélection
If ([Link] > 1) Then
MsgBox ("Attention, ce n'est pas une sélection simple")
Else
Noter la syntaxe.
'faire calculer la moyenne de la sélection par Excel
moyenne = [Link](Selection)
MsgBox ("La moyenne est " & Str(moyenne))
End If
End Sub
70
LES TABLEAUX
71
Les tableaux (1)
• Déclaration
– Dim MonTableau(1 to 100) As Integer
– Index débute à 0 par défaut;
• Option Base 1
• Tableaux multidimensionnels
– Dim MonTableau(1 to 10, 1 to 10) As Integer
• Affectation
– MonTableau(3,4) = 125
72
Les tableaux (2)
• Tableaux dynamiques
• Création
– Dim MonTableau() As Integer
• Redimensionnement
– ReDim MonTableau(NombreElements)
73
Les tableaux avec Array (3)
– Ou alors…
74
Les tableaux fonctions de base (4)
75
Les tableaux fonctions de base – exemple (5)
76
Type structuré
Champs simples ou structurés
LES ENREGISTREMENTS
77
Les enregistrements
78
Les enregistrements
• Syntaxe :
Type NomEnregistrement
Champ1 As type1
Champ2 As type2
…
End Type
Champs
• Exemple : simples
79
Les enregistrements – Exemple (1)
• Exemple :
Type ouvrage Type MaDate
code as Integer jour As Integer
titre As String*40 mois As Integer
auteur As String*50 annee As Integer
editeur As String*50 End Type
dateparution As Madate
End Type
80
Les enregistrements – Exemple (2)
Un étudiant est défini par son nom, son prénom, sa date de naissance et
sa note :
Private Type Etudiant
nom As String * 40
prenom As String * 40
dateNaissance As Date
note As Double
End Type
82
LES CHAÎNES DE CARACTÈRES
83
Fonctions sur les chaînes de caractères (1)
84
Fonctions sur les chaînes de caractères (2)
• Longueur: Len(chaîne)
• MAJ, min:
• LCase("BonjouR") retourne "bonjour"
• UCase("BonjouR") retourne "BONJOUR"
85
Fonctions sur les chaînes de caractères (3)
• Format(Date, "yy/mmmm/dd")
– La fonction Date retourne la date actuelle. Celle-ci doit être formatée
avant affichage dans une boîte de dialogue, sinon elle sera affichée
sous la forme spécifiée dans les options régionales (dd/mm/yy)
86
UserForm et éditeur graphique
Les différents contrôles
DÉVELOPPEMENT RAPIDE
D’INTERFACES
87
Créer un UserForm personnalisé
88
L'éditeur graphique de USerForm
89
Editer les propriétés des contrôles
90
Editer les procédures d'évènements
91
Détails sur les contrôles (1)
• La case à cocher
– Accelerator
– Value
• Zone de liste modifiable
– ListRow
– RowSource
– Value
• Bouton
– Annuler
– Default
• Image
– picture
92
Détails sur les contrôles (2)
93
Détails sur les contrôles (3)
94
Dimensionner / Aligner les contrôles
95
HIÉRARCHIE ET APPLICATION
…COMPLÉMENT
96
Hiérarchie en Visual Basic (1)
97
Hiérarchie en Visual Basic (2)
98
Hiérarchie en Visual Basic (3)
99
Hiérarchie en Visual Basic (4)
• Lorsque l'on tape Range("A1"). Visual Basic propose toute une liste de
méthodes et de propriétés disponibles pour cet objet.
• Une méthode est une action que l'on peut exécuter sur un objet.
100
Applications - Police
101
Applications - Valeur
102
Applications - Couleurs (1)
103
Applications - Couleurs (2)
– Sheets(1).Range("A1").[Link] = vbRed
Ou
– Sheets(1).Range("A1").[Link] = 13
104
Complément sur les couleurs
105
PROGRAMMATION OBJET…LES
MODULES DE CLASSE
106
Rappels
• Syntaxe :
Type NomEnregistrement
Champ1 As type1
Champ2 As type2
…
End Type
107
Rappels
• Exemple :
108
Les Classes
– caractériser l’objet
+
– ensemble de programmes (méthodes) servant à modifier les attributs.
109
Les Classes : exemple
110
Les Classes : Encapsulation
• Intérêts :
111
Les Classes : Propriétés
• Problèmes :
– Impossible de créer une propriété en lecture (ou écriture) seule.
– Impossible de savoir quand une propriété est modifiée.
– Impossible de vérifier la validé des valeurs (par exemple une date de
naissance doit toujours être une date révolue).
112
Les Classes : les procédures Property
113
Les Classes : les procédures Property…exemple
114
Les Classes : les méthodes
• Exemples :
115
Les Classes : exercice
116
Les Classes : exercice
117
Les Classes : exercice
118
Les Classes : exercice
119
LES STRUCTURES COMPLEXES
LES PILES ET LES FILES
120
Une pile
121
Une pile
122
Mise en œuvre d’une pile : exemple
• Type de données :
Const NMAX=30
Type TPile
contenu(NMAX) as Integer
sommet As Integer
End Type
123
Mise en œuvre d’une pile : exemple
124
Mise en œuvre d’une pile : exemple
125
Mise en œuvre d’une pile : exemple
126
Mise en œuvre d’une pile : exemple
127
Mise en œuvre d’une pile : exemple
128
Une file
129
Mise en œuvre d’une file
130
Mise en œuvre d’une file : exemple
• Type de données :
Const NMAX=30
Type TFile
contenu(NMAX) as Integer
debut As Integer
fin As Integer
End Type
131
Mise en œuvre d’une file : exemple
132
Mise en œuvre d’une file : exemple
133
Mise en œuvre d’une file : exemple
134
Mise en œuvre d’une file : exemple
135
Mise en œuvre d’une file : exemple
136
Mise en œuvre d’une pile : exercice
137
Mise en œuvre d’une file : exercice
138
Conclusion…
139
Références
140
Remerciements
Merci
141