Visual Basic pour Application (VBA) http ://perso.wanadoo.fr/x.dupre/programmation ... · 2021. 1....
Transcript of Visual Basic pour Application (VBA) http ://perso.wanadoo.fr/x.dupre/programmation ... · 2021. 1....
Visual Basic pour Application
(VBA)
http ://perso.wanadoo.fr/x.dupre/programmation/
Xavier Dupré
Repères
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 Visual Basic et macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Première procédure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Macro liée à une feuille Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Autres possibillités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. Le langage VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1 Préliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Variables et opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 A�chage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5 Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6 Fonctions et procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7 Erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3. Exemple de fonctions en VBA sous Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
La table des matières est détaillée à la �n du document.
Chapitre 1
Introduction
1.1 Visual Basic et macros
Excel est un logiciel très répandu dès qu'on manipule des chi�res. Certaines de ces manipulations reviennenttrès souvent et on éprouve le besoin de les automatiser. Les logiciels ont fait apparaître les macros :une succession d'opérations que l'utilisateur pouvait enregistrer puis reproduire. Dans Microsoft O�ce, àchaque macro correspond un programme informatique qui dé�nit les opérations e�ectuées.
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 mémoriser les opérations permet-tant d'entrer la formule de la trace de la matrice. La �gure 1.2 montre les trois étapes qui permettent decréer cette macro.
Une fois que la macro est enregistrée, Excel crée un code écrit en Visual Basic qui correspond à cesopérations. Pour le voir, on ouvre l'éditeur Visual Basic.
1.2 Première procédure
On cherche ensuite à écrire une macro qui modi�e la matrice de façon à ce que la somme des coe�cients surchaque ligne soit égale à 1. Il est di�cile d'enregistrer la succession d'opérations comme dans le paragrapheprécédent. En e�et, la normalisation de la matrice nécessite de calculer d'abord la somme des coe�cientssur une ligne et ensuite de diviser chaque coe�cient par la somme obtenue pour sa ligne. Il est impossiblede réaliser ce calcul directement sur la feuille Excel sans recopier la matrice à moins de programmer cette
1. Introduction 4
Fig. 1.2: On lance l'enregistrement d'une macro dans la première image, on lui donne un nom dans la seconde, onsaisit la formule et on arrête l'enregistrement dans la troisième image.
Fig. 1.3: On ouvre l'éditeur Visual Basic dans Excel (cette opération est la même dans Word, Access ou toute autreapplication de la gamme Microsoft O�ce). Il faut ensuite cliquer sur Module1 pour voir apparaître le codede la macro. Les lignes commençant par une apostrophe sont des commentaires et ne sont pas pris encompte lors de l'exécution de la macro. La première de la macro signi�e que la case qui doit recevoir lerésultat est sélectionnée. La seconde ligne est la saisie de la formule. La troisième ligne est un clic dansune case voisine.
macro. On retourne donc dans l'éditeur Visual Basic pour y ajouter les lignes suivantes :
1 Sub normalisation()
2 ' cette fonction renormalise une matrice 4x4
3 Dim s As Double
4 Dim cel As String
5 Dim i As Long
6 Dim j As Long
7
8 For i = 1 To 4
9 s = 0
10 For j = 1 To 4
11 s = s + Worksheets("Feuil1").Cells(i, j)
12 Next
13 For j = 1 To 4
14 Worksheets("Feuil1").Cells(i, j) = Worksheets("Feuil1").Cells(i, j) / s
1. Introduction 5
15 Next
16 Next
17 End Sub
Une fois cette étape terminée, on revient dans la fenêtre Excel. On souhaite ajouter un bouton à la barredes tâches et appeler la macro normalisation lorsqu'on clique sur ce bouton. Pour cela, il faut suivre lesinstructions 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 tâches puis sur Personnaliser(première image). Une fenêtre apparaît, il faut cliquer sur l'onglet Commande puis sur Macro (deuxièmeimage). La troisième étape consiste à déplacer (on clique dessus et on relâche à l'endroit désiré) le boutonpersonnalisé dans une barre des tâches. Il s'insère alors dedans. A nouveau un clic droit de la souris sur cenouveau bouton, puis on clique sur A�ecter une macro (troisième image). Une dernière fenêtre apparaît(dernière image), il su�t de sélectionner normalisation pour associer cette procédure au nouveau bouton.De retour dans Excel, on clique sur le nouveau bouton. La procédure s'exécute et la matrice est aussitôtmodi�ée.
1.3 Macro liée à une feuille Excel
Il est possible, au milieu d'une feuille Excel, d'insérer un bouton lui-même relié à une macro. Lorsque vouschangez la valeur d'une cellule, Excel calcule à nouveau toutes les formules qui en dépendent. Parfois, cescalculs sont compliqués, et lorsqu'il faut changer dix valeurs, ils sont e�ectués dix fois. La manipulation
1. Introduction 6
d'Excel s'en trouve ralentie. Il est alors possible d'insérer un bouton à l'intérieur d'une feuille Excel desorte que, lorsque ce bouton est pressé, c'est une macro qui est exécutée et qui e�ectue ces coûteux calculslorsque vous l'avez décidé.
La �gure 1.5 montre les étapes à suivre pour insérer un bouton dans une feuille de calcul. La �gure 1.6montre comment modi�er le nom du bouton et le rattacher à une macro.
Fig. 1.5: La première étape consiste à dessiner le bouton dans la feuille de calcul. Il faut faire d'abord apparaîtreune barre d'outils nommé Control ToolBox en cliquant sur le bouton droit de la souris au niveau desbarres d'outils (première image). Il faut ensuite préciser à Excel qu'on désire insérer un bouton (ou plusgénéralement un contrôle). On clique pour cela comme indiqué sur la seconde image pour être en Design
Mode. On clique alors sur un icône ressemblant à un bouton (troisième image). Il ne reste plus qu'à dessinerle bouton sur la feuille (quatrième image). On clique à un endroit puis on maintient appuyé jusqu'à ce quele bouton soit assez grand. Il est possible par la suite de le déplacer (uniquement en Design Mode. (suite�gure 1.6, page 7)
1.4 Erreurs
Il arrive parfois qu'une procédure ne fonctionne pas ou plante. Dans le cas présent, pour faire planter laprocédure renormalisation, il su�t de modi�er la première ligne de la matrice pour n'y mettre que deszéros. Un nouveau clic sur le bouton associé à cette macro et une erreur est provoquée comme le montre la�gure 1.7. Le logiciel Excel est assez souple puisqu'il autorise la programmation et les erreurs ne provoquepas l'arrêt d'Excel.
1. Introduction 7
Fig. 1.6: Après avoir fait apparaître un menu local en cliquant sur le bouton droit de la souris au niveau du bouton,la première image de cette série montre où faut il aller pour modi�er le nom du bouton. Une fois que celaest fait, on fait apparaître de nouveau ce même menu local (seconde image) et on clique sur View Code
pour faire apparaître le code de la macro associée au bouton. La macro apparaît dans l'éditeur VisualBasic (troisième image), il ne reste plus qu'à la dé�nir. A chaque fois que le bouton sera pressé, c'est cettemacro qui sera exécutée. La dernière image est là pour rappeler qu'une fois toutes ces étapes terminées,il ne faut pas oublier de revenir dans Excel et de sortir du mode Design Mode pour utiliser normalementExcel et surtout pouvoir cliquer sur le bouton.
1.5 Autres possibillités
Visual Basic permet la réalisation de petits programmes. Même si les calculs sont possibles, ils sont pluslents qu'avec un langage comme le C++. Néanmoins, l'avantage est qu'Excel dispose d'une interface danslaquelle il est facile d'a�cher les résultats d'un calcul ou de construire un graphique. Il est même possibled'introduire des boîtes de dialogue.
Excel n'est pas la seule application, Word, Access, Outlook sont toutes des applications qui peuventêtre pilotées avec Visual Basic. Toutefois Excel et Access (base de données) sont les deux applicationsprincipales avec lesquels on écrit des programmes en VBA.
Pour Excel, je citerai le livre [Riva2005]. Il illustre l'utilisation de VBA et Excel au travers de la réalisationd'un pricer de produits �nanciers. Il s'étend peu sur le langage VBA mais le livre commence par un résumésur le langage et les objets manipulés dans les programmes qui suivent en exemple.
1. Introduction 8
Fig. 1.7: Une erreur survient car la somme des coe�cients de la première ligne est nulle ce qui implique une divisionpar zéro. C'est opération est impossible et provoque l'ouverture de la fenêtre de la première image. Aprèsavoir cliqué sur Débogage, on se retrouve dans l'éditeur Visual Basic avec une ligne en jaune : c'est la lignequi a provoqué l'erreur. Le menu A�chage (ou View en anglais) permet de faire apparaître une fenêtreWatch. Cette fenêtre facilite la mise au point des programmes car lorsque le programme s'arrête en coursd'exécution, il est possible d'a�cher 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 ouencore procédures. Il di�ère un peu par les types de variables qu'il propose, les objets qu'il manipule, liésaux applications Microsoft O�ce. Ce chapitre résume la syntaxe de ce langage.
Tout programme écrit en VBA peut être réparti sur plusieurs modules bien que ceux-ci soient enregistrésdans 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 mot-clé, il vous su�t de l'écrire et d'appuyer sur la touche F1. Vous aurez alors automatiquement l'aide associéà ce mot, s'il existe. Une autre manière d'obtenir des informations sur ce langage consiste à enregistrerune macro en rapport avec la tâche à programmer et d'extraire du code VBA produit par Microsoft O�celes informations désirées.
2.1 Préliminaires
Les commentaires commencent par une apostrophe et se termine par la �n de la ligne. Il n'y a pas deséparateur d'instructions en VBA, le langage impose une instruction par ligne. Lorsque l'une d'elle est troplongue et qu'il est préférable pour des raisons de lisibilité d'étendre une instruction sur plusieurs lignes,chacune d'elles excepté la dernière doit se terminer par _.
MsgBox "première partie" & _
"seconde partie\n" & _
"troisième partie"
2.2 Variables et opérateurs
2.2.1 Types prédé�nis
La déclaration d'une variable se fait toujours selon le même schéma :
Dim nom_variable as nom_type
Les principaux types de variables sont regroupés dans la table 2.1. Voici quelques exemples de déclarations :
2. Le langage VBA 10
Dim a As Integer
Dim s As String
Dim v As Variant
Le langage VBA nécessite la déclaration des variables avant leur utilisation. Toutefois, lorsqu'elle n'estpas présente, Excel ou tout autre application de Microsoft O�ce ne remarque pas toujours l'erreur caril est possible que le programme ait un sens même dans ce cas. Il est donc conseillé d'ajouter au débutde tout module l'instruction Option Explicit. De cette manière, l'oubli d'une déclaration sera détectéavant même l'exécution du programme.
VBA autorise également les tableaux. Ils possèdent une ou plusieurs dimensions. Le premier indice est 0et le dernier dim1. La déclaration 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 accéder à un élément du tableau, il faut utiliser les parenthèses. Quelques exemples :
' mois est un tableau de chaînes de caractères
' 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 réels à deux dimensions pour lesquels
' les indices désirés sont explicitement spécifiés
Dim Matrice2(1 To 5, 4 To 9, 3 To 5) As Double
' accès à un paramètre
Dim t(3 To 6) As Integer
t(3) = 4
type dé�nition
Byte octet, entier de 0 à 255
Boolean booléen, True ou FalseInteger entier de -32768 à 32768
Long entier de -2.147.483.648 et 2.147.483.647
Double réel, 14 chi�res de précision, exposant allant jusqu'à 308
Date date
String chaîne de caractères
Variant équivalent à tout type, en particulier les tableaux
Tab. 2.1: Principaux types de variables en VBA.
2. Le langage VBA 11
2.2.2 Opérateur
Les opérations sont les opérations standards +,-,/,*, ˆ (puissance), Mod (congruence). On peut concaténerles chaînes de caractères grâce à l'opérateur &.
3 + 4 ' vaut 7
31 Mod 5 ' vaut 1
2^4 ' vaut 16
"un" & "deux" ' vaut undeux
Les opérateurs de comparaisons sont <,>,<=,>=,=1. Les opérations logiques And et Or permettent decombiner les comparaisons.
((3 < 4) And (5 < 6)) Or (2 > 1)
Remarque 2.2.1: chaîne de caractères, caractères spéciaux
Lorsqu'on veut insérer un passage à la ligne dans une chaîne de caractères, il faut concaténer le symbolvbCrLf.
s = "première ligne" & vbCrLf & "seconde ligne"
2.2.3 Conversion
Les conversions sont parfois implicitement e�ectuées. Lorsqu'elles ne marchent pas, il faudra faire appel àdes fonctions de conversions explicites. Pour faire simple, il en existe deux qui sont souvent utilisées :
1. La fonction Str convertit n'importe quoi en chaîne de caractères.
2. La fonction Val convertit n'importe quoi en une valeur numérique.
Exemple :
Dim s As String
Dim a As Double
s = Str (3.14)
a = Val ("3.14")
2.2.4 Types dé�nis par l'utilisation
Il est possible de créer des types en combinant plusieurs types déjà existant, comme les structures enlangage C. On utilise le mot-clé Type et la syntaxe obéit au format suivant :
Type Contacts
Nom As String
Prenom As String
Age As Integer
End Type
Sub procedure ()
Dim ct As Contacts
1 L'opérateur de comparaison ne contient qu'un seul signe =.
2. Le langage VBA 12
ct.Nom = "Microsoft"
ct.Prenom = "VBA"
ct.Age = 10 ' environ
End Sub
Cet exemple fait apparaître le mot-clé Sub qui désigne le début d'une procédure2. La dé�nition d'un typene peut être faite à l'intérieur d'un sous-programme (fonction ou procédure).
Lorsque le nom de la variable est trop long3 ou simplement qu'on désire éviter sa répétition, on utilise lemot-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 dé�nir une classe mais le paragraphe suivant aborde ce point.
2.2.5 Classes
La déclaration d'une classe s'e�ectue dans un module à part : un module de classe. La �gure 2.1 montrecomment créer un module de classe.
A l'intérieur de ce module de classe, les attributs de la classe sont déclarés comme une variable globale viale mot-clé Public. Voici un exemple de module de classe incluant un attribut et une méthode. Son nomest ClassNom :
Public nom As String
Sub essai()
nom = "inconnu"
End Sub
La déclaration des variables de types classes di�ère 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 ou fonction ne retournant aucun résultat3 cas fréquent lorsqu'on manipule les objets de Microsoft
2. Le langage VBA 13
Fig. 2.1: Création d'un module de classe en cliquant sur le clic droit de la souris dans la fenêtre VBAProject. Lapremière image montre comment créer le module de classe. La seconde et la troisième montrent commentdonner un nom à la classe créée. Le nom choisi est ici ClassNom.
VBA o�re la possibilité d'ajouter un constructeur et un destructeur. Ils possèdent des noms particuliers :
Private Sub Class_initialize()
' code du constructeur
End Sub
Private Sub Class_Terminate()
' code du destructeur
End Sub
2.3 A�chage
L'a�chage du résultat d'un calcul dépend de l'application dans laquelle on exécute le programme VBA. Cesera 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 apparaître àl'écran un message à l'intérieur d'une boîte de dialogue. La �gure 2.2 montre ce qui surgit à l'écran.
MsgBox "message"
Lorsque le message est long, il est nécessaire d'insérer des sauts de lignes, il faut utiliser le symbole vbCrLf(voir remarque 2.2.1). La boîte de dialogue peut inclure plusieurs boutons en ajoutant un second paramètrelors de l'appel de la fonction MsgBox.
2. Le langage VBA 14
Fig. 2.2: Boîte de dialogue dans laquelle apparaît ”message”. Le programme s'arrête puis reprend lorsque le boutonOK est pressé.
Reponse = MsgBox ("Voulez-vous continuer ?", vbYesNo)
Les di�érentes valeurs possibles sont vbAbortRetryIgnore, vbOKCancel, vbRetryCancel, vbYesNo,vbYesNoCancel. La valeur retournée dépend du bouton pressé, cette valeur peut être vbOK, vbCancel,vbAbort, vbRetry, vbIgnore, vbYes, vbNo.
Il est aussi possible de demander un renseignement à l'utilisateur avec la fonction InputBox. Le résultatest une chaîne de caractères. C'est le moyen le plus simple mais VBA o�re la possibilité de dé�nir desboîtes de dialogue plus complexe appelées formulaire qui permettent de saisir plusieurs informations dansla même fenêtre.
Dim Message As String
Message = InputBox("intitulé de la question", "nom de la boîte de dialogue", _
"réponse par défaut")
2.4 Tests
2.4.1 Tests avec If
Les tests sont écrits grâce aux mots-clé If et Then :
If condition Then
' faire..
End If
S'il n'y qu'une instruction à exécuter lorsque le test est véri�é, il est possible de l'écrire sur une ligne et ladernière ligne End If disparaît :
If condition Then ' faire
Il peut y avoir une contre partie :
If condition Then
' faire..
Else
' sinon faire...
End If
On peut aussi enchaîner les tests :
2. Le langage VBA 15
If condition1 Then
' faire..
ElseIf condition2 Then
' faire...
Else
' sinon faire...
End If
2.4.2 Tests avec Select Case
Il existe une autre manière d'écrire des tests lorsque les instructions à exécuter dépendent de la valeurd'une variable discrète.
Dim NiveauEau As Integer
Dim Mention As String
NiveauEau = 10
Select Case NiveauEau
Case 0
Mention = "sec"
Case 1 To 5
Mention = "presque sec"
Case 6 To 10
Mention = "normal"
Case 11 To 15
Mention = "trop d'eau"
Case 16 To 19
Mention = "inondations"
Case Else
Mention = "on déménage"
End Select
2.5 Boucles
2.5.1 Boucle For
Dim s as Integer
Dim i as Integer ' déclarer la variable de la boucle
s = 0
For 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 incrémentée d'une valeur positive ou négativeà chaque itération.
Dim s as Integer
Dim i as Integer ' déclarer la variable de la boucle
s = 0
2. Le langage VBA 16
For i = 1 To 10 Step 2 ' i = 1 3 5 ... 9
s = s + 1
Next i ' passer au i suivant
Pour sortir de la boucle For avant sa �n prévue, il faut utiliser l'instruction Exit For.
2.5.2 Boucle While
Dim s as Integer
Dim i as Integer ' déclarer la variable de la boucle
s = 0
i = 1
While i <= 10
s = s + 1
i = i + 1
Wend
Il n'est pas possible de sortir d'une boucle While.
2.5.3 Boucle Loop
Dim s as Integer
Dim i as Integer ' déclarer la variable de la boucle
s = 0
i = 1
Do While i <= 10
s = s + 1
i = i + 1
Loop
Pour sortir de la boucle Do While avant sa �n prévue, il faut utiliser l'instruction Exit Do.
Même chose mais la condition est placée et évaluée à la �n de la boucle :
Dim s as Integer
Dim i as Integer ' déclarer la variable de la boucle
s = 0
i = 1
Do
s = s + 1
i = i + 1
Loop While i <= 10
2.6 Fonctions et procédures
2.6.1 Procédures
C'est une fonction qui ne retourne pas de résultat.
2. Le langage VBA 17
Sub exemple_procedure ()
' code de la procédure
End Sub
Il est possible de sortie prématurément de la procédure en écrivant Exit Sub. Contrairement à d'autreslangages, il ne faut pas mettre de parenthèses autour des paramètres d'une procédure lorsqu'on l'appelle.
Sub exemple_procedure (ByVal param1 As Long)
' code de la procédure
End Sub
Sub main ()
' appel de la procédure
exemple_procedure 3
End Sub
2.6.2 Fonctions
Function exemple_fonction () As Integer
' code de la procédure
...
' retourner le résultat
exemple_fonction =
End Function
Il est possible de sortir prématurément de la procédure en écrivant Exit Function. Toutefois, avantd'exécuter une telle instruction (qui est facultative), il ne faut pas oublier de préciser quel est son résultaten écrivant le nom de la fonction suivant du signe = et du résultat à retourner.
2.6.3 Variables statiques
Les variables statiques sont créées une seule fois au cours de l'exécution du programme et conserventla dernière valeur qui leur a été a�ectée lorsque le programme quitte la procédure ou la fonction qui lacontient. Au prochain appel de cette procédure ou fonction, la variable statique a retenu sa précédentevaleur.
Sub proc ()
Static i As Integer
End Sub
2.6.4 Passages des paramètres
Comme dans tous les langages, il existe manières de transmettre des paramètres à une fonction :
1. Le passage par valeur : les paramètres sont recopiés et peuvent être modi�és dans la fonction ou laprocédure sans conséquence à l'extérieur du sous-programme.
2. Le passage par adresse : les paramètres ne sont pas recopiés. Lorsqu'ils sont modi�és dans la fonctionou la procédure, ces modi�cations demeurent après que le sous-programme est terminé.
Dans l'exemple qui suit, le premier paramètre est passé par valeur, le second par référence.
2. Le langage VBA 18
Function exemple_fonction (ByVal s As String, ByRef v As Variant) As Long
' ...
End Function
En règle générale, les petits paramètres (Long, Double, String) sont passés par valeur car leur copie necoûte pas grand-chose. Les paramètres plus gros comme les tableaux ou n'importe quel objet MicrosoftO�ce, sont passés par référence car leur copie est coûteuse en temps d'exécution. Il arrive même quecertains objet n'accepte pas les copies et donc les passages par valeur.
Les paramètres passés par valeur acceptent des valeurs par défaut.
2.6.5 Surnom : Set
Certaines variables ont parfois des noms longs qu'il est ennuyeux de recopier à chaque utilisation. Il estpossible de leur donner un surnom grâce au mot-clé Set.
Dim nom_tres_tres_long As String
Dim s As String
Set s = nom_tres_tres_long
' par la suite, s et nom_tres_tres_long désignent la même variable
2.7 Erreurs
Les exceptions n'existent pas en VBA mais un autre mécanisme le remplace.
Sub proc ()
On Error Goto erreur
'
' code susceptible de produire une erreur
'
Exit Sub
erreur:
'
' en cas d'erreur
'
End Sub
Chapitre 3
Exemple de fonctions en VBA sous Excel
1 '
2 ' divise une chaîne de caractères en plusieurs petites séparés par une chaîne
3 ' séparatrice
4 '
5 ' @param str chaîne à diviser
6 ' @param sep chaîne séparatrice
7 ' @return tableau de chaîne de caractères
8 '
9 Function SplitString(str As String, sep As String) As Variant
10
11 Dim res As Variant
12 Dim l, lsep As Long
13 Dim k As Long
14
15 lsep = Len(sep)
16 l = Len(str)
17
18 If l < lsep Then
19 SplitString = res
20 Exit Function
21 End If
22
23 Dim occ As Long
24 occ = 0
25
26 For k = 1 To l - lsep + 1
27 If Mid(str, k, lsep) = sep Then
28 occ = occ + 1
29 End If
30 Next
31
32 ReDim res(occ)
33
34 Dim last As Long
3. Exemple de fonctions en VBA sous Excel 20
35 last = 1
36
37 occ = 0
38 For k = 1 To l - lsep + 1
39 If Mid(str, k, lsep) = sep Then
40 If k > last Then
41 res(occ) = Mid(str, last, k - last)
42 End If
43 last = k + lsep
44 occ = occ + 1
45 End If
46 Next
47
48 If last <= l Then
49 res(occ) = Mid(str, last, l - last + 1)
50 End If
51
52 SplitString = res
53
54 End Function
55
56 '
57 ' retourne la dimension d'un tableau
58 '
59 ' @param arr tableau
60 ' @return dimension du tableau
61 '
62 Function HalArrayDimension(ByRef arr As Variant) As Long
63 On Error GoTo FinalDimension
64 Dim dimnum As Long
65 Dim ErrorCheck As Long
66 For dimnum = 1 To 60000
67 ErrorCheck = LBound(arr, dimnum)
68 Next dimnum
69 HalArrayDimension = dimnum - 1
70 Exit Function
71 FinalDimension:
72 HalArrayDimension = dimnum - 1
73 End Function
74
75 '
76 ' copie un tableau dans une table à partir des indices x,y,
77 ' si le tableau est à une dimension, copie le tableau verticalement,
78 ' termine le tableau par une ligne blanche
79 '
80 ' @param feuille nom de la feuille
81 ' @param y ligne
82 ' @param x colonne
83 ' @param arr tableau
84 '
3. Exemple de fonctions en VBA sous Excel 21
85 Sub HalArrayCopy(ByRef feuille As String, ByVal y As Long, ByVal x As Long, ByRef arr As Variant)
86
87 If (VarType(arr) & vbArray) > 0 Then
88
89 Dim d As Long
90 d = HalArrayDimension(arr)
91
92 If d = 2 Then
93
94 Dim ddu1 As Long
95 Dim ddl1 As Long
96 Dim ddu2 As Long
97 Dim ddl2 As Long
98
99 ddu1 = UBound(arr, 1)
100 ddl1 = LBound(arr, 1)
101 ddu2 = UBound(arr, 2)
102 ddl2 = LBound(arr, 2)
103
104 If Not IsEmpty(arr) Then
105
106 Worksheets(feuille).Range(Cells(y, x), Cells(y + ddu1 - ddl1, x + ddu2 - ddl2)) = arr
107 Worksheets(feuille).Range(Cells(y + ddu1 - ddl1 + 1, x), _
108 Cells(y + ddu1 - ddl1 + 1, x + ddu2 - ddl2)) _
109 .ClearContents
110
111 End If
112
113 ElseIf d = 1 Then
114
115 Dim ddu As Long
116 Dim ddl As Long
117
118 ddu = UBound(arr, 1)
119 ddl = LBound(arr, 1)
120
121 If Not IsEmpty(arr) Then
122 Worksheets(feuille).Range(Cells(y, x), Cells(y + ddu - ddl, x)) = arr
123 Worksheets(feuille).Range(Cells(y + ddu - ddl + 1, x), Cells(y + ddu - ddl + 1, x)).ClearContents
124 End If
125 End If
126
127 Else
128
129 Dim ta As String
130 Dim res As Long
131 res = MsgBox("arr is not an array", vbOKOnly, "Error", ta, 1000)
132
133 End If
134
3. Exemple de fonctions en VBA sous Excel 22
135 End Sub
136
137 '
138 ' retourne le nom de la feuille activée
139 '
140 ' @return nom de la feuille activée
141 '
142 Function HalGetSheetActivated() As String
143 Dim sh
144 For Each sh In Windows(1).SelectedSheets
145 HalGetSheetActivated = sh.name
146 Next
147 End Function
148
149 '
150 ' fonction retournant la liste des cases sélectionnées
151 '
152 ' @param i tableau contenant les lignes
153 ' @param j tableau contenant les colonnes
154 ' @param f tableau contenant les feuilles correspondantes
155 ' @return nombre de cases sélectionnées
156 '
157 Function HalSelectionCellGet(ByRef i As Variant, ByRef j As Variant) As Long
158
159 Dim nb As Long
160 Dim ch
161 nb = 0
162 For Each ch In Selection
163 nb = nb + 1
164 Next
165
166 ReDim i(nb)
167 ReDim j(nb)
168 ReDim f(nb)
169
170 nb = 1
171
172 For Each ch In Selection
173 i(nb) = ch.Row
174 j(nb) = ch.Column
175 nb = nb + 1
176 Next ch
177
178 HalSelectionCellGet = nb - 1
179
180 End Function
181
182 '
183 ' crée une barre d'outils si elle n'existe pas
184 '
3. Exemple de fonctions en VBA sous Excel 23
185 ' @param name nom de la barre d'outils
186 '
187 Sub HalCreateToolBarName(name As String)
188 On Error GoTo createcommandbar
189 Dim mybar
190 Set mybar = CommandBars(name)
191 Exit Sub
192 createcommandbar:
193 Set mybar = CommandBars.Add(name:=name, Position:=msoBarFloating, Temporary:=False)
194 With mybar
195 .Width = 39
196 .Visible = True
197 .Height = 20
198 .RowIndex = msoBarRowFirst
199 End With
200 End Sub
201
202 '
203 ' cherche un bouton dont la légende est... dans une barre d'outils
204 '
205 ' @param name barre d'outils
206 ' @param str nom du bouton à chercher
207 ' @return vrai ou faux
208 '
209 Function HalSearchToolBar(name As String, str As String) As Boolean
210 On Error GoTo createcommandbar
211 Dim mybar
212 Dim b
213 Set mybar = CommandBars(name)
214 For Each b In mybar.Controls
215 If b.Caption = str Then
216 HalSearchToolBar = True
217 Exit Function
218 End If
219 Next
220 HalSearchToolBar = False
221 Exit Function
222 createcommandbar:
223 HalSearchToolBar = False
224 End Function
225
226
227 '
228 ' positionne les boutons en colonne dans une barre d'outils
229 '
230 ' @param name barre d'outils
231 '
232 Sub HalColumnToolBar(name As String)
233
234 CommandBars(name).Position = msoBarFloating
3. Exemple de fonctions en VBA sous Excel 24
235 CommandBars(name).Width = 1
236
237 ' Dim HalControl As CommandBarButton
238 ' For Each HalControl In CommandBars(name).Controls
239 ' Next
240
241 End Sub
242
243 '
244 ' crée un bouton dans une barre d'outils si celui-ci n'existe pas
245 '
246 ' @param name nom de la barre d'outils
247 ' @param func nom de la fonction à appeler lorsque le bouton est enclenché
248 ' @param cap légende
249 '
250 Sub HalCreateToolBarButtonName(name As String, func As String, cap As String)
251 HalCreateToolBarName name
252 Dim mybar
253 Set mybar = CommandBars(name)
254
255 If Not HalSearchToolBar(name, cap) Then
256 Dim mybut
257 Set mybut = mybar.Controls.Add(Type:=msoControlButton)
258 With mybut
259 .BeginGroup = True
260 .Caption = cap
261 .FaceId = 0
262 .OnAction = func
263 .Style = msoButtonIconAndCaption
264 End With
265 HalColumnToolBar name
266 Else
267 Set mybut = mybar.Controls(cap)
268 With mybut
269 '.BeginGroup = True
270 '.Caption = cap
271 '.FaceId = 0
272 .OnAction = func
273 '.Style = msoButtonIconAndCaption
274 End With
275 End If
276 End Sub
277
278 '
279 ' recherche la première case vide dans une colonne
280 '
281 ' @param str feuille de calcul
282 ' @param i ligne
283 ' @param j colonne
284 ' @return ligne de la première case vide
3. Exemple de fonctions en VBA sous Excel 25
285 '
286 Function HalLastLine(str As String, ByVal i As Long, ByVal j As Long) As Long
287
288 Dim e As Boolean
289 e = True
290
291 While e
292 If IsEmpty(Worksheets(str).Cells(i, j)) Or Worksheets(str).Cells(i, j) = "" Then
293 e = False
294 Else
295 i = i + 1
296 End If
297 Wend
298
299 HalLastLine = i
300
301 End Function
302
303 '
304 ' vérifie si une colonne est vide ou non
305 '
306 ' @param f feuille de calcul
307 ' @param i première ligne
308 ' @param j colonne
309 ' @param last dernière ligne
310 ' @return true, la colonne est vide, false, la colonne n'est pas vide
311 '
312 Function HalEmptyColumn(f As String, ByVal i As Long, ByVal j As Long, ByVal last As Long) As Boolean
313
314 Dim res
315 Dim v
316
317 res = Worksheets(f).Range(Cells(i, j), Cells(last, j))
318
319 On Error GoTo impossible:
320 v = Application.WorksheetFunction.var(res)
321
322 If v = 0 Then
323 HalEmptyColumn = True
324 Else
325 HalEmptyColumn = False
326 End If
327
328 Exit Function
329
330 impossible:
331
332 HalEmptyColumn = True
333
334 End Function
3. Exemple de fonctions en VBA sous Excel 26
335
336 '
337 ' vérifie si un tableau possède une colonne vide
338 '
339 ' @param f feuille de calcul
340 ' @param i première ligne
341 ' @param j colonne
342 ' @param last dernière ligne
343 ' @param lastc dernière colonne
344 ' @return -1 ou l'indice de la colonne qui pose problème
345 '
346 Function HalCheckRange(f As String, ByVal i As Long, ByVal j As Long, ByVal last As Long, ByVal lastc As Long) As Long
347 Dim k As Long
348 For k = j To lastc
349
350 If HalEmptyColumn(f, i, k, last) Then
351 HalCheckRange = k - j + 1
352 Exit Function
353 End If
354 Next
355
356 HalCheckRange = -1
357 End Function
358
359 '
360 ' lit ou écrit un paramètre statique
361 '
362 ' @param k1 clé 1
363 ' @param k2 clé 2
364 ' @param k nom
365 ' @param v valeur
366 ' @param def valeur par défaut
367 ' @param m true pour modifier, false pour obtenir la valeur
368 '
369 Sub StaticParameter(k1 As String, k2 As String, k As String, ByRef v As String, _
370 def As String, m As Boolean)
371
372 Dim key1 As Variant
373 Dim key2 As Variant
374 Dim name As Variant
375 Dim value As Variant
376 Dim b As Variant
377 Dim r As Long
378
379 key1 = k1
380 key2 = k2
381 name = k
382 value = v
383 b = m
384
3. Exemple de fonctions en VBA sous Excel 27
385 r = ExtHalStaticVariable(key1, key2, name, value, b)
386 If Not b Then
387 If r = 0 Then
388 v = def
389 Else
390 v = value
391 End If
392 End If
393
394 End Sub
395
Bibliographie
[Riva2005] Fabrice Riva, Applications Financières sous Excel en Visual Basic, Economica (2005)
Table des �gures
1.1 Une matrice sous Excel 4x4, on souhaite en calculer la trace. . . . . . . . . . . . . . . . . . 3
1.2 On lance l'enregistrement d'une macro dans la première image, on lui donne un nom dansla seconde, on saisit la formule et on arrête l'enregistrement dans la troisième image. . . . 4
1.3 On ouvre l'éditeur Visual Basic dans Excel (cette opération est la même dans Word, Accessou toute autre application de la gamme Microsoft O�ce). Il faut ensuite cliquer surModule1
pour voir apparaître le code de la macro. Les lignes commençant par une apostrophe sontdes commentaires et ne sont pas pris en compte lors de l'exécution de la macro. La premièrede la macro signi�e que la case qui doit recevoir le résultat est sélectionnée. La seconde ligneest la saisie de la formule. La troisième ligne est un clic dans une case voisine. . . . . . . . 4
1.4 On clique d'abord sur le clic droit de la souris au niveau de la barre des tâches puis surPersonnaliser (première image). Une fenêtre apparaît, il faut cliquer sur l'onglet Commandepuis sur Macro (deuxième image). La troisième étape consiste à déplacer (on clique dessuset on relâche à l'endroit désiré) le bouton personnalisé dans une barre des tâches. Il s'insèrealors dedans. A nouveau un clic droit de la souris sur ce nouveau bouton, puis on cliquesur A�ecter une macro (troisième image). Une dernière fenêtre apparaît (dernière image),il su�t de sélectionner normalisation pour associer cette procédure au nouveau bouton.De retour dans Excel, on clique sur le nouveau bouton. La procédure s'exécute et la matriceest aussitôt modi�ée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 La première étape consiste à dessiner le bouton dans la feuille de calcul. Il faut faire d'abordapparaître une barre d'outils nommé Control ToolBox en cliquant sur le bouton droit dela souris au niveau des barres d'outils (première image). Il faut ensuite préciser à Excelqu'on désire insérer un bouton (ou plus généralement un contrôle). On clique pour celacomme indiqué sur la seconde image pour être en Design Mode. On clique alors sur un icôneressemblant à un bouton (troisième image). Il ne reste plus qu'à dessiner le bouton sur lafeuille (quatrième image). On clique à un endroit puis on maintient appuyé jusqu'à ce quele bouton soit assez grand. Il est possible par la suite de le déplacer (uniquement en Design
Mode. (suite �gure 1.6, page 7) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Après avoir fait apparaître un menu local en cliquant sur le bouton droit de la souris auniveau du bouton, la première image de cette série montre où faut il aller pour modi�er lenom du bouton. Une fois que cela est fait, on fait apparaître de nouveau ce même menulocal (seconde image) et on clique sur View Code pour faire apparaître le code de la macroassociée au bouton. La macro apparaît dans l'éditeur Visual Basic (troisième image), il nereste plus qu'à la dé�nir. A chaque fois que le bouton sera pressé, c'est cette macro qui seraexécutée. La dernière image est là pour rappeler qu'une fois toutes ces étapes terminées, ilne faut pas oublier de revenir dans Excel et de sortir du mode Design Mode pour utilisernormalement Excel et surtout pouvoir cliquer sur le bouton. . . . . . . . . . . . . . . . . . 7
Table des �gures 30
1.7 Une erreur survient car la somme des coe�cients de la première ligne est nulle ce qui impliqueune division par zéro. C'est opération est impossible et provoque l'ouverture de la fenêtrede la première image. Après avoir cliqué sur Débogage, on se retrouve dans l'éditeur VisualBasic avec une ligne en jaune : c'est la ligne qui a provoqué l'erreur. Le menu A�chage
(ou View en anglais) permet de faire apparaître une fenêtre Watch. Cette fenêtre facilite lamise au point des programmes car lorsque le programme s'arrête en cours d'exécution, ilest possible d'a�cher le contenu des variables en cours d'utilisation. . . . . . . . . . . . . 8
2.1 Création d'un module de classe en cliquant sur le clic droit de la souris dans la fenêtreVBAProject. La première image montre comment créer le module de classe. La secondeet la troisième montrent comment donner un nom à la classe créée. Le nom choisi est iciClassNom. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Boîte de dialogue dans laquelle apparaît ”message”. Le programme s'arrête puis reprendlorsque le bouton OK est pressé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Liste des tableaux
2.1 Principaux types de variables en VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Table des matières
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 Visual Basic et macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Première procédure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Macro liée à une feuille Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Autres possibillités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. Le langage VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1 Préliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Variables et opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Types prédé�nis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 Opérateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.3 Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.4 Types dé�nis par l'utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.5 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 A�chage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.1 Tests avec If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.2 Tests avec Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.1 Boucle For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.2 Boucle While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5.3 Boucle Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 Fonctions et procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6.1 Procédures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6.2 Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6.3 Variables statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6.4 Passages des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Table des matières 33
2.6.5 Surnom : Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7 Erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3. Exemple de fonctions en VBA sous Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Index
B
barre d'outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6boucle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15bouton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
C
classeattribut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
commentaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
D
destruteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
F
fonctionInputBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14MsgBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
L
ligne trop longue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
M
macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12mot-clé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
And . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11As . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Dim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9Do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14ElseIf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16Mod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15On. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18Or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16With. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
O
opérateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
P
paramètrepassage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17valeur par défaut. . . . . . . . . . . . . . . . . . . . . . . . .18
passagepar adresse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17par valeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
procédure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
R
remarquechaîne de caractères, caractères spéciaux . 11
référencesRiva2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7, 28
T
typeBoolean. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Double. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
34
Index 35
Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
V
variabledéclaration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10globale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3