Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

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.

images/1905RI1.png

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 :

images/1905RI3.png

Dans la zone...