vba varianta2

35

description

super

Transcript of vba varianta2

Page 1: vba varianta2

Visual Basic pour Application

(VBA)

http ://perso.wanadoo.fr/x.dupre/programmation/

Xavier Dupré

Page 2: vba varianta2

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.

Page 3: vba varianta2

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

Page 4: vba varianta2

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

Page 5: vba varianta2

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

Page 6: vba varianta2

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.

Page 7: vba varianta2

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.

Page 8: vba varianta2

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.

Page 9: vba varianta2

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 :

Page 10: vba varianta2

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.

Page 11: vba varianta2

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 =.

Page 12: vba varianta2

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

Page 13: vba varianta2

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.

Page 14: vba varianta2

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 :

Page 15: vba varianta2

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

Page 16: vba varianta2

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.

Page 17: vba varianta2

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.

Page 18: vba varianta2

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

Page 19: vba varianta2

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

Page 20: vba varianta2

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 '

Page 21: vba varianta2

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

Page 22: vba varianta2

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 '

Page 23: vba varianta2

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

Page 24: vba varianta2

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

Page 25: vba varianta2

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

Page 26: vba varianta2

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

Page 27: vba varianta2

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

Page 28: vba varianta2

Bibliographie

[Riva2005] Fabrice Riva, Applications Financières sous Excel en Visual Basic, Economica (2005)

Page 29: vba varianta2

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

Page 30: vba varianta2

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

Page 31: vba varianta2

Liste des tableaux

2.1 Principaux types de variables en VBA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

Page 32: vba varianta2

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

Page 33: vba varianta2

Table des matières 33

2.6.5 Surnom : Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.7 Erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3. Exemple de fonctions en VBA sous Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Page 34: vba varianta2

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

Page 35: vba varianta2

Index 35

Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10String. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

V

variabledéclaration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10globale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3