Académique Documents
Professionnel Documents
Culture Documents
Cours VBA Excel PDF
Cours VBA Excel PDF
Programmation VBA
Pierre BONNET
Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
21
Programmation VBA/Excel
La programmation VBA
Excel comprend tous les outils d'criture et d'excution de VB, y compris les
possibilits d'extension avec des bibliothques ou "contrles" supplmentaires.
La diffrence essentielle est que l'affichage se fait dans les feuilles d'un classeur
22
Programmation VBA/Excel
Accs la programmation VBA Alt F11
23
Programmation VBA/Excel
VBA/VB6
VBA
VBA Excel
Excel
RunTime
RunTime VBA
VBA
Bibliothque
de base Office
Appel de
fonctions
excutables
VB6
VB6
DLL,
DLL, OCX
OCX
RunTime
RunTime VB6
VB6
Bibliothque
de fonctions utilisateur
msvbvm60.dll
FrameWork .NET
VBA
VBA Excel
Excel
Visual
Visual Studio
Studio 2005
2005
Visual
Visual Studio
Studio
Tools
Tools for
for Office
Office
http://morpheus.developpez.com/vsto2/
RunTime
RunTime VBA
VBA
Bibliothque
de base Office
Code intermdiaire
MSIL
FrameWork
FrameWork .net
.net
Environnement de
dveloppement
VB.NET, C#, C+
+.NET, Java,
J#, Python...
http://fr.wikipedia.org/wiki/.NET
24
Programmation VBA/Excel
Variables
Dclaration implicite
Par dfaut, l'usage d'une variable dans une affectation tient lieu de dclaration (comme en Matlab)
Le type affect est dtermin automatiquement par l'valuation de la partie droite de l'valuation
Danger de l'absence de dclaration : toute erreur de frappe du nom d'une variable cre une nouvelle
variable!
Dclaration explicite
Utilisez la directive en dbut de programme
Option Explicit
Porte de la dclaration
Une variable n'est visible que pour la feuille o elle est dclare .
Pour une visibilit des autres feuilles/classeur, utiliser Public Nom_Variable as Type_Variable
Particularit : La notion de pointeur n'existe pas en VB/VBA d'o communication impossible avec des
fonctions qui utilisent cette approche pour le dialogue
Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
25
Programmation VBA/Excel
Variables
Boolean
Prend les valeurs True et False. Par conversion depuis d'autres types numriques, la valeur 0
devient False et toutes les autres deviennent True. Dans le cas inverse, False devient 0 et True
devient -1.
Conversion d'une donne numrique en Boolean par la fonction Cbool
exemple :
A = CBool(10)
True.
Single, Double
26
Programmation VBA/Excel
Variables
String
Ou bien
Dim ma_chaine$
27
Programmation VBA/Excel
Tableaux
'dimension 60 au maximum
L'indice de dbut est implicitement 0 par dfaut , 1 en utilisant la dclaration Option Base 1 ou en
spcifiant les indices :
Dim MonTableau(1 To 5, 10 To 20) As String
Recherche des indices min et max par les fonctions LBound et Ubound
NbElements = (Ubound(MatriceXY,1)-LBound(MatriceXY,1)+1)*(Ubound(MatriceXY,2)...
... -LBound(MatriceXY,2)+1)
Tableau dynamique avec redimensionnement
Dim Karnaugh() as boolean
ReDim Karnaugh(20)
attention, les anciennes valeurs sont effaces (utiliser ReDim Preserve)
le type ne peut pas tre modifi (sauf dans le cas d'un tableau de variant)
Le type Array permet de crer une liste de valeurs [de type tableau de variant]
MonTableau = Array("a", "b", "c")
Masters SMaRT & GSI - Supervision Industrielle - 2012-2013 P. Bonnet
28
Programmation VBA/Excel
Variables
Variant
Variant est le type de donnes attribu toutes les variables qui ne sont pas explicitement
dclares comme tant d'un autre type ( l'aide d'instructions telles que Dim, Private, Public ou
Static). Le type de donnes Variant ne possde aucun caractre de dclaration de type.
Variant est un type de donnes spcial pouvant contenir des donnes de toutes sortes,
l'exception des donnes de type String de longueur fixe.
La valeur Empty dsigne une variable de type Variant qui n'a pas t initialise (c'est--dire
laquelle aucune valeur initiale n'a t affecte). Un variant peut aussi contenir la valeur Null ou
Error
Lorsqu'un variant contenant une chane est utilis dans une opration requrant un type
numrique, le variant est automatiquement converti en nombre.
Exemple:
Dim MyVar As Variant
MyVar = "20"
Cells(1, 1) = MyVar + 10
29
Programmation VBA/Excel
Variables
Date (trs important pour la gestion des donnes industrielles horodates)
Les dates sont comprises entre le 1er janvier 1900 et le 31 dcembre 9999, les heures allant de 0:00:00
23:59:59.
Le type date est stock dans un double. La partie entire correspond au nombre de jours couls depuis
le 1er Janvier 1900; la partie fractionnaire correspond la fraction de jour coule (1h = 1/24 de jour,
1mn = 1/(24x60) de jour , 1s =1/(24x60x60) de jour ).
Exemple :
Dim ma_date As Date
Dim mon_heure, ma_dateheure As Double
ma_date = "16/09/2008"
mon_heure = 0.5 'une demi-journe de plus soit 12H
ma_dateheure = ma_date + mon_heure
Cells(3, 1) = ma_dateheure
donne comme rsultat
30
Programmation VBA/Excel
Variables
Type utilisateur
Un type utilisateur dfinit une structure contenant les types de base.
Exemple:
Dclaration du type
Public Type FicheEtudiant
Nom As String*30
DateNaissance As Date
Sexe As Boolean
End Type
Usage du type :
ou bien :
31
Programmation VBA/Excel
Variables
Type objet
Un objet [ou classe] est une variable structure permettant de manipuler des concepts volus. Les
valeurs associes un objet s'appellent des paramtres , les fonctions appliques un classe sont des
mthodes
Pour pouvoir utiliser un objet, il faut commencer par le dclarer puis l'instancier :
Ou
Lorsque lobjet nest pas instanci mais seulement dclar, il est alors quivalent "Nothing" .
Destruction d'un objet Set monObjet = Nothing
Il existe de nombreux objets prdfinis dans Excel : WorkBook, Range
32
Programmation VBA/Excel
Variables
Hirarchie des principaux objets Excel
Application
Workbooks
WorkBook
Worksheets
WorkSheet
Range, Cells
Exemple de rfrencement :
Excel.Workbooks(1).Sheets(1).Range("A1").Value = "salut"
33
Programmation VBA/Excel
Instructions de contrle
If (condition) Then
instruction 1
instruction 2
...
Else
instruction 1
...
End If
If (condition) Then
instruction 1
...
Elseif (condition) Then
instruction 1
...
End If
oprateur de comparaison
a = b
a <= 10
a <> 3
ma_chaine = "Bonjour"
oprateur logique
OR
( a <> b ) XOR (a = c)
34
Programmation VBA/Excel
Instructions de contrle
Do [while|until] (condition)
instruction 1
...
Loop
ou
While (condition)
instruction 1
...
Wend
Do
instruction 1
...
Loop [while|until] (condition)
35
Programmation VBA/Excel
Macros
Une macro est une procdure dont l'excution est lance depuis :
- le menu Outils/Macro/Excuter
- par un raccourci clavier
- par un bouton de la barre d'outils formulaire
- une image
- un bouton de la barre d'outils
Le code VBA d'une macro peut tre gnr automatiquement par l'enregistreur de macro
36
Programmation VBA/Excel
Procdures
Une procdure commence par Sub et termine par End Sub. Elle excute des
actions mais ne renvoie pas de valeurs .
Exemple sans argument: procdure de recopie la cellule active 1 ligne vers le bas et 0 colonne
vers la droite, puis slection de cette nouvelle cellule
Sub Copie_Decale()
ActiveCell.Copy ActiveCell.Offset(1,0)
ActiveCell.Offset(1,0).Select
End Sub
Exemple avec argument d'entre: les rfrences de la cellule dcaler sont passes en
paramtre de type chane .
Sub Copie_Decale_bis(AdressePlage As String)
Dim Ma_Plage As Range
Set Ma_Plage = Range(AdressePlage)
Ma_Plage.Copy Plage.Offset(1,0)
Ma_Plage.Offset(1,0).Select
End Sub
Pour excuter cette procdure, taper Copie_Decale_bis("C3") dans la fentre Excution
37
Programmation VBA/Excel
Fonctions
38
Programmation VBA/Excel
Procdures/Fonctions
Passage de paramtres
Par valeur (appel par dfaut): C'est la valeur de la variable qui est passe dans la fonction. Tout
calcul sur cette valeur est local la fonction et n'affecte pas la valeur dans la structure appelante.
a = 5
increment(a)
MsgBox a
'la valeur affiche est 5
...
Sub increment (ByVal var1 as Integer)
var1 =var1 + 1
' var1 prend la valeur 5
End Sub
Par rfrence : le paramtre pass est l'adresse de la variable. Il en rsulte que toute modification
de la valeur dans la fonction affecte la valeur de la variable dans la structure appelante
a = 5
increment(a)
MsgBox a
'la valeur affiche est 6
...
Sub increment (ByRef var1 as Integer)
var1 =var1 + 1
' var1 pointe sur a
End Sub
39
Programmation VBA/Excel
Exercice 3
Faire le calcul de la variance d'un tableau de donnes Excel et l'afficher dans une boite de
dialogue (voir suite transparents). L'interface de saisie est une feuille Excel
3) On souhaite que le tableau soit directement slectionn la souris. Utiliser les proprits de
l'objet Selection pour rcuprer les donnes.
40
Programmation VBA/Excel
Autres Fonctionnalits
Envoyer un message d'avertissement
Dim Mon Message as string
MonMessage = "Vous n'tes pas autoris
mener cette action"+Chr$(13)+
"Opration annule"
MsgBox MonMessage
41
Programmation VBA/Excel
Autres actions
Saisie d'une valeur
Dim Saisie as Variant
Saisie = InputBox("Saisir la dure en s","test systme")
42
Programmation VBA/Excel
Utilisation de UserForm
permet de crer une fentre dans une application, indpendamment des feuilles Excel.
En VB pur , la fentre est l'lment de base de l'IHM
43
Programmation VBA/Excel
Utilisation de UserForm
les contrles usuels (curseur, case cocher, fentre texte...) peuvent tre insrs
dans un UserForm
Par programmation, toutes les proprits des contrles sont accessibles, ainsi que les
cellules des feuilles Excel (la valeur d'un contrle peut tre li directement celle
d'une cellule)
par dfaut, le Userform n'est pas affich. Pour le faire passer en premier plan, il
faut utiliser la mthode :
My_UserForm. Show
44