3.5 étoiles sur 5 a partir de 1 votes.
Votez ce document: ☆☆☆☆☆★★★★★
L'environnement de développement IDE L'IDE (
Integrated Development Environment) est l'environnement dans lequel vous pouvez saisir, modifier et
tester votre code VBA. Cet environnement est également appelé VBE (
Visual Basic Editor).
L'IDE met à votre disposition de nombreux outils qui facilitent la programmation et la mise au point du code VBA :
outils de débogage, assistance à la saisie, explorateur d'objets
- En utilisant la combinaison de touches
Ctrl F11.
- En cliquant sur l'icône située dans l'onglet
Outils de base de données.
- En sélectionnant une procédure évènementielle depuis une feuille de propriétés dans un formulaire ou un état.
Fenêtre de l'environnement IDE» Toutes les fenêtres de l'environnement IDE peuvent être affichées à partir du menu
Affichage.
La barre d'outils Standard (1)
1 Afficher Access
2 Insérer un module, un module de classe ou une procédure (Function ou Sub)
3 Enregistrer
4 Couper © ENI Editions - All rigths reserved- 1 -
5 Copier
6 Coller
7 Rechercher
8 Annuler
9 Rétablir
10 Exécuter
11 Arrêt
12 Réinitialiser
13 Mode création
14 Afficher l'explorateur de projets
15 Afficher la fenêtre Propriétés
16 Afficher l'explorateur d'objets
17 Afficher la boîte à outils
18 Aide sur Microsoft Visual Basic
19 Position courante dans la fenêtre de Code L'Explorateur de projet (2)
Tous les modules de la base de données ou du projet VBA sont affichés dans l'explorateur de projets, selon une
structure arborescente. Ils sont regroupés en trois ensembles :
- les modules de formulaires ou d'états,
- les modules standards,
- les modules de classe indépendants.
La fenêtre Propriétés (3)
Elle permet d'afficher les propriétés des différents modules. Pour afficher les propriétés d'un formulaire ou d'un
état, celuici doit être ouvert dans Access ? si ce n'est pas le cas, sélectionnez le formulaire ou l'état dans
l'explorateur de projet et choisissez l'option
Objet du menu
Affichage.
La fenêtre Code (4)
Dans cette fenêtre se trouvent deux zones de liste déroulantes :
- la zone objet (
10) affiche la liste les objets du module,
- la zone procédure (
11) affiche les procédures ou les événements de l'objet sélectionné dans la zone objet. Les événements
déjà utilisés apparaissent en gras.
Le complément automatique d'instructions (5)
Le complément automatique d'instructions présente les informations qui sont le complément logique de
l'instruction au niveau du point d'insertion.
Par exemple, la liste déroulante des méthodes et propriétés disponibles pour un objet s'affiche automatiquement
lorsque vous tapez le nom de l'objet suivi d'un point.
Si cette liste n'est pas active, sélectionnez
Options dans le menu
Outils et cochez la case
Complément
automatique des instructions de l'onglet
Éditeur.
La fenêtre Exécution (6)
Elle permet d'afficher les valeurs des variables, de les modifier et d'exécuter des instructions.
» Les fenêtres
Exécution,
Variables locales et
Espions sont utilisées lors du débogage de l'application.
- 2 -© ENI Editions - All rigths reserved
La fenêtre Variables locales (7)
Elle contient toutes les valeurs des variables accessibles dans la portée en cours.
La fenêtre Espions (8)
Elle affiche les valeurs des variables qui ont été définies comme variables espions.
L'Explorateur d'objets (9)
Il permet de visualiser, pour chaque objet, ses propriétés, méthodes et constantes.
© ENI Editions - All rigths reserved- 3 -
Configuration de l'éditeur VBA Paramétrage des couleurs de l'éditeur Les mots clés, les fonctions et les instructions VBA sont affichées en
bleu, les objets, méthodes et propriétés en
noir et les commentaires en
vert. Les instructions contenant des erreurs sont mises en évidence en
rouge.
Vous pouvez modifier le style (couleurs, police, taille) des différentes parties du code. Pour cela, sélectionnez
Options dans le menu
Outils et cliquez sur l'onglet
Format de l'éditeur.
Paramétrage de la présentation du code Différents outils, comme la vérification automatique de la syntaxe, la déclaration obligatoire des variables, le
complément automatique d'instructions facilitent la saisie et la mise au point du code VBA.
Pour activer ces outils, sélectionnez
Options dans le menu
Outils et cliquez sur l'onglet
Éditeur.
© ENI Editions - All rigths reserved- 1 -
- 2 -© ENI Editions - All rigths reserved
Référence aux objets Pour pouvoir utiliser un objet d'accès aux données, un objet d'automation, ou un contrôle ActiveX spécifique,
vous devez référencer la bibliothèque d'objet correspondante. Une bibliothèque d'objets est généralement un
fichier DLL ou OCX qui contient le code de l'objet.
Pour activer une référence à une bibliothèque, sélectionnez l'option
Références dans le menu
Outils.
» Vous pouvez ajouter des références en cliquant sur le bouton de commande
Parcourir.
© ENI Editions - All rigths reserved- 1 -
Création d'une procédure en VBA Cette section va vous guider pas à pas dans la création d'une première procédure en VBA.
Cette procédure demande à l'utilisateur de saisir une date sous forme abrégée (19/06/07), contrôle la date et
l'affiche dans un format date complet (mardi 19 juin 2007).
Étape 1 : création d'un nouveau module
Depuis Access :
s Activez l'onglet
Créer du ruban.
s Cliquez sur la flèche située en bas de l'icône
Macro puis choisissez l'option
Module.
Depuis l'environnement VBE :
s Sélectionnez l'option
Module du menu
Insertionou
depuis la fenêtre
Explorateur de projets, cliquez avec le bouton droit de la souris et sélectionnez
Insertion puis
Module à partir du
menu contextuel.
Étape 2 : attribuer un nom au module
Par défaut, le module créé est intitulé Module1 (ou Module suivi du premier numéro disponible si d'autres modules
ont déjà étés créés et non renommés).
Pour modifier le nom du module :
s Sélectionnez le module dans la fenêtre Explorateur de projet.
s Dans la fenêtre
Propriétés (cliquez sur
F2 si la fenêtre Propriétés n'est pas affichée), modifiez la valeur de la propriété
(Name).
Étape 3 : Création d'une procédure
s Double cliquez sur le module pour afficher la fenêtre de VBA associée.
s Saisissez le code suivant dans la fenêtre VBA :
© ENI Editions - All rigths reserved- 1 -
s Cliquez sur l'icône
de la barre d'outils
Standard pour enregistrer la procédure.
Étape 4 : Test de la procédure
Pour exécuter le code de la procédure :
s Positionnez le curseur de la souris sur le code de la procédure saisie.
s Cliquez sur l'icône
de la barre d'outils
Standard ou utilisez la touche
F5.
s Saisissez une date dans la boîte de dialogue affichée et cliquez sur le bouton de commande
OK :
Le message suivant est alors affiché :
- 2 -© ENI Editions - All rigths reserved
s Cliquez sur le bouton de commande
OK.
Le jour de la semaine étant un lundi, le message suivant apparaît :
© ENI Editions - All rigths reserved- 3 -
Recommandations Afin d'optimiser les performances de VBA, certaines techniques peuvent contribuer à accélérer la vitesse
d'exécution de votre code.
- Les variables doivent toujours être explicitement déclarées.
- Le type des variables doit être le plus spécifique possible.
- Pour faire référence aux propriétés, contrôles et objets d'accès aux données, les variables sont préconisées.
- Le mot réservé
Me doit être utilisé pour faire référence au formulaire ou à l'état au sein d'une procédure événementielle.
- L'emploi des constantes est recommandé chaque fois que possible.
- Les modules doivent être organisés pour ne pas surcharger la mémoire. Un module est mis en mémoire uniquement si une de
ses procédures est appelée par d'autres codes.
- Le code doit être régulièrement compilé.
© ENI Editions - All rigths reserved- 1 -
Les modules On distingue trois types de modules :
- les modules Microsoft Access Objets de classe,
- les modules standards,
- les modules de classe indépendants.
La liste de ces modules est affichée de façon hiérarchique dans l'explorateur de projets de l'interface VBA.
» Si l'explorateur de projet n'est pas affiché, choisissez l'option
Explorateur de projets du menu
Affichage ou utilisez le raccourci-
clavier
Ctrl R.
Les modules
Microsoft Access Objets de classe contiennent les procédures événementielles associées aux
formulaires et états.
Les modules standards (ou modules) sont composés d'une ou de plusieurs procédures pouvant être appelées
en de nombreuses circonstances à partir des différents modules.
» Seuls les modules standards apparaissent dans la liste des modules du volet de navigation.
» Il est recommandé de regrouper dans un ou plusieurs modules les procédures "utilitaires" pouvant être utilisées par différentes
applications (ex : traitement des dates). Ces modules pourront ensuite être exportés dans d'autres bases Access à partir de l'option
Exporter un fichier du menu
Fichier.
Les modules de classe indépendants sont utilisés lors de la création de classes d'objets. La programmation à
base d'objets sera détaillée dans le chapitre
Objets et collections.
Les éléments du langage Visual Basic décrits dans ce chapitre peuvent être utilisés dans les différents modules.
© ENI Editions - All rigths reserved- 1 -
Les procédures Les procédures sont des
sousprogrammes qui permettent de décomposer une tâche de programmation
complexe en une suite de tâches plus petites et plus simples.
Elles permettent d'organiser le code à l'intérieur des modules afin d'obtenir un code plus facile à maintenir et
facilement réutilisable.
Dans VBA Access 2007, il existe trois types de procédures :
- les procédures
Sub (pour sub routine) appelées sous?programmes,
- les procédures
Function appelées fonctions,
- les procédures
Property appelées procédures de propriété.
Dans ce chapitre, nous utiliserons uniquement les procédures Sub et Function qui sont les plus courantes (les
procédures de propriété seront présentées dans le chapitre
Objets et collections).
Il existe des points communs entre ces deux procédures :
- elles contiennent des instructions et/ou des méthodes VBA,
- elles acceptent des arguments,
- elles peuvent être appelées depuis d'autres fonctions ou procédures Sub.
Certaines caractéristiques sont spécifiques aux fonctions :
- elles peuvent retourner des valeurs,
- elles peuvent être appelées depuis une macro.
Les procédures Sub Il existe deux types de procédures Sub :
- les procédures Sub générales
- les procédures Sub événementielles.
Une
procédure Sub générale est une procédure déclarée dans un module standard ou au niveau général d'un
module de formulaire ou d'état. L'appel d'une telle procédure est explicitement défini dans le code du programme.
Exemple Cette procédure générale demande à l'utilisateur de confirmer son souhait de quitter l'application, et quitte Access si l'utilisateur
répond Oui. Private Sub Quitter_Appli()
If Msgbox ("Voulez-vous quitter l'application ?",_
VbQuestion + VbYesNo) = vbYes Then
Quit
End If
End Sub
» Ce code peut être appelé à partir de tout bouton de commande ou option de menu permettant de quitter l'application.
© ENI Editions - All rigths reserved- 1 -
Une
procédure Sub événementielle est une procédure associée à un événement d'un objet. D'ailleurs son nom
est composé du nom de l'objet activé, suivi du caractère souligné (_) et du nom de l'événement. L'appel d'une
telle procédure est implicite, c'estàdire que la procédure n'est exécutée que lorsque l'événement associé a lieu.
Exemple Cette procédure événementielle permet d'afficher le formulaire "Employés" lorsque l'utilisateur clique sur un bouton de commande
cmdEmployés. Private Sub cmdEmployés_Click()
Docmd.OpenForm "Employés"
End Sub
» Certaines procédures Sub événementielles peuvent être générées automatiquement à partir d'assistants (ex : assistant boutons de
commande).
Les procédures Function Les
procédures Function, plus couramment appelées
fonctions, renvoient une valeur, telle que le résultat d'un
calcul. La valeur retournée doit porter le nom de la fonction.
» Ce sont les seules procédures pouvant être appelées depuis une macro.
Le langage Visual Basic comporte de nombreuses fonctions intégrées telles que les fonctions se rapportant aux
dates (day, week, year, format ).
En plus de ces fonctions intégrées, vous pouvez créer vos propres fonctions personnalisées.
Exemple Cette fonction demande à l'utilisateur de confirmer son souhait de quitter l'application, et renvoie True si l'utilisateur répond Oui et
False sinon. Function Quitter_Appli() As Boolean
If MsgBox("Voulez-vous quitter l'application ?", _
vbQuestion + vbYesNo) = vbYes Then
Quitter_Appli = True
Else
Quitter_Appli = False
End If
End Function
Déclaration des procédures Syntaxe d'une procédure Sub
[Private | Public | Friend] [Static] Sub NomProc
([liste d'arguments])
<Séquences d'instructions>
End Sub
Syntaxe d'une procédure Function
[Private | Public | Friend] [Static] Function
NomProc ([liste d'arguments]) [As Type]
<Séquences d'instructions>
End Function
Pour créer une procédure Sub ou Function, vous devez respecter les étapes suivantes :
- déterminez la
portée de la procédure,
- déclarez la procédure en fonction de son type avec le mot clé
Sub ou
Function, suivi du nom de la procédure,
- 2 -© ENI Editions - All rigths reserved
- définissez les
arguments que vous voulez passer en paramètres à la procédure en les indiquant entre parenthèses après le nom
de la procédure,
- s'il s'agit d'une fonction, précisez éventuellement le type de la valeur retournée après le mot clé
As,
- rédigez le code permettant d'effectuer le traitement souhaité. Utilisez éventuellement
Exit Sub ou
Exit Function pour sortir de
la procédure. S'il s'agit d'une fonction, affectez le résultat au nom de la fonction,
- terminez la procédure par
End Sub ou
End Function.
Portée des procédures La portée d'une procédure définit l'étendue de son utilisation.
Une procédure
publique (déclarée avec le mot clé
Public) peut être appelée depuis tout module, toute procédure
événementielle ou toute macro de la base de données.
Une procédure
privée (déclarée avec le mot clé
Private) ne peut être appelée que depuis une procédure au sein
du même module.
La procédure
Friend est utilisée uniquement dans les modules de classe.
Le mot clé
Static indique que les variables locales de la procédure sont préservées entre les appels.
En l'absence des mentions
Public,
Private ou
Friend, les procédures sont publiques par défaut.
Arguments des procédures Les arguments sont utilisés pour transmettre aux procédures des paramètres sous forme de données. Le nombre
d'arguments peut varier de zéro à plusieurs.
Pour déclarer un argument, vous pouvez simplement spécifier son nom. Néanmoins, la syntaxe complète de
déclaration d'un argument est la suivante :
[Optional] [ByVal | Byref] [ParamArray]
<variable> [As type]
Optional : indique que l'argument est facultatif. Tous les arguments facultatifs doivent être situés à la fin de la
liste des arguments et être de type variant.
Byval : indique que l'argument est passé par valeur. La procédure accède à une copie de la variable ? sa valeur
initiale n'est donc pas modifiée par la procédure.
Byref (option par défaut) : indique que l'argument est passé par référence. La procédure peut ainsi accéder à
la variable proprement dite ? sa valeur réelle peut, de ce fait, être modifiée par la procédure.
ParamArray : utilisé uniquement pour le dernier argument de la liste, indique que celui ci est un tableau facultatif
d'éléments de type
Variant. Il ne peut être utilisé avec les mots clés
ByVal,
ByRef ou
Optional.
Variable : précise le nom de l'argument
. Pour les variables tableau, il ne faut pas préciser les dimensions.
Type : précise le type de données de l'argument passé à la procédure (Byte, Boolean, Integer, Long ).
Les arguments nommés Le passage d'arguments à une procédure en tenant compte de leur ordre d'apparition est parfois difficile à mettre
en œuvre, notamment lorsque certains paramètres sont facultatifs. De même, la lisibilité des appels de procédures
comportant plusieurs paramètres n'est pas toujours évidente.
» Les arguments nommés facilitent le passage des arguments en présentant les avantages suivants :
© ENI Editions - All rigths reserved- 3 -
- l'ordre des arguments nommés n'a pas d'importance,
- les arguments facultatifs peuvent être omis.
La syntaxe des arguments nommés est :
NomArgument
: = Valeur
Exemple If MsgBox("Voulez-vous quitter l'application ?", _
vbYesNo + vbQuestion, "Gestion des ventes") = vbYes Then
End If
peut être transformé en : If MsgBox(Prompt:="Voulez-vous quitter l'application ?", _
Buttons:=vbYesNo + vbQuestion, _
Title:="Gestion des ventes") = vbYes Then
End If
De même l'ordre des paramètres peut être modifié : If MsgBox(Prompt:="Voulez-vous quitter l'application ?", _
Title:="Gestion des ventes", _
Buttons:=vbYesNo + vbQuestion) = vbYes Then
End If
Appel d'une procédure Syntaxe
[Call] NomProc [liste d'arguments]
Si le mot clé Call est indiqué, vous devez placer la liste d'arguments entre parenthèses.
Pour stocker le résultat d'une fonction dans une variable, utilisez la syntaxe suivante :
<variable> = NomProc ( [liste d'arguments] )
Exemples de procédures Lorsque l'utilisateur clique sur le bouton de commande cmdCalcul du formulaire de saisie d'une facture, le montant
de la remise doit être calculé de la façon suivante :
- 5% du montant de la facture si celui?ci est supérieur ou égal à 5000,
- 2% du montant de la facture si celui?ci est compris entre 1000 et 5000,
- 0 si le montant de la facture est inférieur à 1000.
Procédure événementielle
Private Sub cmdCalcul_Click()
txtMntRem = Remise (txtMntFact)
End Sub
» La fonction Remise est appelée, avec comme argument, le montant de la facture (contenu dans la zone de texte txtMntFact du
formulaire). La remise calculée sera directement affichée dans la zone de texte txtMntRem.
Fonction
- 4 -© ENI Editions - All rigths reserved
Private Function Remise(Montant as Currency) as Currency
Const Taux1 = 0.05
Const Taux2 = 0.02
If Montant >= 5000 then
Remise = Montant * Taux1
Else
If Montant >= 1000 then
Remise = Montant * Taux2
End If
End If
End Function
» Si le montant de la facture est inférieur à 1000, Remise conserve sa valeur initiale, soit zéro.
La fonction MsgBox Cette fonction affiche un message dans une boîte de dialogue, éventuellement accompagné d'une icône et de un
à trois boutons.
Syntaxe de l'instructionUtilisée lorsqu'il n'y a qu'un seul bouton.
MsgBox <message> [, [<type>][, <titre>]]
Syntaxe de la fonctionUtilisée lorsqu'il y a plus d'un bouton. Elle permet de savoir quel bouton a été activé grâce à sa valeur de retour.
MsgBox (<message> , [<boutons>][, <titre>]
[,helpfile, context])
message : Texte du message dans la boîte de dialogue.
boutons : Expression numérique qui représente la somme des valeurs spécifiant les boutons à afficher, le style
d'icône à utiliser, l'identité du bouton par défaut, ainsi que la modalité.
titre :Texte dans la barre de titre.
helpfile : Fichier d'aide à utiliser.
Context : Rubrique de l'aide concernée.
Valeurs de l'argument BoutonsConstante ValeurSignificationsymbolique Nombre et type de boutonsvbOKOnly
0
Affiche le bouton
OK uniquement.
vbOKCancel
1
Affiche les boutons
OK et
Annuler.
vbAbortRetryIgnore
2
Affiche
les
boutons
Abandonner,
Recommencer et
Ignorer.
vbYesNoCancel
3
Affiche les boutons
Oui,
Non et
Annuler.
vbYesNo
4
Affiche les boutons
Oui et
Non.
vbRetryCancel
5
Affiche les boutons
Recommencer et
Annuler.
vbMsgBoxHelpButton
16384
Affiche un bouton d'aide.
Type d'icône© ENI Editions - All rigths reserved- 5 -
vbCritical
16
Affiche l'icône
.
vbQuestion
32
Affiche l'icône
.
vbExclamation
48
Affiche l'icône
.
vbInformation
64
Affiche l'icône
.
Bouton par défautvbDefaultButton1
0
Premier bouton.
vbDefaultButton2
256
Deuxième bouton.
vbDefaultButton3
512
Troisième bouton.
vbDefaultButton4
768
Quatrième bouton.
ModalitévbApplicationModal
0
Application modale.
L'utilisateur doit répondre au message
affiché dans la zone de message avant
de pouvoir continuer à travailler dans
l'application en cours.
vbSystemModal
4 096
Système modal.
Toutes
les
applications
sont
interrompues jusqu'à ce que l'utilisateur
réponde au message affiché dans la
zone de message.
PrésentationvbMsgBoxHelpButton
16384
Ajoute le bouton "Aide" à la zone de
message.
vbMsgBoxSetForeground
65536
Affiche la fenêtre message au premier
plan.
vbMsgBoxRight
524288
Aligne le texte à droite.
vbMsgBoxRtlReading
1048576
Définit un ordre de lecture de droite à
gauche pour les systèmes hébreux et
arabes.
Les valeurs de retour possibles sont également définies par des constantes :
ConstanteValeur de retourBouton choisivbOK
1
OKvbCancel
2
AnnulervbAbort
3
AbandonnervbRetry
4
RecommencervbIgnore
5
IgnorervbYes
6
OuivbNo
7
NonExemples : utilisation de la fonction MsgBox StrRep = MsgBox ("Voulez-vous continuer ?", 292, _
"Confirmation")
ou StrRep = MsgBox ("Voulez-vous continuer ?", _
vbYesNo + vbQuestion + vbDefaultButton2, _
- 6 -© ENI Editions - All rigths reserved
"Confirmation")
Utilisation de l'instruction MsgBox MsgBox "Résultat faux",vbCritical,"Erreur"
© ENI Editions - All rigths reserved- 7 -
Les variables Les types de variables Les variables permettent de stocker des valeurs intermédiaires à tout moment de l'exécution du code VBA afin de
les exploiter ultérieurement pour effectuer des calculs, des comparaisons, des tests…
Les variables sont identifiées par un
nom, permettant de faire référence à la valeur qu'elles contiennent, et un
type déterminant la nature des données qu'elles peuvent stocker.
Numériques
>
TypeÉtendueTaille
en
octetsByte
0 à 255
1
Integer
32 768 à 32 767
2
(entier)
Long
2 147 483 648 à
4
(entier long)
2 147 483 647
Single
3,402823E38 à 1,401298E45
4
(réel simple
(valeurs négatives)
à
virgule
1,401298E45 à 3,402823E38
flottante)
(valeurs positives)
Double
1,79769313486231E308 à
8
(réel double
4,94065645841247E324
à
virgule
(valeurs négatives)
flottante)
4,94065645841247E324 à
1,79769313486231E308
(valeurs positives)
Currency
922 337 203 685 477,5808 à
8
(monétaire
922 337 203 685 477,5807
à virgule fixe)
Decimal
+/79 228 162 514 264 337 593 543950 335
12
sans séparateur décimal ?
+/7,9228162514264337593543950335
avec 28 chiffres à droite du séparateur
décimal ? le plus petit nombre différent de zéro
est +/0.0000000000000000000000000001
Chaînes de caractères
Le type est
String. Il existe deux types de chaînes :
- les chaînes de longueur variable peuvent contenir environ 2 milliards (231) de caractères.
-
16
Les chaînes de longueur fixe peuvent contenir de 1 à environ 64000 (2 ) caractères.
Exemple ' C h a î n e d e l o n g u e u r v a r i a b l e Dim Adresse As String
' C h a î n e d e l o n g u e u r f i x e ( 2 0 c a r a c t è r e s ) Dim Nom As String * 20
Booléen
© ENI Editions - All rigths reserved- 1 -
Le type est
Boolean. La variable peut prendre la valeur True (Vrai) ou False (Faux) qui est sa valeur par défaut.
Elle occupe deux octets.
Date
Le type est
Date. La variable peut prendre les valeurs de date et d'heure du 1er janvier 100 au 31 décembre
9999. Elle occupe huit octets.
Variant
Le type est
Variant. La variable permet de stocker des valeurs de données de toutes sortes : dates, nombres à
virgule flottante, chaînes de caractères, références à des objets Elle occupe seize octets, plus un octet par
caractère si la valeur est une chaîne.
Objet
Le type est
Object. La variable permet de stocker la référence à un objet sous forme d'une adresse de quatre
octets.
C'est un type générique, mais pour obtenir des performances supérieures, il est souhaitable d'utiliser plutôt le nom
de l'objet tel qu'il est défini dans la zone
Classes de l'explorateur d'objets.
Exemple Ouverture de base de données Access en utilisant le type générique Objet ou à partir de l'objet Database. Dim dbsEmp As Object
Dim dbsArt As Database
Set dbsEmp = OpenDatabase("C:\Application\" _
& "Employés.accdb")
Set dbsArt = OpenDatabase("C:\Application\" _
& "Articles.accdb")
Défini par l'utilisateur
Ce type est utilisé surtout pour la déclaration de variables contenant plusieurs types d'informations. La définition
du type ne peut se faire que dans la section de déclaration d'un module.
Exemples Déclaration d'un nouveau type Employés : Public Type Employés
Matricule As String * 5
Nom As String * 20
Age As Integer
Service As String * 10
End Type
Utilisation du type Employés : Dim NewEmployé As Employés
NewEmployé.Matricule = "15253"
Les déclarations de variables Il existe deux façons de déclarer des variables : implicitement et explicitement.
Déclaration implicite
Dès que VBA rencontre une variable qui n'a pas fait l'objet d'une déclaration explicite, il la déclare de façon
implicite en lui donnant un type
Variant.
- 2 -© ENI Editions - All rigths reserved
Le type Variant permet de stocker successivement dans la même variable des valeurs de type différent. Le type
de la variable évolue en fonction de la valeur qui lui est affectée.
Private Sub Affectation()
' L e t y p e d e l a v a r i a b l e d e v i e n t S t r i n g var = "Bonjour"
MsgBox TypeName(var)
' L e t y p e d e l a v a r i a b l e d e v i e n t I n t e g e r var = 12
MsgBox TypeName(var)
' L e t y p e d e l a v a r i a b l e d e v i e n t D o u b l e var = 6.55957
MsgBox TypeName(var)
' L e t y p e d e l a v a r i a b l e d e v i e n t B o o l e a n var = True
MsgBox TypeName(var)
End Sub
Déclaration explicite
La variable est déclarée avant son utilisation.
Il est possible d'imposer la déclaration explicite des variables en utilisant dans la section de déclaration de chaque
module, l'instruction
Option Explicit. Pour que cette instruction soit définie par défaut dans VBA, activez l'option
Déclaration des variables obligatoire du menu
Outils Options onglet
Éditeur.
Les déclarations explicites de variables peuvent se faire dans la section de déclarations des modules, ou dans le
corps d'une procédure ou d'une fonction.
La déclaration est réalisée par l'une des quatre instructions suivantes utilisant la même syntaxe :
- au niveau d'une procédure, d'une fonction ou d'un module :
Dim <Nomvariable> [As Type]
Static <Nomvariable> [As Type]
- au niveau d'un module :
Private <Nomvariable> [As Type]
Public <Nomvariable> [As Type]
À chaque fois que l'instruction
Dim est exécutée, la variable est réinitialisée (0 pour numérique, vide pour
String,
Empty pour
Variant). S'il est nécessaire de garder la précédente valeur, il faut utiliser
Static à la place de
Dim.
» Si aucun type n'est précisé (ex : dim var), le type par défaut Variant est affecté à la variable.
La portée des variables Une variable est dite
locale à une fonction ou à une procédure, si elle est déclarée dans le corps de la fonction
ou de la procédure avec
Dim ou
Static. Cette variable n'est pas connue (visible) en dehors de la fonction ou de
la procédure.
Une variable peut être visible de toutes les procédures ou fonctions d'un module (standard, de classe, formulaire
ou état), si elle est déclarée dans la section de déclaration du module avec
Private (ou
Dim).
Une variable est
publique à toute l'application (c'estàdire visible depuis n'importe quel endroit de l'application),
si elle est déclarée dans la section de déclaration d'un module avec l'instruction
Public.
» Pour faire référence, à partir d'un module, à une variable publique se trouvant dans un autre module de formulaire ou d'état, il convient
d'utiliser la syntaxe suivante :
Forms!<NomFormulaire>.<NomVariable>
© ENI Editions - All rigths reserved- 3 -
Reports!<NomEtat>.<NomVariable>
Les tableaux Un tableau se déclare de la même façon que les variables, avec des instructions
Dim,
Static,
Private ou
Public.
Un tableau est une variable comportant plusieurs compartiments permettant de stocker autant de valeurs. Par
opposition, une variable classique désigne un compartiment destiné à une seule valeur.
On peut faire référence au tableau globalement ou accéder individuellement à ses éléments en utilisant des
indices.
Quel que soit le type des éléments, un tableau nécessite 20 octets de mémoire, auxquels viennent s'ajouter
quatre octets pour chaque dimension et le nombre d'octets occupés par les données.
Si le type de données n'est pas spécifié, les éléments du tableau déclaré prennent le type
Variant.
Le premier poste d'un tableau se voit attribuer l'indice 0 par défaut. Toutefois, il est possible de mettre cette
valeur par défaut à 1 en utilisant, en section de déclaration, l'instruction
Option Base 1.
L'utilisation d'une clause
To permet également de définir explicitement les indices de début et de fin.
Exemples Déclaration de différents tableaux : ' 1 2 é l é m e n t s i n d i c é s d e 0 à 1 1 Dim Remise (11) As Single
' 1 2 é l é m e n t s i n d i c é s d e 1 à 1 2 Dim Frais (1 To 12) As Single
' 2 d i m e n s i o n s : l a p r e m i è r e i n d i c é e d e 0 à 1 0 e t
' l a s e c o n d e d e 1 à 1 5 Dim Train (10,1 To 15) As String
Option Base 1
' 1 2 é l é m e n t s i n d i c é s d e 1 à 1 2 Dim Frais (12)
Utilisation d'un tableau à deux dimensions.
L'exemple suivant permet de créer une table de multiplication : chaque élément du tableau Multiplie est égal au résultat de la
multiplication de ses indices. Chaque ligne de la table est affichée dans la fenêtre exécution (méthode Print de l'objet Debug). Sub Affiche_Tableau()
Dim Multiplie(1 To 10, 1 To 10) As Integer
Dim i, j As Integer
Dim strResult As String
' 1 è r e l i g n e d e l a t a b l e d e m u l t i p l i c a t i o n For i = 1 To 10
strResult = Format(i, "000") & " "
Next i
Debug.Print strResult
' I n i t i a l i s a t i o n d u t a b l e a u For i = 1 To 10
strResult = Format(i, "00")
For j = 1 To 10
Multiplie(i, j) = i * j
strResult = strResult & " " & Format(Multiplie(i, j),
"000")
Next j
Debug.Print strResult
Next i
' R e n v o i e l e r é s u l t a t d e 4 * 7
MsgBox "4 * 7 = " & Multiplie(4, 7)
' R e n v o i e l e r é s u l t a t d e 7 * 4
MsgBox "7 * 4 = " & Multiplie(7, 4)
- 4 -© ENI Editions - All rigths reserved
End Sub
Résultat dans la fenêtre d'exécution. Les tableaux dynamiques
Il s'agit de tableaux dont les dimensions sont définies à l'exécution. Ils permettent l'optimisation de la place
occupée en mémoire.
Déclaration : Dim Tableau ()
Utilisation : Avant de l'utiliser, il faut le dimensionner à l'aide de l'instruction Redim : ReDim Tableau (15 To 50)
Il est possible d'utiliser l'instruction
ReDim pour modifier le tableau dynamique aussi souvent que nécessaire. Par
défaut, les valeurs présentées dans le tableau sont écrasées. L'instruction
ReDimPreserve permet d'étendre un
tableau tout en conservant les valeurs existantes.
ReDim Preserve Tableau (15 To 70)
Les constantes Une constante représente une valeur numérique ou de type chaîne qui ne doit pas être modifiée.
L'instruction
Const permet de déclarer une constante et de définir sa valeur fixe. Une fois déclarée, la constante
ne peut être modifiée ni recevoir une nouvelle valeur.
La déclaration d'une constante est réalisée dans une procédure ou dans la section déclaration d'un module.
Les constantes de niveau module sont
privées par défaut.
Pour déclarer une constante de niveau module publique, il est nécessaire de faire précéder l'instruction
Const du
mot clé
Public.
Exemple acForm
vbCurrency
Les constantes intrinsèques
© ENI Editions - All rigths reserved- 5 -
Les constantes intrinsèques sont des constantes mises à disposition par les applications ellesmêmes. C'est ainsi
qu'Access 2003 possède ses propres constantes intrinsèques qui sont visibles à partir de l'explorateur d'objets.
Une constante intrinsèque peut être utilisée dans une macro ou dans du code Visual Basic.
Les constantes intrinsèques sont caractérisées par un préfixe de deux lettres identifiant la bibliothèque d'objets
où est définie la constante.
Préfixe des constanteBibliothèquePréfixeExemplesMicrosoft
ac
acForm, acNormal
Access
vbCurrency,
Visual Basic
vb
vbYellow
Microsoft
mso
msoSortByFileName
Office
» Les constantes de la bibliothèque Visual Basic sont décrites dans l'annexe B de cet ouvrage. Pour utiliser les constantes de Microsoft
Office, vous devez sélectionner la référence "Microsoft Office 12.0 Object Library" (option
Références du menu
Outils).
» Il existe plusieurs catégories de constantes intrinsèques (constantes d'action, constantes de procédures événementielles ).
Exemple L'exemple suivant montre comment afficher un formulaire et le personnaliser. Il utilise les constantes strNomAppli et strNomSoc
déclarées dans le code et plusieurs constantes intrinsèques. Résultat dans Access : affichage du formulaire employé personnalisé. - 6 -© ENI Editions - All rigths reserved
© ENI Editions - All rigths reserved- 7 -
Les structures de décision Il est souvent nécessaire de tester des conditions spécifiques avant d'exécuter des instructions.
Les structures de décisions, appelées aussi alternatives ou branchements conditionnels, permettent, au terme
d'une évaluation, d'opter pour un bloc de code ou un autre.
On distingue deux instructions de branchement conditionnel :
- If Then Else
- Select Case
» La fonction IIf peut également être utilisée pour définir une valeur en fonction d'une condition.
L'instruction IF s If
Permet d'exécuter des instructions en fonction du résultat d'une condition.
Les instructions
If Then Else peuvent être imbriquées autant de fois que nécessaire.
» La syntaxe multiligne, avec une indentation appropriée, présente l'avantage d'une plus grande lisibilité.
Syntaxe 1 (sur une ligne)If <cond.> Then <inst.> [Else <inst.>]
<inst.> peut être constitué de plusieurs instructions séparées par le caractère (:).
Syntaxe 2 (sur plusieurs lignes)If <condition 1> Then
<séquence d'instructions 1>
[ElseIf <condition 2> Then
<séquence d'instructions 2>]
[Else
<séquence d'instructions 3>]
End If
Autre possibilitéIf <condition 1> Then
<séquence d'instructions 1>
[Else
If <condition 2> Then
<séquence d'instructions 2>
[Else
<séquence d'instructions 3>]
End If]
End If
Exemple Affiche le résultat de la comparaison entre A et B : If A>B Then
MsgBox "A>B"
Else
If A = B Then
MsgBox "A=B"
Else
© ENI Editions - All rigths reserved- 1 -
MsgBox "A<B"
End If
End If
L'instruction Select Case s Select Case
Exécute des séquences d'instructions spécifiées en fonction de la valeur d'une expression.
L'instruction
Select Case permet de remplacer avantageusement le
ElseIf dans des instructions
If Then Elselors de la comparaison entre une expression et plusieurs valeurs.
SyntaxeSelect Case <expression à tester>
[Case <liste d'expressions 1>
<séquence d'instructions 1>]
[Case <liste d'expressions 2>
<séquence d'instructions 2>]
[Case Else
<séquence d'instructions 3>]
End Select
<liste d'expression> peut prendre les formes suivantes :
- valeur (ex : Case 10)
- liste de valeurs (ex : Case 1, 5, 10)
- plage de valeurs (ex : Case 1
To 5)
- expression conditionnelle (ex : Case
Is >= 5)
Exemple Affiche un commentaire sur la température. Select Case Température
Case 0
MsgBox "Glace"
Case 1 To 10
MsgBox "Froid"
Case 11 To 16
MsgBox "Frais"
Case 17, 18, 19
MsgBox "Température intérieure " _
& "d'une maison en hiver"
Case 20 To 25
MsgBox "Agréable"
Case Is > 25
MsgBox "Chaud"
Case Else
MsgBox "Température non reférencée"
End Select
La fonction IIf s IIf
Retourne une valeur en fonction d'une condition.
SyntaxeIIf (<condition>, <valeur si vrai>, <valeur si faux>)
- 2 -© ENI Editions - All rigths reserved
Exemple Dim bln As Boolean
bln = IIf(A = B, True, False)
Il est possible d'imbriquer plusieurs appels de fonction IIf.
Exemple Dim IntI As Integer
IntI = IIf(A = B, IIf(B = C, 1, 0), 0)
© ENI Editions - All rigths reserved- 3 -
Les structures en boucles Les structures en boucles (ou répétitives) permettent de répéter l'exécution d'un ensemble d'instructions.
On distingue plusieurs types de structures en boucles :
Do Loop
While Wend
For Next
For Each Next
Do Loop et
While Wend répètent un traitement jusqu'à ce qu'une certaine condition soit réalisée.
For Next effectue un traitement un nombre de fois donné, en fonction d'un compteur.
For Each Next permet de parcourir les éléments d'une collection.
L'instruction Do Loop s Do Loop
Exécute une séquence d'instructions tant que (
While) ou jusqu'à ce que (
Until) la condition spécifiée soit
vérifiée.
Syntaxe 1Séquence d'instructions éventuellement non exécutée (condition testée avant la séquence).
Do [{While | Until} <condition>]
<séquence d'instructions>
[Exit Do]
[<séquence d'instructions>]
Loop
Syntaxe 2Séquence d'instructions exécutée au moins une fois (condition testée après la séquence).
Do
<séquence d'instructions>
[Exit Do]
[<séquence d'instructions>]
Loop [{While | Until} <condition>]
»
Exit Do est souvent utilisé après l'évaluation d'une condition interne à la boucle et permet de sortir de la boucle sans que la condition
de contrôle de la boucle ne soit vérifiée.
Exemple Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargés antérieurement. Dim intCpt As Integer
Dim FraisAnnuel As Currency
FraisAnnuel = 0
IntCpt = 0
Do
IntCpt = IntCpt + 1
FraisAnnuel = FraisAnnuel + FraisMensuel (IntCpt)
Loop Until IntCpt = 12
© ENI Editions - All rigths reserved- 1 -
MsgBox "Frais Annuels = " & FraisAnnuel
L'instruction While Wend s While Wend
Exécute une séquence d'instructions tant que la condition spécifiée est vérifiée.
SyntaxeWhile <condition>
<séquence d'instructions>
Wend
Exemple Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargés antérieurement. Dim intCpt As Integer
Dim FraisAnnuel As Currency
FraisAnnuel = 0
intCpt = 1
While intCpt <= 12
FraisAnnuel = FraisAnnuel + FraisMensuel (intcpt)
intCpt = intCpt + 1
Wend
MsgBox "Frais Annuels = " & FraisAnnuel
L'instruction For Next s For Next
Permet de répéter l'exécution d'une séquence d'instructions en fonction d'un compteur.
SyntaxeFor <compteur> = <début> To <fin> [Step <incrément>]
<séquence d'instructions>
[Exit For]
<séquence d'instructions>
Next [<compteur> [,<compteur2>] [, ]]
»
Exit For souvent placée après l'évaluation d'une condition, permet de sortir précocement de la boucle.
Exemple Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargés antérieurement. Dim intCpt As Integer
Dim FraisAnnuel As Currency
FraisAnnuel = 0
For intCpt = 1 To 12
FraisAnnuel = FraisAnnuel + FraisMensuel (intCpt)
Next
MsgBox "Les frais annuels sont de :" & FraisAnnuel
Le mot clé
Step permet d'incrémenter ou de décrémenter la variable de compteur d'un pas spécifié.
Exemple La variable de compteur j est incrémentée de 5 à chaque itération. À la fin de la boucle, total correspond à la somme de 5, 10, 15, - 2 -© ENI Editions - All rigths reserved
et 20. Dim j As Integer
Dim total As Integer
total = 0
For j = 5 To 20 Step 5
total = total + j
Next j
MsgBox "Le total est de " & total
L'instruction For Each Next s For Each Next
Permet de parcourir tous les éléments d'un tableau ou d'une collection.
SyntaxeFor Each <élément> In <tableau>/<collection>
<séquence d'instructions>
[Exit For]
<séquence d'instructions>
Next [élément]
Exemple Affiche les frais de chaque mois (cf. exemple For Next) : Dim Frais As Currency
For Each Frais In FraisMensuel
MsgBox Frais
Next
© ENI Editions - All rigths reserved- 3 -
Les opérateurs Les opérateurs permettent d'effectuer des opérations arithmétiques sur des variables et/ou des constantes, de
comparer des variables entre elles, de tester plusieurs conditions
On distingue plusieurs catégories d'opérateurs :
- les opérateurs arithmétiques,
- les opérateurs de comparaison,
- les opérateurs logiques,
- l'opérateur de concaténation.
» L'opérateur d'affectation est le signe d'égalité. La valeur de l'expression située à droite du signe égal est affectée à la variable située à
gauche du signe. (exemple : IntA = 12, 12 est affecté à la variable IntA, IntA = IntB * 12, la valeur d'IntB multipliée par 12 est affectée à
IntA).
Les opérateurs arithmétiques Ils permettent d'effectuer des calculs arithmétiques à partir de variables et/ou de constantes numériques.
OpérateurCalcul réalisé+
Addition
Soustraction
/
Division avec comme résultat un nombre à virgule flottante
Mod
Reste de la division de deux nombres
\
Division avec comme résultat un nombre entier
*
Multiplication
^
Élévation à la puissance
Les opérateurs de comparaison Ils permettent de comparer deux valeurs numériques ou deux chaînes de caractères.
OpérateurCalcul réalisé<
Inférieur à
<=
Inférieur ou égal à
>
Supérieur à
>=
Supérieur ou égal à
=
Égal à
<>
Différent de
L'instruction
Option compare utilisée au niveau module permet de définir la méthode de comparaison par défaut
© ENI Editions - All rigths reserved- 1 -
qu'il convient d'utiliser lors de la comparaison de chaînes de caractères. Elle peut prendre trois valeurs :
CompareBinary(option par défaut) fournit des comparaisons de chaînes basées sur un ordre de tri dérivé de la représentation
binaire interne des caractères :
A<B<E<Z<a<b<e<z<À<Ê<Ø<à<ê
CompareTextfournit des comparaisons de chaînes basées sur un ordre de tri qui ne distingue pas les majuscules des
minuscules :
(A=a)<(À=à)<(B=b)<(E=e)<(Ê=ê)<(Z=z)<(Ø=ø)
CompareDatabasefournit des comparaisons de chaînes basées sur l'ordre de tri déterminé par l'identificateur de paramètres
régionaux de la base de données courante.
Les opérateurs logiques Ils permettent de tester simultanément deux (ou plusieurs) valeurs booléennes ou expressions renvoyant ce type
valeur. Ils sont généralement utilisés avec l'instruction
If.
OpérateurCalcul réaliséAnd
Si toutes les expressions ont la valeur True, le résultat est True. Si l'une des expressions a la
valeur False, le résultat est False.
Or
Si l'une au moins des expressions a pour valeur True, le résultat est True (ou inclusif).
Xor
Si une et une seule des expressions a pour valeur True, le résultat est True (ou exclusif).
Not
Renvoie le contraire de l'expression.
Eqv
Renvoie True si les deux expressions sont identiques.
Exemple (A>= 1) And (A<= 9) renvoie True si A est compris entre 1 et 9,
Not (A >= 10) renvoie True si A est strictement inférieur à 10,
(A>0) Or (B>0) Or (C>0) renvoie True si au moins l'une des valeurs est positive.
L'opérateur de concaténation L'opérateur de concaténation est le signe
&. Il permet d'assembler des chaînes de caractères, des valeurs et des
expressions. Le résultat est une chaîne de caractères.
Exemple Concaténation du nom et du prénom séparés par un espace : StrNomPre = Nom & " " & Prenom
Priorité des opérateurs Lorsque plusieurs opérateurs sont contenus dans une même expression, chacun est évalué dans un ordre
prédéfini, appelé priorité des opérateurs.
- 2 -© ENI Editions - All rigths reserved
Les opérateurs sont évalués dans l'ordre suivant : opérateurs arithmétiques, opérateurs de comparaison,
opérateurs logiques. Les opérateurs de comparaison ont la même priorité ? c'estàdire qu'ils sont évalués dans
leur ordre d'apparition, de gauche à droite.
Les opérateurs arithmétiques et logiques sont évalués dans l'ordre de priorité cidessous (priorité décroissante de
gauche à droite) :
Arithmétique : ^, *, /, Mod, +,
Logique : Not, And, Or, Xor, Eqv
Exemple L'expression "3 + 4 * 5" donne comme résultat 23. La multiplication (4 * 5) est effectuée avant l'addition ( + 3) : » L'utilisation de parenthèses permet de modifier l'ordre de priorité afin qu'un élément d'une expression soit évalué avant les autres. Les
opérations situées à l'intérieur de parenthèses sont toujours traitées avant les autres. Exemple : l'expression "(3 + 4) * 5" renvoie 35.
L'addition est effectuée en priorité. Il est conseillé d'utiliser des parenthèses pour une meilleure lisibilité du code.
© ENI Editions - All rigths reserved- 3 -
![]()
L'environnement de développement IDE L'IDE (
Integrated Development Environment) est l'environnement dans lequel vous pouvez saisir, modifier et
tester votre code VBA. Cet environnement est également appelé VBE (
Visual Basic Editor).
L'IDE met à votre disposition de nombreux outils qui facilitent la programmation et la mise au point du code VBA :
outils de débogage, assistance à la saisie, explorateur d'objets
- En utilisant la combinaison de touches
Ctrl F11.
- En cliquant sur l'icône située dans l'onglet
Outils de base de données.
- En sélectionnant une procédure évènementielle depuis une feuille de propriétés dans un formulaire ou un état.
Fenêtre de l'environnement IDE» Toutes les fenêtres de l'environnement IDE peuvent être affichées à partir du menu
Affichage.
La barre d'outils Standard (1)
1 Afficher Access
2 Insérer un module, un module de classe ou une procédure (Function ou Sub)
3 Enregistrer
4 Couper © ENI Editions - All rigths reserved- 1 -
5 Copier
6 Coller
7 Rechercher
8 Annuler
9 Rétablir
10 Exécuter
11 Arrêt
12 Réinitialiser
13 Mode création
14 Afficher l'explorateur de projets
15 Afficher la fenêtre Propriétés
16 Afficher l'explorateur d'objets
17 Afficher la boîte à outils
18 Aide sur Microsoft Visual Basic
19 Position courante dans la fenêtre de Code L'Explorateur de projet (2)
Tous les modules de la base de données ou du projet VBA sont affichés dans l'explorateur de projets, selon une
structure arborescente. Ils sont regroupés en trois ensembles :
- les modules de formulaires ou d'états,
- les modules standards,
- les modules de classe indépendants.
La fenêtre Propriétés (3)
Elle permet d'afficher les propriétés des différents modules. Pour afficher les propriétés d'un formulaire ou d'un
état, celuici doit être ouvert dans Access ? si ce n'est pas le cas, sélectionnez le formulaire ou l'état dans
l'explorateur de projet et choisissez l'option
Objet du menu
Affichage.
La fenêtre Code (4)
Dans cette fenêtre se trouvent deux zones de liste déroulantes :
- la zone objet (
10) affiche la liste les objets du module,
- la zone procédure (
11) affiche les procédures ou les événements de l'objet sélectionné dans la zone objet. Les événements
déjà utilisés apparaissent en gras.
Le complément automatique d'instructions (5)
Le complément automatique d'instructions présente les informations qui sont le complément logique de
l'instruction au niveau du point d'insertion.
Par exemple, la liste déroulante des méthodes et propriétés disponibles pour un objet s'affiche automatiquement
lorsque vous tapez le nom de l'objet suivi d'un point.
Si cette liste n'est pas active, sélectionnez
Options dans le menu
Outils et cochez la case
Complément
automatique des instructions de l'onglet
Éditeur.
La fenêtre Exécution (6)
Elle permet d'afficher les valeurs des variables, de les modifier et d'exécuter des instructions.
» Les fenêtres
Exécution,
Variables locales et
Espions sont utilisées lors du débogage de l'application.
- 2 -© ENI Editions - All rigths reserved
La fenêtre Variables locales (7)
Elle contient toutes les valeurs des variables accessibles dans la portée en cours.
La fenêtre Espions (8)
Elle affiche les valeurs des variables qui ont été définies comme variables espions.
L'Explorateur d'objets (9)
Il permet de visualiser, pour chaque objet, ses propriétés, méthodes et constantes.
© ENI Editions - All rigths reserved- 3 -
Configuration de l'éditeur VBA Paramétrage des couleurs de l'éditeur Les mots clés, les fonctions et les instructions VBA sont affichées en
bleu, les objets, méthodes et propriétés en
noir et les commentaires en
vert. Les instructions contenant des erreurs sont mises en évidence en
rouge.
Vous pouvez modifier le style (couleurs, police, taille) des différentes parties du code. Pour cela, sélectionnez
Options dans le menu
Outils et cliquez sur l'onglet
Format de l'éditeur.
Paramétrage de la présentation du code Différents outils, comme la vérification automatique de la syntaxe, la déclaration obligatoire des variables, le
complément automatique d'instructions facilitent la saisie et la mise au point du code VBA.
Pour activer ces outils, sélectionnez
Options dans le menu
Outils et cliquez sur l'onglet
Éditeur.
© ENI Editions - All rigths reserved- 1 -
- 2 -© ENI Editions - All rigths reserved
Référence aux objets Pour pouvoir utiliser un objet d'accès aux données, un objet d'automation, ou un contrôle ActiveX spécifique,
vous devez référencer la bibliothèque d'objet correspondante. Une bibliothèque d'objets est généralement un
fichier DLL ou OCX qui contient le code de l'objet.
Pour activer une référence à une bibliothèque, sélectionnez l'option
Références dans le menu
Outils.
» Vous pouvez ajouter des références en cliquant sur le bouton de commande
Parcourir.
© ENI Editions - All rigths reserved- 1 -
Création d'une procédure en VBA Cette section va vous guider pas à pas dans la création d'une première procédure en VBA.
Cette procédure demande à l'utilisateur de saisir une date sous forme abrégée (19/06/07), contrôle la date et
l'affiche dans un format date complet (mardi 19 juin 2007).
Étape 1 : création d'un nouveau module
Depuis Access :
s Activez l'onglet
Créer du ruban.
s Cliquez sur la flèche située en bas de l'icône
Macro puis choisissez l'option
Module.
Depuis l'environnement VBE :
s Sélectionnez l'option
Module du menu
Insertionou
depuis la fenêtre
Explorateur de projets, cliquez avec le bouton droit de la souris et sélectionnez
Insertion puis
Module à partir du
menu contextuel.
Étape 2 : attribuer un nom au module
Par défaut, le module créé est intitulé Module1 (ou Module suivi du premier numéro disponible si d'autres modules
ont déjà étés créés et non renommés).
Pour modifier le nom du module :
s Sélectionnez le module dans la fenêtre Explorateur de projet.
s Dans la fenêtre
Propriétés (cliquez sur
F2 si la fenêtre Propriétés n'est pas affichée), modifiez la valeur de la propriété
(Name).
Étape 3 : Création d'une procédure
s Double cliquez sur le module pour afficher la fenêtre de VBA associée.
s Saisissez le code suivant dans la fenêtre VBA :
© ENI Editions - All rigths reserved- 1 -
s Cliquez sur l'icône
de la barre d'outils
Standard pour enregistrer la procédure.
Étape 4 : Test de la procédure
Pour exécuter le code de la procédure :
s Positionnez le curseur de la souris sur le code de la procédure saisie.
s Cliquez sur l'icône
de la barre d'outils
Standard ou utilisez la touche
F5.
s Saisissez une date dans la boîte de dialogue affichée et cliquez sur le bouton de commande
OK :
Le message suivant est alors affiché :
- 2 -© ENI Editions - All rigths reserved
s Cliquez sur le bouton de commande
OK.
Le jour de la semaine étant un lundi, le message suivant apparaît :
© ENI Editions - All rigths reserved- 3 -
Recommandations Afin d'optimiser les performances de VBA, certaines techniques peuvent contribuer à accélérer la vitesse
d'exécution de votre code.
- Les variables doivent toujours être explicitement déclarées.
- Le type des variables doit être le plus spécifique possible.
- Pour faire référence aux propriétés, contrôles et objets d'accès aux données, les variables sont préconisées.
- Le mot réservé
Me doit être utilisé pour faire référence au formulaire ou à l'état au sein d'une procédure événementielle.
- L'emploi des constantes est recommandé chaque fois que possible.
- Les modules doivent être organisés pour ne pas surcharger la mémoire. Un module est mis en mémoire uniquement si une de
ses procédures est appelée par d'autres codes.
- Le code doit être régulièrement compilé.
© ENI Editions - All rigths reserved- 1 -
Les modules On distingue trois types de modules :
- les modules Microsoft Access Objets de classe,
- les modules standards,
- les modules de classe indépendants.
La liste de ces modules est affichée de façon hiérarchique dans l'explorateur de projets de l'interface VBA.
» Si l'explorateur de projet n'est pas affiché, choisissez l'option
Explorateur de projets du menu
Affichage ou utilisez le raccourci-
clavier
Ctrl R.
Les modules
Microsoft Access Objets de classe contiennent les procédures événementielles associées aux
formulaires et états.
Les modules standards (ou modules) sont composés d'une ou de plusieurs procédures pouvant être appelées
en de nombreuses circonstances à partir des différents modules.
» Seuls les modules standards apparaissent dans la liste des modules du volet de navigation.
» Il est recommandé de regrouper dans un ou plusieurs modules les procédures "utilitaires" pouvant être utilisées par différentes
applications (ex : traitement des dates). Ces modules pourront ensuite être exportés dans d'autres bases Access à partir de l'option
Exporter un fichier du menu
Fichier.
Les modules de classe indépendants sont utilisés lors de la création de classes d'objets. La programmation à
base d'objets sera détaillée dans le chapitre
Objets et collections.
Les éléments du langage Visual Basic décrits dans ce chapitre peuvent être utilisés dans les différents modules.
© ENI Editions - All rigths reserved- 1 -
Les procédures Les procédures sont des
sousprogrammes qui permettent de décomposer une tâche de programmation
complexe en une suite de tâches plus petites et plus simples.
Elles permettent d'organiser le code à l'intérieur des modules afin d'obtenir un code plus facile à maintenir et
facilement réutilisable.
Dans VBA Access 2007, il existe trois types de procédures :
- les procédures
Sub (pour sub routine) appelées sous?programmes,
- les procédures
Function appelées fonctions,
- les procédures
Property appelées procédures de propriété.
Dans ce chapitre, nous utiliserons uniquement les procédures Sub et Function qui sont les plus courantes (les
procédures de propriété seront présentées dans le chapitre
Objets et collections).
Il existe des points communs entre ces deux procédures :
- elles contiennent des instructions et/ou des méthodes VBA,
- elles acceptent des arguments,
- elles peuvent être appelées depuis d'autres fonctions ou procédures Sub.
Certaines caractéristiques sont spécifiques aux fonctions :
- elles peuvent retourner des valeurs,
- elles peuvent être appelées depuis une macro.
Les procédures Sub Il existe deux types de procédures Sub :
- les procédures Sub générales
- les procédures Sub événementielles.
Une
procédure Sub générale est une procédure déclarée dans un module standard ou au niveau général d'un
module de formulaire ou d'état. L'appel d'une telle procédure est explicitement défini dans le code du programme.
Exemple Cette procédure générale demande à l'utilisateur de confirmer son souhait de quitter l'application, et quitte Access si l'utilisateur
répond Oui. Private Sub Quitter_Appli()
If Msgbox ("Voulez-vous quitter l'application ?",_
VbQuestion + VbYesNo) = vbYes Then
Quit
End If
End Sub
» Ce code peut être appelé à partir de tout bouton de commande ou option de menu permettant de quitter l'application.
© ENI Editions - All rigths reserved- 1 -
Une
procédure Sub événementielle est une procédure associée à un événement d'un objet. D'ailleurs son nom
est composé du nom de l'objet activé, suivi du caractère souligné (_) et du nom de l'événement. L'appel d'une
telle procédure est implicite, c'estàdire que la procédure n'est exécutée que lorsque l'événement associé a lieu.
Exemple Cette procédure événementielle permet d'afficher le formulaire "Employés" lorsque l'utilisateur clique sur un bouton de commande
cmdEmployés. Private Sub cmdEmployés_Click()
Docmd.OpenForm "Employés"
End Sub
» Certaines procédures Sub événementielles peuvent être générées automatiquement à partir d'assistants (ex : assistant boutons de
commande).
Les procédures Function Les
procédures Function, plus couramment appelées
fonctions, renvoient une valeur, telle que le résultat d'un
calcul. La valeur retournée doit porter le nom de la fonction.
» Ce sont les seules procédures pouvant être appelées depuis une macro.
Le langage Visual Basic comporte de nombreuses fonctions intégrées telles que les fonctions se rapportant aux
dates (day, week, year, format ).
En plus de ces fonctions intégrées, vous pouvez créer vos propres fonctions personnalisées.
Exemple Cette fonction demande à l'utilisateur de confirmer son souhait de quitter l'application, et renvoie True si l'utilisateur répond Oui et
False sinon. Function Quitter_Appli() As Boolean
If MsgBox("Voulez-vous quitter l'application ?", _
vbQuestion + vbYesNo) = vbYes Then
Quitter_Appli = True
Else
Quitter_Appli = False
End If
End Function
Déclaration des procédures Syntaxe d'une procédure Sub
[Private | Public | Friend] [Static] Sub NomProc
([liste d'arguments])
<Séquences d'instructions>
End Sub
Syntaxe d'une procédure Function
[Private | Public | Friend] [Static] Function
NomProc ([liste d'arguments]) [As Type]
<Séquences d'instructions>
End Function
Pour créer une procédure Sub ou Function, vous devez respecter les étapes suivantes :
- déterminez la
portée de la procédure,
- déclarez la procédure en fonction de son type avec le mot clé
Sub ou
Function, suivi du nom de la procédure,
- 2 -© ENI Editions - All rigths reserved
- définissez les
arguments que vous voulez passer en paramètres à la procédure en les indiquant entre parenthèses après le nom
de la procédure,
- s'il s'agit d'une fonction, précisez éventuellement le type de la valeur retournée après le mot clé
As,
- rédigez le code permettant d'effectuer le traitement souhaité. Utilisez éventuellement
Exit Sub ou
Exit Function pour sortir de
la procédure. S'il s'agit d'une fonction, affectez le résultat au nom de la fonction,
- terminez la procédure par
End Sub ou
End Function.
Portée des procédures La portée d'une procédure définit l'étendue de son utilisation.
Une procédure
publique (déclarée avec le mot clé
Public) peut être appelée depuis tout module, toute procédure
événementielle ou toute macro de la base de données.
Une procédure
privée (déclarée avec le mot clé
Private) ne peut être appelée que depuis une procédure au sein
du même module.
La procédure
Friend est utilisée uniquement dans les modules de classe.
Le mot clé
Static indique que les variables locales de la procédure sont préservées entre les appels.
En l'absence des mentions
Public,
Private ou
Friend, les procédures sont publiques par défaut.
Arguments des procédures Les arguments sont utilisés pour transmettre aux procédures des paramètres sous forme de données. Le nombre
d'arguments peut varier de zéro à plusieurs.
Pour déclarer un argument, vous pouvez simplement spécifier son nom. Néanmoins, la syntaxe complète de
déclaration d'un argument est la suivante :
[Optional] [ByVal | Byref] [ParamArray]
<variable> [As type]
Optional : indique que l'argument est facultatif. Tous les arguments facultatifs doivent être situés à la fin de la
liste des arguments et être de type variant.
Byval : indique que l'argument est passé par valeur. La procédure accède à une copie de la variable ? sa valeur
initiale n'est donc pas modifiée par la procédure.
Byref (option par défaut) : indique que l'argument est passé par référence. La procédure peut ainsi accéder à
la variable proprement dite ? sa valeur réelle peut, de ce fait, être modifiée par la procédure.
ParamArray : utilisé uniquement pour le dernier argument de la liste, indique que celui ci est un tableau facultatif
d'éléments de type
Variant. Il ne peut être utilisé avec les mots clés
ByVal,
ByRef ou
Optional.
Variable : précise le nom de l'argument
. Pour les variables tableau, il ne faut pas préciser les dimensions.
Type : précise le type de données de l'argument passé à la procédure (Byte, Boolean, Integer, Long ).
Les arguments nommés Le passage d'arguments à une procédure en tenant compte de leur ordre d'apparition est parfois difficile à mettre
en œuvre, notamment lorsque certains paramètres sont facultatifs. De même, la lisibilité des appels de procédures
comportant plusieurs paramètres n'est pas toujours évidente.
» Les arguments nommés facilitent le passage des arguments en présentant les avantages suivants :
© ENI Editions - All rigths reserved- 3 -
- l'ordre des arguments nommés n'a pas d'importance,
- les arguments facultatifs peuvent être omis.
La syntaxe des arguments nommés est :
NomArgument
: = Valeur
Exemple If MsgBox("Voulez-vous quitter l'application ?", _
vbYesNo + vbQuestion, "Gestion des ventes") = vbYes Then
End If
peut être transformé en : If MsgBox(Prompt:="Voulez-vous quitter l'application ?", _
Buttons:=vbYesNo + vbQuestion, _
Title:="Gestion des ventes") = vbYes Then
End If
De même l'ordre des paramètres peut être modifié : If MsgBox(Prompt:="Voulez-vous quitter l'application ?", _
Title:="Gestion des ventes", _
Buttons:=vbYesNo + vbQuestion) = vbYes Then
End If
Appel d'une procédure Syntaxe
[Call] NomProc [liste d'arguments]
Si le mot clé Call est indiqué, vous devez placer la liste d'arguments entre parenthèses.
Pour stocker le résultat d'une fonction dans une variable, utilisez la syntaxe suivante :
<variable> = NomProc ( [liste d'arguments] )
Exemples de procédures Lorsque l'utilisateur clique sur le bouton de commande cmdCalcul du formulaire de saisie d'une facture, le montant
de la remise doit être calculé de la façon suivante :
- 5% du montant de la facture si celui?ci est supérieur ou égal à 5000,
- 2% du montant de la facture si celui?ci est compris entre 1000 et 5000,
- 0 si le montant de la facture est inférieur à 1000.
Procédure événementielle
Private Sub cmdCalcul_Click()
txtMntRem = Remise (txtMntFact)
End Sub
» La fonction Remise est appelée, avec comme argument, le montant de la facture (contenu dans la zone de texte txtMntFact du
formulaire). La remise calculée sera directement affichée dans la zone de texte txtMntRem.
Fonction
- 4 -© ENI Editions - All rigths reserved
Private Function Remise(Montant as Currency) as Currency
Const Taux1 = 0.05
Const Taux2 = 0.02
If Montant >= 5000 then
Remise = Montant * Taux1
Else
If Montant >= 1000 then
Remise = Montant * Taux2
End If
End If
End Function
» Si le montant de la facture est inférieur à 1000, Remise conserve sa valeur initiale, soit zéro.
La fonction MsgBox Cette fonction affiche un message dans une boîte de dialogue, éventuellement accompagné d'une icône et de un
à trois boutons.
Syntaxe de l'instructionUtilisée lorsqu'il n'y a qu'un seul bouton.
MsgBox <message> [, [<type>][, <titre>]]
Syntaxe de la fonctionUtilisée lorsqu'il y a plus d'un bouton. Elle permet de savoir quel bouton a été activé grâce à sa valeur de retour.
MsgBox (<message> , [<boutons>][, <titre>]
[,helpfile, context])
message : Texte du message dans la boîte de dialogue.
boutons : Expression numérique qui représente la somme des valeurs spécifiant les boutons à afficher, le style
d'icône à utiliser, l'identité du bouton par défaut, ainsi que la modalité.
titre :Texte dans la barre de titre.
helpfile : Fichier d'aide à utiliser.
Context : Rubrique de l'aide concernée.
Valeurs de l'argument BoutonsConstante ValeurSignificationsymbolique Nombre et type de boutonsvbOKOnly
0
Affiche le bouton
OK uniquement.
vbOKCancel
1
Affiche les boutons
OK et
Annuler.
vbAbortRetryIgnore
2
Affiche
les
boutons
Abandonner,
Recommencer et
Ignorer.
vbYesNoCancel
3
Affiche les boutons
Oui,
Non et
Annuler.
vbYesNo
4
Affiche les boutons
Oui et
Non.
vbRetryCancel
5
Affiche les boutons
Recommencer et
Annuler.
vbMsgBoxHelpButton
16384
Affiche un bouton d'aide.
Type d'icône© ENI Editions - All rigths reserved- 5 -
vbCritical
16
Affiche l'icône
.
vbQuestion
32
Affiche l'icône
.
vbExclamation
48
Affiche l'icône
.
vbInformation
64
Affiche l'icône
.
Bouton par défautvbDefaultButton1
0
Premier bouton.
vbDefaultButton2
256
Deuxième bouton.
vbDefaultButton3
512
Troisième bouton.
vbDefaultButton4
768
Quatrième bouton.
ModalitévbApplicationModal
0
Application modale.
L'utilisateur doit répondre au message
affiché dans la zone de message avant
de pouvoir continuer à travailler dans
l'application en cours.
vbSystemModal
4 096
Système modal.
Toutes
les
applications
sont
interrompues jusqu'à ce que l'utilisateur
réponde au message affiché dans la
zone de message.
PrésentationvbMsgBoxHelpButton
16384
Ajoute le bouton "Aide" à la zone de
message.
vbMsgBoxSetForeground
65536
Affiche la fenêtre message au premier
plan.
vbMsgBoxRight
524288
Aligne le texte à droite.
vbMsgBoxRtlReading
1048576
Définit un ordre de lecture de droite à
gauche pour les systèmes hébreux et
arabes.
Les valeurs de retour possibles sont également définies par des constantes :
ConstanteValeur de retourBouton choisivbOK
1
OKvbCancel
2
AnnulervbAbort
3
AbandonnervbRetry
4
RecommencervbIgnore
5
IgnorervbYes
6
OuivbNo
7
NonExemples : utilisation de la fonction MsgBox StrRep = MsgBox ("Voulez-vous continuer ?", 292, _
"Confirmation")
ou StrRep = MsgBox ("Voulez-vous continuer ?", _
vbYesNo + vbQuestion + vbDefaultButton2, _
- 6 -© ENI Editions - All rigths reserved
"Confirmation")
Utilisation de l'instruction MsgBox MsgBox "Résultat faux",vbCritical,"Erreur"
© ENI Editions - All rigths reserved- 7 -
Les variables Les types de variables Les variables permettent de stocker des valeurs intermédiaires à tout moment de l'exécution du code VBA afin de
les exploiter ultérieurement pour effectuer des calculs, des comparaisons, des tests…
Les variables sont identifiées par un
nom, permettant de faire référence à la valeur qu'elles contiennent, et un
type déterminant la nature des données qu'elles peuvent stocker.
Numériques
>
TypeÉtendueTaille
en
octetsByte
0 à 255
1
Integer
32 768 à 32 767
2
(entier)
Long
2 147 483 648 à
4
(entier long)
2 147 483 647
Single
3,402823E38 à 1,401298E45
4
(réel simple
(valeurs négatives)
à
virgule
1,401298E45 à 3,402823E38
flottante)
(valeurs positives)
Double
1,79769313486231E308 à
8
(réel double
4,94065645841247E324
à
virgule
(valeurs négatives)
flottante)
4,94065645841247E324 à
1,79769313486231E308
(valeurs positives)
Currency
922 337 203 685 477,5808 à
8
(monétaire
922 337 203 685 477,5807
à virgule fixe)
Decimal
+/79 228 162 514 264 337 593 543950 335
12
sans séparateur décimal ?
+/7,9228162514264337593543950335
avec 28 chiffres à droite du séparateur
décimal ? le plus petit nombre différent de zéro
est +/0.0000000000000000000000000001
Chaînes de caractères
Le type est
String. Il existe deux types de chaînes :
- les chaînes de longueur variable peuvent contenir environ 2 milliards (231) de caractères.
-
16
Les chaînes de longueur fixe peuvent contenir de 1 à environ 64000 (2 ) caractères.
Exemple ' C h a î n e d e l o n g u e u r v a r i a b l e Dim Adresse As String
' C h a î n e d e l o n g u e u r f i x e ( 2 0 c a r a c t è r e s ) Dim Nom As String * 20
Booléen
© ENI Editions - All rigths reserved- 1 -
Le type est
Boolean. La variable peut prendre la valeur True (Vrai) ou False (Faux) qui est sa valeur par défaut.
Elle occupe deux octets.
Date
Le type est
Date. La variable peut prendre les valeurs de date et d'heure du 1er janvier 100 au 31 décembre
9999. Elle occupe huit octets.
Variant
Le type est
Variant. La variable permet de stocker des valeurs de données de toutes sortes : dates, nombres à
virgule flottante, chaînes de caractères, références à des objets Elle occupe seize octets, plus un octet par
caractère si la valeur est une chaîne.
Objet
Le type est
Object. La variable permet de stocker la référence à un objet sous forme d'une adresse de quatre
octets.
C'est un type générique, mais pour obtenir des performances supérieures, il est souhaitable d'utiliser plutôt le nom
de l'objet tel qu'il est défini dans la zone
Classes de l'explorateur d'objets.
Exemple Ouverture de base de données Access en utilisant le type générique Objet ou à partir de l'objet Database. Dim dbsEmp As Object
Dim dbsArt As Database
Set dbsEmp = OpenDatabase("C:\Application\" _
& "Employés.accdb")
Set dbsArt = OpenDatabase("C:\Application\" _
& "Articles.accdb")
Défini par l'utilisateur
Ce type est utilisé surtout pour la déclaration de variables contenant plusieurs types d'informations. La définition
du type ne peut se faire que dans la section de déclaration d'un module.
Exemples Déclaration d'un nouveau type Employés : Public Type Employés
Matricule As String * 5
Nom As String * 20
Age As Integer
Service As String * 10
End Type
Utilisation du type Employés : Dim NewEmployé As Employés
NewEmployé.Matricule = "15253"
Les déclarations de variables Il existe deux façons de déclarer des variables : implicitement et explicitement.
Déclaration implicite
Dès que VBA rencontre une variable qui n'a pas fait l'objet d'une déclaration explicite, il la déclare de façon
implicite en lui donnant un type
Variant.
- 2 -© ENI Editions - All rigths reserved
Le type Variant permet de stocker successivement dans la même variable des valeurs de type différent. Le type
de la variable évolue en fonction de la valeur qui lui est affectée.
Private Sub Affectation()
' L e t y p e d e l a v a r i a b l e d e v i e n t S t r i n g var = "Bonjour"
MsgBox TypeName(var)
' L e t y p e d e l a v a r i a b l e d e v i e n t I n t e g e r var = 12
MsgBox TypeName(var)
' L e t y p e d e l a v a r i a b l e d e v i e n t D o u b l e var = 6.55957
MsgBox TypeName(var)
' L e t y p e d e l a v a r i a b l e d e v i e n t B o o l e a n var = True
MsgBox TypeName(var)
End Sub
Déclaration explicite
La variable est déclarée avant son utilisation.
Il est possible d'imposer la déclaration explicite des variables en utilisant dans la section de déclaration de chaque
module, l'instruction
Option Explicit. Pour que cette instruction soit définie par défaut dans VBA, activez l'option
Déclaration des variables obligatoire du menu
Outils Options onglet
Éditeur.
Les déclarations explicites de variables peuvent se faire dans la section de déclarations des modules, ou dans le
corps d'une procédure ou d'une fonction.
La déclaration est réalisée par l'une des quatre instructions suivantes utilisant la même syntaxe :
- au niveau d'une procédure, d'une fonction ou d'un module :
Dim <Nomvariable> [As Type]
Static <Nomvariable> [As Type]
- au niveau d'un module :
Private <Nomvariable> [As Type]
Public <Nomvariable> [As Type]
À chaque fois que l'instruction
Dim est exécutée, la variable est réinitialisée (0 pour numérique, vide pour
String,
Empty pour
Variant). S'il est nécessaire de garder la précédente valeur, il faut utiliser
Static à la place de
Dim.
» Si aucun type n'est précisé (ex : dim var), le type par défaut Variant est affecté à la variable.
La portée des variables Une variable est dite
locale à une fonction ou à une procédure, si elle est déclarée dans le corps de la fonction
ou de la procédure avec
Dim ou
Static. Cette variable n'est pas connue (visible) en dehors de la fonction ou de
la procédure.
Une variable peut être visible de toutes les procédures ou fonctions d'un module (standard, de classe, formulaire
ou état), si elle est déclarée dans la section de déclaration du module avec
Private (ou
Dim).
Une variable est
publique à toute l'application (c'estàdire visible depuis n'importe quel endroit de l'application),
si elle est déclarée dans la section de déclaration d'un module avec l'instruction
Public.
» Pour faire référence, à partir d'un module, à une variable publique se trouvant dans un autre module de formulaire ou d'état, il convient
d'utiliser la syntaxe suivante :
Forms!<NomFormulaire>.<NomVariable>
© ENI Editions - All rigths reserved- 3 -
Reports!<NomEtat>.<NomVariable>
Les tableaux Un tableau se déclare de la même façon que les variables, avec des instructions
Dim,
Static,
Private ou
Public.
Un tableau est une variable comportant plusieurs compartiments permettant de stocker autant de valeurs. Par
opposition, une variable classique désigne un compartiment destiné à une seule valeur.
On peut faire référence au tableau globalement ou accéder individuellement à ses éléments en utilisant des
indices.
Quel que soit le type des éléments, un tableau nécessite 20 octets de mémoire, auxquels viennent s'ajouter
quatre octets pour chaque dimension et le nombre d'octets occupés par les données.
Si le type de données n'est pas spécifié, les éléments du tableau déclaré prennent le type
Variant.
Le premier poste d'un tableau se voit attribuer l'indice 0 par défaut. Toutefois, il est possible de mettre cette
valeur par défaut à 1 en utilisant, en section de déclaration, l'instruction
Option Base 1.
L'utilisation d'une clause
To permet également de définir explicitement les indices de début et de fin.
Exemples Déclaration de différents tableaux : ' 1 2 é l é m e n t s i n d i c é s d e 0 à 1 1 Dim Remise (11) As Single
' 1 2 é l é m e n t s i n d i c é s d e 1 à 1 2 Dim Frais (1 To 12) As Single
' 2 d i m e n s i o n s : l a p r e m i è r e i n d i c é e d e 0 à 1 0 e t
' l a s e c o n d e d e 1 à 1 5 Dim Train (10,1 To 15) As String
Option Base 1
' 1 2 é l é m e n t s i n d i c é s d e 1 à 1 2 Dim Frais (12)
Utilisation d'un tableau à deux dimensions.
L'exemple suivant permet de créer une table de multiplication : chaque élément du tableau Multiplie est égal au résultat de la
multiplication de ses indices. Chaque ligne de la table est affichée dans la fenêtre exécution (méthode Print de l'objet Debug). Sub Affiche_Tableau()
Dim Multiplie(1 To 10, 1 To 10) As Integer
Dim i, j As Integer
Dim strResult As String
' 1 è r e l i g n e d e l a t a b l e d e m u l t i p l i c a t i o n For i = 1 To 10
strResult = Format(i, "000") & " "
Next i
Debug.Print strResult
' I n i t i a l i s a t i o n d u t a b l e a u For i = 1 To 10
strResult = Format(i, "00")
For j = 1 To 10
Multiplie(i, j) = i * j
strResult = strResult & " " & Format(Multiplie(i, j),
"000")
Next j
Debug.Print strResult
Next i
' R e n v o i e l e r é s u l t a t d e 4 * 7
MsgBox "4 * 7 = " & Multiplie(4, 7)
' R e n v o i e l e r é s u l t a t d e 7 * 4
MsgBox "7 * 4 = " & Multiplie(7, 4)
- 4 -© ENI Editions - All rigths reserved
End Sub
Résultat dans la fenêtre d'exécution. Les tableaux dynamiques
Il s'agit de tableaux dont les dimensions sont définies à l'exécution. Ils permettent l'optimisation de la place
occupée en mémoire.
Déclaration : Dim Tableau ()
Utilisation : Avant de l'utiliser, il faut le dimensionner à l'aide de l'instruction Redim : ReDim Tableau (15 To 50)
Il est possible d'utiliser l'instruction
ReDim pour modifier le tableau dynamique aussi souvent que nécessaire. Par
défaut, les valeurs présentées dans le tableau sont écrasées. L'instruction
ReDimPreserve permet d'étendre un
tableau tout en conservant les valeurs existantes.
ReDim Preserve Tableau (15 To 70)
Les constantes Une constante représente une valeur numérique ou de type chaîne qui ne doit pas être modifiée.
L'instruction
Const permet de déclarer une constante et de définir sa valeur fixe. Une fois déclarée, la constante
ne peut être modifiée ni recevoir une nouvelle valeur.
La déclaration d'une constante est réalisée dans une procédure ou dans la section déclaration d'un module.
Les constantes de niveau module sont
privées par défaut.
Pour déclarer une constante de niveau module publique, il est nécessaire de faire précéder l'instruction
Const du
mot clé
Public.
Exemple acForm
vbCurrency
Les constantes intrinsèques
© ENI Editions - All rigths reserved- 5 -
Les constantes intrinsèques sont des constantes mises à disposition par les applications ellesmêmes. C'est ainsi
qu'Access 2003 possède ses propres constantes intrinsèques qui sont visibles à partir de l'explorateur d'objets.
Une constante intrinsèque peut être utilisée dans une macro ou dans du code Visual Basic.
Les constantes intrinsèques sont caractérisées par un préfixe de deux lettres identifiant la bibliothèque d'objets
où est définie la constante.
Préfixe des constanteBibliothèquePréfixeExemplesMicrosoft
ac
acForm, acNormal
Access
vbCurrency,
Visual Basic
vb
vbYellow
Microsoft
mso
msoSortByFileName
Office
» Les constantes de la bibliothèque Visual Basic sont décrites dans l'annexe B de cet ouvrage. Pour utiliser les constantes de Microsoft
Office, vous devez sélectionner la référence "Microsoft Office 12.0 Object Library" (option
Références du menu
Outils).
» Il existe plusieurs catégories de constantes intrinsèques (constantes d'action, constantes de procédures événementielles ).
Exemple L'exemple suivant montre comment afficher un formulaire et le personnaliser. Il utilise les constantes strNomAppli et strNomSoc
déclarées dans le code et plusieurs constantes intrinsèques. Résultat dans Access : affichage du formulaire employé personnalisé. - 6 -© ENI Editions - All rigths reserved
© ENI Editions - All rigths reserved- 7 -
Les structures de décision Il est souvent nécessaire de tester des conditions spécifiques avant d'exécuter des instructions.
Les structures de décisions, appelées aussi alternatives ou branchements conditionnels, permettent, au terme
d'une évaluation, d'opter pour un bloc de code ou un autre.
On distingue deux instructions de branchement conditionnel :
- If Then Else
- Select Case
» La fonction IIf peut également être utilisée pour définir une valeur en fonction d'une condition.
L'instruction IF s If
Permet d'exécuter des instructions en fonction du résultat d'une condition.
Les instructions
If Then Else peuvent être imbriquées autant de fois que nécessaire.
» La syntaxe multiligne, avec une indentation appropriée, présente l'avantage d'une plus grande lisibilité.
Syntaxe 1 (sur une ligne)If <cond.> Then <inst.> [Else <inst.>]
<inst.> peut être constitué de plusieurs instructions séparées par le caractère (:).
Syntaxe 2 (sur plusieurs lignes)If <condition 1> Then
<séquence d'instructions 1>
[ElseIf <condition 2> Then
<séquence d'instructions 2>]
[Else
<séquence d'instructions 3>]
End If
Autre possibilitéIf <condition 1> Then
<séquence d'instructions 1>
[Else
If <condition 2> Then
<séquence d'instructions 2>
[Else
<séquence d'instructions 3>]
End If]
End If
Exemple Affiche le résultat de la comparaison entre A et B : If A>B Then
MsgBox "A>B"
Else
If A = B Then
MsgBox "A=B"
Else
© ENI Editions - All rigths reserved- 1 -
MsgBox "A<B"
End If
End If
L'instruction Select Case s Select Case
Exécute des séquences d'instructions spécifiées en fonction de la valeur d'une expression.
L'instruction
Select Case permet de remplacer avantageusement le
ElseIf dans des instructions
If Then Elselors de la comparaison entre une expression et plusieurs valeurs.
SyntaxeSelect Case <expression à tester>
[Case <liste d'expressions 1>
<séquence d'instructions 1>]
[Case <liste d'expressions 2>
<séquence d'instructions 2>]
[Case Else
<séquence d'instructions 3>]
End Select
<liste d'expression> peut prendre les formes suivantes :
- valeur (ex : Case 10)
- liste de valeurs (ex : Case 1, 5, 10)
- plage de valeurs (ex : Case 1
To 5)
- expression conditionnelle (ex : Case
Is >= 5)
Exemple Affiche un commentaire sur la température. Select Case Température
Case 0
MsgBox "Glace"
Case 1 To 10
MsgBox "Froid"
Case 11 To 16
MsgBox "Frais"
Case 17, 18, 19
MsgBox "Température intérieure " _
& "d'une maison en hiver"
Case 20 To 25
MsgBox "Agréable"
Case Is > 25
MsgBox "Chaud"
Case Else
MsgBox "Température non reférencée"
End Select
La fonction IIf s IIf
Retourne une valeur en fonction d'une condition.
SyntaxeIIf (<condition>, <valeur si vrai>, <valeur si faux>)
- 2 -© ENI Editions - All rigths reserved
Exemple Dim bln As Boolean
bln = IIf(A = B, True, False)
Il est possible d'imbriquer plusieurs appels de fonction IIf.
Exemple Dim IntI As Integer
IntI = IIf(A = B, IIf(B = C, 1, 0), 0)
© ENI Editions - All rigths reserved- 3 -
Les structures en boucles Les structures en boucles (ou répétitives) permettent de répéter l'exécution d'un ensemble d'instructions.
On distingue plusieurs types de structures en boucles :
Do Loop
While Wend
For Next
For Each Next
Do Loop et
While Wend répètent un traitement jusqu'à ce qu'une certaine condition soit réalisée.
For Next effectue un traitement un nombre de fois donné, en fonction d'un compteur.
For Each Next permet de parcourir les éléments d'une collection.
L'instruction Do Loop s Do Loop
Exécute une séquence d'instructions tant que (
While) ou jusqu'à ce que (
Until) la condition spécifiée soit
vérifiée.
Syntaxe 1Séquence d'instructions éventuellement non exécutée (condition testée avant la séquence).
Do [{While | Until} <condition>]
<séquence d'instructions>
[Exit Do]
[<séquence d'instructions>]
Loop
Syntaxe 2Séquence d'instructions exécutée au moins une fois (condition testée après la séquence).
Do
<séquence d'instructions>
[Exit Do]
[<séquence d'instructions>]
Loop [{While | Until} <condition>]
»
Exit Do est souvent utilisé après l'évaluation d'une condition interne à la boucle et permet de sortir de la boucle sans que la condition
de contrôle de la boucle ne soit vérifiée.
Exemple Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargés antérieurement. Dim intCpt As Integer
Dim FraisAnnuel As Currency
FraisAnnuel = 0
IntCpt = 0
Do
IntCpt = IntCpt + 1
FraisAnnuel = FraisAnnuel + FraisMensuel (IntCpt)
Loop Until IntCpt = 12
© ENI Editions - All rigths reserved- 1 -
MsgBox "Frais Annuels = " & FraisAnnuel
L'instruction While Wend s While Wend
Exécute une séquence d'instructions tant que la condition spécifiée est vérifiée.
SyntaxeWhile <condition>
<séquence d'instructions>
Wend
Exemple Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargés antérieurement. Dim intCpt As Integer
Dim FraisAnnuel As Currency
FraisAnnuel = 0
intCpt = 1
While intCpt <= 12
FraisAnnuel = FraisAnnuel + FraisMensuel (intcpt)
intCpt = intCpt + 1
Wend
MsgBox "Frais Annuels = " & FraisAnnuel
L'instruction For Next s For Next
Permet de répéter l'exécution d'une séquence d'instructions en fonction d'un compteur.
SyntaxeFor <compteur> = <début> To <fin> [Step <incrément>]
<séquence d'instructions>
[Exit For]
<séquence d'instructions>
Next [<compteur> [,<compteur2>] [, ]]
»
Exit For souvent placée après l'évaluation d'une condition, permet de sortir précocement de la boucle.
Exemple Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargés antérieurement. Dim intCpt As Integer
Dim FraisAnnuel As Currency
FraisAnnuel = 0
For intCpt = 1 To 12
FraisAnnuel = FraisAnnuel + FraisMensuel (intCpt)
Next
MsgBox "Les frais annuels sont de :" & FraisAnnuel
Le mot clé
Step permet d'incrémenter ou de décrémenter la variable de compteur d'un pas spécifié.
Exemple La variable de compteur j est incrémentée de 5 à chaque itération. À la fin de la boucle, total correspond à la somme de 5, 10, 15, - 2 -© ENI Editions - All rigths reserved
et 20. Dim j As Integer
Dim total As Integer
total = 0
For j = 5 To 20 Step 5
total = total + j
Next j
MsgBox "Le total est de " & total
L'instruction For Each Next s For Each Next
Permet de parcourir tous les éléments d'un tableau ou d'une collection.
SyntaxeFor Each <élément> In <tableau>/<collection>
<séquence d'instructions>
[Exit For]
<séquence d'instructions>
Next [élément]
Exemple Affiche les frais de chaque mois (cf. exemple For Next) : Dim Frais As Currency
For Each Frais In FraisMensuel
MsgBox Frais
Next
© ENI Editions - All rigths reserved- 3 -
Les opérateurs Les opérateurs permettent d'effectuer des opérations arithmétiques sur des variables et/ou des constantes, de
comparer des variables entre elles, de tester plusieurs conditions
On distingue plusieurs catégories d'opérateurs :
- les opérateurs arithmétiques,
- les opérateurs de comparaison,
- les opérateurs logiques,
- l'opérateur de concaténation.
» L'opérateur d'affectation est le signe d'égalité. La valeur de l'expression située à droite du signe égal est affectée à la variable située à
gauche du signe. (exemple : IntA = 12, 12 est affecté à la variable IntA, IntA = IntB * 12, la valeur d'IntB multipliée par 12 est affectée à
IntA).
Les opérateurs arithmétiques Ils permettent d'effectuer des calculs arithmétiques à partir de variables et/ou de constantes numériques.
OpérateurCalcul réalisé+
Addition
Soustraction
/
Division avec comme résultat un nombre à virgule flottante
Mod
Reste de la division de deux nombres
\
Division avec comme résultat un nombre entier
*
Multiplication
^
Élévation à la puissance
Les opérateurs de comparaison Ils permettent de comparer deux valeurs numériques ou deux chaînes de caractères.
OpérateurCalcul réalisé<
Inférieur à
<=
Inférieur ou égal à
>
Supérieur à
>=
Supérieur ou égal à
=
Égal à
<>
Différent de
L'instruction
Option compare utilisée au niveau module permet de définir la méthode de comparaison par défaut
© ENI Editions - All rigths reserved- 1 -
qu'il convient d'utiliser lors de la comparaison de chaînes de caractères. Elle peut prendre trois valeurs :
CompareBinary(option par défaut) fournit des comparaisons de chaînes basées sur un ordre de tri dérivé de la représentation
binaire interne des caractères :
A<B<E<Z<a<b<e<z<À<Ê<Ø<à<ê
CompareTextfournit des comparaisons de chaînes basées sur un ordre de tri qui ne distingue pas les majuscules des
minuscules :
(A=a)<(À=à)<(B=b)<(E=e)<(Ê=ê)<(Z=z)<(Ø=ø)
CompareDatabasefournit des comparaisons de chaînes basées sur l'ordre de tri déterminé par l'identificateur de paramètres
régionaux de la base de données courante.
Les opérateurs logiques Ils permettent de tester simultanément deux (ou plusieurs) valeurs booléennes ou expressions renvoyant ce type
valeur. Ils sont généralement utilisés avec l'instruction
If.
OpérateurCalcul réaliséAnd
Si toutes les expressions ont la valeur True, le résultat est True. Si l'une des expressions a la
valeur False, le résultat est False.
Or
Si l'une au moins des expressions a pour valeur True, le résultat est True (ou inclusif).
Xor
Si une et une seule des expressions a pour valeur True, le résultat est True (ou exclusif).
Not
Renvoie le contraire de l'expression.
Eqv
Renvoie True si les deux expressions sont identiques.
Exemple (A>= 1) And (A<= 9) renvoie True si A est compris entre 1 et 9,
Not (A >= 10) renvoie True si A est strictement inférieur à 10,
(A>0) Or (B>0) Or (C>0) renvoie True si au moins l'une des valeurs est positive.
L'opérateur de concaténation L'opérateur de concaténation est le signe
&. Il permet d'assembler des chaînes de caractères, des valeurs et des
expressions. Le résultat est une chaîne de caractères.
Exemple Concaténation du nom et du prénom séparés par un espace : StrNomPre = Nom & " " & Prenom
Priorité des opérateurs Lorsque plusieurs opérateurs sont contenus dans une même expression, chacun est évalué dans un ordre
prédéfini, appelé priorité des opérateurs.
- 2 -© ENI Editions - All rigths reserved
Les opérateurs sont évalués dans l'ordre suivant : opérateurs arithmétiques, opérateurs de comparaison,
opérateurs logiques. Les opérateurs de comparaison ont la même priorité ? c'estàdire qu'ils sont évalués dans
leur ordre d'apparition, de gauche à droite.
Les opérateurs arithmétiques et logiques sont évalués dans l'ordre de priorité cidessous (priorité décroissante de
gauche à droite) :
Arithmétique : ^, *, /, Mod, +,
Logique : Not, And, Or, Xor, Eqv
Exemple L'expression "3 + 4 * 5" donne comme résultat 23. La multiplication (4 * 5) est effectuée avant l'addition ( + 3) : » L'utilisation de parenthèses permet de modifier l'ordre de priorité afin qu'un élément d'une expression soit évalué avant les autres. Les
opérations situées à l'intérieur de parenthèses sont toujours traitées avant les autres. Exemple : l'expression "(3 + 4) * 5" renvoie 35.
L'addition est effectuée en priorité. Il est conseillé d'utiliser des parenthèses pour une meilleure lisibilité du code.
© ENI Editions - All rigths reserved- 3 -