Programmation VBA, dveloppement
rapide dinterfaces
Herv Hocquard
Sommaire
Introduction
VBA et Excel
Lditeur (VBE)
Modle objet de VBA
Procdures Sub
Procdure Function
Enregistrer des Macros
Programmation en VBA
Variables, instructions
Objets Range
VBA et fonctions
Droulement dun programme
2 Master IREF-Universit de Bordeaux
Introduction (1)
VBA: Visual Basic pour Application
Langage Visual Basic fortement associ la suite bureautique
MS Office : Word, Powerpoint Excel.
VBA et Excel:
Automatiser certaines tches
Excuter des actions en srie (traitement par lot ou batch
processing)
Commandes et boutons personnalises
Ajouter des boutons dans le ruban
Crer des interfaces graphiques et des applications avec Excel
3 Master IREF-Universit de Bordeaux
Avantages / inconvnients du VBA
Avantages Inconvnients
Automatisation dune Ncessite Excel
excution Prennit du code?
Rapidit Limit: difficile de produire
Rgularit de grosses applications
Sans erreurs (mais ce nest pas ce quon
Apprentissage facile lui demande)
permettant dtendre les
fonctionnalits dExcel
Fortement li Office
4 Master IREF-Universit de Bordeaux
But du module
Augmenter les capacits des applications bureautiques
(Excel) en proposant vos propres programmes, adapts
aux besoins
Dvelopper rapidement des interfaces sur un diteur
ddi afin de faciliter la prise en main de vos programmes
par dautres dans lentreprise
5 Master IREF-Universit de Bordeaux
Partie 1 : VBA et Excel
Lditeur (VBE)
Modle objet de VBA
Procdures Sub et Function
6 Master IREF-Universit de Bordeaux
Lditeur (Visual Basic Editor)
Alt + F11
7 Master IREF-Universit de Bordeaux
Insertion dun module dans lditeur
8 Master IREF-Universit de Bordeaux
Enregistrer une macro
9 Master IREF-Universit de Bordeaux
Enregistrer une macro
10 Master IREF-Universit de Bordeaux
Impact dans lditeur
11 Master IREF-Universit de Bordeaux
Le modle objet dans VBA
Un objet est constitu dattributs (ou proprits) et de
mthodes qui lui sont associes
Les objets existants sont constitus en hirarchie
(relation de composition)
Application
Addin CommandBar Workbook Window
Chart Name Worksheet
Comment Range Hyperlink
12 Master IREF-Universit de Bordeaux
Les collections
Concept cl
On rajoute un s !
Workbooks : collection des objets Workbook
Worksheets : collection des objets Worksheet
etc.
Faire appel un lment dune collection: 2 mthodes:
Appel par le nom de llment
Ex: Worksheets("Feuil1")
Appel par l'indice
Ex: Worksheets(1)
13 Master IREF-Universit de Bordeaux
Hirarchie: Accder aux objets
Oprateur point ( . )
Ex:
Application.Workbooks("Classeur1.xlsx").Wo
rksheets(1).Range("A1").Value=934
Simplification: par exemple si Classeur1.xlsx est le
classeur actif:
Worksheets(1).Range("A1").Value=934
14 Master IREF-Universit de Bordeaux
Proprits d'un objet
15 Master IREF-Universit de Bordeaux
Mthode d'un objet
Action relative un objet
Exemples:
Worksheets("Feuil1").Activate
Range("A1").Copy Range("B1")
Une mthode prend en compte 0, 1 ou plusieurs
arguments.
Le premier argument est spar de la mthode par un espace,
les arguments sont spars entre eux par des virgules
OU utilisation des parenthses
16 Master IREF-Universit de Bordeaux
Procdures
2 Types: Sub et Function
Une procdure Sub est un groupe d'instructions VBA qui
excute une ou plusieurs actions avec Excel.
Une procdure Function est un groupe d'instruction VBA qui
excute un calcul et retourne une seule valeur.
L'enregistreur de macros produit toujours une procdure
Sub.
Possibilit de lancer une procdure Sub via des raccourcis
clavier / des boutons personnaliss
Mais une procdure Function n'est appele que dans une
cellule ou dans une autre procdure.
17 Master IREF-Universit de Bordeaux
Syntaxe de base Sub
Il faut toujours indiquer o se trouve le dbut et la fin
du programme que lon crit.
Indique le dbut
Public Sub nom_du_programme(on peut mettre des
arguments ou pas)
squences dinstructions
End Sub
Indique la fin
18 Master IREF-Universit de Bordeaux
Syntaxe de base Function
Une fonction encapsule aussi un ensemble d'instructions, mais
retourne une valeur (dsigne par le nom mme de la
fonction).
Cette valeur doit tre affecte au nom de la fonction avant
la fin du bloc d'instructions.
Syntaxe :
Function nom(arg1 As type, ) As Type
Instructions
nom = exp_du_bon_type
Instructions
End Function
Il faut prciser le type de la valeur retourne.
19 Master IREF-Universit de Bordeaux
Partie 2 : Programmation en VBA
Variables, instructions
Objets Range
VBA et fonctions
Droulement dun programme
Evnements automatiques
Grer les erreurs
20 Master IREF-Universit de Bordeaux
Premiers pas
Pas de point virgule la fin d'une instruction
Une instruction par ligne
Espace + underscore (" _") pour crire une instruction sur
plusieurs lignes
Commentaires: commencer la ligne par une apostrophe
21 Master IREF-Universit de Bordeaux
Les Variables
Nommage:
Doit commencer par une lettre, puis lettres, chiffres et
quelques caractres spciaux
Pas de diffrence de casse
Caractres invalides: #, $, %, &, !
Maximum 254 caractres
Typage des donnes
Donnes peuvent tre non types explicitement: type Variant
22 Master IREF-Universit de Bordeaux
Typage des donnes
Type Valeurs
Boolean Vrai, faux
Integer Entiers
Long Entiers
Single Rels
Double Rels
Currency 4 chiffres aprs la ,
Date 1/1/100 31/12/9999
String Chaines de caractres
Object Tout objet
Variant N'importe quel type
23 Master IREF-Universit de Bordeaux
Dclarer des variables, porte
Forcer la dclaration: ajouter en dbut de module
Option Explicit
Porte: procdure courante:
Dim ou Static dans la procdure
Dim nomVariable As type
Porte: module:
Dim hors d'une procdure
Porte : toutes les procdures, tous les modules:
Public au tout dbut du module
24 Master IREF-Universit de Bordeaux
Variables particulires
Les variables Statiques
Ne sont pas rinitialises la sortie de la procdure (ex, pour des
compteurs)
Static Compteur As Integer
Les Constantes
la valeur est donne et ne peut changer
Const Pi As Double = 3.1415
Les dates
Doivent tre mises entre dises sous la forme:
25 Master IREF-Universit de Bordeaux
Instructions
Affectation : =
Oprateurs: +, *, /, -, ^, &, \, Mod
Oprateur logique: Not, And, Or, Xor, Eqv, Imp
26 Master IREF-Universit de Bordeaux
Les tableaux (1)
Dclaration
Dim MonTableau(1 to 100) As Integer
Index dbute 0 par dfaut;
Option Base 1
Tableaux multidimensionnels
Dim MonTableau(1 to 10, 1to 10) As Integer
Affectation
MonTableau(3,4) = 125
27 Master IREF-Universit de Bordeaux
Les tableaux (2)
Tableaux dynamiques
Cration
Dim MonTableau() As Integer
Redimensionnement
ReDim MonTableau(NombreElement)
Redimensionner en gardant les donnes dj prsentes
ReDim Preserve MonTableau(NombreElements)
28 Master IREF-Universit de Bordeaux
Les tableaux avec Array (3)
Structure pour afficher le contenu:
Dim mois As Variant
Dim m As Variant
mois = Array("Janvier", "Mars", "Aot", "Dcembre")
For Each m In mois
MsgBox m
Next m
Ou alors
Dim mois As Variant
Dim i As Integer
mois = Array("Janvier", "Mars", "Aot", "Dcembre")
For i = 0 To 3
MsgBox mois(i)
Next i
29 Master IREF-Universit de Bordeaux
L'objet Range (1)
Plage de cellule
Range("A1:C5"), Range("Liste_Prix") (plage nomme)
Range("3:3") (ligne entire), Range("D:D") (colonne
entire).
Proprits:
Cells Address
Offset hasFormula
Value Font
Text Interior
Count Formula
Column, Row NumberFormat
30 Master IREF-Universit de Bordeaux
L'objet Range (2)
Mthodes
Select : Slectionne une plage de cellule
Range("A1").Select
Selection.Value = "toto"
Range("A1").Value = "toto"
Copy, Paste
Range("A1:A2").Select
Selection.Copy
Range("C3").Select
ActiveSheet.Paste
Clear: efface le contenu et la mise en forme
Delete: supprime une plage (et dcale les cellules)
31 Master IREF-Universit de Bordeaux
L'objet Range (3)
Exemples tester et observer
Range("A1:H8").Formula = "=Rand()"
ActiveSheet.Cells(2, 1).Formula =
"=Sum(B1:B5)"
Worksheets(1).Range("C5:C10").Cells(1,
1).Formula = "=Rand()"
32 Master IREF-Universit de Bordeaux
Instructions de contrle
If Then : Excute une action si la condition est vrifie
Select Case : Excute une action parmi plusieurs, selon la
valeur retourne
For Next : Excute une srie d'instructions en boucle
autant de fois que spcifi
For Each Next: Parcourir une collection
Do While : Excute une srie d'instructions en boucle
tant que la condition est vraie (True)
Do Until : Excute une srie d'instructions en boucle
jusqu' ce que la condition soit vraie
33 Master IREF-Universit de Bordeaux
If / ElseIf / Then
34 Master IREF-Universit de Bordeaux
Select Case
35 Master IREF-Universit de Bordeaux
For Next
For compteur = dbut To Fin [Step intervalle]
[instructions]
[Exit For]
[instructions]
Next [compteur]
36 Master IREF-Universit de Bordeaux
Do While, Do Until
37 Master IREF-Universit de Bordeaux
Evnements
Action dclenchant l'appel d'une mthode
Primordial en interfaces graphiques!
Certains objets disposent d'vnements
38 Master IREF-Universit de Bordeaux
Partie 3 Les enregistrements
Type structur
Champs simples ou structurs
39 Master IREF-Universit de Bordeaux
Les enregistrements
Contrairement aux tableaux, ce type structur permet de
regrouper des donnes de types diffrents.
Exemple : on identifie un ouvrage par un code, un titre, un
ou plusieurs auteurs, un diteur et ventuellement la date
de parution.
Ouvrage est une variable de type enregistrement;
chacune de ces cinq donnes est un champ pouvant tre
simple ou structur.
40 Master IREF-Universit de Bordeaux
Les enregistrements
Les enregistrements sont dclars en VB avec le mot
Type.
Syntaxe :
Type NomEnregistrement
Champ1 As type1
Champ2 As type2
Champs
simples
End Type
Exemple :
Type ouvrage Type Date
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 Date
End Type
Champ
structur
41 Master IREF-Universit de Bordeaux
Les enregistrements
Exemple :
Type ouvrage Type Date
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 Date
End Type
Pour accder un champ :
Dim livre As ouvrage
livre.auteur = "Durand "
livre.dateparution.annee = 1980
on saperoit ici que lon pourrait remplacer livre par un tableau dans le type
ouvrageDim livre(1 To 10000) as ouvrage
livre(9).auteur = "Durand" sil sagit du neuvime livre de la liste
42 Master IREF-Universit de Bordeaux
Les enregistrements Exemple
Un tudiant est dfini par son nom, son prnom, 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
Une classe peut contenir au plus 30 tudiants :
Const NbMax = 30 pour le nombre limite dtudiants
Private Type Classe
liste(NbMax) As Etudiant la liste est un tableau dtudiants
nbr As Integer le nombre rel des tudiants
End Type
On dclare ensuite la classe dtudiants :
Dim c As Classe
43 Master IREF-Universit de Bordeaux
Les enregistrements Exercice
Lexemple prcdent sera complt dans le prochain cours sur
les interfaces graphiques
Comment dfinir une matrice ?
Crer un programme qui affiche le nombre de lignes et de
colonnes dune matrice saisie sur la Feuil1 du classeur.
44 Master IREF-Universit de Bordeaux
Partie 4 Dveloppement Rapide dinterfaces
Botes de dialogue de base
UserForm et diteur graphique
Les diffrents contrles
45 Master IREF-Universit de Bordeaux
Ma MsgBox
Boite de dialogue de base, "personnalisable"
vbOKOnly 0 N'affiche que le bouton ok
vbOKCancel 1 Ok et Annuler
vbAbortRetryIgnore 2 Abandonner, Recommencer, Ignorer
vbYesNoCancel 3 Oui, Non, Annuler
vbYEsNo 4 Oui, Non
vbRetryCancel 5 Recommencer, Annuler
vbCritical 16 Icne message critique
vbQuestion 32 Icne Question
vbExclamation 48 Icne exclamation
vbInformation 64 Icne Information
vbDefaultButton1 0 Le premier bouton est par dfaut
vbDefaultButton2 256 Le 2ime bouton est par dfaut
vbDefaultButton3 512 Le 3ime bouton est par dfaut
vbDefaultButton4 768 Le 4ime bouton est par dfaut
vbSystemModal 4096 Suspend tout jusqu' une rponse de l'utilisateur
46 Master IREF-Universit de Bordeaux
Exemple de MsgBox
47 Master IREF-Universit de Bordeaux
Autres fentres classiques
InputBox
Permet de rcuprer une valeur entre par l'utilisateur
GetOpenFileName
Ouvre une boite de dialogue permettant de slectionner un
fichier sur le disque dur
GetSaveAsFileName
Bote de dialogue pour enregistrer un fichier
48 Master IREF-Universit de Bordeaux
Crer un UserForm personnalis
1) Imaginer la bote de dialogue: quoi sert-elle, o sera-
t-elle utilise?
2) Crer un nouvel objet userForm dans l'diteur VBE
3)Ajouter des contrles
Zones de textes
Boutons radio
Cases cocher
Listes
4) Modifier les proprits des lments
5) Ecrire les procdures d'vnements des diffrents
contrles
6)Ecrire la procdure affichant la bote de dialogue.
49 Master IREF-Universit de Bordeaux
L'diteur graphique de USerForm
50 Master IREF-Universit de Bordeaux
Editer les proprits des contrles
51 Master IREF-Universit de Bordeaux
Editer les procdures d'vnements
Double-cliquer sur le contrle dont on veut diter les
vnements
52 Master IREF-Universit de Bordeaux
Dtails sur les contrles (1)
La case cocher
Accelerator
Value
Zone de liste modifiable
ListRow
RowSource
Value
Bouton
Annuler
Default
Image
picture
53 Master IREF-Universit de Bordeaux
Dtail sur les contrles (2)
Multipage: faire des onglets.
Bouton d'option (bouton radio): slection d'UNE option
parmi plusieurs.
Un groupe est dfini par tous les boutons ayant la mme
proprit GroupName ou si tous les boutons sont dans un
mme cadre.
RefEdit: permettre l'utilisateur de slectionner une plage
dans une feuille de calcul
Barre de dfilement: ascenceur permettant de dfinir/
afficher une valeur
54 Master IREF-Universit de Bordeaux
Dtails sur les contrles (3)
Contrle Toupie: 2 boutons flchs permettant
d'incrmenter / dcrmenter une valeur
Contrle zone de texte: insrer du texte!
Bouton bascule: similaire la case cocher
55 Master IREF-Universit de Bordeaux
Dimensionner / Aligner les contrles
56 Master IREF-Universit de Bordeaux
Partie 5 Les structures complexes
Les piles
Les files
57 Master IREF-Universit de Bordeaux
Une pile
Analogie de la pile dassiettes
Last In First Out (LIFO)
Oprations possibles
Insrer un lment dans une pile
Supprimer un lment dune pile
lment du sommet de la pile
Cration dune pile vide
Tester si une pile est vide
58 Master IREF-Universit de Bordeaux
Mise en uvre dune pile
Plusieurs faons de faire :
En particulier, laide dun tableau :
Le nombre max dlments dans la pile
Le contenu de la pile
Un indice pour pointer sur le sommet de la pile
59 Master IREF-Universit de Bordeaux
Mise en uvre dune pile : exemple
Type de donnes :
Const NMAX=30
Type TPile
contenu(NMAX) as Integer
sommet As Integer
End Type
60 Master IREF-Universit de Bordeaux
Mise en uvre dune pile : exemple
Function PileVide(p As TPile) As Boolean
If (p.sommet = -1) Then
PileVide = True
Else
PileVide = False
End If
End Function
61 Master IREF-Universit de Bordeaux
Mise en uvre dune pile : exemple
Function PilePleine(p As TPile) As Boolean
If (p.sommet = NMAX - 1) Then
PilePleine = True
Else
PilePleine = False
End If
End Function
62 Master IREF-Universit de Bordeaux
Mise en uvre dune pile : exemple
Sub Empiler(p As TPile,elt As Integer)
If (PilePleine(p) = False) Then
p.sommet = p.sommet +1
p.contenu(p.sommet) = elt
Else
MsgBox(La pile est pleine !)
End If
End Sub
63 Master IREF-Universit de Bordeaux
Mise en uvre dune pile : exemple
Sub Depiler(p As TPile)
If (PileVide(p) = False) Then
p.sommet = p.sommet - 1
Else
MsgBox(La pile est vide !)
End If
End Sub
64 Master IREF-Universit de Bordeaux
Mise en uvre dune pile : exemple
Function sommet(p As TPile) As Integer
If (PileVide(p) = False) Then
sommet = p.contenu(p.sommet)
Else
MsgBox(La pile est vide !)
End If
End Function
65 Master IREF-Universit de Bordeaux
Une File
Analogie de la file dattente
First In First out (FIFO)
Oprations principales
Insertion dun lment
Suppression dun lment (le plus ancien de la file)
Quel est llment le plus ancien de la file ?
Cration dune file vide
Est-ce quune file est vide ?
66 Master IREF-Universit de Bordeaux
Mise en uvre dune file
Plusieurs faons de faire :
En particulier, laide dun tableau :
Le nombre max dlments dans la file
Le contenu de la file
Un indice dbut qui pointe sur llment le plus ancien de la file
Un indice fin qui pointe sur le dernier lment insr dans la file
67 Master IREF-Universit de Bordeaux
Mise en uvre dune file : exemple
Type de donnes :
Const NMAX=30
Type TFile
contenu(NMAX) as Integer
debut As Integer
fin As Integer
End Type
68 Master IREF-Universit de Bordeaux
Mise en uvre dune file : exemple
Function FileVide(f As TFile) As Boolean
If (f.debut = f.fin) Then
FileVide = True
Else
FileVide = False
End If
End Function
69 Master IREF-Universit de Bordeaux
Mise en uvre dune file : exemple
Function FilePleine(f As TFile) As Boolean
If (f.debut=(f.fin + 1) mod NMAX) Then
FilePleine = True
Else
FilePleine = False
End If
End Function
70 Master IREF-Universit de Bordeaux
Mise en uvre dune file : exemple
Sub Enfiler(f As TFile,elt As Integer)
If (FilePleine(p) = False) Then
f.contenu(f.fin) = elt
f.fin = (f.fin +1) mod NMAX
Else
MsgBox(La file est pleine !)
End If
End Sub
71 Master IREF-Universit de Bordeaux
Mise en uvre dune file : exemple
Sub Defiler(f As TFile)
If (FileVide(f) = False) Then
f.debut = (f.debut+1) mod NMAX
Else
MsgBox(La file est vide !)
End If
End Sub
72 Master IREF-Universit de Bordeaux
Mise en uvre dune file : exemple
Function Tete(f As TFile) As Integer
If (FileVide(f) = False) Then
Tete = f.contenu(f.debut)
Else
MsgBox(La file est vide !)
End If
End Function
73 Master IREF-Universit de Bordeaux
Mise en uvre dune pile : exercice
Crer un module pour simuler les piles.
Votre module doit contenir la procdure suivante :
Sub main()
Dim p As TPile
Dim i As Integer
i=1
While PilePleine(p)=False
Call Empiler(p,i)
i=i+1
WEnd
While PileVide(p)=False
MsgBox(Sommet(p))
Call Depiler(p)
Wend
End Sub
74 Master IREF-Universit de Bordeaux
Mise en uvre dune file : exercice
Une personne est dfinie par un numro, un nom et un
prnom.
Dfinir une structure PFile correspondant une file de
personne.
Adapter les diffrentes procdures et fonctions pour
quelles manipulent des files de personnes.
75 Master IREF-Universit de Bordeaux
Conclusion
A pratiquer en TP et sur le projet !
76 Master IREF-Universit de Bordeaux
Merci
Alexis Clay-Herv Hocquard
77 Master IREF-Universit de Bordeaux