Professional Documents
Culture Documents
(VBA)
http ://perso.wanadoo.fr/x.dupre/programmation/
Xavier Dupr
Repres
1.
Introduction
1.1
1.2
1.3
1.4
1.5
2.
Le langage VBA
2.1
2.2
2.3
2.4
2.5
2.6
2.7
3.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
9
13
14
15
16
18
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prliminaires . . . . . .
Variables et oprateurs .
Achage . . . . . . . . .
Tests . . . . . . . . . . .
Boucles . . . . . . . . .
Fonctions et procdures
Erreurs . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
5
6
7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Chapitre 1
Introduction
Fig. 1.1: Une matrice sous Excel 4x4, on souhaite en calculer la trace.
La gure 1.1 montre une matrice. On veut enregistrer une macro qui va mmoriser les oprations permettant d'entrer la formule de la trace de la matrice. La gure 1.2 montre les trois tapes qui permettent de
crer cette macro.
Une fois que la macro est enregistre, Excel cre un code crit en Visual Basic qui correspond ces
oprations. Pour le voir, on ouvre l'diteur Visual Basic.
1. Introduction
Fig. 1.2: On lance l'enregistrement d'une macro dans la premire image, on lui donne un nom dans la seconde, on
saisit la formule et on arrte l'enregistrement dans la troisime image.
Fig. 1.3: On ouvre l'diteur Visual Basic dans Excel (cette opration est la mme dans Word, Access ou toute autre
application de la gamme Microsoft Oce). Il faut ensuite cliquer sur Module1 pour voir apparatre le code
de la macro. Les lignes commenant par une apostrophe sont des commentaires et ne sont pas pris en
compte lors de l'excution de la macro. La premire de la macro signie que la case qui doit recevoir le
rsultat est slectionne. La seconde ligne est la saisie de la formule. La troisime ligne est un clic dans
une case voisine.
macro. On retourne donc dans l'diteur Visual Basic pour y ajouter les lignes suivantes :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub normalisation()
' cette fonction renormalise une matrice 4x4
Dim s As Double
Dim cel As String
Dim i As Long
Dim j As Long
For i = 1 To 4
s = 0
For j = 1 To 4
s = s + Worksheets("Feuil1").Cells(i, j)
Next
For j = 1 To 4
Worksheets("Feuil1").Cells(i, j) = Worksheets("Feuil1").Cells(i, j) / s
1. Introduction
15
16
17
Next
Next
End Sub
Une fois cette tape termine, on revient dans la fentre Excel. On souhaite ajouter un bouton la barre
des tches et appeler la macro normalisation lorsqu'on clique sur ce bouton. Pour cela, il faut suivre les
instructions de la gure 1.4.
Fig. 1.4: On clique d'abord sur le clic droit de la souris au niveau de la barre des tches puis sur Personnaliser
(premire image). Une fentre apparat, il faut cliquer sur l'onglet Commande puis sur Macro (deuxime
image). La troisime tape consiste dplacer (on clique dessus et on relche l'endroit dsir) le bouton
personnalis dans une barre des tches. Il s'insre alors dedans. A nouveau un clic droit de la souris sur ce
nouveau bouton, puis on clique sur Aecter une macro (troisime image). Une dernire fentre apparat
(dernire image), il sut de slectionner normalisation pour associer cette procdure au nouveau bouton.
De retour dans Excel, on clique sur le nouveau bouton. La procdure s'excute et la matrice est aussitt
modie.
1. Introduction
d'Excel s'en trouve ralentie. Il est alors possible d'insrer un bouton l'intrieur d'une feuille Excel de
sorte que, lorsque ce bouton est press, c'est une macro qui est excute et qui eectue ces coteux calculs
lorsque vous l'avez dcid.
La gure 1.5 montre les tapes suivre pour insrer un bouton dans une feuille de calcul. La gure 1.6
montre comment modier le nom du bouton et le rattacher une macro.
Fig. 1.5: La premire tape consiste dessiner le bouton dans la feuille de calcul. Il faut faire d'abord apparatre
une barre d'outils nomm Control ToolBox en cliquant sur le bouton droit de la souris au niveau des
barres d'outils (premire image). Il faut ensuite prciser Excel qu'on dsire insrer un bouton (ou plus
gnralement un contrle). On clique pour cela comme indiqu sur la seconde image pour tre en Design
Mode. On clique alors sur un icne ressemblant un bouton (troisime image). Il ne reste plus qu' dessiner
le bouton sur la feuille (quatrime image). On clique un endroit puis on maintient appuy jusqu' ce que
le bouton soit assez grand. Il est possible par la suite de le dplacer (uniquement en Design Mode. (suite
gure 1.6, page 7)
1.4 Erreurs
Il arrive parfois qu'une procdure ne fonctionne pas ou plante. Dans le cas prsent, pour faire planter la
procdure renormalisation, il sut de modier la premire ligne de la matrice pour n'y mettre que des
zros. Un nouveau clic sur le bouton associ cette macro et une erreur est provoque comme le montre la
gure 1.7. Le logiciel Excel est assez souple puisqu'il autorise la programmation et les erreurs ne provoque
pas l'arrt d'Excel.
1. Introduction
Fig. 1.6: Aprs avoir fait apparatre un menu local en cliquant sur le bouton droit de la souris au niveau du bouton,
la premire image de cette srie montre o faut il aller pour modier le nom du bouton. Une fois que cela
est fait, on fait apparatre de nouveau ce mme menu local (seconde image) et on clique sur View Code
pour faire apparatre le code de la macro associe au bouton. La macro apparat dans l'diteur Visual
Basic (troisime image), il ne reste plus qu' la dnir. A chaque fois que le bouton sera press, c'est cette
macro qui sera excute. La dernire image est l pour rappeler qu'une fois toutes ces tapes termines,
il ne faut pas oublier de revenir dans Excel et de sortir du mode Design Mode pour utiliser normalement
Excel et surtout pouvoir cliquer sur le bouton.
1. Introduction
Fig. 1.7: Une erreur survient car la somme des coecients de la premire ligne est nulle ce qui implique une division
par zro. C'est opration est impossible et provoque l'ouverture de la fentre de la premire image. Aprs
avoir cliqu sur Dbogage, on se retrouve dans l'diteur Visual Basic avec une ligne en jaune : c'est la ligne
qui a provoqu l'erreur. Le menu Achage (ou View en anglais) permet de faire apparatre une fentre
Watch. Cette fentre facilite la mise au point des programmes car lorsque le programme s'arrte en cours
d'excution, il est possible d'acher le contenu des variables en cours d'utilisation.
Chapitre 2
Le langage VBA
Le VBA est semblable tout autre langage de programmation, il contient des boucles, tests, fonctions ou
encore procdures. Il dire un peu par les types de variables qu'il propose, les objets qu'il manipule, lis
aux applications Microsoft Oce. Ce chapitre rsume la syntaxe de ce langage.
Tout programme crit en VBA peut tre rparti sur plusieurs modules bien que ceux-ci soient enregistrs
dans un seul chier (une feuille Excel, un document Word, ...).
Il ne faut pas oublier l'aide fournie par Microsoft. Lorsque vous avez un doute sur une fonction ou un motcl, il vous sut de l'crire et d'appuyer sur la touche F1. Vous aurez alors automatiquement l'aide associ
ce mot, s'il existe. Une autre manire d'obtenir des informations sur ce langage consiste enregistrer
une macro en rapport avec la tche programmer et d'extraire du code VBA produit par Microsoft Oce
les informations dsires.
2.1 Prliminaires
Les commentaires commencent par une apostrophe et se termine par la n de la ligne. Il n'y a pas de
sparateur d'instructions en VBA, le langage impose une instruction par ligne. Lorsque l'une d'elle est trop
longue et qu'il est prfrable pour des raisons de lisibilit d'tendre une instruction sur plusieurs lignes,
chacune d'elles except la dernire doit se terminer par _.
MsgBox "premire partie" & _
"seconde partie\n" & _
"troisime partie"
Les principaux types de variables sont regroups dans la table 2.1. Voici quelques exemples de dclarations :
2. Le langage VBA
10
Dim a As Integer
Dim s As String
Dim v As Variant
Le langage VBA ncessite la dclaration des variables avant leur utilisation. Toutefois, lorsqu'elle n'est
pas prsente, Excel ou tout autre application de Microsoft Oce ne remarque pas toujours l'erreur car
il est possible que le programme ait un sens mme dans ce cas. Il est donc conseill d'ajouter au dbut
de tout module l'instruction Option Explicit. De cette manire, l'oubli d'une dclaration sera dtect
avant mme l'excution du programme.
VBA autorise galement les tableaux. Ils possdent une ou plusieurs dimensions. Le premier indice est 0
et le dernier dim1. La dclaration se fait comme suit :
Dim nom_variable (dim1, dim2, ...) as nom_type
VBA permet aussi de changer les indices d'un tableau de debut fin inclus :
Dim nom_variable (debut To fin, ...) as nom_type
Pour accder un lment du tableau, il faut utiliser les parenthses. Quelques exemples :
' mois est un tableau de chanes de caractres
' dont les indices vont de 0 12 inclus
Dim Mois(12) As String
' Matrice est un tableau deux dimensions d'entiers
Dim Matrice(3, 4) As Integer
' Matrice2 est un tableau de rels deux dimensions pour lesquels
' les indices dsirs sont explicitement spcifis
Dim Matrice2(1 To 5, 4 To 9, 3 To 5) As Double
' accs un paramtre
Dim t(3 To 6) As Integer
t(3) = 4
type
Byte
Boolean
Integer
Long
Double
Date
String
Variant
dnition
2. Le langage VBA
11
2.2.2 Oprateur
Les oprations sont les oprations standards +,-,/,*, (puissance), Mod (congruence). On peut concatner
les chanes de caractres grce l'oprateur &.
3 + 4
31 Mod 5
2^4
"un" & "deux"
'
'
'
'
vaut
vaut
vaut
vaut
7
1
16
undeux
Les oprateurs de comparaisons sont <,>,<=,>=,=1 . Les oprations logiques And et Or permettent de
combiner les comparaisons.
((3 < 4) And (5 < 6)) Or (2 > 1)
Lorsqu'on veut insrer un passage la ligne dans une chane de caractres, il faut concatner le symbol
vbCrLf.
2.2.3 Conversion
Les conversions sont parfois implicitement eectues. Lorsqu'elles ne marchent pas, il faudra faire appel
des fonctions de conversions explicites. Pour faire simple, il en existe deux qui sont souvent utilises :
1. La fonction Str convertit n'importe quoi en chane de caractres.
2. La fonction Val convertit n'importe quoi en une valeur numrique.
Exemple :
Dim
Dim
s =
a =
s As String
a As Double
Str (3.14)
Val ("3.14")
2. Le langage VBA
12
ct.Nom = "Microsoft"
ct.Prenom = "VBA"
ct.Age = 10
' environ
End Sub
Cet exemple fait apparatre le mot-cl Sub qui dsigne le dbut d'une procdure2 . La dnition d'un type
ne peut tre faite l'intrieur d'un sous-programme (fonction ou procdure).
Lorsque le nom de la variable est trop long3 ou simplement qu'on dsire viter sa rptition, on utilise le
mot-cl With et la syntaxe quivalente suivante :
Type Contacts
Nom As String
Prenom As String
Age As Integer
End Type
Sub essai()
Dim ct As Contacts
With ct
.Nom = "Microsoft"
.Prenom = "VBA"
.Age = 10
End With
End Sub
Il n'est pas possible avec le mot-cl Type de dnir une classe mais le paragraphe suivant aborde ce point.
2.2.5 Classes
La dclaration d'une classe s'eectue dans un module part : un module de classe. La gure 2.1 montre
comment crer un module de classe.
A l'intrieur de ce module de classe, les attributs de la classe sont dclars comme une variable globale via
le mot-cl Public. Voici un exemple de module de classe incluant un attribut et une mthode. Son nom
est ClassNom :
Public nom As String
Sub essai()
nom = "inconnu"
End Sub
La dclaration des variables de types classes dire aussi de celle des autres types, il faut ajouter le mot-cl
New. New
Dim c As New ClassNom
c.nom = "eeee"
c.essai
2
3
2. Le langage VBA
13
Fig. 2.1: Cration d'un module de classe en cliquant sur le clic droit de la souris dans la fentre VBAProject. La
premire image montre comment crer le module de classe. La seconde et la troisime montrent comment
donner un nom la classe cre. Le nom choisi est ici ClassNom.
VBA ore la possibilit d'ajouter un constructeur et un destructeur. Ils possdent des noms particuliers :
Private Sub Class_initialize()
' code du constructeur
End Sub
Private Sub Class_Terminate()
' code du destructeur
End Sub
2.3 Achage
L'achage du rsultat d'un calcul dpend de l'application dans laquelle on excute le programme VBA. Ce
sera dans la case d'une feuille Excel, dans un paragraphe d'un document Word, dans un mail d'Outlook,
dans une table d'Access. Avant d'aborder ces applications, il existe un moyen simple de faire apparatre
l'cran un message l'intrieur d'une bote de dialogue. La gure 2.2 montre ce qui surgit l'cran.
MsgBox "message"
Lorsque le message est long, il est ncessaire d'insrer des sauts de lignes, il faut utiliser le symbole vbCrLf
(voir remarque 2.2.1). La bote de dialogue peut inclure plusieurs boutons en ajoutant un second paramtre
lors de l'appel de la fonction MsgBox.
2. Le langage VBA
14
Fig. 2.2: Bote de dialogue dans laquelle apparat message. Le programme s'arrte puis reprend lorsque le bouton
OK est press.
2.4 Tests
2.4.1 Tests avec If
Les tests sont crits grce aux mots-cl If et Then :
If condition Then
' faire..
End If
S'il n'y qu'une instruction excuter lorsque le test est vri, il est possible de l'crire sur une ligne et la
dernire ligne End If disparat :
If condition Then
' faire
2. Le langage VBA
15
If condition1 Then
' faire..
ElseIf condition2 Then
' faire...
Else
' sinon faire...
End If
2.5 Boucles
2.5.1 Boucle For
Dim
Dim
s =
For
s as Integer
i as Integer ' dclarer la variable de la boucle
0
i = 1 To 10
s = s + 1
Next i
' passer au i suivant
Il est possible de faire en sorte que la variable de boucle soit incrmente d'une valeur positive ou ngative
chaque itration.
Dim s as Integer
Dim i as Integer ' dclarer la variable de la boucle
s = 0
2. Le langage VBA
Pour sortir de la boucle For avant sa n prvue, il faut utiliser l'instruction Exit For.
as Integer
as Integer ' dclarer la variable de la boucle
i <= 10
= s + 1
= i + 1
Pour sortir de la boucle Do While avant sa n prvue, il faut utiliser l'instruction Exit Do.
Mme chose mais la condition est place et value la n de la boucle :
Dim
Dim
s =
i =
Do
s as Integer
i as Integer ' dclarer la variable de la boucle
0
1
s = s + 1
i = i + 1
Loop While i <= 10
16
2. Le langage VBA
17
Sub exemple_procedure ()
' code de la procdure
End Sub
Il est possible de sortie prmaturment de la procdure en crivant Exit Sub. Contrairement d'autres
langages, il ne faut pas mettre de parenthses autour des paramtres d'une procdure lorsqu'on l'appelle.
Sub exemple_procedure (ByVal param1 As Long)
' code de la procdure
End Sub
Sub main ()
' appel de la procdure
exemple_procedure 3
End Sub
2.6.2 Fonctions
Function exemple_fonction () As Integer
' code de la procdure
...
' retourner le rsultat
exemple_fonction =
End Function
Il est possible de sortir prmaturment de la procdure en crivant Exit Function. Toutefois, avant
d'excuter une telle instruction (qui est facultative), il ne faut pas oublier de prciser quel est son rsultat
en crivant le nom de la fonction suivant du signe = et du rsultat retourner.
2. Le langage VBA
18
En rgle gnrale, les petits paramtres (Long, Double, String) sont passs par valeur car leur copie ne
cote pas grand-chose. Les paramtres plus gros comme les tableaux ou n'importe quel objet Microsoft
Oce, sont passs par rfrence car leur copie est coteuse en temps d'excution. Il arrive mme que
certains objet n'accepte pas les copies et donc les passages par valeur.
Les paramtres passs par valeur acceptent des valeurs par dfaut.
2.7 Erreurs
Les exceptions n'existent pas en VBA mais un autre mcanisme le remplace.
Sub proc
On Error
'
' code
'
Exit Sub
erreur:
'
' en cas
'
End Sub
()
Goto erreur
susceptible de produire une erreur
d'erreur
Chapitre 3
Exemple de fonctions en VBA sous Excel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'
' divise une chane de caractres en plusieurs petites spars par une chane
' sparatrice
'
' @param
str
chane diviser
' @param
sep
chane sparatrice
' @return
tableau de chane de caractres
'
Function SplitString(str As String, sep As String) As Variant
Dim res As Variant
Dim l, lsep As Long
Dim k As Long
lsep = Len(sep)
l = Len(str)
If l < lsep Then
SplitString = res
Exit Function
End If
Dim occ As Long
occ = 0
For k = 1 To l - lsep + 1
If Mid(str, k, lsep) = sep Then
occ = occ + 1
End If
Next
ReDim res(occ)
Dim last As Long
last = 1
occ = 0
For k = 1 To l - lsep + 1
If Mid(str, k, lsep) = sep Then
If k > last Then
res(occ) = Mid(str, last, k - last)
End If
last = k + lsep
occ = occ + 1
End If
Next
If last <= l Then
res(occ) = Mid(str, last, l - last + 1)
End If
SplitString = res
End Function
'
' retourne la dimension d'un tableau
'
'
@param
arr
tableau
'
@return
dimension du tableau
'
Function HalArrayDimension(ByRef arr As Variant) As Long
On Error GoTo FinalDimension
Dim dimnum As Long
Dim ErrorCheck As Long
For dimnum = 1 To 60000
ErrorCheck = LBound(arr, dimnum)
Next dimnum
HalArrayDimension = dimnum - 1
Exit Function
FinalDimension:
HalArrayDimension = dimnum - 1
End Function
'
' copie un tableau dans une table partir
' si le tableau est une dimension, copie
' termine le tableau par une ligne blanche
'
'
@param
feuille
'
@param
y
'
@param
x
'
@param
arr
'
20
21
Sub HalArrayCopy(ByRef feuille As String, ByVal y As Long, ByVal x As Long, ByRef arr As Variant
If (VarType(arr) & vbArray) > 0 Then
Dim d As Long
d = HalArrayDimension(arr)
If d = 2 Then
Dim
Dim
Dim
Dim
ddu1
ddl1
ddu2
ddl2
ddu1
ddl1
ddu2
ddl2
=
=
=
=
As
As
As
As
Long
Long
Long
Long
UBound(arr,
LBound(arr,
UBound(arr,
LBound(arr,
1)
1)
2)
2)
22
End Sub
'
' retourne le nom de la feuille active
'
' @return
nom de la feuille active
'
Function HalGetSheetActivated() As String
Dim sh
For Each sh In Windows(1).SelectedSheets
HalGetSheetActivated = sh.name
Next
End Function
'
' fonction retournant la liste des cases slectionnes
'
' @param
i
tableau contenant les lignes
' @param
j
tableau contenant les colonnes
' @param
f
tableau contenant les feuilles correspondantes
' @return
nombre de cases slectionnes
'
Function HalSelectionCellGet(ByRef i As Variant, ByRef j As Variant) As Long
Dim nb As Long
Dim ch
nb = 0
For Each ch In Selection
nb = nb + 1
Next
ReDim i(nb)
ReDim j(nb)
ReDim f(nb)
nb = 1
For Each ch
i(nb) =
j(nb) =
nb = nb
Next ch
In Selection
ch.Row
ch.Column
+ 1
HalSelectionCellGet = nb - 1
End Function
'
'
'
23
' @param
name
nom de la barre d'outils
'
Sub HalCreateToolBarName(name As String)
On Error GoTo createcommandbar
Dim mybar
Set mybar = CommandBars(name)
Exit Sub
createcommandbar:
Set mybar = CommandBars.Add(name:=name, Position:=msoBarFloating, Temporary:=False)
With mybar
.Width = 39
.Visible = True
.Height = 20
.RowIndex = msoBarRowFirst
End With
End Sub
'
' cherche un bouton dont la lgende est... dans une barre d'outils
'
' @param
name
barre d'outils
' @param
str
nom du bouton chercher
' @return
vrai ou faux
'
Function HalSearchToolBar(name As String, str As String) As Boolean
On Error GoTo createcommandbar
Dim mybar
Dim b
Set mybar = CommandBars(name)
For Each b In mybar.Controls
If b.Caption = str Then
HalSearchToolBar = True
Exit Function
End If
Next
HalSearchToolBar = False
Exit Function
createcommandbar:
HalSearchToolBar = False
End Function
'
' positionne les boutons en colonne dans une barre d'outils
'
' @param
name
barre d'outils
'
Sub HalColumnToolBar(name As String)
CommandBars(name).Position = msoBarFloating
24
CommandBars(name).Width = 1
' Dim HalControl As CommandBarButton
' For Each HalControl In CommandBars(name).Controls
' Next
End Sub
'
'
'
'
'
'
'
Sub
name
func
cap
25
'
Function HalLastLine(str As String, ByVal i As Long, ByVal j As Long) As Long
Dim e As Boolean
e = True
While e
If IsEmpty(Worksheets(str).Cells(i, j)) Or Worksheets(str).Cells(i, j) = "" Then
e = False
Else
i = i + 1
End If
Wend
HalLastLine = i
End Function
'
' vrifie si une colonne est vide ou non
'
' @param
f
feuille de calcul
' @param
i
premire ligne
' @param
j
colonne
' @param
last
dernire ligne
' @return
true, la colonne est vide, false, la colonne n'est pas vide
'
Function HalEmptyColumn(f As String, ByVal i As Long, ByVal j As Long, ByVal last As Long) As Bo
Dim res
Dim v
res = Worksheets(f).Range(Cells(i, j), Cells(last, j))
On Error GoTo impossible:
v = Application.WorksheetFunction.var(res)
If v = 0 Then
HalEmptyColumn = True
Else
HalEmptyColumn = False
End If
Exit Function
impossible:
HalEmptyColumn = True
End Function
26
'
' vrifie si un tableau possde une colonne vide
'
' @param
f
feuille de calcul
' @param
i
premire ligne
' @param
j
colonne
' @param
last
dernire ligne
' @param
lastc
dernire colonne
' @return
-1 ou l'indice de la colonne qui pose problme
'
Function HalCheckRange(f As String, ByVal i As Long, ByVal j As Long, ByVal last As Long, ByVal
Dim k As Long
For k = j To lastc
If HalEmptyColumn(f, i, k, last) Then
HalCheckRange = k - j + 1
Exit Function
End If
Next
HalCheckRange = -1
End Function
'
' lit ou crit un paramtre statique
'
' @param
k1
cl 1
' @param
k2
cl 2
' @param
k
nom
' @param
v
valeur
' @param
def
valeur par dfaut
' @param
m
true pour modifier, false pour obtenir la valeur
'
Sub StaticParameter(k1 As String, k2 As String, k As String, ByRef v As String, _
def As String, m As Boolean)
Dim
Dim
Dim
Dim
Dim
Dim
key1 As Variant
key2 As Variant
name As Variant
value As Variant
b As Variant
r As Long
key1 = k1
key2 = k2
name = k
value = v
b = m
27
Bibliographie
[Riva2005] Fabrice Riva, Applications Financires sous Excel en Visual Basic, Economica (2005)
3
4
30
1.7 Une erreur survient car la somme des coecients de la premire ligne est nulle ce qui implique
une division par zro. C'est opration est impossible et provoque l'ouverture de la fentre
de la premire image. Aprs avoir cliqu sur Dbogage, on se retrouve dans l'diteur Visual
Basic avec une ligne en jaune : c'est la ligne qui a provoqu l'erreur. Le menu Achage
(ou View en anglais) permet de faire apparatre une fentre Watch. Cette fentre facilite la
mise au point des programmes car lorsque le programme s'arrte en cours d'excution, il
est possible d'acher le contenu des variables en cours d'utilisation. . . . . . . . . . . . .
2.1 Cration d'un module de classe en cliquant sur le clic droit de la souris dans la fentre
VBAProject. La premire image montre comment crer le module de classe. La seconde
et la troisime montrent comment donner un nom la classe cre. Le nom choisi est ici
ClassNom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Bote de dialogue dans laquelle apparat message. Le programme s'arrte puis reprend
lorsque le bouton OK est press. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
14
10
1.
Introduction
1.1
1.2
1.3
1.4
1.5
2.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Le langage VBA
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1 Prliminaires . . . . . . . . . . . . .
2.2 Variables et oprateurs . . . . . . . .
2.2.1 Types prdnis . . . . . . .
2.2.2 Oprateur . . . . . . . . . . .
2.2.3 Conversion . . . . . . . . . .
2.2.4 Types dnis par l'utilisation
2.2.5 Classes . . . . . . . . . . . . .
2.3 Achage . . . . . . . . . . . . . . . .
2.4 Tests . . . . . . . . . . . . . . . . . .
2.4.1 Tests avec If . . . . . . . . .
2.4.2 Tests avec Select Case . . .
2.5 Boucles . . . . . . . . . . . . . . . .
2.5.1 Boucle For . . . . . . . . . .
2.5.2 Boucle While . . . . . . . . .
2.5.3 Boucle Loop . . . . . . . . . .
2.6 Fonctions et procdures . . . . . . .
2.6.1 Procdures . . . . . . . . . .
2.6.2 Fonctions . . . . . . . . . . .
2.6.3 Variables statiques . . . . . .
2.6.4 Passages des paramtres . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
5
6
7
9
9
9
9
11
11
11
12
13
14
14
15
15
15
16
16
16
16
17
17
17
3.
33
18
18
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
Index
Goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
Mod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
On. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
Or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
With. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
barre d'outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
classe
attribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
commentaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
contrle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
destruteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
fonction
InputBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
MsgBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
oprateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
paramtre
passage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
valeur par dfaut. . . . . . . . . . . . . . . . . . . . . . . . .18
passage
par adresse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
par valeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
procdure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
mot-cl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
And . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
As . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Dim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
ElseIf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
remarque
chane de caractres, caractres spciaux . 11
rfrences
Riva2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7, 28
type
Boolean. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Double. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
34
Index
Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
variable
dclaration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
globale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
35