Les objets et collections en VBA
Notion d’objet
Le VBA est un langage qui permet de faire de la programmation orientée objet (POO) : un objet représente une idée, un concept ou toute entité du monde réel, comme un avion, un individu ou encore un film. Il possède une structure interne et un comportement, et peut communiquer avec ses pairs. Les éléments qui permettent de décrire un objet forment ce qu’on appelle une classe. Chaque objet issu d’une classe est une instance de classe. Les classes comportent des propriétés, des méthodes et des événements.
1. Propriétés
L’objet est une entité que l’on peut distinguer grâce à ses propriétés (sa couleur, ses dimensions, par exemple). Si l’on prend par exemple un livre, il est caractérisé par ses propriétés : nombre de pages, titre, nombre de chapitres, éditeur, contenu, etc. Chacune de ses propriétés peut être spécifique à chaque livre, mais tous les livres possèdent fondamentalement les mêmes propriétés. Certaines propriétés des objets peuvent être modifiées (vitesse d’une voiture par exemple) et d’autres non (une marque de voiture).
En programmation VBA, la syntaxe générale d’accès aux propriétés d’un objet est la suivante :
UnObjet.SaPropriete
On accède ici à la propriété SaPropriete de l’objet UnObjet. La combinaison MonObjet.SaPropriete aura le même comportement qu’une variable classique, pouvant prendre une valeur ou retourner une valeur avec l’utilisation de l’opérateur =.
Par exemple, il est possible de lire le contenu SQL d’une requête Access et de l’afficher avec le code suivant :...
Modèle objet Access
L’objectif des quelques sections qui vont suivre est de montrer le modèle de hiérarchie utilisé au sein de l’application Access, sous forme de collections d’objets, qui vont être expliqués par la suite.
Collections Access
Voici les principales collections que l’on peut manipuler en VBA sous Access.
Collection |
Contient une collection de |
Description |
COMAddins |
COMAddin |
Collection des compléments COM |
CommandBars |
CommandBar |
Collection des barres de commande |
Forms |
Form |
Collection des formulaires ouverts. Voir également CurrentProject.AllForms. |
Modules |
Module |
Collection des modules |
Printers |
Printer |
Collection des imprimantes disponibles |
References |
Reference |
Collection des références bibliothèques. Voir Menu : Outils\Références |
Reports |
Report |
Collection des états. Voir également CurrentProject.AllReports |
TempVars |
TempVar |
Collection des variables temporaires |
WebServices |
WebService |
Collection des connexions à des services web |
Objets Access
Voici les principaux objets qu’il est possible de manipuler dans le modèle Access.
Objet |
Description |
Application |
Représente l’application Microsoft Access active. |
AutoCorrect |
Représente les options de correction automatique d’Access. |
DBEngine |
Représente le moteur de base de données Microsoft Jet. Cet objet permet de contrôler tous les autres objets d’accès aux données. |
DoCmd |
Permet de convertir en VBA des actions Macros. |
FileDialog |
Permet d’accéder aux fonctionnalités des boîtes de dialogue (Ouvrir ou Enregistrer par exemple). |
LanguageSettings |
Permet d’accéder aux paramètres linguistiques de l’application. |
Screen |
Permet d’accéder à l’écran actif (formulaire, état ou contrôle). |
VBE |
Permet d’accéder à l’éditeur Visual Basic Editor. |
CurrentProject |
Permet d’accéder à différents objets Access spécifiques. |
CurrentData |
Permet d’accéder à plusieurs objets Access d’accès aux données. |
1. L’objet Application
L’objet Application correspond à l’application Microsoft Access active.
a. Propriétés
Propriété |
Description |
AutomationSecurity |
Retourne ou définit le mode de sécurité utilisé par Access lors de l’ouverture de fichier par programmation. Cette valeur est une constante msoAutomationSecurity, dont la liste des valeurs figure en annexe de cet ouvrage. |
BrokenReference |
Retourne un booléen indiquant si l’application possède une ou plusieurs références rompues. |
Build |
Retourne une valeur numérique qui présente le numéro de copie de Microsoft Access 2021 actuellement installé. |
CodeContextObject |
Retourne un objet qui contient une macro ou du code... |
Manipuler des objets en VBA
1. Instruction Set
Contrairement à l’affectation d’une valeur à une variable de type simple (numérique, booléen, date, etc.), l’affectation d’une valeur à une variable ayant comme type un objet s’effectue à l’aide du mot-clé Set.
La syntaxe générale est la suivante :
Set monObjet = [New] InstructionMenantAlObjet
Le mot-clé New permet de créer une nouvelle instance d’un objet. Si l’objet est déjà existant, il n’est pas nécessaire d’utiliser ce mot-clé. InstructionMenantAlObjet peut correspondre au nom d’un objet ou à une variable objet de même type.
Par exemple ici, si l’on souhaite affecter à la variable tbl la table ENI_CONTRAT_CON, le code sera le suivant :
Dim tbl As TableDef
Set tbl = CurrentDb.TableDefs("ENI_CONTRATS_CON")
Réinitialisation de la variable objet
Il est possible de réinitialiser une variable objet grâce à l’instruction suivante :
Set MonObjet = Nothing
2. Instruction With/End With
Pour modifier les différentes propriétés d’un objet, il peut être long et lassant pour le programmeur de répéter le chemin d’accès à cet objet pour chaque propriété que l’on souhaite modifier.
Par exemple avec les lignes de manipulation d’un formulaire :
'Le formulaire F_EMPLOYE_Detail est préalablement ouvert
Forms("F_EMPLOYE_DETAIL").Caption = "Nouvelle Fiche"
Forms("F_EMPLOYE_DETAIL").Controls("EMP_DEBUT_EMPLOI").Value=Date
Forms("F_EMPLOYE_DETAIL").Controls("EMP_DEBUT_EMPLOI").SetFocus
L’instruction With permet d’effectuer toutes ces manipulations du même objet sans avoir à le répéter...
Les classes d’objets
Une classe est un modèle dont se servira le programme pour créer de nouveaux objets. Les objets comporteront des propriétés similaires à leur modèle, pourront réaliser les mêmes actions que leur modèle et pourront réagir aux mêmes événements que ceux de leur modèle.
En fonction des besoins, chaque objet pourra par la suite avoir ses caractéristiques propres (titre d’un livre, nombre de pages, prix, etc.) et un comportement spécifique. Tout objet Access est issu d’une classe.
1. Les modules de classes
Afin de manipuler des objets qui seront créés par le développeur, on pourra utiliser les modules de classes.
Les modules de classes se définissent ainsi :
-
Les modules de classes portent le nom de l’objet qu’ils servent à définir.
-
Ils comportent des procédures et fonctions publiques Public Sub et Public Function définissant les méthodes propres à l’objet.
-
Ils comportent des fonctions Property Get qui servent à lire les valeurs de leurs propriétés, ainsi que des procédures Property Set/Property Let pour définir les valeurs de ces propriétés.
Une fois ces éléments définis dans un module de classe, on peut créer un nouvel objet correspondant à cette définition. La syntaxe générale pour y arriver est la suivante :
Dim NomObjet As New NomDeClassePersonnalisee
L’appel aux modules de classes reste une utilisation qui s’adresse d’abord aux développeurs chevronnés.
Dans la suite des exemples, nous définirons une classe représentant un contrat.
Nous utiliserons donc une classe nommée clsContrat. Dans le menu Insertion, on sélectionne Module de classe :
Dans la zone...