Vous êtes sur la page 1sur 235

VBAAccess2007

Programmer sous Access

MichleAMELOT

Rsum
A la fois simple, pratique et complet, ce livre sadresse aux dveloppeurs et aux utilisateurs avertis souhaitant crer des applications
professionnelles conviviales, fiables et performantes sous Access. Outre les lments de base du langage VBA vous permettant de crer vos
propres procdures et fonctions, vous apprendrez manipuler vos donnes en utilisant les objets DAO ou ADO et le langage SQL,
personnaliser vos formulaires et tats, concevoir un ruban Access spcifique votre application, piloter les autres applications Office 2007
via la technologie Automation, exporter des informations sur Internet (au format XML ou HTML) et utiliser les API Windows.
En plus des nombreux exemples fournis dans cet ouvrage - en tlchargement sur notre espace Livres (www.eni-livres.com) - le dernier
chapitre vous guide dans la cration dune mini-application Access.

L'auteur
Consultante et formatrice, Michle Amelot est spcialise dans la cration de logiciels spcifiques autour des technologies Microsoft.
Elle accompagne des quipes de dveloppement dans la conduite de leurs projets. Cest, entre autres, cette connaissance approfondie
des besoins des utilisateurs et des dveloppeurs, qui lui permet dans ses ouvrages de faciliter lapprentissage et la pratique de la
programmation en langage VBA.
Ce livre numrique a t conu et est diffus dans le respect des droits dauteur. Toutes les marques cites ont t dposes par leur diteur respectif. La loi du 11
Mars 1957 nautorisant aux termes des alinas 2 et 3 de larticle 41, dune part, que les copies ou reproductions strictement rserves lusage priv du copiste et non
destines une utilisation collective, et, dautre part, que les analyses et les courtes citations dans un but dexemple et dillustration, toute reprsentation ou
reproduction intgrale, ou partielle, faite sans le consentement de lauteur ou de ses ayants droit ou ayant cause, est illicite (alina 1er de larticle 40). Cette
reprsentation ou reproduction, par quelque procd que ce soit, constituerait donc une contrefaon sanctionne par les articles 425 et suivants du Code Pnal.
Copyright Editions ENI

ENI Editions - All rigths reserved

- 1-

Introduction
Access2007disposedulangagedeprogrammationVisualBasicEditionApplication(VBA)quiluipermetd'tendre
sesfonctionnalitspourvousoffrirlemeilleurdesesperformances.
C'est un langage puissant, qui ne prsente aucune difficult pour tre compris par les dbutants. Les fonctions
deVBAsontdrivesengrandepartiedeVisualBasicauxquelless'ajoutentdesinstructions(objets,mthodes,
fonctions...)spcifiques,ncessaireslamanipulationdesobjetsd'Access.
Pourbienexploiterlecontenudecemanuel,ilestimpratifd'avoirmanipulAccess2007entantqu'utilisateur,
c'estdiresavoirgrer(crer,modifier,supprimer,manipuler)lestables,lesrequtes,lesformulaires,lespages
d'accsauxdonnesetlestats.Desconnaissancesgnralesenprogrammationsontgalementprrequises.

ENI Editions - All rigths reserved

- 1-

Rappels
UnebaseAccessestconstitued'ununiquefichierportantl'extension.ACCDBetcontenantlesdiffrentsobjets
del'application.Cesobjetssont:
Lestables

Ellescontiennentlesdonnesdelabaseetpeuventtreenliaisonlesunesaveclesautres.
Lesrequtes

Ellespermettentd'effectuer:

- des slections et des tris sur les tables,


- des calculs simples et des analyses croises,
- des actions (ajout, suppression, mise jour d'enregistrements, cration de tables),
- des oprations SQL.
Lesformulaires

Ilssontutilisspourconsulteroumettrejourlesdonnes.
Lestats

Ilssontutilisspourimprimerdesrapports,depuislasimplelisted'unetablejusqu'desrapportspluscomplexes
comprenantdesregroupementsd'enregistrementsetdescalculs.
Lesmacros

Elles permettent l'automatisation de plusieurs tches avec un langage particulier mais ne permettent pas
d'atteindrelapuissancededveloppementdeVBA.
Lesmodules

Ils contiennent une partie du code VBA de l'application, savoir des dclarations, des fonctions, des
procdures...

ENI Editions - All rigths reserved

- 1-

PrincipesfondamentauxdeVBA
VBAprsenteunenvironnementdeprogrammationorientobjet.
Un objet est une entit autonome possdant des caractristiques (proprits : taille, couleur, valeur...) et des
comportements (mthodes) qui lui sont propres. Certains objets possdent une reprsentation visuelle
(Formulaire,Etats...),tandisqued'autresnesontaccessiblesqu'encodeVBA(DBEngine,Container...).
Laplupartdesobjetsvisuelsontlapossibilitderagirdesvnements(surouverture,aprsmisejour...).
La programmation VBA permet d'induire, en fonction des vnements, des comportements particuliers sur les
objets par le code : mthodes, procdures et fonctions. Par ce biais, elle facilite l'criture de code car elle
repose sur une conception modulaire. Elle permet ainsi une grande souplesse de fonctionnement et une
maintenanceplusaise.
Structured'unobjet

vnement:Actionutilisateurousystmeagissantsurunobjetetdclenchantlecodecorrespondant.
Mthode:Codeprdfiniserapportantuntyped'objet.
Procdure:Squenced'instructionsnerenvoyantpasdevaleur.
Fonction:Squenced'instructionsrenvoyantunevaleur.

ENI Editions - All rigths reserved

- 1-

Lesnouveautsd'Access2007
Access2007faitpartiedelasuitelogicielleMicrosoftOffice2007(galementappeleOffice12)etbnficiepar
consquentdelaplupartdesamliorationsdecetteversion:

- Nouvelle interface utilisateur : ruban et onglets regroupant toutes les commandes et remplaant les menus et barres d'outils.
- Partage efficace des informations entre applications Office (notamment change d'informations entre Access et Outlook et
Access et SharePoint).

- Thmes Office permettant de personnaliser aisment la prsentation des documents.


- Enregistrement des fichiers au format pdf et xps...
D'autresnouveautsonttapportesAccess2007:

- Nouveaux modles d'applications compltes ;


- Volet de navigation ;
- Tris et filtrages optimiss ;
- Dispositions permettant de personnaliser la prsentation des formulaires et tats;
- Nouveaux types de champs : champs plusieurs valeurs, type de donnes "Pice jointe" permettant de stocker des
informations provenant de tout type de fichier, texte enrichi dans les champs mmo...
Contrairementl'interfaced'Access,l'environnementdedveloppementaconservsesmenusetbarresd'outils.
Toutefois, la documentation en ligne a t considrablement amliore : aspect de Visual Studio, exemples de
codedetcheetmodleobjetenrichi(informationssurleschangementsparrapportauxversionsprcdentes).

ENI Editions - All rigths reserved

- 1-

PassagedesmacrosVBA
Lesmacrosreprsententunemanirefaciledegrerdesenchanementsd'actionssimples,telsquel'ouvertureet
lafermeturedeformulaires.
ToutefoisVBAprsentebiend'autresavantages:

- il facilite la maintenance des bases de donnes car les procdures vnementielles Visual Basic sont intgres dans la
dfinition du formulaire ou de l'tat,

- il conforte et amliore la gestion des erreurs,


- il permet d'accomplir des actions au niveau du systme,
- il autorise la manipulation d'un seul enregistrement la fois,
- il accepte le passage d'arguments au code en cours d'excution.
Toute macro peut tre convertie automatiquement en code VBA.
Conversiondemacrosdansunformulaireouuntat

Dans le volet de navigation, cliquez avec le bouton droit de la souris sur le formulaire ou l'tat, puis cliquez sur Mode cration.

Activez l'onglet Outils de base de donnes du ruban.

Cliquez sur l'icne Convertir les macros de formulaire en Visual Basic ou Convertir les macros d'tat en Visual Basic situe en
bas droite du groupe Macros :

Labotededialoguesuivantes'affichealors :

Dsactivez si vous le souhaitez les options proposes par dfaut. Il est toutefois recommand de conserver la gestion des erreurs
pour la fiabilit de l'application, et les commentaires pour simplifier la lecture du code.

Cliquez sur Convertir pour continuer.

Conversiondemacrosglobales

Dans le volet de navigation, slectionnez la macro que vous souhaitez convertir.

Activez l'onglet Outils de base de donnes du ruban.

Cliquez sur l'icne Convertir les macros en Visual Basic situe en bas droite du groupe Macros.

ENI Editions - All rigths reserved

- 1-

Dans la bote de dialogue, slectionnez les options souhaites.

Cliquez sur Convertir pour continuer : la macro est convertie en code VBA dans un module intitul "Macro convertie" suivi du nom
de la macro.

Lesmacrosetlascurit
Lesparamtresdescuritdesmacrospermettentdecontrlercequiseproduitlorsquevousouvrezunebase
dedonnesAccesscontenantunemacro.
Modificationdesparamtresdescurit
Par dfaut, lorsque vous installez Access, les macros sont dsactives. Si vous ouvrez un classeur contenant
desmacros,l'avertissementsuivantestaffichdanslabarredesmessages:

Sivouscliquezsur Options,unebotededialoguedescurits'affichepourvouspermettred'activerlesmacros
contenuesdansvotrebaseAccess.Vouspouvezalorsslectionnerl'optionActivercecontenuetcliquersurle
boutonOK:lesmacrossontalorsactivesetl'alertedescuritdisparat.
VouspouvezgalementmodifierlesparamtresdescuritpourtouteslesbasesdedonnesAccessdelafaon
suivante:

Cliquez sur le bouton Microsoft Office

, puis sur le bouton

(situ en bas de la bote de dialogue).

Slectionnez la catgorie Centre de gestion de la confidentialit dans le menu de gauche.

Cliquez sur le bouton de commande Paramtres du Centre de gestion de la confidentialit.

Slectionnez la catgorie Paramtres des macros dans le menu de gauche.

En cas de changement des paramtres de scurit, la nouvelle option choisie s'appliquera toutes les bases de donnes Access
l'exclusion de la base actuellement active. Pour l'appliquer cette base, vous devez la fermer puis l'ouvrir nouveau.
Descriptiondesdiffrentesoptionsdescurit
Dsactivertouteslesmacrossansnotification
Touteslesmacrosettouteslesalertesdescuritsontdsactives.
Dsactivertouteslesmacrosavecnotification
Optionpardfaut.Lesmacrossontdsactivesmaisl'alertedescuritestaffiche.
Dsactivertouteslesmacrosl'exceptiondesmacrossignesnumriquement
Si les macros d'un classeur sont signes numriquement par un metteur approuv, les macros peuvent tre
excutes. Si l'metteur n'a pas t approuv, une notification est affiche : il est alors possible d'activer les
macros signes ou d'approuver l'metteur. Les macros non signes numriquement ne pourront pas tre
actives.
Activertouteslesmacros
Si cette option est slectionne, toutes les macros sont actives. Il n'est pas recommand d'utiliser ce
paramtreenpermanence.
Quelle que soit l'option choisie, si un logiciel antivirus fonctionnant avec Microsoft Office System 2007 est install, les classeurs

- 2-

ENI Editions - All rigths reserved

contenant des macros sont analyss avant d'tre ouverts.


Editeursapprouvs
LesapplicationsAccessdveloppespardesditeursapprouvssecaractrisentparlescritressuivants:

- Le code est sign par le dveloppeur l'aide d'une signature numrique ;


- La signature numrique est valide ;
- La signature numrique est effective (non expire) ;
- Le certificat associ la signature numrique a t mis par une autorit de certification reconnue.
PourajouterunditeurlalisteEditeursapprouvs:
Activez l'option Dsactiver toutes les macros avec notification dans les paramtres de scurit (cf. Gnralits Passage des
macros VBA Les macros et la scuritModification des paramtres de scurit cidessus).

Ouvrez une base de donnes Access dont le code est sign par un Editeur approuv.

Cliquez sur le bouton de commande Approuver tous partir de l'diteur.

Vouspouveztoutmomentconnatrelalistedesditeursapprouvsdelafaonsuivante:

Cliquez sur le bouton Microsoft Office

, puis sur le bouton

(situ en bas de la bote de dialogue).

Slectionnez la catgorie Centre de gestion de la confidentialit dans le menu de gauche.

Cliquez sur le bouton de commande Paramtres du Centre de gestion de la confidentialit.

Slectionnez la catgorie Editeurs approuvs dans le menu de gauche.


IlestgalementpossiblededsactiverunditeurapprouvencliquantsurleboutonSupprimer.

Emplacementsapprouvs
Toutfichierenregistrdansunemplacementapprouvpeuttreouvertsansl'interventionduCentredegestion
delaconfidentialit.
Vous pouvez tout moment ajouter un dossier dans la liste des Emplacements approuvs de la faon
suivante:

ENI Editions - All rigths reserved

- 3-

Cliquez sur le bouton Microsoft Office

Slectionnez la catgorie Centre de gestion de la confidentialit dans le menu de gauche.

Cliquez sur le bouton de commande Paramtres du Centre de gestion de la confidentialit.

Slectionnez la catgorie Emplacements approuvs dans le menu de gauche.

Cliquez sur Ajouter un nouvel enregistrement.

Compltez les informations de la bote de dialogue Emplacement de Microsoft Office approuv.

Cliquez sur le bouton OK pour ajouter l'emplacement.

- 4-

, puis sur le bouton

ENI Editions - All rigths reserved

(situ en bas de la bote de dialogue).

L'environnementdedveloppementIDE
L'IDE (Integrated Development Environment) est l'environnement dans lequel vous pouvez saisir, modifier et
testervotrecodeVBA.CetenvironnementestgalementappelVBE(VisualBasicEditor).
L'IDEmetvotredispositiondenombreuxoutilsquifacilitentlaprogrammationetlamiseaupointducodeVBA :
outilsdedbogage,assistancelasaisie,explorateurd'objets...

- En utilisant la combinaison de touches Ctrl F11.


- En cliquant sur l'icne situe dans l'onglet Outils de base de donnes.
- En slectionnant une procdure vnementielle depuis une feuille de proprits dans un formulaire ou un tat.
Fentre de l'environnement IDE

Toutes les fentres de l'environnement IDE peuvent tre affiches partir du menu Affichage.
Labarred'outilsStandard(1)

1
2
3
4

Afficher Access
Insrer un module, un module de classe ou une procdure (Function ou Sub)
Enregistrer
Couper

ENI Editions - All rigths reserved

- 1-

5 Copier
6 Coller
7 Rechercher
8 Annuler
9 Rtablir
10 Excuter
11 Arrt
12 Rinitialiser
13 Mode cration
14 Afficher l'explorateur de projets
15 Afficher la fentre Proprits
16 Afficher l'explorateur d'objets
17 Afficher la bote outils
18 Aide sur Microsoft Visual Basic
19 Position courante dans la fentre de Code
L'Explorateurdeprojet(2)

TouslesmodulesdelabasededonnesouduprojetVBAsontaffichsdansl'explorateurdeprojets,selonune
structurearborescente.Ilssontregroupsentroisensembles:

- les modules de formulaires ou d'tats,


- les modules standards,
- les modules de classe indpendants.
LafentreProprits(3)

Elle permet d'afficher les proprits des diffrents modules. Pour afficher les proprits d'un formulaire ou d'un
tat, celuici doit tre ouvert dans Access si ce n'est pas le cas, slectionnez le formulaire ou l'tat dans
l'explorateurdeprojetetchoisissezl'optionObjetdumenuAffichage.
LafentreCode(4)

Danscettefentresetrouventdeuxzonesdelistedroulantes :

- la zone objet (10) affiche la liste les objets du module,


- la zone procdure (11) affiche les procdures ou les vnements de l'objet slectionn dans la zone objet. Les vnements
dj utiliss apparaissent en gras.
Lecomplmentautomatiqued'instructions(5)

Le complment automatique d'instructions prsente les informations qui sont le complment logique de
l'instructionauniveaudupointd'insertion.
Parexemple,lalistedroulantedesmthodesetpropritsdisponiblespourunobjets'afficheautomatiquement
lorsquevoustapezlenomdel'objetsuivid'unpoint.
Si cette liste n'est pas active, slectionnez Options dans le menu Outils et cochez la case Complment
automatiquedesinstructionsdel'ongletditeur.
LafentreExcution(6)

Ellepermetd'afficherlesvaleursdesvariables,delesmodifieretd'excuterdesinstructions.
Les fentres Excution, Variables locales et Espions sont utilises lors du dbogage de l'application.

- 2-

ENI Editions - All rigths reserved

LafentreVariableslocales(7)

Ellecontienttouteslesvaleursdesvariablesaccessiblesdanslaporteencours.
LafentreEspions(8)

Elleaffichelesvaleursdesvariablesquionttdfiniescommevariablesespions.
L'Explorateurd'objets(9)

Ilpermetdevisualiser,pourchaqueobjet,sesproprits,mthodesetconstantes.

ENI Editions - All rigths reserved

- 3-

Configurationdel'diteurVBA
Paramtragedescouleursdel'diteur
Lesmotscls,lesfonctionsetlesinstructionsVBAsontaffichesenbleu,lesobjets,mthodesetpropritsen
noiretlescommentairesenvert.Lesinstructionscontenantdeserreurssontmisesenvidenceenrouge.
Vous pouvez modifier le style (couleurs, police, taille) des diffrentes parties du code. Pour cela, slectionnez
OptionsdanslemenuOutilsetcliquezsurl'ongletFormatdel'diteur.

Paramtragedelaprsentationducode
Diffrents outils, comme la vrification automatique de la syntaxe, la dclaration obligatoire des variables, le
complmentautomatiqued'instructions...facilitentlasaisieetlamiseaupointducodeVBA.
Pouractivercesoutils,slectionnezOptionsdanslemenuOutilsetcliquezsurl'ongletditeur.

ENI Editions - All rigths reserved

- 1-

- 2-

ENI Editions - All rigths reserved

Rfrenceauxobjets
Pour pouvoir utiliser un objet d'accs aux donnes, un objet d'automation, ou un contrle ActiveX spcifique,
vous devez rfrencer la bibliothque d'objet correspondante. Une bibliothque d'objets est gnralement un
fichierDLLouOCXquicontientlecodedel'objet.
Pouractiverunerfrenceunebibliothque,slectionnezl'optionRfrencesdanslemenuOutils.

Vous pouvez ajouter des rfrences en cliquant sur le bouton de commande Parcourir.

ENI Editions - All rigths reserved

- 1-

Crationd'uneprocdureenVBA
Cettesectionvavousguiderpaspasdanslacrationd'unepremireprocdureenVBA.
Cette procdure demande l'utilisateur de saisir une date sous forme abrge (19/06/07), contrle la date et
l'affichedansunformatdatecomplet(mardi19juin2007).
tape1:crationd'unnouveaumodule

DepuisAccess:

Activez l'onglet Crer du ruban.

Cliquez sur la flche situe en bas de l'icne Macro puis choisissez l'option Module.

Depuisl'environnementVBE:
Slectionnez l'option Module du menu Insertion
ou
depuis la fentre Explorateur de projets, cliquez avec le bouton droit de la souris et slectionnez Insertion puis Module partir du
menu contextuel.

tape2:attribuerunnomaumodule

Pardfaut,lemodulecrestintitulModule1(ouModulesuividupremiernumrodisponiblesid'autresmodules
ontdjtscrsetnonrenomms).
Pourmodifierlenomdumodule :

Slectionnez le module dans la fentre Explorateur de projet.

Dans la fentre Proprits (cliquez sur F2 si la fentre Proprits n'est pas affiche), modifiez la valeur de la proprit (Name).

tape3:Crationd'uneprocdure

Double cliquez sur le module pour afficher la fentre de VBA associe.

Saisissez le code suivant dans la fentre VBA:


ENI Editions - All rigths reserved

- 1-

Cliquez sur l'icne

de la barre d'outils Standard pour enregistrer la procdure.

tape4:Testdelaprocdure

Pourexcuterlecodedelaprocdure :

Positionnez le curseur de la souris sur le code de la procdure saisie.

Cliquez sur l'icne

Saisissez une date dans la bote de dialogue affiche et cliquez sur le bouton de commande OK :

de la barre d'outils Standard ou utilisez la touche F5.

Lemessagesuivantestalorsaffich:

- 2-

ENI Editions - All rigths reserved

Cliquez sur le bouton de commande OK.

Le jour de la semaine tant un lundi, le message suivant apparat :

ENI Editions - All rigths reserved

- 3-

Recommandations
Afin d'optimiser les performances de VBA, certaines techniques peuvent contribuer acclrer la vitesse
d'excutiondevotrecode.

- Les variables doivent toujours tre explicitement dclares.


- Le type des variables doit tre le plus spcifique possible.
- Pour faire rfrence aux proprits, contrles et objets d'accs aux donnes, les variables sont prconises.
- Le mot rserv Me doit tre utilis pour faire rfrence au formulaire ou l'tat au sein d'une procdure vnementielle.
- L'emploi des constantes est recommand chaque fois que possible.
- Les modules doivent tre organiss pour ne pas surcharger la mmoire. Un module est mis en mmoire uniquement si une de
ses procdures est appele par d'autres codes.

- Le code doit tre rgulirement compil.

ENI Editions - All rigths reserved

- 1-

Lesmodules
Ondistinguetroistypesdemodules:

- les modules Microsoft Access Objets de classe,


- les modules standards,
- les modules de classe indpendants.
Lalistedecesmodulesestaffichedefaonhirarchiquedansl'explorateurdeprojetsdel'interfaceVBA.

Si l'explorateur de projet n'est pas affich, choisissez l'option Explorateur de projets du menu Affichage ou utilisez le raccourciclavier Ctrl R.
Les modules Microsoft Access Objets de classe contiennent les procdures vnementielles associes aux
formulairesettats.
Lesmodulesstandards (ou modules) sont composs d'une ou de plusieurs procdures pouvant tre appeles
endenombreusescirconstancespartirdesdiffrentsmodules.
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 procdures "utilitaires" pouvant tre utilises par diffrentes
applications (ex : traitement des dates). Ces modules pourront ensuite tre exports dans d'autres bases Access partir de l'option
Exporter un fichier du menu Fichier.
Lesmodulesdeclasseindpendantssontutilisslorsdelacrationdeclassesd'objets.Laprogrammation
based'objetsseradtailledanslechapitreObjetsetcollections.
LeslmentsdulangageVisualBasicdcritsdanscechapitrepeuventtreutilissdanslesdiffrentsmodules.

ENI Editions - All rigths reserved

- 1-

Lesprocdures
Les procdures sont des sousprogrammes qui permettent de dcomposer une tche de programmation
complexeenunesuitedetchespluspetitesetplussimples.
Elles permettent d'organiser le code l'intrieur des modules afin d'obtenir un code plus facile maintenir et
facilementrutilisable.
DansVBAAccess2007,ilexistetroistypesdeprocdures:

- les procdures Sub (pour sub routine) appeles sousprogrammes,


- les procdures Function appeles fonctions,
- les procdures Property appeles procdures de proprit.
Dans ce chapitre, nous utiliserons uniquement les procdures Sub et Function qui sont les plus courantes (les
procduresdepropritserontprsentesdanslechapitre Objetsetcollections).
Ilexistedespointscommunsentrecesdeuxprocdures :

- elles contiennent des instructions et/ou des mthodes VBA,


- elles acceptent des arguments,
- elles peuvent tre appeles depuis d'autres fonctions ou procdures Sub.
Certainescaractristiquessontspcifiquesauxfonctions:

- elles peuvent retourner des valeurs,


- elles peuvent tre appeles depuis une macro.
LesprocduresSub
IlexistedeuxtypesdeprocduresSub:

- les procdures Sub gnrales


- les procdures Sub vnementielles.
Une procdureSubgnrale est une procdure dclare dans un module standard ou au niveau gnral d'un
moduledeformulaireoud'tat.L'appeld'unetelleprocdureestexplicitementdfinidanslecodeduprogramme.
Exemple
Cette procdure gnrale demande l'utilisateur de confirmer son souhait de quitter l'application, et quitte Access si l'utilisateur
rpond 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 procdureSubvnementielleestuneprocdureassocieunvnementd'unobjet.D'ailleurssonnom
est compos du nom de l'objet activ, suivi du caractre soulign (_) et du nom de l'vnement. L'appel d'une
telleprocdureestimplicite,c'estdirequelaprocduren'estexcutequelorsquel'vnementassocialieu.
Exemple
Cette procdure vnementielle permet d'afficher le formulaire "Employs" lorsque l'utilisateur clique sur un bouton de commande
cmdEmploys.
Private Sub cmdEmploys_Click()
Docmd.OpenForm "Employs"
End Sub
Certaines procdures Sub vnementielles peuvent tre gnres automatiquement partir d'assistants (ex : assistant boutons de
commande).
LesprocduresFunction
Les procduresFunction,pluscourammentappeles fonctions, renvoient une valeur, telle que le rsultat d'un
calcul.Lavaleurretournedoitporterlenomdelafonction.
Ce sont les seules procdures pouvant tre appeles depuis une macro.
Le langage Visual Basic comporte de nombreuses fonctions intgres telles que les fonctions se rapportant aux
dates(day,week,year,format...).
Enplusdecesfonctionsintgres,vouspouvezcrervospropresfonctionspersonnalises.
Exemple
Cette fonction demande l'utilisateur de confirmer son souhait de quitter l'application, et renvoie True si l'utilisateur rpond 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
Dclarationdesprocdures
Syntaxed'uneprocdureSub

[Private | Public | Friend] [Static] Sub NomProc


([liste d'arguments])
<Squences d'instructions>
End Sub
Syntaxed'uneprocdureFunction

[Private | Public | Friend] [Static] Function


NomProc ([liste d'arguments]) [As Type]
<Squences d'instructions>
End Function
PourcreruneprocdureSubouFunction,vousdevezrespecterlestapessuivantes:

- dterminez la porte de la procdure,


- dclarez la procdure en fonction de son type avec le mot cl Sub ou Function, suivi du nom de la procdure,

- 2-

ENI Editions - All rigths reserved

- dfinissez les arguments que vous voulez passer en paramtres la procdure en les indiquant entre parenthses aprs le nom
de la procdure,

- s'il s'agit d'une fonction, prcisez ventuellement le type de la valeur retourne aprs le mot cl As,
- rdigez le code permettant d'effectuer le traitement souhait. Utilisez ventuellement Exit Sub ou Exit Function pour sortir de
la procdure. S'il s'agit d'une fonction, affectez le rsultat au nom de la fonction,

- terminez la procdure par End Sub ou End Function.


Portedesprocdures
Laported'uneprocduredfinitl'tenduedesonutilisation.
Uneprocdurepublique(dclareaveclemotclPublic)peuttreappeledepuistoutmodule,touteprocdure
vnementielleoutoutemacrodelabasededonnes.
Uneprocdure prive(dclareaveclemotcl Private)nepeuttreappelequedepuisuneprocdureausein
dummemodule.
LaprocdureFriendestutiliseuniquementdanslesmodulesdeclasse.
LemotclStaticindiquequelesvariableslocalesdelaprocduresontprservesentrelesappels.
Enl'absencedesmentionsPublic,PrivateouFriend,lesprocduressontpubliquespardfaut.
Argumentsdesprocdures
Les arguments sont utiliss pour transmettre aux procdures des paramtres sous forme de donnes. Le nombre
d'argumentspeutvarierdezroplusieurs.
Pour dclarer un argument, vous pouvez simplement spcifier son nom. Nanmoins, la syntaxe complte de
dclarationd'unargumentestlasuivante:
[Optional] [ByVal | Byref] [ParamArray]
<variable> [As type]
Optional:indiquequel'argumentestfacultatif.Touslesargumentsfacultatifsdoiventtresituslafindela
listedesargumentsettredetypevariant.
Byval : indique que l'argument est pass par valeur. La procdure accde une copie de la variable sa valeur
initialen'estdoncpasmodifieparlaprocdure.
Byref (option par dfaut):indiquequel'argumentestpassparrfrence.Laprocdurepeutainsiaccder
lavariableproprementditesavaleurrellepeut,decefait,tremodifieparlaprocdure.
ParamArray:utilisuniquementpourledernierargumentdelaliste,indiquequeceluiciestuntableaufacultatif
d'lmentsdetypeVariant.IlnepeuttreutilisaveclesmotsclsByVal,ByRefouOptional.
Variable:prciselenomdel'argument.Pourlesvariablestableau,ilnefautpasprciserlesdimensions.
Type:prciseletypededonnesdel'argumentpasslaprocdure(Byte,Boolean,Integer,Long...).
Lesargumentsnomms
Lepassaged'argumentsuneprocdureentenantcomptedeleurordred'apparitionestparfoisdifficilemettre
enuvre,notammentlorsquecertainsparamtressontfacultatifs.Demme,lalisibilitdesappelsdeprocdures
comportantplusieursparamtresn'estpastoujoursvidente.
Les arguments nomms facilitent le passage des arguments en prsentant les avantages suivants :

ENI Editions - All rigths reserved

- 3-

- l'ordre des arguments nomms n'a pas d'importance,


- les arguments facultatifs peuvent tre omis.
Lasyntaxedesargumentsnommsest :
NomArgument := Valeur
Exemple
If MsgBox("Voulez-vous quitter l'application ?", _
vbYesNo + vbQuestion, "Gestion des ventes") = vbYes Then
Application.Quit
End If
peut tre transform en :
If MsgBox(Prompt:="Voulez-vous quitter l'application ?", _
Buttons:=vbYesNo + vbQuestion, _
Title:="Gestion des ventes") = vbYes Then
Application.Quit
End If
De mme l'ordre des paramtres peut tre modifi:
If MsgBox(Prompt:="Voulez-vous quitter l'application ?", _
Title:="Gestion des ventes", _
Buttons:=vbYesNo + vbQuestion) = vbYes Then
Application.Quit
End If
Appeld'uneprocdure
Syntaxe

[Call] NomProc [liste d'arguments]


SilemotclCallestindiqu,vousdevezplacerlalisted'argumentsentreparenthses.
Pourstockerlersultatd'unefonctiondansunevariable,utilisezlasyntaxesuivante:
<variable> = NomProc ( [liste d'arguments] )
Exemplesdeprocdures
Lorsquel'utilisateurcliquesurleboutondecommandecmdCalculduformulairedesaisied'unefacture,lemontant
delaremisedoittrecalculdelafaonsuivante:

- 5% du montant de la facture si celuici est suprieur ou gal 5000,


- 2% du montant de la facture si celuici est compris entre 1000 et 5000,
- 0 si le montant de la facture est infrieur 1000.
Procdurevnementielle

Private Sub cmdCalcul_Click()


txtMntRem = Remise (txtMntFact)
End Sub
La fonction Remise est appele, avec comme argument, le montant de la facture (contenu dans la zone de texte txtMntFact du
formulaire). La remise calcule sera directement affiche 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 infrieur 1000, Remise conserve sa valeur initiale, soit zro.
LafonctionMsgBox
Cettefonctionafficheunmessagedansunebotededialogue,ventuellementaccompagnd'uneicneetdeun
troisboutons.
Syntaxedel'instruction
Utiliselorsqu'iln'yaqu'unseulbouton.
MsgBox <message> [, [<type>][, <titre>]]
Syntaxedelafonction
Utiliselorsqu'ilyaplusd'unbouton.Ellepermetdesavoirquelboutonatactivgrcesavaleurderetour.
MsgBox (<message> , [<boutons>][, <titre>]
[,helpfile, context])
message :Textedumessagedanslabotededialogue.
boutons : Expression numrique qui reprsente la somme des valeurs spcifiant les boutons afficher, le style
d'icneutiliser,l'identitduboutonpardfaut,ainsiquelamodalit.
titre:Textedanslabarredetitre.
helpfile:Fichierd'aideutiliser.
Context:Rubriquedel'aideconcerne.
Valeursdel'argumentBoutons
Constante
symbolique

Valeur

Signification

Nombreettypedeboutons
vbOKOnly

AfficheleboutonOKuniquement.

vbOKCancel

AffichelesboutonsOKetAnnuler.

vbAbortRetryIgnore

Affiche les boutons Abandonner,


RecommenceretIgnorer.

vbYesNoCancel

Affiche les boutons Oui, Non et


Annuler.

vbYesNo

AffichelesboutonsOuietNon.

vbRetryCancel

Affiche les boutons Recommencer et


Annuler.

vbMsgBoxHelpButton

16384

Afficheunboutond'aide.

Typed'icne

ENI Editions - All rigths reserved

- 5-

vbCritical

16

vbQuestion

32

vbExclamation

Affichel'icne

Affichel'icne

48

vbInformation

Affichel'icne

Affichel'icne

64
Boutonpardfaut

vbDefaultButton1

Premierbouton.

vbDefaultButton2

256

Deuximebouton.

vbDefaultButton3

512

Troisimebouton.

vbDefaultButton4

768

Quatrimebouton.

Modalit
vbApplicationModal

Applicationmodale.
L'utilisateur doit rpondre au message
affich dans la zone de message avant
de pouvoir continuer travailler dans
l'applicationencours.

vbSystemModal

4096

Systmemodal.
Toutes
les
applications
sont
interrompues jusqu' ce que l'utilisateur
rponde au message affich dans la
zonedemessage.

Prsentation
vbMsgBoxHelpButton

16384

Ajoute le bouton "Aide" la zone de


message.

vbMsgBoxSetForeground

65536

Affiche la fentre message au premier


plan.

vbMsgBoxRight

524288

Aligneletextedroite.

vbMsgBoxRtlReading

1048576

Dfinit un ordre de lecture de droite


gauche pour les systmes hbreux et
arabes.

Lesvaleursderetourpossiblessontgalementdfiniespardesconstantes :
Constante

Valeurderetour

Boutonchoisi

vbOK

OK

vbCancel

Annuler

vbAbort

Abandonner

vbRetry

Recommencer

vbIgnore

Ignorer

vbYes

Oui

vbNo

Non

Exemples: 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 "Rsultat faux",vbCritical,"Erreur"

ENI Editions - All rigths reserved

- 7-

Lesvariables
Lestypesdevariables
Lesvariablespermettentdestockerdesvaleursintermdiairestoutmomentdel'excutionducodeVBAafinde
lesexploiterultrieurementpoureffectuerdescalculs,descomparaisons,destests
Les variables sont identifies par un nom, permettant de faire rfrence la valeur qu'elles contiennent, et un
typedterminantlanaturedesdonnesqu'ellespeuventstocker.
Numriques

>
Type

tendue

Taille
en
octets

Byte

0255

Integer
(entier)

3276832767

Long
(entierlong)

2147483648
2147483647

Single
(relsimple

virgule
flottante)

3,402823E381,401298E45
(valeursngatives)
1,401298E453,402823E38
(valeurspositives)

Double
(reldouble

virgule
flottante)

1,79769313486231E308
4,94065645841247E324
(valeursngatives)
4,94065645841247E324
1,79769313486231E308
(valeurspositives)

Currency
(montaire
virgulefixe)

922337203685477,5808
922337203685477,5807

Decimal

+/79 228 162 514 264 337 593 543950 335


sanssparateurdcimal
+/7,9228162514264337593543950335
avec 28 chiffres droite du sparateur
dcimal le plus petit nombre diffrent de zro
est+/0.0000000000000000000000000001

12

Chanesdecaractres

LetypeestString.Ilexistedeuxtypesdechanes:

- les chanes de longueur variable peuvent contenir environ 2 milliards (231) de caractres.
- Les chanes de longueur fixe peuvent contenir de 1 environ 64000 (216) caractres.
Exemple
'Chane de longueur variable
Dim Adresse As String
'Chane de longueur fixe (20 caractres)
Dim Nom As String * 20
Boolen

ENI Editions - All rigths reserved

- 1-

Letypeest Boolean.LavariablepeutprendrelavaleurTrue(Vrai)ouFalse(Faux)quiestsavaleurpardfaut.
Elleoccupedeuxoctets.
Date

Le type est Date. La variable peut prendre les valeurs de date et d'heure du 1er janvier 100 au 31 dcembre
9999.Elleoccupehuitoctets.
Variant

Letypeest Variant.Lavariablepermetdestockerdesvaleursdedonnesdetoutessortes:dates,nombres
virgule flottante, chanes de caractres, rfrences des objets... Elle occupe seize octets, plus un octet par
caractresilavaleurestunechane.
Objet

Le type est Object. La variable permet de stocker la rfrence un objet sous forme d'une adresse de quatre
octets.
C'estuntypegnrique,maispourobtenirdesperformancessuprieures,ilestsouhaitabled'utiliserpluttlenom
del'objettelqu'ilestdfinidanslazoneClassesdel'explorateurd'objets.
Exemple
Ouverture de base de donnes Access en utilisant le type gnrique Objet ou partir de l'objet Database.
Dim dbsEmp As Object
Dim dbsArt As Database
Set dbsEmp = OpenDatabase("C:\Application\" _
& "Employs.accdb")
Set dbsArt = OpenDatabase("C:\Application\" _
& "Articles.accdb")
Dfiniparl'utilisateur

Ce type est utilis surtout pour la dclaration de variables contenant plusieurs types d'informations. La dfinition
dutypenepeutsefairequedanslasectiondedclarationd'unmodule.
Exemples
Dclaration d'un nouveau type Employs :
Public Type Employs
Matricule As String * 5
Nom As String * 20
Age As Integer
Service As String * 10
End Type
Utilisation du type Employs :
Dim NewEmploy As Employs
NewEmploy.Matricule = "15253"
...
Lesdclarationsdevariables
Ilexistedeuxfaonsdedclarerdesvariables:implicitementetexplicitement.
Dclarationimplicite

Ds que VBA rencontre une variable qui n'a pas fait l'objet d'une dclaration explicite, il la dclare de faon
impliciteenluidonnantuntypeVariant.

- 2-

ENI Editions - All rigths reserved

Le type Variant permet de stocker successivement dans la mme variable des valeurs de type diffrent. Le type
delavariablevolueenfonctiondelavaleurquiluiestaffecte.
Private Sub Affectation()
' Le type de la variable devient String
var = "Bonjour"
MsgBox TypeName(var)
' Le type de la variable devient Integer
var = 12
MsgBox TypeName(var)
' Le type de la variable devient Double
var = 6.55957
MsgBox TypeName(var)
' Le type de la variable devient Boolean
var = True
MsgBox TypeName(var)
End Sub
Dclarationexplicite

Lavariableestdclareavantsonutilisation.
Ilestpossibled'imposerladclarationexplicitedesvariablesenutilisantdanslasectiondedclarationdechaque
module, l'instructionOptionExplicit.PourquecetteinstructionsoitdfiniepardfautdansVBA,activezl'option
DclarationdesvariablesobligatoiredumenuOutilsOptionsongletditeur.
Les dclarations explicites de variables peuvent se faire dans la section de dclarations des modules, ou dans le
corpsd'uneprocdureoud'unefonction.
Ladclarationestraliseparl'unedesquatreinstructionssuivantesutilisantlammesyntaxe:

- au niveau d'une procdure, 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]
chaquefoisquel'instructionDimestexcute,lavariableestrinitialise(0pournumrique,videpourString,
EmptypourVariant).S'ilestncessairedegarderlaprcdentevaleur,ilfaututiliserStaticlaplacedeDim.
Si aucun type n'est prcis (ex : dim var), le type par dfaut Variant est affect la variable.
Laportedesvariables
Une variable est dite locale une fonction ou une procdure, si elle est dclare dans le corps de la fonction
oudelaprocdureavec Dimou Static.Cettevariablen'estpasconnue(visible)endehorsdelafonctionoude
laprocdure.
Une variable peut tre visible de toutes les procdures ou fonctions d'un module (standard, de classe, formulaire
outat),sielleestdclaredanslasectiondedclarationdumoduleavecPrivate(ouDim).
Unevariableest publiquetoutel'application(c'estdirevisibledepuisn'importequelendroitdel'application),
sielleestdclaredanslasectiondedclarationd'unmoduleavecl'instructionPublic.
Pour faire rfrence, 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>
Lestableaux
Untableausedclaredelammefaonquelesvariables,avecdesinstructionsDim,Static,PrivateouPublic.
Un tableau est une variable comportant plusieurs compartiments permettant de stocker autant de valeurs. Par
opposition,unevariableclassiquedsigneuncompartimentdestinuneseulevaleur.
On peut faire rfrence au tableau globalement ou accder individuellement ses lments en utilisant des
indices.
Quel que soit le type des lments, un tableau ncessite 20 octets de mmoire, auxquels viennent s'ajouter
quatreoctetspourchaquedimensionetlenombred'octetsoccupsparlesdonnes.
Siletypededonnesn'estpasspcifi,leslmentsdutableaudclarprennentletypeVariant.
Le premier poste d'un tableau se voit attribuer l'indice 0 par dfaut. Toutefois, il est possible de mettre cette
valeurpardfaut1enutilisant,ensectiondedclaration,l'instructionOptionBase1.
L'utilisationd'uneclauseTopermetgalementdedfinirexplicitementlesindicesdedbutetdefin.
Exemples
Dclaration de diffrents tableaux:
' 12 lments indics de 0 11
Dim Remise (11) As Single
' 12 lments indics de 1 12
Dim Frais (1 To 12) As Single
' 2 dimensions : la premire indice de 0 10 et
' la seconde de 1 15
Dim Train (10,1 To 15) As String
Option Base 1
' 12 lments indics de 1 12
Dim Frais (12)
Utilisation d'un tableau deux dimensions.
L'exemple suivant permet de crer une table de multiplication : chaque lment du tableau Multiplie est gal au rsultat de la
multiplication de ses indices. Chaque ligne de la table est affiche dans la fentre excution (mthode Print de l'objet Debug).
Sub
Dim
Dim
Dim

Affiche_Tableau()
Multiplie(1 To 10, 1 To 10) As Integer
i, j As Integer
strResult As String

' 1re ligne de la table de multiplication


For i = 1 To 10
strResult = Format(i, "000") & " "
Next i
Debug.Print strResult
' Initialisation du tableau
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
' Renvoie le rsultat de 4 * 7
MsgBox "4 * 7 = " & Multiplie(4, 7)
' Renvoie le rsultat de 7 * 4
MsgBox "7 * 4 = " & Multiplie(7, 4)

- 4-

ENI Editions - All rigths reserved

End Sub
Rsultat dans la fentre d'excution.

Lestableauxdynamiques

Il s'agit de tableaux dont les dimensions sont dfinies l'excution. Ils permettent l'optimisation de la place
occupeenmmoire.
Dclaration :
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 ncessaire. Par
dfaut,lesvaleursprsentesdansletableausontcrases.L'instructionReDim Preservepermetd'tendreun
tableautoutenconservantlesvaleursexistantes.
ReDim Preserve Tableau (15 To 70)
Lesconstantes
Uneconstantereprsenteunevaleurnumriqueoudetypechanequinedoitpastremodifie.
L'instruction Constpermetdedclareruneconstanteetdedfinirsavaleurfixe.Unefoisdclare,laconstante
nepeuttremodifienirecevoirunenouvellevaleur.
Ladclarationd'uneconstanteestralisedansuneprocdureoudanslasectiondclarationd'unmodule.
Lesconstantesdeniveaumodulesontprivespardfaut.
Pourdclareruneconstantedeniveaumodulepublique,ilestncessairedefaireprcderl'instructionConst du
motclPublic.
Exemple
acForm
vbCurrency
Lesconstantesintrinsques

ENI Editions - All rigths reserved

- 5-

Les constantes intrinsques sont des constantes mises disposition par les applications ellesmmes. C'est ainsi
qu'Access2003possdesespropresconstantesintrinsquesquisontvisiblespartirdel'explorateurd'objets.
UneconstanteintrinsquepeuttreutilisedansunemacrooudansducodeVisualBasic.
Les constantes intrinsques sont caractrises par un prfixe de deux lettres identifiant la bibliothque d'objets
oestdfinielaconstante.
Prfixedesconstante
Bibliothque

Prfixe

Exemples

Microsoft
Access

ac

acForm,acNormal

VisualBasic

vb

vbCurrency,
vbYellow

Microsoft
Office

mso

msoSortByFileName

Les constantes de la bibliothque Visual Basic sont dcrites dans l'annexe B de cet ouvrage. Pour utiliser les constantes de Microsoft
Office, vous devez slectionner la rfrence "Microsoft Office 12.0 Object Library" (option Rfrences du menu Outils).
Il existe plusieurs catgories de constantes intrinsques (constantes d'action, constantes de procdures vnementielles...).
Exemple
L'exemple suivant montre comment afficher un formulaire et le personnaliser. Il utilise les constantes strNomAppli et strNomSoc
dclares dans le code et plusieurs constantes intrinsques.

Rsultat dans Access : affichage du formulaire employ personnalis.

- 6-

ENI Editions - All rigths reserved

ENI Editions - All rigths reserved

- 7-

Lesstructuresdedcision
Ilestsouventncessairedetesterdesconditionsspcifiquesavantd'excuterdesinstructions.
Les structures de dcisions, appeles aussi alternatives ou branchements conditionnels, permettent, au terme
d'unevaluation,d'opterpourunblocdecodeouunautre.
Ondistinguedeuxinstructionsdebranchementconditionnel :

- If ... Then ... Else


- Select ... Case
La fonction IIf peut galement tre utilise pour dfinir une valeur en fonction d'une condition.
L'instructionIF

If
Permetd'excuterdesinstructionsenfonctiondursultatd'unecondition.
LesinstructionsIf...Then...Elsepeuventtreimbriquesautantdefoisquencessaire.

La syntaxe multiligne, avec une indentation approprie, prsente l'avantage d'une plus grande lisibilit.
Syntaxe1(suruneligne)
If <cond.> Then <inst.> [Else <inst.>]
<inst.>peuttreconstitudeplusieursinstructionssparesparlecaractre(:).
Syntaxe2(surplusieurslignes)
If <condition 1> Then
<squence d'instructions 1>
[ElseIf <condition 2> Then
<squence d'instructions 2>]
[Else
<squence d'instructions 3>]
End If
Autrepossibilit
If <condition 1> Then
<squence d'instructions 1>
[Else
If <condition 2> Then
<squence d'instructions 2>
[Else
<squence d'instructions 3>]
End If]
End If
Exemple
Affiche le rsultat 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'instructionSelectCase

Select Case
Excutedessquencesd'instructionsspcifiesenfonctiondelavaleurd'uneexpression.
L'instructionSelectCasepermetderemplaceravantageusementleElseIfdansdesinstructionsIf...Then...Else
lorsdelacomparaisonentreuneexpressionetplusieursvaleurs.
Syntaxe

Select Case <expression tester>


[Case <liste d'expressions 1>
<squence d'instructions 1>]
[Case <liste d'expressions 2>
<squence d'instructions 2>]
[Case Else
<squence d'instructions 3>]
End Select
<liste d'expression>peutprendrelesformessuivantes:

- 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 temprature.
Select Case Temprature
Case 0
MsgBox "Glace"
Case 1 To 10
MsgBox "Froid"
Case 11 To 16
MsgBox "Frais"
Case 17, 18, 19
MsgBox "Temprature intrieure " _
& "d'une maison en hiver"
Case 20 To 25
MsgBox "Agrable"
Case Is > 25
MsgBox "Chaud"
Case Else
MsgBox "Temprature non refrence"
End Select
LafonctionIIf

IIf
Retourneunevaleurenfonctiond'unecondition.
Syntaxe

IIf (<condition>, <valeur si vrai>, <valeur si faux>)


- 2-

ENI Editions - All rigths reserved

Exemple
Dim bln As Boolean
bln = IIf(A = B, True, False)
Ilestpossibled'imbriquerplusieursappelsdefonctionIIf.
Exemple
Dim IntI As Integer
IntI = IIf(A = B, IIf(B = C, 1, 0), 0)

ENI Editions - All rigths reserved

- 3-

Lesstructuresenboucles
Lesstructuresenboucles(ourptitives)permettentderpterl'excutiond'unensembled'instructions.
Ondistingueplusieurstypesdestructuresenboucles:
Do...Loop
While...Wend
For...Next
For Each...Next
Do...LoopetWhile...Wendrptentuntraitementjusqu'cequ'unecertaineconditionsoitralise.
For...Nexteffectueuntraitementunnombredefoisdonn,enfonctiond'uncompteur.
ForEach...Nextpermetdeparcourirleslmentsd'unecollection.
L'instructionDo...Loop

Do...Loop
Excute une squence d'instructions tant que (While) ou jusqu' ce que (Until) la condition spcifie soit
vrifie.
Syntaxe1
Squenced'instructionsventuellementnonexcute(conditiontesteavantlasquence).

Do [{While | Until} <condition>]


<squence d'instructions>
[Exit Do]
[<squence d'instructions>]
Loop
Syntaxe2
Squenced'instructionsexcuteaumoinsunefois(conditiontesteaprslasquence).
Do
<squence d'instructions>
[Exit Do]
[<squence d'instructions>]
Loop [{While | Until} <condition>]
Exit Do est souvent utilis aprs l'valuation d'une condition interne la boucle et permet de sortir de la boucle sans que la condition
de contrle de la boucle ne soit vrifie.
Exemple
Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargs antrieurement.
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'instructionWhile...Wend

While...Wend
Excuteunesquenced'instructionstantquelaconditionspcifieestvrifie.
Syntaxe

While <condition>
<squence d'instructions>
Wend
Exemple
Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargs antrieurement.
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'instructionFor...Next

For...Next
Permetderpterl'excutiond'unesquenced'instructionsenfonctiond'uncompteur.
Syntaxe

For <compteur> = <dbut> To <fin> [Step <incrment>]


<squence d'instructions>
[Exit For]
<squence d'instructions>
Next [<compteur> [,<compteur2>] [, ...]]
Exit For souvent place aprs l'valuation d'une condition, permet de sortir prcocement de la boucle.
Exemple
Calcule et affiche le montant des frais annuels en fonction d'un tableau (FraisMensuel) de douze postes chargs antrieurement.
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
LemotclSteppermetd'incrmenteroudedcrmenterlavariabledecompteurd'unpasspcifi.
Exemple
La variable de compteur j est incrmente de 5 chaque itration. 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'instructionForEach...Next

For Each ... Next


Permetdeparcourirtousleslmentsd'untableauoud'unecollection.
Syntaxe

For Each <lment> In <tableau>/<collection>


<squence d'instructions>
[Exit For]
<squence d'instructions>
Next [lment]
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-

Lesoprateurs
Les oprateurs permettent d'effectuer des oprations arithmtiques sur des variables et/ou des constantes, de
comparerdesvariablesentreelles,detesterplusieursconditions...
Ondistingueplusieurscatgoriesd'oprateurs:

- les oprateurs arithmtiques,


- les oprateurs de comparaison,
- les oprateurs logiques,
- l'oprateur de concatnation.
L'oprateur d'affectation est le signe d'galit. La valeur de l'expression situe droite du signe gal est affecte la variable situe
gauche du signe. (exemple : IntA = 12, 12 est affect la variable IntA, IntA = IntB * 12, la valeur d'IntB multiplie par 12 est affecte
IntA).
Lesoprateursarithmtiques
Ilspermettentd'effectuerdescalculsarithmtiquespartirdevariableset/oudeconstantesnumriques.
Oprateur

Calculralis

Addition

Soustraction

Divisionaveccommersultatunnombrevirguleflottante

Mod

Restedeladivisiondedeuxnombres

Divisionaveccommersultatunnombreentier

Multiplication

lvationlapuissance

Lesoprateursdecomparaison
Ilspermettentdecomparerdeuxvaleursnumriquesoudeuxchanesdecaractres.
Oprateur

Calculralis

<

Infrieur

<=

Infrieurougal

>

Suprieur

>=

Suprieurougal

gal

<>

Diffrentde

L'instructionOptioncompareutiliseauniveaumodulepermetdedfinirlamthodedecomparaisonpardfaut

ENI Editions - All rigths reserved

- 1-

qu'ilconvientd'utiliserlorsdelacomparaisondechanesdecaractres.Ellepeutprendretroisvaleurs:
CompareBinary
(option par dfaut) fournit des comparaisons de chanes bases sur un ordre de tri driv de la reprsentation
binaireinternedescaractres :
A<B<E<Z<a<b<e<z<<<<<...
CompareText
fournit des comparaisons de chanes bases sur un ordre de tri qui ne distingue pas les majuscules des
minuscules:
(A=a)<(=)<(B=b)<(E=e)<(=)<(Z=z)<(=)...
CompareDatabase
fournit des comparaisons de chanes bases sur l'ordre de tri dtermin par l'identificateur de paramtres
rgionauxdelabasededonnescourante.
Lesoprateurslogiques
Ilspermettentdetestersimultanmentdeux(ouplusieurs)valeursboolennesouexpressionsrenvoyantcetype
valeur.Ilssontgnralementutilissavecl'instructionIf.
Oprateur

Calculralis

And
Si toutes les expressions ont la valeur True, le rsultat est True. Si l'une des expressions a la
valeurFalse,lersultatestFalse.
Or

Sil'uneaumoinsdesexpressionsapourvaleurTrue,lersultatestTrue(ouinclusif).

Xor

SiuneetuneseuledesexpressionsapourvaleurTrue,lersultatestTrue(ouexclusif).

Not

Renvoielecontrairedel'expression.

Eqv

RenvoieTruesilesdeuxexpressionssontidentiques.

Exemple
(A>=1)And(A<=9)renvoieTruesiAestcomprisentre1et9,
Not(A>=10)renvoieTruesiAeststrictementinfrieur10,
(A>0)Or(B>0)Or(C>0)renvoieTruesiaumoinsl'unedesvaleursestpositive.
L'oprateurdeconcatnation
L'oprateurdeconcatnationestlesigne&.Ilpermetd'assemblerdeschanesdecaractres,desvaleursetdes
expressions.Lersultatestunechanedecaractres.
Exemple
Concatnation du nom et du prnom spars par un espace:
StrNomPre = Nom & " " & Prenom
Prioritdesoprateurs
Lorsque plusieurs oprateurs sont contenus dans une mme expression, chacun est valu dans un ordre
prdfini,appelprioritdesoprateurs.
- 2-

ENI Editions - All rigths reserved

Les oprateurs sont valus dans l'ordre suivant : oprateurs arithmtiques, oprateurs de comparaison,
oprateurs logiques. Les oprateurs de comparaison ont la mme priorit c'estdire qu'ils sont valus dans
leurordred'apparition,degauchedroite.
Lesoprateursarithmtiquesetlogiquessontvalusdansl'ordredeprioritcidessous(prioritdcroissantede
gauchedroite):
Arithmtique :^,*,/,Mod,+,
Logique :Not,And,Or,Xor,Eqv
Exemple
L'expression "3 + 4 * 5" donne comme rsultat 23. La multiplication (4*5) est effectue avant l'addition ( + 3):
L'utilisation de parenthses permet de modifier l'ordre de priorit afin qu'un lment d'une expression soit valu avant les autres. Les
oprations situes l'intrieur de parenthses sont toujours traites avant les autres. Exemple : l'expression "(3 + 4) * 5" renvoie 35.
L'addition est effectue en priorit. Il est conseill d'utiliser des parenthses pour une meilleure lisibilit du code.

ENI Editions - All rigths reserved

- 3-

Lesrglesd'critureducode
Lescommentaires
Lescommentairespermettentdedocumenterunprogrammeafindelerendrepluslisible.
Syntaxe
Rem <commentaire>
ou
'<commentaire>
Exemple
'=======================================================================
Rem Procdure permettant de comparer deux zones
Rem de texte txtA et txtB
'=======================================================================
Private Sub cmdRsultat_Click ()
'si txtA suprieur txtB
If txtA > txtB Then
lblRsultat.Caption = "A>B"
Else
'si txtA gal txtB
If txtA = txtB Then
lblRsultat.Caption = "A=B"
Else
'txtA infrieur txtB
lblRsultat.Caption = "A<B"
End If
End If
End Sub
Lecaractredecontinuation
UneinstructionVBApeuttrecritesurplusieurslignesenutilisantuncaractredecontinuation:lecaractre
desoulignement(_)prcdd'unespace.
Exemple
If A _
> _
b then _
Bien sr, cet exemple n'est pas digne d'une programmation structure, mais il met en vidence le fait qu'il est
possibledescinderunelignedecoden'importequelendroit.
L'indentation
Il est important d'aligner sur le mme retrait les instructions de mme niveau. L'entteetlepieddeprocdure
tantalignsgauche,lecontenudoittredcald'uncrandroitel'aided'unetabulation.
Cesindentationsarentlastructuredelaprocdurequidevientainsipluslisible.
Lesnomsdesprocdures,variablesetconstantes
Lesnomsdesprocdures,variablesetconstantesdoiventrespecterlesrglessuivantes:

- ils doivent commencer par une lettre.


- Ils ne doivent pas contenir plus de 255 caractres.
ENI Editions - All rigths reserved

- 1-

- Ils peuvent tre composs de lettres, de chiffres et du caractre "blanc soulign"(_).


- Ils ne peuvent comprendre ni caractres de ponctuation ni espaces.
- Ils ne doivent pas correspondre des mots rservs.
- Ils doivent tre uniques l'intrieur d'une mme porte.
Exemples
Nbclient
Nb_client
Nbclient1

- 2-

ENI Editions - All rigths reserved

Lesconventionsd'appellation
Il est recommand d'utiliser des conventions d'appellation pour les variables, les contrles et les objets. Elles
permettent de standardiser le code et par consquent de le rendre plus lisible et plus facile maintenir par
diffrentsdveloppeurs.
Conventiond'appellationdesvariables
Ilestrecommandd'utiliserdeuxprfixes:

- le premier pour prciser la porte de la variable : g pour globale, m pour module, aucun prfixe pour locale,
- le deuxime pour prciser son type.
Exemple
variable globale de type String

gstrNom
intQuantit

variable locale de type Integer

Typedevariable

Prfixe

Boolen

bln

Byte

byt

Currency

cur

Date,heure

dtm

Double

dbl

Error

err

Typedevariable

Prfixe

Integer

int

Long

lng

Object

obj

Single

sng

String

str

Dfiniparl'utilisateur

udt

Variant

var

Conventiond'appellationdescontrles
Delammefaonquepourlesvariables,lesnomsdecontrlesdesformulairesetdestatsdoiventtreprfixs
selonleurtype.
Contrle

Prfixe

DonnesADO

ado

ENI Editions - All rigths reserved

- 1-

Casecocher

chk

Zonedelistemodifiable(combo) cbo
Boutondecommande

cmd

Cadre(frame)

fra

Grouped'option

grp

Image

img

tiquette

lbl

Boutond'option

opt

Zonedetexte

txt

Conventiond'appellationdesobjets
LesobjetsAccessoulesvariablesobjetsserapportantauxobjetsAccesspeuventaussitreprfixs.
Contrle

Prfixe

Table

tbl

Requte

qry

Formulaire

frm

tat

rpt

Macro

mac

Index

idx

Champ

fld

Collection

col

Proprit

pty

Pagesd'accsauxdonnes

pag

- 2-

ENI Editions - All rigths reserved

Prsentation
VBA Access est un langage de programmation orient objet, mme s'il ne dispose pas de toutes les
fonctionnalitsdeslangagesdecetype.
LaplupartdeslmentsmanipulsdansAccesssontdesobjets:lestables,leschamps,lesenregistrements,les
formulaires...
Les objets sont organiss selon un modle hirarchique : certains objets contiennent des objets qui en
contiennent euxmmes d'autres... Par exemple, l'objet Application est compos de plusieurs objets Form
(formulaires de l'application), qui sont euxmmes composs de plusieurs objets Control (contrles d'un
formulaires).
Unensembled'objetsdemmenatureconstitueunecollection(collection Forms:ensembledesformulairesou
objetsFormdel'application).
Un objet dispose d'un ensemble de caractristiques appeles proprits (ex : taille, couleur pour un contrle
dans un formulaire...) et de comportements ou actions appeles mthodes (ex : la mthode close de l'objet
Formulaire permet de fermer celuici). Il rpond des vnements provoqus par l'utilisateur (ex : clic sur un
boutondecommande)ouparlesystme.
Les classes sont des modles permettant de crer des objets de mme nature. Les objets issus d'une mme
classe hritent systmatiquement de toutes les mthodes, proprits et vnements de leur classe d'origine. Il
estpossibledecrerdesclassesd'objetsavecVBAAccessenutilisantdesmodulesdeclasse.
Ilexisteplusieursensemblesd'objetsdansAccess:

- les objets gnraux (formulaires, tats ...),


- les objets d'accs aux donnes (modle DAO),
- les objets de donnes ActiveX (modle DAO).
Chaque ensemble peut tre reprsent sous forme d'un modle hirarchique. Ce chapitre dcrit plus
particulirement les objets gnraux d'Access, les objets d'accs aux donnes seront abords dans le chapitre
suivant.

ENI Editions - All rigths reserved

- 1-

Lemodleobjetd'Access
Lediagrammeciaprspermetdedistinguerlesprincipauxobjetsglobauxd'Access.

Principalescollections

CommandBars

Collection d'objets CommandBar qui reprsentent les


barresdecommandesdel'applicationactive.

COMAddIns

Collection d'objets COMAddIn qui fournissent des


informations sur un complment COM inscrit dans le
RegistreWindows.

Forms

Collection contenant tous les formulaires (objets Form)


ouverts dans la base de donnes active. Pour rpertorier
tous les formulaires de la base de donnes, qu'ils soient
ouverts ou ferms, utilisez la collection AllForms de l'objet

ENI Editions - All rigths reserved

- 1-

CurrentProject.
Reports

Collection contenant tous lestats (objets Report) ouverts


dans la base de donnes active. Pour rpertorier tous les
tatsdelabasededonnes,qu'ilssoientouvertsouferms,
utilisezlacollectionAllReportsdel'objetCurrentProject.

Modules

Collection contenant tous les modules standards et


modulesdeclasseouvertsdanslabasededonnesactive.

References

Collection contenant toutes les rfrences des


bibliothques d'objets appartenant d'autres applications
(fichiersdll,contrlesActiveX...)actuellementslectionnes
(les rfrences sont slectionnes partir de la bote de
dialogueRfrencedumenuOutils).

Printers

Collection contenant les objets Printer reprsentant toutes


lesimprimantesdisponiblessurlesystme.

Autrescollections
DependencyObjects

Collection des objets Access contenus dans un objet


DependencyInfo (informations de dpendance d'un objet
AccessObject). Pour renvoyer une collection Dependency
Objects, utilisez la proprit Dependants ou Dependencies
del'objetDependencyInfo.

AccessObjects
Properties

Collection d'objets AccessObjectsProperty reprsentant


unecaractristiqueintgreoudfinieparl'utilisateurd'un
objetAccessObject(objetAccess).

SmartTags

Collection d'objets SmartTag reprsentant une balise


active associe un contrle dans un formulaire, un
rapportouunepaged'accsauxdonnes.

SmartTagActions

Collectiond'actionspourunebaliseactiveindividuelleou
pouruntypedebaliseactive.Lesactionsdebaliseactive
sont des processus programms dans des balises actives
qui permettent aux utilisateurs d'effectuer certaines
fonctions lies la balise active. Par exemple, pour une
balise active, une action peut consister accder un
site Web, tandis qu'une autre action insre des
informations de contact provenant de MicrosoftOutlook,
et qu'une autre encore affiche une carte et des
instructionsdeconduite.

SmartTagProperties

Collection d'objets SmartTagProperty reprsentant les


proprits lies une balise active. Pour renvoyer la
collection SmartTagProperties d'une balise active, utilisez
lapropritPropertiesdel'objetSmartTag.

ImportExport
Specifications

Collection d'objets contenant toutes les informations dont


Access a besoin pour effectuer automatiquement une
oprationd'importationoud'exportation.

ObjetsduModle

- 2-

AnswerWizard

Objetreprsentantl'aideintuitivedeMicrosoftOffice.

Application

Objet faisant rfrence l'application Microsoft Access


active.

Assistant

Objet reprsentant le Compagnon Office de Microsoft. Vous


pouvez utiliser la proprit Visible pour afficher le
Compagnon,lapropritOnpouractiverleCompagnon,etla
propritFileNamepourmodifierleCompagnon.

AutoCorrect

Objet reprsentant les options de correction automatique


d'Access.

DBEngine

Objet reprsentant le moteur de base de donnes Microsoft


Jet. En tant qu'objet principal la racine de la hirarchie,
l'objet DBEnginecontientetcontrletouslesautresobjets
ENI Editions - All rigths reserved

d'accsauxdonnes.
DependencyInfo

Objet reprsentant les informations de dpendance d'un


objetAccess.

DoCmd

Objet permettant de convertir en Visual Basic des actions


Macro. La plupart des actions macros peuvent tre ainsi
traduitesenVBA.

FileDialog

Objetpermettantd'accderdesfonctionnalitssimilaires
celles des botes de dialogue standards Ouvrir et
Enregistrer.

LanguageSettings

Objet renvoyant des informations sur les paramtres


linguistiquesdel'application.

Screen

Objet permettant d'accder au formulaire, l'tat ou au


contrleactuellementactif.

TempVar

Objet permettant d'changer facilement des donnes entre


desprocduresVBAetdesmacros.

VBE

Objet reprsentant l'diteur Microsoft Visual Basic dition


Applications.

CurrentProject

Objet regroupant plusieurs collections d'objets Access


spcifiques(AllForms:collectiondetouslesformulairesde
labase)...

CurrentData

Objet regroupant plusieurs collections d'objets Access


d'accs aux donnes. (AllTables : collection de toutes les
tablesdelabase)...

ENI Editions - All rigths reserved

- 3-

Principesd'utilisationdesobjetsetdescollections
Lesproprits
Les proprits servent dcrire un objet. Certaines proprits sont en lecture seule et ne peuvent donc pas
tremodifiesparducodeVBA.
Syntaxe
{<objet> | <variable objet>}.<proprit>
Exemple
Dim strVersion As String
' Rcupration de la proprit version
' de l'objet application
' Cette proprit est en lecture seule
strVersion = Application.Version
' Modification du pointeur de la souris
' 0 : pointeur par dfaut - 11 : Sablier
If Screen.MousePointer = 0 Then
Screen.MousePointer = 11
Else
Screen.MousePointer = 0
End If
End Sub
Propritsreprsentantdesobjets
Les objets globaux et les objets instancis dans le code partir de classes fournies par VBA possdent des
propritsdontlavaleurestmisejourautomatiquementparlesystme.
Proprit

De l'objet

Contenu

ActiveControl

Screen

ActiveDataAccessPage

Screen

ActiveForm

Screen

Formulaire actif.

ActiveReport

Screen

tat actif.

Application

Objets multiples

L'objet Application d'Access.

DBEngine

Application

L'objet DBEngine.

Form

Contrle
sous-formulaire

Contrle actif.
Page active ou page contenant le
contrle actif.

Objet Form associ au contrle de


sous-formulaire.

Me

Form ou Report

L'objet Form ou Report dont le code


est en cours d'excution.

Module

Form ou Report

Module de l'objet Form ou Report.

Parent

Objets multiples

Objet ou collection qui contient l'objet.

PreviousControl

Screen

L'objet Control prcdemment actif.

RecordsetClone

Form

Report
Section

Contrle
sous-tat
Form, Report

Un Recordset clone du jeu


d'enregistrements sous-jacent du
formulaire.
Objet Report associ au contrle de
sous-tat.
Section d'un formulaire ou
d'un tat.

Lesmthodes
Lesmthodespermettentd'effectuerdesactionspropresauxobjets.

ENI Editions - All rigths reserved

- 1-

Ellesseprsententcommedesprocdures:

- elles peuvent ou non utiliser des arguments,


- certaines mthodes peuvent renvoyer une valeur au mme titre que les procdures Function, d'autres non au mme titre que
les procdures Sub.
Syntaxedemthodenerenvoyantpasdevaleur
{<objet> | <variable objet>}.<mthode> [<Liste d'arguments>]
Exemple
' Modification de l'option "Compacter lors de la
fermeture"
' Mthode SetOption ne renvoyant pas de valeur
Application.SetOption "Auto Compact", True
Lesdiffrentsargumentsdelamthodedoiventtresparspardesvirgules.Siunargumentfacultatifn'estpas
dfiniexplicitement,lamthodeutiliseraunevaleurpardfaut.
Syntaxedemthoderenvoyantunevaleur
<variable> = {<objet> | <variable objet>}.<mthode>
([<Liste d'arguments>])
Exemple
Private Sub cmdMethodes_Click()
' Variable boolenne
Dim blnCompact As Boolean
' Rcupration de l'option
' "Compacter lors de la fermeture"
' Mthode GetOption renvoyant une valeur boolenne
blnCompact = Application.GetOption("Auto Compact")
' Modification de l'option
' Mthode SetOption ne renvoyant pas de valeur
If blnCompact Then
Application.SetOption "Auto Compact", False
MsgBox "La base ne sera pas compacte lors de la
fermeture", _
vbExclamation
Else
Application.SetOption "Auto Compact", True
MsgBox "La base sera compacte lors de la fermeture", _
vbExclamation
End If
End Sub
Lesvnements
Un vnement est une action spcifique qui se produit sur un objet. Microsoft Access est en mesure de
rpondreplusieurstypesd'vnements :ouvertureoufermeturedeformulaires,clicsdesouris,modificationde
donnes,etc.Lesvnementsrsultentgnralementd'uneactiondel'utilisateur.
L'utilisation d'une procdure vnementielle vous permet d'associer votre propre code en rponse un
vnementquiseproduitdansunformulaire,untat,uncontrle...
Exemple
Lorsque l'utilisateur clique sur le bouton de commande "Quitter", une bote de dialogue demandant une confirmation est affiche.
Private Sub cmdQuitter_Click()
' Demande l'utilisateur de confirmer

- 2-

ENI Editions - All rigths reserved

' son souhait de quitter l'application


If MsgBox("Voulez-vous quitter l'application ?", _
vbQuestion + vbYesNo) = vbYes Then
DoCmd.Quit
End If
End Sub
La gestion des vnements tant l'un des aspects les plus importants dans le dveloppement d'applications Access, le chapitre
Gestion des vnements est entirement consacr ce sujet.
Lescollections
Pourfairerfrenceunobjetd'unecollection,vouspouvezutiliserl'unedessyntaxessuivantes:
NomCollection!NomObjet
NomCollection![NomObjet]
NomCollection("NomObjet")
NomCollection(var)
ovarreprsenteunevariabledetypestringcontenantlenomdel'objet.
NomCollection(index)
oindexreprsentelenumrod'indexdel'objetdanslacollection.
Afin d'assurer une meilleure lisibilit du code, il est conseill d'utiliser toujours la mme syntaxe. Les 3ime et 5ime syntaxes sont
recommandes car elles permettent d'activer l'assistant de l'diteur de code. De plus la syntaxe 5 est trs utile pour parcourir les
objets d'une collection.
Attention le premier lment de la plupart des collections a pour index 0. N'utilisez les index que pour parcourir une collection. vitez
par exemple Me.controls(5) pour faire rfrence un contrle car l'index du contrle peut changer si le formulaire est modifi.
Exemple
Private Sub cmdCollections_Click()
Dim ctl As Control
Dim intI As Integer
' Ouvre le formulaire "Employes"
' et le masque (proprit Visible)
DoCmd.OpenForm "Employes"
Forms("Employes").Visible = False
' Fait rfrence au contrle Prnom
' du Formulaire "Employes"
' Collections Forms et Controls
MsgBox Forms("Employes").Controls("Prnom").Value
MsgBox Forms!Employes.Controls![Prnom].Value
' Date de cration d'une table de la base courante
' Collections AllTables
MsgBox CurrentData.AllTables![Employes].DateCreated
MsgBox CurrentData.AllTables("Employes").DateCreated
MsgBox CurrentData.AllTables(0).DateCreated
' Modifie la police et de la couleur de tous les
contrles
' "zones de texte" du formulaire
For intI = 0 To Forms("Employes").Controls.Count - 1
Set ctl = Forms("Employes").Controls(intI)
If TypeOf ctl Is TextBox Then
ctl.ForeColor = vbRed
ctl.FontItalic = True
ctl.FontBold = True
End If
Next intI
' Affiche le formulaire
Forms("Employes").Visible = True
End Sub
Collectionspardfaut
Dfinition

ENI Editions - All rigths reserved

- 3-

Une collection par dfaut est une collection contenant des objets auxquels il est possible de faire rfrence
traverslenomdel'objetconteneurdelacollection,c'estdiresansfairerfrencelacollectionellemme.
Objetspossdantunecollectionpardfaut

Objet

Collection par dfaut

Container

Documents

Database

TableDefs

DBEngine

Workspaces

Form

Controls

Group

Users

Index

Fields

QueryDef

Parameters

Recordset

Fields

Relation

Fields

Report

Controls

TableDef

Fields

User

Groups

Workspace

Databases

Exemple
Rfrence au contrle txtDateDeb du formulaire Formations (la collection Controls est la collection par dfaut d'un formulaire).
Forms![Formations].[txtDateDeb].Value
Ou
Forms!Formations.txtDateDeb.Value
ou
Forms!Formations!txtDateDeb.Value
Affichageautomatiqued'instructions
L'diteur VBA dispose d'une technologie permettant de vous assister lors de l'utilisation d'objets. Ds que vous
tapez un nom d'objet reconnu par VBA suivi d'un point, la liste droulante des mthodes et proprits de cet
objetestalorsaffiche.Sivousslectionnezunemthode,l'assistantvousaidegalementsaisirlesdiffrents
argumentsqu'ellecomporte.
Exemple

Tapez le nom d'objet DoCmd suivi d'un point, la liste droulante suivante est affiche.

- 4-

ENI Editions - All rigths reserved

L'icne

reprsente les mthodes, l'icne

reprsente les proprits.

Vous pouvez faire dfiler les lments de la liste droulante en tapant les premires lettres de la mthode,
proprit ou collection recherche ou l'aide de l'ascenseur. Pour slectionner un lment de la liste, double
cliquezdessus.
Tapez un point si vous venez de slectionner un objet et si vous souhaitez voir la liste des proprits et
mthodes s'y rapportant. Si vous avez slectionn une mthode, tapez un espace pour saisir la liste des
paramtresdelamthode.
Pourpoursuivrel'exemple :

Slectionnez la mthode OpenForm.

Puis tapez un espace:

Lalistedesargumentsdelamthodeestalorsafficheets'adapteaufuretmesurequevouslessaisissez.
Les arguments facultatifs sont entre crochets. L'argument courant est en gras. Si pour un argument donn, il
existeunelistedevaleursprdfinies,lalistedroulantedesconstantescorrespondantesestalorsaffiche.
Saisissez maintenant le nom du paramtre transmis dans la fonction, savoir strFormName, suivi d'une virgule et de l'argument
acNormal, et de 3 virgules (pour les deux arguments optionnels).

ENI Editions - All rigths reserved

- 5-

Dansl'exemplelalistedesvaleurspossiblespourl'argumentDataModeestaffiche.
Pour obtenir la liste des proprits et mthodes d'un objet, vous pouvez galement procder de la faon suivante :
- placez le curseur derrire le point (situ aprs le nom de l'objet),
- cliquez sur le bouton droit de la souris et slectionnez l'option Rpertorier les proprits/mthodes du menu contextuel ou utilisez
le raccourci-clavier Ctrl J.

De mme, pour obtenir la liste des constantes disponibles comme argument d'une mthode, vous pouvez procder de la faon
suivante :
- placez le curseur la place de l'argument (aprs la mthode ou aprs une virgule),
- cliquez sur le bouton droit de la souris et slectionnez l'option Rpertorier les constantes du menu contextuel.

- 6-

ENI Editions - All rigths reserved

Instructionsutilisesaveclesobjets
L'instructionWith
L'instructionWithpermetd'accderplusieursfoisaummeobjetenlenommantuneseulefois.
Elleoffreplusieursavantages:

- optimisation du temps d'excution du code,


- gain de temps sur le travail d'criture,
- meilleure lisibilit du code.
Syntaxe
With <objet>
<code utilisant des mthodes et proprits>
<se rapportant l'objet>
End With
Exemple
' Ouvre le formulaire "Employes"
DoCmd.OpenForm "Employes"
' Modifie le titre du formulaire
' Positionne le curseur sur le nom
With Forms("Employes")
.Caption = "FICHE DE L'EMPLOYE " & _
.Controls("Prnom").Value & " " & _
UCase(.Controls("Nom").Value)
.Controls("Nom").SetFocus
End With
L'instructionForeach...Next
L'instructionForEach...Nextpermetdepasserenrevuelesobjetsd'unecollectionouleslmentsd'untableau.
Syntaxe
For Each <lment > In {<tableau>|<collection>}
<squence d'instructions>
[Exit For]
<squence d'instructions>
Next <lment>
Exemple
L'exemple suivant permet d'affecter une couleur de police chaque contrle du formulaire "employ" en fonction de son type
(proprit ControlType). Il utilise la collection par dfaut de l'objet Form (Screen.ActiveForm quivaut
Screen.ActiveForm.Controls).
Dim ctl As Control
' Parcours des contrles du formulaire actif
For Each ctl In Screen.ActiveForm
With Ctl
Select Case ControlType
' Etiquettes
Case acLabel
.ForeColor = vbBlue
' Zones de texte
Case acTextBox
.ForeColor = vbYellow
' Listes droulantes
Case acListBox, acComboBox
.ForeColor = vbRed
ENI Editions - All rigths reserved

- 1-

End Select
End With
Next ctl
L'instructionIfTypeOf
L'instructionIfTypeOfpermetdetesterletyped'unobjet.
Syntaxe
If TypeOf <objet> Is <TypeObjet> Then
<code utilisant des mthodes et proprits>
<se rapportant l'objet>
End If
Exemple
If TypeOf ctl Is acListBox Then ...
L'instructionSet
L'instructionSetpermetd'attribuerunerfrenced'objetunevariable,appelevariableobjet.
Cetteinstructionpeuttreutilisepourcrerunerfrenceversunnouvelobjet(enutilisantventuellementune
mthodepermettantdecrerl'objet)oupouraffecterunerfrenceunobjetdjexistant.
Syntaxes
Crationd'unerfrenceversunnouvelobjet
Set <NomObjet> = New <expression objet>
ou
Set <NomObjet> = <mthode permettant de crer l'objet>
<NomObjet>
<expression objet>

nomdelavariableobjet
nomd'unobjetoud'unevariableobjetdemmetype

Le mot cl New permet de crer une nouvelle instance de la classe. Si la variable objet contient dj une rfrence, cette dernire est
alors perdue.
Vous ne pouvez utiliser le mot cl New pour rfrencer un objet que si le composant ActiveX de l'objet fournit une bibliothque de type
(ex : objets ADO, objets Excel...).
Affectationd'unerfrenceunobjetexistant
Set <NomObjet> = <expression objet>
<NomObjet>
nomdelavariableobjet
<expression objet> nomd'unobjetoud'unevariableobjetdemmetype
Rinitialisationdesvariablesobjets
Set <NomObjet> = Nothing
Nothing permet de rinitialiser la variable objet et de librer l'ensemble des ressources systme et mmoire
associescetobjet.
Exemples :
Cration de rfrences vers de nouveaux objets.
Les exemples 1 et 2 permettent de crer une nouvelle table et de l'ajouter la base de donnes courante. Pour excuter ces
exemples, vous devez slectionner la rfrence Microsoft DAO 3.6 Object Library au projet (Outils Rfrences).
Exemple 1 : utilisation du mot cl New
- 2-

ENI Editions - All rigths reserved

Dim tbl As Object


Dim tdfClient As DAO.TableDef
Dim fld As DAO.Field
' Vrifie si la table existe dj
' et propose de la supprimer
For Each tbl In CurrentData.AllTables
If tbl.Name = "CLIENTS" Then
If MsgBox("La table existe dj." & _
" Voulez-vous la supprimer ?", _
vbYesNo & vbQuestion) = vbYes Then
DoCmd.DeleteObject acTable, "CLIENTS"
Else
Exit Sub
End If
End If
Next tbl
' Cre la dfinition de table
Set tdfClient = New DAO.TableDef
tdfClient.Name = "CLIENTS"
' Cre le 1er champ
Set fld = New DAO.Field
With fld
.Name = "Cli_Nom"
.Type = dbText
.Size = 40
End With
tdfClient.Fields.Append fld
' Cre le 2me champ
Set fld = New DAO.Field
With fld
.Name = "Cli_Effectif"
.Type = dbInteger
End With
tdfClient.Fields.Append fld
' Ajoute la table la base de donne courante
Application.CurrentDb.TableDefs.Append tdfClient
' Rinitialise les variables objet
Set tdfClient = Nothing
Set fld = Nothing
Exemple 2 : mme traitement en utilisant des mthodes
Dim tbl As Object
Dim tdfClient As DAO.TableDef
Dim fld As DAO.Field
' Vrifie si la table existe dj
' et propose de la supprimer
For Each tbl In CurrentData.AllTables
If tbl.Name = "CLIENTS" Then
If MsgBox("La table existe dj." & _
" Voulez-vous la supprimer ?", _
vbYesNo + vbQuestion) = vbYes Then
DoCmd.DeleteObject acTable, "CLIENTS"
Else
Exit Sub
End If
End If
Next tbl
' Cre la dfinition de table
Set tdfClient = CurrentDb.CreateTableDef("Clients")
With tdfClient
' Cre le 1er champ
Set fld = .CreateField("Cli_Nom", dbText, 40)
.Fields.Append fld
' Cre le 2me champ
.Fields.Append .CreateField("Cli_Effectif", dbInteger)
End With
' Ajoute la table la base de donne courante
CurrentDb.TableDefs.Append tdfClient
' Rinitialise les variables objet
Set fld = Nothing
Set tdfClient = Nothing

ENI Editions - All rigths reserved

- 3-

Exemple 3 :
Cration d'un formulaire avec une zone de texte et une tiquette
' Objet Formulaire
Dim frmEmploye As Form
' Nom du formulaire
Dim strName As String
' Objet contrle
Dim ctl As Control
' Cration d'un nouveau formulaire
Set frmEmploye = Application.CreateForm
With frmEmploye
' Titre du formulaire
.Caption = "Employes"
' Largeur et hauteur du formulaire
.Width = 5000
.Section(acDetail).Height = 2000
' Supprime les boutons de dplacement
.NavigationButtons = False
' Supprime le slecteur d'enregistrement
.RecordSelectors = False
' Centre le formulaire dans l'application
.AutoCenter = True
' Nom du formulaire
strName = frmEmploye.Name
End With
' Ajout de la zone de texte Nom de l'employ
Set ctl = Application.CreateControl(strName, _
acTextBox, , "", "", 2000, 500, 2500, 300)
' Mise en forme de la zone de texte
With ctl
' Nom de la zone de texte
.name = "txtNom"
' Couleurs
.BackColor = vbWhite
.ForeColor = vbBlack
.FontBold = True
End With
' Ajout de l'tiquette Nom de l'employ
Set ctl = Application.CreateControl(strName, _
acLabel, , "", "", 500, 500, 1500, 300)
' Mise en forme de l'tiquette
With ctl
' Nom de l'tiquette
.Name = "lblNom"
' Titre de l'tiquette
.Caption = "Nom de l'employ : "
' Couleurs
.BackColor = vbWhite
.ForeColor = vbBlue
End With
' Sauvegarde du formulaire
DoCmd.Save , "Fiche_Employe"
Docmd.Close
Formulaire cr par ce code :

- 4-

ENI Editions - All rigths reserved

ENI Editions - All rigths reserved

- 5-

Lesclassesd'objets
Description
Une classe est en quelque sorte un moule d'o naissent les objets. Par exemple, il est possible de raliser de
petits santons en pltre avec un moule adquat. On peut dire que tous les santons raliss sont des Objets,
chacund'euxpouvantavoirtermedescouleursetunhabillagediffrents,etquelesmoulessontdesClasses.
Ainsi, les objets issus d'une mme classe hritent systmatiquement de toutes les mthodes (codes), les
proprits (donnes) et les vnements de leur classe d'origine. Par la suite, les caractristiques et le
comportementdechacund'euxpourronttreadaptsenfonctiondesbesoinsdel'application.
Enfait,toutobjetAccessestissud'uneclasse.
Lesmodulesdeclasse
Les modules de classe vous permettent de crer et de manipuler dans vos applications vos propres types
d'objets.
Lesmodulesdeclassesprsententlescaractristiquessuivantes:

- ils portent le nom de l'objet,


- ils comportent des procdures publiques Sub et Function correspondant aux mthodes propres de l'objet,
- ils comportent des procdures Property Get permettant de lire les valeurs de proprits de l'objet et des procdures Property
Set/Property Let permettant de fixer les valeurs de ces proprits.
Une fois l'ensemble de ces procdures dcrites au sein du module de classe, il est possible de crer un nouvel
objetdutypedfini.Pourcelailsuffitdecrerunenouvelleinstancedelaclasseparlebiaisd'unevariableobjet
dutypedelaclasse :
Dim<nomdel'objet>AsNew<nomdelaclasse>
Les modules de classe sont peu utiliss en programmation VBA. Ils s'adressent avant tout aux dveloppeurs
confirms.
Exempledemodulesdeclasse
Cet exemple vous guidera pas pas dans la cration et l'utilisation d'un module de classe. Le module cr
permettrad'afficherlesmessagesutilisateurs.
Cemodulecomporteleslmentssuivants:

- une mthode Confirmation qui affiche une bote de dialogue invitant l'utilisateur rpondre par "oui" ou "non" une
question, et rcupre la rponse de l'utilisateur,

- deux proprits : la proprit IsBeep indique si un beep doit tre mis avant l'affichage du message, la proprit Title
contient le titre de la bote de dialogue.
Exemple
Pourcrerunmoduledeclasse :

slectionnez l'option Module de classe du menu Insertion.

ENI Editions - All rigths reserved

- 1-

Dfinissez ensuite le nom de la classe dans le champ Name.

Si la fentre Proprits n'est pas affiche, choisissez l'option Fentre proprits du menu Affichage ou utilisez le raccourci
clavier F4.

Dfinissez les variables ncessaires pour l'utilisation des proprits dans le module de classe Message. La variable strTitle est
associe la proprit Title, la variable blnBeep la proprit IsBeep.

Option Compare Database


Option Explicit
' Emission d'un beep
Dim blnBeep As Boolean
' Titre de la fentre MsgBox
Dim strTitle As String

Crez les proprits IsBeep et Title en utilisant l'option Procdure du menu Insertion.

Pour chaque proprit, les procdures Property Get et Property Set sont cres :

Modifiezles afin d'obtenir le code suivant :

- 2-

ENI Editions - All rigths reserved

Public Property Get IsBeep() As Boolean


IsBeep = blnBeep
End Property
________________________________________________________________________
Public Property Let IsBeep(ByVal blnNewValue As Boolean)
blnBeep = blnNewValue
End Property
________________________________________________________________________
Public Property Get Title() As String
Title = strTitle
End Property
________________________________________________________________________
Public<+>Property Let Title(ByVal strNewValue As String)
strTitle = strNewValue
End Property

Crez maintenant la mthode confirmation en utilisant l'option Procdure du menu Insertion.

Modifiez la procdure Confirmation afin d'obtenir le code suivant.

Public Function Confirmation(strMsg) As Boolean


If MsgBox(strMsg, vbYesNo, strTitle) = vbYes Then
Confirmation = True
Else
Confirmation = False
End If
If blnBeep Then Beep
End Function
Nousvoyonsquecettemthodeutiliselesdeuxvariables strTitleet blnBeep.Lamthodeatcreentant
quefonctioncarellerenvoielarponsedel'utilisateursouslaformed'unevariableboolenne.
Maintenantquecetteclasseestcre,nousallonsl'utiliserpartird'unformulaire.

Crez pour cela un formulaire Employs avec deux boutons de commande cmdFermer et cmdQuitter.

Affectez le code cidessous aux vnements click.

Private Sub CmdFermer_Click()


' Objet message
Dim msg As New Message
' Pas d'mission de beep
msg.IsBeep = False

ENI Editions - All rigths reserved

- 3-

' Titre de la bote de dialogue


msg.Title = "Application Gestion du personnel"
' Demande de confirmation
If msg.Confirmation("Voulez-vous fermer " _
& "le formulaire " & Me.Caption & " ?") Then
DoCmd.Close
End If
End Sub
_______________________________________________________________
Private Sub CmdQuitter_Click()
' Objet message
Dim msg As New Message
' Emission d'un beep
msg.IsBeep = True
' Titre de la bote de dialogue
msg.Title = "Application Gestion du personnel"
' Demande de confirmation
If msg.Confirmation("Voulez-vous quitter " _
& "l'application ? ") Then
DoCmd.Quit
End If
End Sub

Testez ensuite le formulaire.


La bote de message affiche par la mthode Confirmation utilise les deux proprits et renvoie la rponse de
l'utilisateur.

Il est possible d'enrichir le module de classe Message en dfinissant de nouvelles proprits et de nouvelles mthodes (ex :
messages d'erreur...).

- 4-

ENI Editions - All rigths reserved

L'explorateurd'objets
Prsentation
Compte tenu du nombre important d'objets Access et de leur diversit, il est utile de pouvoir rechercher
rapidementdesinformationsserapportantauxobjets.
L'explorateurd'objetspermetd'afficherdesinformationsrelativesauxobjets,mthodes,proprits,vnements
etconstantes.
Vouspouvezl'afficherdediffrentesfaons:

- choisissez l'option Explorateur d'objets du menu Affichage,


- utilisez le raccourciclavier F2,
- cliquez sur l'icne

1.Listedesbibliothquesd'objetsactuellementcharges.
2.lmentrecherch:objet,proprit,collection,vnement,mthode...
3. Rsultat de la recherche : liste des classes d'objets (objets et collections) et des membres les composant
(objet, collection, proprit, vnement ou mthode). Le mot recherch peut tre dans la liste des classes ou
danscelledesmembres.

ENI Editions - All rigths reserved

- 1-

4.Objetsdelabibliothque laclassed'objetslectionnedanslalisteRsultatestencadre.
5.Mthodes,proprits,vnementsetconstantesserapportantl'objetslectionnouencadrdanslaliste
degauche.LemembreslectionndanslalisteRsultatestencadr.
6.Dtaildel'lmentslectionn.
Recherchedansl'explorateurd'objets
Poureffectuerunerecherchedansl'explorateurd'objets,procdezdelamaniresuivante:

Saisissez le mot recherch dans la 2me liste droulante.

Cliquez sur l'icne

Si la fentre des Rsultats affiche plusieurs lignes, dplacezvous sur celle qui vous intresse (la partie basse de la fentre est
alors ractualise).

Le module de classe cr prcdemment apparat dans la liste des classes avec les mthodes et proprits
rattaches.

- 2-

ENI Editions - All rigths reserved

Propritsetmthodesd'objetsAccess
Cette partie dcrit les proprits et mthodes des objets couramment utiliss dans Access. Les objets Form et
ReportserontdcritsdanslechapitrePersonnalisationdesformulairesettats.
Pour obtenir la liste exhaustive des objets, des proprits et mthodes, vous pouvez rechercher dans l'aide VBA
Accessouutiliserl'explorateurd'objets.
L'objetApplication
L'objetApplicationfaitrfrencel'applicationMicrosoftAccessactive.
Proprits

AutomationSecurity

Renvoie ou dfinit une constante MsoAutomationSecurity


qui reprsente le mode de scurit utilis par Microsoft
Accesslorsqu'ilouvredesfichiersparprogrammation.

BrokenReference

Renvoie une valeur de type Boolean indiquant si la base de


donnes active possde des rfrences rompues vers des
basesdedonnesoudesbibliothquesdetypes.

Build

Renvoie une valeur de type Long qui reprsente le numro


de la copie de Microsoft Office Access 2007 actuellement
installe.

CodeContextObject

Renvoie l'objet dans lequel une macro ou du code


Visual Basicestencoursd'excution.

CurrentObjectName

Retourne le nom de l'objet base de donnes actif (table,


requte,formulaire,tat,macro,module).

CurrentObjectType
FeatureInstall

Retourneletypedel'objetbasededonnesactif.

IsCompiled

Retourne une valeur de type boolen qui indique si le projet


VisualBasicsetrouvedansuntatcompil.

MenuBar

Dtermine la barre de menus utiliser pour la base de


donnes.

Name
Parent
ProductCode

Retournelenomdel'application("MicrosoftAccess").

ShortcutMenuBar

Spcifie le menu contextuel qui apparat lorsque l'utilisateur


cliqueavecleboutondroitdelasouris.

UserControl

Permet de dterminer si l'application Microsoft Access en


cours a t lance par l'utilisateur ou par une autre
applicationaumoyendel'automation.

Version
Visible

RetournelenumrodeversiondeMicrosoftAccess.

Spcifie ou dtermine la manire dont Microsoft Access gre


les appels de mthodes et de proprits qui ncessitent des
fonctionnalitsnoninstalles.

Permetdefairerfrencel'objetpre.
Dtermine l'identificateur universel unique de Microsoft
Access.

Permetdemasquerl'application.

Mthodes

AccessError

Retourne la chane descriptive associe une erreur


Microsoft AccessouuneerreurDAO.

AddToFavorites

Ajoute une adresse de lien hypertexte dans le dossier


Documentsfavoris.

BuildCriteria

Permetdeconstruirefacilementlescritresd'unfiltre.

ENI Editions - All rigths reserved

- 1-

CloseCurrentDatabase

ColumnHistory

Ferme une base de donnes Access partir d'une autre


application utilisant la technologie Automation (application
Excel par exemple). La base de donnes doit avoir t
pralablement ouverte, par cette mme application, au
moyendelamthodeOpenCurrentDatabase.
Fournitl'historiquedesvaleursquionttstockessansun
champMmo.

CompactRepair

Compacteetrparelabasededonnes(.mdb)ouleprojet
Microsoft Access (.adp) spcifis. Renvoie un Boolean
prenantlavaleurTruesil'oprationarussi.

ConvertAccessProject

Convertit la version du fichier Microsoft Access spcifi


dansuneautreversion.

CreateAccessProject

PermetdecrerunnouveauprojetMicrosoftAccess(.adp)
surdisque.

CreateAdditionalData

Permet de crer un objet AdditionalData pouvant tre


utilis pour ajouter des tables et des requtes
supplmentaires dans la table parente qui est en cours
d'exportationparlamthodeExportXML.

CreateControl

Permet de crer un contrle dans le formulaire ouvert


spcifi.

CreateForm

Permetdecrerunformulaireetretourneunobjetdetype
Form.

CreateGroupLevel

Permet de spcifier un champ ou une expression sur lequel


(ou laquelle) seront regroupes ou tries les donnes d'un
tat.

Create
NewWorkgroupFile

Creunnouveaufichierdegroupedetravailpourpermettre
aux utilisateurs d'accder de manire scurise une base
dedonnes.

CreateReport
CreateReportControl
CurrentDb

Permetdecreruntatetretourneunobjettat.

CurrentUser

Permetderetournerlenomdel'utilisateuractueldelabase
dedonnes.

DefaultWorkspace
Clone

Cre un nouvel objet Workspace sans obliger l'utilisateur


seconnecternouveau.

DeleteControl

Permet de supprimer un contrle dtermin dans un


formulaire.

Permetdecreruncontrledansuntatouvert.
Renvoie une variable objet faisant rfrence la base de
donnesactuellementouvertedansMicrosoft.

DeleteReportControl
Echo
ExportXML

Permetdesupprimeruncontrledtermindansuntat.

FollowHyperLink

OuvreledocumentoulapageWebspcifiparuneadresse
delienhypertexte.

GetOption

Retourne la valeur en cours d'une option de la bote de


dialogueOptions.

HyperlinkPart

Renvoie les informations relatives aux donnes stockes


souslaformedelienhypertexte.

ImportNavigationPane

Chargeuneconfigurationenregistreduvoletdenavigation
partirdudisque.

ImportXML

Permet d'importer des donnes XML et/ou des informations


de prsentation dans Microsoft SQL Server 2000 Desktop
Engine (MSDE 2000), Microsoft SQL Server, version 7.0 ou
ultrieure, ou encore dans le moteur de base de donnes
MicrosoftJet.

- 2-

SpcifiesiMicrosoftAccessdoitredessinerl'cran.
Permet d'exporter des donnes XML, des schmas et des
informations de prsentation partir de Microsoft SQL
Server 2000 Desktop Engine (MSDE 2000), Microsoft SQL
Server, version 6.5 ou ultrieure, ou encore du moteur de
basededonnesMicrosoftJet.

ENI Editions - All rigths reserved

LoadCustomUI
LoadPicture
NewAccessProject

ChargelecodeXMLquireprsenteunrubanpersonnalis.

Nz

Transforme une valeur nulle en zro, chane vide ou une


autrevaleurspcifie.

NewCurrentDatabase

Cre une nouvelle base de donnes dans la fentre


MicrosoftAccess.

OpenCurrentDatabase

Ouvre une base de donnes Access comme base de


donnes courante partir d'une autre application utilisant
latechnologieAutomation(applicationExcelparexemple).

Quit

PermetdequitterAccess.

RefreshDatabase
Window

Permet de mettre jour la fentre Base de donnes


lorsqu'une table, une requte, un formulaire, un tat, une
macro ou un module ont t crs, supprims ou
renomms.

ChargeuneimagedansuncontrleactiveX.
Permet de crer et d'ouvrir un nouveau projet Microsoft
Access(.adp)commeprojetAccessactif.

RefreshTitleBar
Run

ActualiselabarredetitredeMicrosoftAccess.

RunCommand

Permet d'excuter une commande intgre de menu ou de


barred'outils.

SetDefaultWorkgroup
File
SetHiddenAttribute
SetOption

Dfinitlefichierspcificommefichierdegroupedetravail.

SysCmd

Permet d'afficher une jauge de progression ou un texte


spcifi facultatif dans la barre d'tat, de retourner des
informations sur Microsoft Access et les fichiers associs,
ou l'tat d'un objet de base de donnes spcifi (objet
ouvert,nouveau,oumodifimaisnonenregistr).

TransformXML

Applique une feuille de style XSL (eXtensible Stylesheet


Language) un fichier de donnes XML et crit le langage
XMLquienrsultedansunfichierdedonnesXML.

Permetd'excuteruneprocdureFunctionouSubspcifie
parMicrosoftAccessoudfinieparl'utilisateur.

Activel'attributcachd'unobjetAccess.
Dfinit la valeur en cours d'une option dans la bote de
dialogueOptions.

Exemple
Bouton de commande permettant de quitter Access en sauvegardant tous les objets.
Sub cmdQuitter_Click()
Application.Quit acSaveYes
End Sub
Exemple
Le code suivant permet de modifier les couleurs par dfaut des feuilles de donnes (contenues dans l'onglet Feuilles de donnes de
la bote de dialogue Options d'Access).
With Application
' Police bleue fonc
.SetOption "Default Font Color", 4
' Arrire plan : blanc
.SetOption "Default Background Color", 15
' Quadrillage bleu clair
.SetOption "Default Gridlines Color", 12
End With
Fonctionsapplicablesunjeud'enregistrements

ENI Editions - All rigths reserved

- 3-

Cesfonctionssontgnralementutilisesdanslesformulairesettats:

DAvg

Calcule la moyenne d'un ensemble de valeurs dans un jeu


d'enregistrements.

DCount

Dtermine le nombre d'enregistrements dans un jeu


d'enregistrements.

DFirst
DLast

Renvoielepremierenregistrementd'unjeud'enregistrements.
Renvoieledernierenregistrementd'unjeud'enregistrements.

DLookUp

Recherchelavaleurd'unchampparticulierquifaitpartied'un
jeud'enregistrements.

DMin

Dtermine la valeur minimale d'un champ pour un jeu


d'enregistrements.

DMax

Dtermine la valeur maximale d'un champ pour un jeu


d'enregistrements.

DStDev

valuel'carttypepourunchantillondepopulationpourun
jeud'enregistrements.

DstDevP

Estime l'carttype
d'enregistrements.

DSum

Calcule la somme d'un ensemble de valeurs dans un jeu


d'enregistrements.

DVar

value la variance pour un chantillon dans un jeu


d'enregistrements.

DVarP

Calcule la variance
d'enregistrements.

Eval

value une expression (combinaison d'oprateurs, de noms


de champ, de fonctions, de littrales et de constantes) et
retourne le rsultat sous la forme d'une chane de caractre
oud'unevaleurnumrique.

d'une

d'une

population

population

dans

dans

un

un

jeu

jeu

L'objetDoCmd
L'objetDoCmdpermetd'excuterpartirdeVisualBasiclaplupartdesactionsexcutablesvialesmacros.
chaque action macro correspond une mthode. Les arguments de l'action deviennent les arguments de la
mthode.L'objetDoCmdnedisposepasdeproprits.
Les actions macro correspondant aux mthodes sont indiques entre parenthses.
Excutiond'actions

CancelEvent
Quit
RunCommand
RunMacro
RunSql

(AnnulerEvnement)
Annuleunvnement.
(Quitter)
QuitteACCESS.
(ExcuterCommande)
Excuteunecommanded'unmenuoud'unebarred'outils.
(ExcuterMacro)
Excuteunemacro.
(ExcuterSql)
ExcuteunordreSQL.

Donnesdesformulairesettats

ApplyFilter
FindNext
FindRecord

- 4-

(AppliquerFiltre)
Appliqueunfiltreunetable,unformulaire,untat.
(TrouverSuivant)
Continuelarecherche.
(TrouverEnregistrement)
Recherched'unenregistrement.

ENI Editions - All rigths reserved

GotoControl
GotoPage
GotoRecord
SearchForRecord

(AtteindreContrle)
Dplacelefocussuruncontrle.
(AtteindrePage)
Dplace le focus sur le premier contrle de la page indique
duformulaireactif.
(AtteindreEnregistrement)
Atteintunenregistrement.
(TrouverEnregistrement)
Permetderechercherunenregistrementspcifiquedansune
table,unerequte,unformulaireouuntat.

Import/Exportdedonnes

CopyDatabaseFile

OutputTo

SendObject
TransferDatabase
TransferSpread
Sheet
TransferShare
PointList
TransferSQL
Database
TransferText

(CopierFichierBaseDeDonnes)
Copie la base de donnes connecte au projet actif un
fichier de base de donnes Microsoft SQL Server pour
l'exporter.
(CopierVers)
Permet d'exporter un objet Access (table, formulaire) dans
une autre base Access ou un autre type de fichier (Excel,
XML...).
(EnvoyerObjet)
Envoieunobjetverslamessagerie.
(TransfrerBase)
Importeouexporteunebasededonnes.
(TransfrerFeuilleCalcul)
Importeouexporteunefeuilledecalcul.
(TransfrerListeSharePoint)
Permet d'importer ou de lier des donnes partir d'un site
MicrosoftWindowsSharePointServices3.0.
(TransfrerBaseDeDonnesSQL)
Transfre l'intgralit de la base de donnes Microsoft SQL
ServerspcifieversuneautrebasededonnesSQLServer.
(TransfrerTexte)
ImporteouexportedutexteauformatASCII.

Manipulationd'objets

Close
CloseDatabase

CopyObject
DeleteObject
Maximize
Minimize
MoveSize
OpenDataAccess
Page
OpenDiagram

(Fermer)
Fermeunobjet(formulaire,tat...).
(FermerBaseDonnes)
Fermelabasededonnesouvertedansl'interfaceAccess.Si
la base de donnes contient des objets qui n'ont pas t
enregistrslorsquevousutilisezlamthodeCloseDatabase,
des botes de dialogues identiques celles qui s'affichent
lorsque vous cliquez sur Fermer la base de donnes
apparaissent.
(CopierObjet)
Permet de copier un objet Access dans la mme base ou
dansuneautrebase.
(SupprimerObjet)
Supprimeunobjet.
(Agrandir)
Agranditunefentre.
(Rduire)
Rduitunefentreenicne.
(DplacerDimensionner)
Dplaceoudimensionneunefentre.
(OuvrirPageAccsDonnes)
Ouvreunepaged'accsauxdonnes.
(OuvrirSchma)
Ouvreunschmadebasededonnes.

ENI Editions - All rigths reserved

- 5-

OpenForm
OpenFunction
OpenModule
OpenQuery
OpenReport
OpenStored
Procedure
OpenTable
OpenView
PrintOut
Rename
RepaintObject
Requery
Restore
Save
SelectObject
ShowAllRecords

(OuvrirFormulaire)
Ouvreunformulaire.
(OuvrirFonction)
Ouvre une fonction utilisateur dans une base de donnes
MicrosoftSQLServerpourl'afficherdansMicrosoftAccess.
(OuvrirModule)
OuvreunmoduleVBA.
(OuvrirRequte)
Ouvreunerequte.
(OuvrirEtat)
Ouvreuntat.
(OuvrirProcdureStocke)
Ouvre une procdure stocke en mode Feuilles de donnes,
enmodeCrationouenAperuavantimpression.
(OuvrirTable)
Ouvreunetable.
(OuvrirPageAccsDonnes)
Ouvreunepaged'accsauxdonnes.
(Imprimer)
Imprimesurpapier.
(Renommer)
Renommeunobjet.
(RedessinerObjet)
Redessineunobjet(formulaire...).
(Actualiser)
Met jour les donnes de l'cran (relance la requte source
del'objet).
(Restaurer)
Redonneunefentresataillenormale.
(Enregistrer)
Enregistrel'objetspcifioul'objetactif.
(SlectionnerObjet)
Slectionneunobjetdebasededonnes.
(AfficherTousEnreg)
Dsactiveunfiltreetraffichetouslesenregistrements.

Modificationdel'interfaceAccess

AddMenu
Hourglass
LockNavigation
Pane
SetDisplayed
Categories
SetMenuItem

SetWarnings
ShowToolbar

(AjouterMenu)
Permetdecrerunebarredemenuouunmenucontextuel.
(Sablier)
Affichelepointeurdesourisensablierounon.
(VerrouillerVoletNavigation)
Permet d'empcher les utilisateurs de supprimer des objets
de base de donnes qui sont affichs dans le volet de
navigation.
(AccderA)
Prcise les catgories qui sont affiches sous Atteindre la
catgoriedanslabarredetitreduvoletdenavigation.
(DfinirElmentMenu)
Permet de dfinir l'tat (actif ou inactif, coch ou non
coch) d'lments de menu personnalis ou global pour la
fentreactive.
(Avertissements)
Active/dsactive l'affichage des messages d'avertissement
standards.
(AfficherBarreOutils)
Affiche/masqueunebarred'outils.

Divers

Beep

(Bip)
Emetunbipsonore.

- 6-

ENI Editions - All rigths reserved

ClearMacroError
DoMenuItem

Echo
PlainText
RunSavedImport
Export
SetDefault
WorkgroupFile
SetHiddenAttribute
SingleStep

(EffacerMacroErreur)
Supprime les informations relatives une erreur stockes
dansunobjetMacroErreur.
(AfficherBarreOutils)
Affiche la commande de menu approprie pour Microsoft
Access.
(Echo)
Masque ou affiche les rsultats d'une macro lors de son
excution.
Supprime la mise en forme de texte enrichi d'une chane et
renvoieunechanedetextesansmiseenforme.
(ExcuterImportationExportationSauvegarde)
Excute une spcification d'importation ou d'exportation
enregistre, cre partir de l'Assistant Importation ou de
l'AssistantExportation.
Dfinit le fichier spcifi comme fichier de groupe de travail
pardfaut.
Activel'attributcachd'unobjetAccess.
(PasAPas)
Suspend l'excution de la macro active et ouvre la bote de
dialoguePaspas.

Actionsdemacrosnonprisesencompteparl'objetDoCmd

BoiteMsg
ExcuterApplication
ExcuterCode
EnvoiTouches

Utilisezlafonctionoul'instructionMsgBox.
UtilisezlafonctionShell.
AppelezdirectementlafonctiondansVisualBasic.
Utilisezl'instructionSendKeys.

Les actions ArrtToutesMacros et ArrtMacro n'ont pas d'quivalent en Visual Basic.


L'objetScreen
L'objet Screen fait rfrence l'objet actif qu'il s'agisse d'un formulaire, d'une page d'accs aux donnes, d'un
tatoud'uncontrle.
L'objet Screen est surtout utilis dans les procdures vnementielles de ses diffrents objets (Control, Data
AccessPage,Form,Report).Cetobjetnecomportequedesproprits :
Proprits

ActiveControl
ActiveData
AccessPage
ActiveDataSheet
ActiveForm
ActiveReport
Application
MousePointer
Parent

Fournitunerfrenceaucontrleactif.

PreviousControl

Fournit une rfrence au dernier contrle actif avant le


contrleencours.

Fournitunerfrencelapaged'accsauxdonnesactive.
Fournitunerfrencelafeuillededonnesactive.
Fournitunerfrenceauformulaireactif.
Fournitunerfrencel'tatactif.
Permetd'accderl'objetApplicationetsesproprits.
Permetdespcifierletypedepointeurdesouris.
Fournitunerfrenceaupre(objetconteneur)d'uncontrle,
d'unesection,d'unsousformulaire...

Exemple

ENI Editions - All rigths reserved

- 7-

' Affiche sub cmd Screen-click le nom du contrle


prcdent
Dim ctl As Control
Set ctl = Screen.PreviousControl
MsgBox ctl.Name
' Transforme le pointeur de souris en sablier
Screen.MousePointer = 11
' Raffiche le pointeur par dfaut
Screen.MousePointer = 0
' Affiche le nom du formulaire actif
Dim frm As Form
Set frm = Screen.ActiveForm
MsgBox frm.Name
' Modifie le titre du formulaire
frm.Caption = "Formulaire de saisie des employs"
End Sub
LacollectionReferences
La collection References contient les objets Reference correspondant aux bibliothques d'objets provenant
d'autresapplications.
Pour ajouter (ou supprimer) une rfrence une bibliothque d'objets, choisissez l'option Rfrences du menu
Outils.
Lafentresuivantevouspermetalorsdeslectionnerlesrfrencessouhaites:

Proprits

Count
Parent

Dterminelenombred'objetsrfrences.
Nonutilise.

Mthodes

AddFromFile

Cre une rfrence une bibliothque partir d'un nom de


fichier.

AddFromGuid

Cre une rfrence une bibliothque partir de son GUID


(identificateurglobaluniquedansleregistreWindows).

Item

Renvoie une rfrence en fonction de sa position dans la


collectionRfrences.

- 8-

ENI Editions - All rigths reserved

Remove

SupprimeunobjetrfrencedanslacollectionReferences.

Propritsdel'objetReference

BuiltIn

Indiquesiunerfrencepardfautquiestncessairepourle
bonfonctionnementd'Access.

FullPath

Renvoie le chemin d'accs et le nom du fichier de la


bibliothquerfrence.

Guid

Renvoie le GUID, identificateur de la bibliothque dans le


RegistreWindows.

IsBroken

Indique si une rfrence valide est affecte l'objet dans le


RegistreWindows.

Kind
Major

Indiqueletypederfrence.

Mineur
Name

Indiquelenumrodeversionmineurdel'application.

Indique le numro de version principal de l'application


laquelleestassocielarfrence.
Indiquelenomdelarfrence.

Exemple
Private Sub cmdReferences_Click()
Dim ref As Reference
Dim i As Integer
' Affiche le nombre total de rfrences
MsgBox "Le nombre total de rfrences est de : " &
References.Count
' Parcourt les rfrences et affiche leur nom et chemin
d'accs
i = 0
For Each ref In Application.References
MsgBox " Nom : " & ref.Name & " " & Chr(13) & Chr(13) _
& " Chemin : " & ref.FullPath
Next ref
' Ajoute les bibliothques d'objet Excel et Word
' Erreur si bibliothque dj rfrence
On Error Resume Next
Application.References.AddFromFile "Excel.exe"
Application.References.AddFromFile "MsWord.olb"
On Error GoTo 0
' Affiche le nombre total de rfrences
MsgBox "Le nombre total de rfrences est de : " &
References.Count
End Sub
LacollectionPrinters
La collection Printerscontientdesobjets Printerreprsentantchacununeimprimantedisponiblesurlesystme
encours.
L'objet Printer n'existait pas dans les versions prcdentes d'Access.
Propritsdel'objetPrinter

BottomMargin
ColorMode

Margebassed'unepageimprime.

ColumnSpacing

Indique l'espacement vertical des sections Dtail d'un


formulaire.

Copies

Indiquelenombredecopiesimprimer.

DataOnly

Permet de n'imprimer que les donnes d'une table ou d'une


requteenmodeFeuillededonnes.

Indique si l'imprimante doit imprimer en


(acPRCMColor)ounon(acPRCMMonochrome).

ENI Editions - All rigths reserved

couleur

- 9-

DefaultSize

Renvoie la valeur True si la taille de la section de dtail en


mode Cration est utilise lors de l'impression d'un tat ou
d'unformulaire.

DeviceName

Renvoie une valeur de type String qui indique le nom du


priphriqued'impressionspcifi.

DriverName
Duplex

Indiquelenomdupiloteutilisparl'imprimante.

ItemLayout

Indique si l'imprimante trace les colonnes horizontalement,


puis
verticalement,
ou
bien
verticalement
puis
horizontalement.

ItemsAcross

Renvoie ou dfinit une valeur de type Long indiquant le


nombre de colonnes imprimer dans le cas d'tats ou
d'tiquettessurplusieurscolonnes.

ItemSizeHeight

Renvoie ou dfinit une valeur de type Long indiquant la


hauteurdelasectiondtailled'unformulaireoud'untaten
twips.

ItemSizeWidth

Renvoie ou dfinit une valeur de type Long indiquant la


largeurdelasectiondtailled'unformulaireoud'untaten
twips.

LeftMargin
Orientation

Margegauched'unepageimprime.

PaperBin
PaperSize
Port
PrintQuality

Indiquelebacquedoitutiliserl'imprimante.

RightMargin
RowSpacing

Margedroited'unepageimprime.

TopMargin

Margehauted'unepageimprime.

Indique la manire dont l'imprimante gre l'impression recto


verso.

Indique l'orientation de l'impression (acPRORPortrait ou


acPRORLandscape).
Indiquelatailledepapierutiliserlorsdel'impression.
Indiqueleportauquelestconnectel'imprimante.
Indique la rsolution utiliser par l'imprimante pour les
travauxd'impression.
Renvoie ou dfinit une valeur de type Long qui reprsente
l'espacementhorizontaldessectionsdtaillesentwips.

Les autres proprits (ColumnSpacing, RowSpacing, ItemSizeHeight...) permettent d'effectuer le formatage de la section Dtail
d'un formulaire ou d'un tat.

- 10 -

ENI Editions - All rigths reserved

Objetsd'accsauxdonnesDAOetADO
Lesobjetsd'accsauxdonnessonttrsutiles:ilspermettent,viaVBA,demanipulerlesdonnes(recherches,
misesjour,ajoutsd'enregistrements...)debasesdedonneslocalesoudistantes.
Dans les versions antrieures Access 2000, le seul modle d'accs aux donnes tait le modle DAO:Data
AccessObjects.
AvecAccess2000estapparulemodleADO :ActiveXDataObjects.
Microsoftrecommanded'utiliserlemodleADOpourlesraisonssuivantes :

- meilleure prise en charge de SQL Server,


- meilleures performances en environnement client/serveur,
- code VBA plus court et plus simple.
Si vous dveloppez unenouvelleapplication, vous pouvez utilisez le modle ADO mme si votre application
accde une base de donnes locale de type Access. Si vous souhaitez par la suite migrer vos donnes sous
MSDE(MicrosoftDataEngine)ouSQLServer,votrecodefonctionneradefaonoptimale.
Sivousfaitesvoluer uneapplicationexistanteutilisantlemodleDAO,ilestpossibledemodifiervotrecode
afindetransformerlesobjetsDAOenobjetsADO.

ENI Editions - All rigths reserved

- 1-

Lemodled'accsauxdonnesDAO
Prsentation
La bibliothque d'objets DAO (Data Access Objects) prend en charge deux environnements de bases de donnes
diffrents,appelsespacesdetravail :

- les espaces de travail Microsoft Jet: ils permettent d'accder des bases de donnes de type Access, des serveurs de bases
de donnes ODBC (Open Database Connectivity) et des bases de donnes externes telles que dBASE, Microsoft Excel et
Paradox accessibles via un pilote ISAM (Indexed Sequential Access Method),

- les espaces de travail ODBCDirect: ils permettent d'accder des serveurs de base de donnes ODBC de faon "directe",
c'estdire sans charger le moteur de base de donnes Microsoft Office 12. Cet espace de travail est par consquent
recommand pour excuter des requtes, des procdures stockes, ou des fonctions spcifiques ODBC sur un serveur distant
de type SQL Server.
Pour pouvoir utiliser la bibliothque d'objets DAO, il est ncessaire de cocher la rfrence Microsoft DAO 3.6
Object Library dans la liste des rfrences aux bibliothques d'objets (pour afficher cette liste, slectionnez
l'optionRfrencesdumenuOutils).
Si cette rfrence n'est pas disponible, vous devez slectionner le fichier DAO360.dll partir du bouton de
commande Parcourir. Ce fichier est gnralement situ dans le rpertoire "C:\Program Files\Fichiers
communs\MicrosoftShared\DAO".
Le fichier d'aide DAO360.chm, situ dans le rpertoire C:\Program Files\Fichiers Communs\Microsoft
Shared\Office12\1036vouspermetd'obtenirdesinformationsdtaillessurl'utilisationdumodleDAO.
HirarchiedesobjetsDAO

ENI Editions - All rigths reserved

- 1-

- 2-

ENI Editions - All rigths reserved

Descriptiondescollections
Unecollectionexistepourchacundestypesd'objetDAO,l'exceptiondel'objetDBEngine.
Toute collection inclut tous les objets d'un type donn. Par exemple, la collection DataBases contient tous les
objetsDataBaseouverts.
ToutobjetDAOpossdeunecollectionProperties,l'exceptiondesobjetsError.
La plupart des objets DAO disposent de collections par dfaut. Par exemple, la collection par dfaut d'un objet
RecordsetestlacollectionFields.Lecodepeutainsitresimplifi.
Containers:EnsembledesobjetsContainerd'unebasededonnes.
Databases:Contienttouteslesbasesdedonnes(objetsDataBase)ouvertesdansunWorkspace.
Documents:EnsembledesobjetsDocumentd'unContainer.
Errors:Ensembledeserreurs(Error)dumoteurd'accsauxdonnes(DBEngine).
Fields : Ensemble des champs (Field) d'une table (TableDef), d'une requte (QueryDef), d'un index (Index),
d'unjeud'enregistrements(Recordset)oud'unerelation(Relation).
Groups : Ensemble des groupes d'utilisateurs (Group) d'un Workspace ou ensemble des groupes d'utilisateurs
(Group)auxquelsappartientunutilisateur(User).
Indexes:Ensembledesindex(Index)d'unetable(TableDef).
Parameters:Ensembledesparamtres(Parameter)d'unerequte(QueryDef).
Properties:Ensembledesproprits(Property)d'unobjet.
QueryDefs:Contienttouteslesdfinitionsderequte(QueryDef)d'unebasededonnes(Database).
Recordsets:Ensembledesjeuxd'enregistrementsouverts(Recordset)d'unebasededonnes(Database).
Relations:Ensembledesrelations(Relation)d'unebasededonnes(Database).
TableDefs:Contienttouteslesdfinitionsdetable(TableDef)d'unebasededonnes(Database).
Users:Ensembledesutilisateurs(User)d'unWorkspaceoud'ungrouped'utilisateurs(Group).
Workspaces:ContienttouslesobjetsWorkspaceactifs.
Proprits

Count :Renvoielenombred'lmentsdanslacollection.
Item :Renvoieunmembrespcifiqued'unecollectionenfonctiondesapositionoudesacl.
Toutes les collections peuvent utiliser ces proprits.
Exemple
Liste des tables de la base de donnes courante.
Dim intI As Integer
For intI = 0 To CurrentDb.TableDefs.Count - 1
MsgBox CurrentDb.TableDefs.Item(intI).Name
Next intI

ENI Editions - All rigths reserved

- 3-

Mthodes

Append:Ajouteunobjetlacollection.
Delete:Supprimeunobjetdelacollection.
Refresh:Ractualiselecontenudelacollection.
Les collections Errors, Databases, Containers, Documents, Parameters et Recordsets ne peuvent utiliser
lesmthodesAppendetDelete.Leurcontenuestdirectementgrparlemoteurdelabasededonnes.
L'objetDBEngine
Ilreprsentelemoteurd'accsauxdonnesMicrosoftJet.Ilcontientetcontrlel'ensembledesobjetsDAO.
Proprits

DefaultType:Dfinitletyped'espacedetravail,MicrosoftJetouODBCDirect.
DefaultUser etDefaultPassword:Nomd'utilisateuretmotdepasseutilissparlemoteurdebasededonnes
MicrosoftJetquandunobjetWorkspaceestcrsansnomd'utilisateurnimotdepassespcifique.
InitPath:DfinitourenvoiedesinformationssurlaclduregistreWindowsquicontientdesvaleursrelativesau
moteurdebasededonnesMicrosoftJet.
SystemDB : Dfinit ou renvoie le chemin d'accs au fichier d'informations sur le groupe de travail en cours
(MDW).
Version:Valeurquiindiquelaversiondelabasededonnesoudumoteurdebasededonnesassocil'objet.
Mthodes

CompactDatabase:Compacteunebasededonnesferme.
CreateWorkspace:CreunnouvelobjetWorkspace.
Idle : Interrompt le traitement, permettant ainsi au moteur de base de donnes Microsoft Jet de terminer les
tchesenattente.
SetOption:Permetdemodifiertemporairementlesoptionsdumoteurd'accsauxdonnesMicrosoftJet.
Collections

Workspaces,Properties,Errors
Exemple
Compactage de la base de donnes Devis en Devis2.
DBEngine.CompactDatabase "c:\devis\devis.accdb", _
"c:\devis\devis2.accdb"
Affichage de la version du moteur Microsoft Jet.
MsgBox "Numro de version du moteur Microsoft Jet :" &
DBEngine.Version,_
vbExclamation
LesobjetsWorkspace

- 4-

ENI Editions - All rigths reserved

UnobjetWorkspace(espacedetravail)permetdedfinirunesessiondetravailpourunutilisateur.
Proprits

Name:Renvoielenomdel'objetWorkspace.
Type:Renvoieoudfinitletypedeconnexiondel'objetWorkspace(constantedbUseJetsil'objetWorkspaceest
connectaumoteurdebasesdedonnesMicrosoftJet,constantedbUseODBCsil'objetWorkspaceestconnect
unesourcededonnesODBC).
UserName:Renvoielenomdupropritairedel'objetWorkspace.
Autresproprits

DefaultCursorDriver,IsolateODBCTrans,LoginTimeout
Mthodes

BeginTrans:Dmarreunenouvelletransaction.
Close:FermeleWorkspace.
CommitTrans:Termineetvalidelatransactionencours.
CreateDatabase:CreunnouvelobjetDatabase.
CreateGroup:Creunnouveaugrouped'utilisateurs.
CreateUser:Creunnouvelutilisateur.
OpenDatabase:Ouvreunebasededonns.
RollBack:Annuleettermineunetransactionencoursetymetfin.
Collections

Databases,Users,Groups,Properties
Exemple
Ouverture de la base de donnes Devis dans l'espace de travail actif.
Dim
Dim
Set
Set

wrk
dbs
wrk
dbs

As Workspace
As Database
= DBEngine.Workspaces(0)
= wrk.OpenDatabase("C:\devis\devis.accdb")

LesobjetsDatabase
UnobjetDatabasereprsenteunebasededonnesouverte.
Proprits

CollatingOrder:Dfinitlamthodedecomparaisondeschanesdecaractresselonlalangue.
Connect:Dterminelesinformationsncessairesl'ouvertured'unebasededonnesexterneoul'attachement
d'unetabled'unebaseexterne.
DesignMasterID:DtermineleGUIDdelastructurematred'unjeuderplicas.
Name:Renvoielenomdelabase.

ENI Editions - All rigths reserved

- 5-

RecordsAffected:Indiquelenombred'enregistrementsaffectsparladerniremthodeExecute.
Replicable:Indiquesilabasededonnespeutfairel'objetd'unerplication.
ReplicaID:Renvoiel'identifiantd'unrplica.
Transactions:Indiquesilabasededonnesdelaconnexionprendencomptelestransactions(ODBCDirect).
Updatable:Indiquesilesmodificationsdel'objetDatabasesontautorises.
Version:Identifielaversionduformatdelabasededonnes.
V1xNullBehavior:IndiquesileschanesdelongueurnullesontconvertiesenvaleursdetypeNull.
Mthodes

Close:Fermel'objetDatabase.
CreateProperty:CreunnouvelobjetProperty.
CreateQueryDef:CreunnouvelobjetQueryDef.
CreateRelation:CreunnouvelobjetRelation.
CreateTableDef:CreunnouvelobjetTableDef.
Execute:ExcuteunerequteactionouuneinstructionSQL.
MakeReplica:CreunRplicadelabasededonnes.
NewPassword:DfinitunnouveaumotdepassepourunebasededonnesMicrosoftJet.
OpenRecordset:CreunnouvelobjetRecordset.
PopulatePartial:SynchroniselesmodificationsapportesunRplicapartielparrapportunRplicaintgral.
Synchronize:SynchronisedeuxRplica.
Collections

TableDefs,QueryDefs,Relations,Containers,Recordsets,Properties
Exemple
Initialisation d'une rfrence sur la base de donnes courante.
Dim dbDevis as DAO.Database
Set dbDevis = CurrentDb()
Ouverture d'une base de donnes externe.
Dim dbsDevis as DAO.Database
Set dbsDevis = DBEngine.OpenDatabase _
("C:\Clients\Clients.accdb")
Cration d'un objet RecordSet de type table en lecture seule sur la table Clients de la base de donnes courante.
Dim dbs As Database
Dim rstCli As DAO.Recordset
Set dbs = CurrentDb

- 6-

ENI Editions - All rigths reserved

Set rstCli = dbs.OpenRecordset("Clients", dbOpenTable, _


dbReadOnly)
LesobjetsRecordset
UnobjetRecordsetreprsentelesenregistrementsd'unetableouceuxissusd'unerequte.
Ilexistequatretypesd'objetsRecordset:
Recordset
Table
Dynaset
(feuille
de rponse
dynamique)
Recordset

Dfinition
Reprsente une table.
Reprsente le rsultat
d'une requte dont les
enregistrements peuvent
tre mis jour.
Dfinition

ForwardOnly Idem Snapshot mais


(En Avant
dfilement des
seulement)
enregistrements
uniquement vers l'avant.
Snapshot
(instantan)

Reprsente le rsultat
d'une requte en lecture
seule.

Intrt
Permet d'utiliser les index.

Constante
de dclaration
dbOpenTable

Permet de travailler sur les dbOpen


donnes provenant de
Dynaset
plusieurs tables.
Intrt

Constante
de dclaration

Rapidit

dbOpen
ForwardOnly

Rapidit par rapport au


Dynaset.

dbOpen
Snapshot

Les types d'objets Recordset concerns par chaque proprit ou mthode sont reprsents par T (Table), D (Dynaset), S (Snapshot),
F (Forward Only).
Proprits

AbsolutePosition:Dterminelapositionrelatived'unenregistrementdansunrecordset(DS).
BOF:IndiqueunpositionnementaudbutduRecordset(DSTF).
Bookmark:Renvoieoudfinitunsignetquiidentifiedefaonuniqueunenregistrement(DST).
Bookmarkable:IndiquesileRecordsetprendenchargelessignets(DST).
CacheStart:Dfinitourenvoielesignetdupremierenregistrementplacerenmmoirecache(D).
DateCreated:Renvoieladateetl'heuredecrationdelatablesousjacente(T).
EditMode:Indiquel'tatdemodificationdel'enregistrementencours(DT).
EOF:IndiqueunpositionnementlafinduRecordset(DSTF).
Filter:Permetdedfinirlefiltreappliquer(DSF).
Index:Dfinitl'indexutiliser(T).
LockEdits:Dfinitlaconditiondeverrouillage(DTS).
LastModified:Renvoieunsignetindiquantledernierenregistrementmodifi(DT).
LastUpdated:Renvoieladateetl'heuredederniremodificationdelatabled'originesousjacente(T).
Name:RenvoielenomduRecordset(DSTF).

ENI Editions - All rigths reserved

- 7-

NoMatch:Indiquesil'enregistrementrecherchattrouv(DST).
PercentPosition : Retourne la position en cours d'un enregistrement en pourcentage du nombre total
d'enregistrements(DST).
RecordCount:Indiquelenombred'enregistrementssollicits(DSTF).
Restartable : Indique si le Recordset prend en charge la mthode Requery qui excute nouveau la requte
sousjacente(DSFT).
Sort:Dfinitl'ordredetri(DS).
Transactions:IndiquesileRecordsetsupportelestransactions(DTSF).
Type:IndiqueletypedeRecordset(DSTF).
Updatable:Indiquelesmisesjourautorises(DTSF).
ValidationText:Spcifielemessaged'erreursilaconditiondevalidationestfausse(DSTF).
ValidationRule:SpcifielaconditiondevalidationduRecordset(DSTF).
Mthodes

AddNew:Creunnouvelenregistrement(DT).
CancelUpdate:Annulelesmisesjourenattente(DT).
Clone:CreunecopieduRecordset(DST).
Close:FermeleRecordset(DSTF).
CopyQueryDef:Creunecopiedel'objetQueryDefassociauRecordset(DSF).
Delete:Supprimel'enregistrementcourant(DT).
Edit:Passel'enregistrementcourantenmodeEdition(DT).
FindFirst:Localiselepremierenregistrementrpondantaucritreetenfaitl'enregistrementcourant(DS).
FindLast:Localiseledernierenregistrementrpondantaucritreetenfaitl'enregistrementcourant(DS).
FindNext:Localisel'enregistrementsuivantrpondantaucritreetenfaitl'enregistrementcourant(DS).
FindPrevious:Localisel'enregistrementprcdentrpondantaucritreetenfaitl'enregistrementcourant(DS).
GetRows:Extraitplusieurslignesd'unRecordsetetlescopiedansuntableau(DSTF).
MoveFirst:Localiselepremierenregistrementetenfaitl'enregistrementcourant(DST).
MoveLast:Localiseledernierenregistrementetenfaitl'enregistrementcourant(DST).
MoveNext:Localisel'enregistrementsuivantetenfaitl'enregistrementcourant(DST).
MovePrevious:Localisel'enregistrementprcdentetenfaitl'enregistrementcourant(DST).
Move:Changelapositiondel'enregistrementcourant(DST).
OpenRecordset:CreunnouveauRecordset(DST).

- 8-

ENI Editions - All rigths reserved

Requery:Metjourlesenregistrementsd'unRecordsetenrexcutantlarequtesousjacente(DSF).
Seek:LocaliseparrapportunIndexslectionn,lepremierenregistrementrpondantauxcritresspcifiset
enfaitl'enregistrementcourant(T).
Update:Metjourl'enregistrement(DT).
Exemple
Transformation en majuscules des caractres du champ Cli_Societe dans la table Clients.
Dim dbs As Database
Dim rstCli As DAO.Recordset
' Cration du Recordset
Set dbs = CurrentDb
Set rstCli = dbs.OpenRecordset("Clients", dbOpenTable)
rstCli.MoveFirst
' Parcourt des enregistrements
With rstCli
Do Until .EOF
.Edit
rstCli("Cli_Societe") = UCase(rstCli("Cli_Societe"))
' Mise jour
.Update
' Enregistrement suivant
.MoveNext
Loop
End With
rstCli.Close
Utilisation de la mthode Seek: recherche d'un client partir de son code.
Dim dbs As Database
Dim rstCli As DAO.Recordset
Dim strCodeCli As String
' Cration du Recordset
Set dbs = CurrentDb
Set rstCli = dbs.OpenRecordset("Clients", dbOpenTable)
With rstCli
' Saisie du code client
strCodeCli = InputBox("Saisissez le code client")
' Index courant : cl primaire
.Index = "PrimaryKey"
' Recherche
.Seek "=", strcodecli
' Enregistrement non trouv
If .NoMatch Then
MsgBox "Client non trouv"
Else
' Enregistrement trouv
MsgBox "Socit : " & rstCli("Cli_Societe")
End If
End With
rstCli.Close
Utilisation de la mthode Find : recherche des clients dont le nom de Socit commence par une valeur donne.
Dim
Dim
Dim
Dim

dbs As DAO.Database
rstCli As DAO.Recordset
strSoc As String
strCrit As String

' Cration du Recordset


Set dbs = CurrentDb
Set rstCli = dbs.OpenRecordset("Clients", dbOpenSnapshot)
With rstCli
' Saisie du code client
strSoc = InputBox("Saisissez les 1re lettres de la
Socit")
ENI Editions - All rigths reserved

- 9-

.MoveLast
' Recherche
strCrit = "Cli_Societe Like '" & strSoc & "*'"
.FindFirst strCrit
' Enregistrement non trouv
If .NoMatch Then
MsgBox "Client non trouv"
Else
' Si trouve : recherche des suivants
Do While True
MsgBox rstCli("Cli_Societe")
.FindNext strCrit
If .NoMatch Then Exit Do
Loop
End If
End With
LesobjetsTabledef
Un objet TableDef reprsente la dfinition enregistre d'une table ou d'une table attache cre dans une base
externe.
Proprits

Attributes : Dtermine les caractristiques de la table dcrite par l'objet TableDef (exclusivit, attachement,
systme...).
ConflictTable : Renvoie le nom de la table de conflits contenant les enregistrements entrs en conflit pendant
uneoprationdesynchronisation.
Connect:Retournelesinformationssurlasourcedel'objetTableDef.
DateCreated:Indiqueladateetl'heuredecrationdelatablesousjacente.
KeepLocal:Dterminesilatablenedoitpasfairepartied'uneoprationderplication.
LastUpdated:Indiqueladateetl'heuredederniremodificationdelatablesousjacente.
Name:Renvoielenomdelatable.
RecordCount:Indiquelenombred'enregistrementsdanslatable.
Replicable:Dterminesilatabledoitfairepartied'uneoprationderplication.
ReplicaFilter:Dfinitlesenregistrementsd'unetabledevantfairepartied'uneoprationderplication.
SourceTableName:Spcifielenomdelatableattache.
Updatable:Indiquesilamodificationdelastructureestautorise.
ValidationText:Spcifielemessaged'erreursilaconditiondevalidationestfausse.
ValidationRule:Spcifielaconditionrespecterpourlavalidationdel'objet.
Mthodes

CreateField:Creunnouveauchamp(Field).
CreateIndex:CreunnouvelIndex.
CreateProperty:CreunnouvelobjetProperty.
OpenRecordset:CreunnouveauRecordset.

- 10 -

ENI Editions - All rigths reserved

RefreshLink:Metjourlesinformationspartird'unetableattache.
Collections

Fields,Indexes,Properties
Exemple
Ajout d'un champ de type Mmo dans la table Clients.
Dim dbs As DAO.Database
Dim tdf As DAO.Tabl eDef
Dim fld As DAO.Field
Set dbs = CurrentDb
Set tdf = dbs.TableDefs("Clients")
Set fld = tdf.CreateField("Cli_Comment", dbMemo)
tdf.Fields.Append fld
LesobjetsFieldetIndex

Field

Un objet Field reprsente un champ d'une table (TableDef), d'une relation (Relation), d'une requte (QueryDef), d'un jeu
d'enregistrements (Recordset) ou d'un index (Index).
Proprits

AllowZeroLength:Dfinitsiunechanevideestautorisecommevaleurduchamp.
Attributes:Indiquecertainescaractristiquesduchamp.
CollatingOrder:Spcifielescaractristiquesdecomparaisondechanesdecaractresetl'ordredetri.
DataUpdatable:Indiquesilechamppeuttremisjour.
DefaultValue:Dfinitlavaleurpardfautduchamp.
FieldSize:Renvoielatailled'unchampMemoouBinaireLong(ObjetOLE).
ForeignName : Spcifie, dans une Relation, le nom du champ d'une table externe (table lie) qui correspond
unchamp(clprimaire)delatablesource(tablederfrence).
Name:Renvoielenomduchamp.
OrdinalPosition:Spcifiel'ordred'affichagedeschamps.
Required:Dfinitsilechampdoitcontenirobligatoirementunevaleur.
Size:Dfinitourenvoielatailleduchamp.
SourceField:Indiquelenomduchampsourcedesdonnes.
SourceTable:Indiquelenomdelatablesourcedesdonnes.
Type:Indiqueletypededonneduchamp.
Value:Renvoielavaleurduchamp.
ValidationText:Spcifielemessaged'erreurrenvoysilaconditiondevalidationduchampestfausse.
ValidationOnSet:Spcifiesilavalidationdevaleurduchampestimmdiatelorsdesamodification.

ENI Editions - All rigths reserved

- 11 -

ValidationRule:Spcifielaconditiondevalidationduchamp.
Mthodes

AppendChunk:Ajoutedesdonnesd'uneexpressionchaneunchampdetypeMemoouObjetOLE.
CreateProperty:CreunnouvelobjetProperty.
GetChunk:Littoutouunepartied'unchampMemoouObjetOLE.
Collections

Properties
Exemple
Affiche la liste de tous les champs (nom et type) de la table Clients dans la fentre Excution.
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Set dbs = CurrentDb
Set tdf = dbs.TableDefs("Clients")
For Each fld In tdf.Fields
Debug.Print fld.Name & " " & fld.Type
Next

Index

Un objet Index reprsente un index associ un objet TableDef ou Recordset de type table.
Proprits

Clustered:Indiquesil'indexreprsentel'indexderegroupementd'unetable.
DistinctCount:Renvoielenombredevaleursuniquespourcetindexdanslatableassocie.
Foreign:Indiquesil'indexestuneclexternedelatable.
IgnoreNulls : Indique s'il y a cration d'une entre d'index pour les enregistrements dont les champs indexs
contiennentlavaleurNull.
Name:Renvoielenomdel'index.
Primary:Indiquesil'indexestlaclprimaire.
Required:Dfinitsitousleschampsdel'indexdoiventcontenirobligatoirementunevaleur.
Unique:Indiquesilesvaleursdel'indexsontuniques(pasdedoublons).
Mthodes

CreateField:Creunnouveauchamppourl'index.
CreateProperty:Creunenouvelleproprit.
Collections

Fields,Properties
Exemple

- 12 -

ENI Editions - All rigths reserved

Cration de l'index Societe sur le champ Cli_Societe de la table Clients.


Dim
Dim
Dim
Dim

dbs
tdf
fld
idx

As
As
As
As

DAO.Database
DAO.TableDef
DAO.Field
DAO.Index

Set dbs = CurrentDb


Set tdf = dbs.TableDefs("Clients")
Set idx = tdf.CreateIndex("Societe")
Set fld = idx.CreateField("Cli_Societe")
idx.Unique = False
idx.Fields.Append fld
tdf.Indexes.Append idx
LesobjetsQueryDefetParameter

QueryDef

L'objet QueryDef reprsente la dfinition enregistre d'une requte dans une base de donnes.
Proprits

Connect:Donnelesinformationssurlabasededonnesutilisedanslarequte.
DateCreated:Indiqueladateetl'heuredecrationdelarequte.
KeepLocal:Dterminesilarequtedoitfairepartieounond'uneoprationderplication.
LastUpdated:Indiqueladateetl'heuredederniremisejourdelarequte.
MaxRecords:Dfinitlenombremaximumd'enregistrementsquelarequtedoitretourner.
Name:Renvoielenomdelarequte.
RecordsAffected:Indiquelenombred'enregistrementsaffectsparladerniremthodeExecute.
Replicable:Dterminesilarequtedoitfairepartied'uneoprationderplication.
ReturnsRecords:Indiquesilarequtearetourndesenregistrements.
SQL:Dfinitourenvoiel'instructionSQLassocielarequte.
Type:Dfinitletypedelarequte(slection,ajout...).
Updatable:Indiquesilesmisesjoursontautorisestraverslarequte.
Mthodes

Close:Fermelarequte.
CreateProperty:Creunenouvelleproprit.
Execute:LanceunerequteActionouexcuteuneinstructionSQL.
OpenRecordset:CreunnouveauRecordset.
Collections

Fields,Parameters,Properties
Exemple
ENI Editions - All rigths reserved

- 13 -

Cration d'une nouvelle requte base sur une instruction SQL.


Dim dbs As Database
Dim qdf As QueryDef
Set dbs = CurrentDb
Set qdf = dbs.CreateQueryDef("Liste des " _
& "employs tris par date d'embauche")
qdf.SQL = "Select * from Employes " _
& "Order by [Date Embauche]"

Parameter

Un objet Parameter reprsente un paramtre d'un objet QueryDef paramtr.


Proprits

Name:Dfinitourenvoielenomduparamtre.
Type:Dfinitourenvoieletypededonnesduparamtre.
Value:Dfinitourenvoielavaleurduparamtre.
Collections

Properties
Exemple
Cration d'une requte paramtre et affichage du nombre de paramtres.
Dim dbs As Database
Dim qdf As QueryDef
Dim prm As Parameter
Set dbs = CurrentDb
Set qdf = dbs.CreateQueryDef("Liste des
& " embauchs une priode donne")
qdf.SQL = "Select * from Employes Where
& "[Date embauche] >= [Entrez la date
& " And [Date embauche] <= [Entrez la
MsgBox qdf.Parameters.Count

Employs" _
" _
de dbut] " _
date de fin] "

LesobjetsRelation
UnobjetRelationreprsenteunerelationentreleschampsdedeuxobjetsTableDef.
Proprits

Attributes:Indiquecertainescaractristiquesdelarelation(unplusieurs,intgrit...).
ForeignTable:Dfinitourenvoielenomdelatableexterne.
Name:Dfinitourenvoielenomdelarelation.
PartialReplica : Dfinit si la relation doit tre prise en compte pour le remplissage d'un Rplica partiel partir
d'unRplicaintgral.
Table:DfinitourenvoielenomdelaTableDefouduQueryDefsource.
Mthodes

CreateField:CreunnouvelobjetField.
- 14 -

ENI Editions - All rigths reserved

Collections

Fields,Properties
Exemple
Enregistrement dans une table des diffrentes relations et de leurs proprits. La table Relations contient 3 champs texte
(Rel_Source, Rel_Externe, Rel_Typerel et 3 champs boolen (Rel_Integrite, Rel_Maj_Cascade, Rel_Sup_Cascade).
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim rel As Relation
' Cration du Recordset
' et suppression des enregistrements existants
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Relations", dbOpenTable)
Do While Not rst.EOF
rst.Delete
rst.MoveNext
Loop
' Stockage des diffrentes relations du modle
' relationnel dans la table Relations
For Each rel In dbs.Relations
rst.AddNew
rst("REL_SOURCE") = rel.Table
rst("REL_EXTERNE") = rel.ForeignTable
If rel.Attributes And dbRelationUnique Then
rst("REL_TYPEREL") = "1 1"
Else
rst("REL_TYPEREL") = "1 n"
End If
rst("REL_INTEGRITE") = IIf(rel.Attributes And _
dbRelationDontEnforce, False, True)
rst("REL_MAJ_CASCADE") = IIf(rel.Attributes And _
dbRelationUpdateCascade, True, False)
rst("REL_SUP_CASCADE") = IIf(rel.Attributes And _
dbRelationDeleteCascade, True, False)
rst.Update
Next
rst.Close
Visualisation dans Access de la table RELATIONS mise jour :

LesobjetsContaineretDocument

Container

Un objet Container reprsente l'ensemble des informations portant sur une base de donnes et sur chaque type d'objets qu'elle
contient.
Proprits

AllPermissions:Retournetouteslesautorisationsquis'appliquentlaproprit UserNamedel'objetContainer
encours.

ENI Editions - All rigths reserved

- 15 -

Inherit : Indique si les nouveaux objets Document hriteront, ou non, d'une valeur pour la proprit
Permissions.
Name:Indiquelenomducontainer.
Owner:Indiquelepropritaireducontainer.
Permissions : Dfinit les permissions d'un utilisateur ou d'un groupe d'utilisateurs identifis par la proprit
UserNamedel'objetContainer.
UserName:Dfinitlenomdel'utilisateur.
Exemple
Affichage de la liste des noms de tous les objets Container de la base dans la fentre Excution.
Dim dbs As DAO.Database
Set dbs = CurrentDb
Dim ctn As Container
For Each ctn In dbs.Containers
Debug.Print ctn.Name
Next

Document

Un objet Document reprsente l'ensemble des informations portant sur un type d'objet (base de donnes, table, requte ou relation
enregistre).
Proprits

AllPermissions(3.0) : Retourne toutes les autorisations qui s'appliquent la proprit UserName en cours de
l'objetDocument.
Container:Retournelenomdel'objetContainerauquelappartientleDocument.
DateCreated:Retourneladateetl'heuredecrationdelatablesousjacente.
KeepLocal:Dterminesiledocumentdoitounonfairepartied'uneoprationderplication.
LastUpdated:Renvoieladateetl'heuredederniremodificationdelatablesousjacente.
Name:RenvoielenomduDocument.
Owner:RenvoielenomdupropritaireduDocument.
Permissions : Dfinit les permissions de l'utilisateur ou du groupe d'utilisateurs identifis par la proprit
UserNamedel'objetDocument.
- 16 -

ENI Editions - All rigths reserved

Replicable:Dterminesiledocumentdoitfairepartied'uneoprationderplication.
UserName:Dfinitlenomdel'utilisateur.
Collections

Properties
Exemple
Affichage de la liste de tous les formulairesdans la fentre Excution.
Dim dbs As DAO.Database
Dim ctn As Container
Dim doc As Document
Set dbs = CurrentDb
For Each ctn In dbs.Containers
If ctn.Name = "Forms" Then
For Each doc In ctn.Documents
Debug.Print doc.Name
Next
End If
Next
LesobjetsGroupetUser

User

Un objet User reprsente un compte utilisateur avec ses autorisations.


Proprits

Name:Dfinitourenvoielenomducompteutilisateur.
PID:Renvoielenumrod'identificationpersonnelducompteutilisateur.
PassWord:Renvoielemotdepasseducompteutilisateur.
Mthodes

CreateGroup:CreunnouvelobjetGroup.
NewpassWord:Dfinitunnouveaumotdepassepourl'utilisateur.
Collections

Groups,Properties

Group

Un objet Group reprsente un groupe d'utilisateurs possdant les mmes autorisations.


Proprits

Name:Dfinieourenvoielenomdugrouped'utilisateurs.
PID:Dfinitlenumropersonnelducomptedegroupe.
Mthodes

CreateUser:CreunnouvelobjetUser.
ENI Editions - All rigths reserved

- 17 -

Collections

Users,Properties
Exemple
Pour chaque groupe, affichage dans la fentre Excution des noms de groupes et d'utilisateurs du groupe.
Dim wrk As Workspace
Dim usr As User
Dim grp As Group
Set wrk = DBEngine.Workspaces(0)
For Each grp In wrk.Groups
Debug.Print grp.Name
With grp
For Each usr In .Users
Debug.Print usr.Name
Next
End With
Next
L'objetError
UnobjetErrorreprsenteledtaild'uneerreurd'accsauxdonnes.
Proprits

Description:Renvoieletextedel'erreur.
HelpContext:Fournitunidentificateurdecontexted'aide,souslaformed'unevariabledechane,correspondant
unerubriqued'unfichierd'aideMicrosoftWindows.
HelpFile:Indiquelechemind'accscompletaufichierd'aideconsidr.
Number:Retournelenumrodel'erreur.
Source:Fournitlenomdel'objetoudel'applicationquiagnrl'erreur.
Exemple
Dclenchement intentionnel d'une erreur et affichage de toutes les proprits de l'objet Error.
Private Sub cmdErreur_Click()
On Error GoTo Gest_Erreur
' Dclenche intentionnellement une erreur
DBEngine.Workspaces(0).OpenDatabase _
("C:\Devis\devis1.accdb")
Exit Sub
Gest_Erreur:
Dim strError As String
Dim errLoop As Variant
' Parcourt les lments de la collection Errors
' Affiche un message avec la description de l'erreur
For Each errLoop In Errors
With errLoop
strError = _
"Erreur #" & .Number & vbCr
strError = strError & _
" " & .Description & vbCr
strError = strError & _
"(Source: " & .Source & ")" & vbCr
strError = strError & _
"Appuyez sur F1 pour afficher " & _
"la rubrique " & .HelpContext & vbCr
strError = strError & _
- 18 -

ENI Editions - All rigths reserved

"dans le fichier " & .HelpFile & "."


End With
MsgBox strError
Next
End Sub
Lemessageaffichestlesuivant:

LesobjetsProperty
UnobjetPropertyreprsenteunepropritd'unobjet.
Proprits

Inherited:Indiquesilapropritesthrite.
Name:Dfinitourenvoielenomdelaproprit.
Type:Dfinitourenvoieletypedelaproprit.
Value:Dfinitourenvoielavaleurdelaproprit.
Exemple
Affichage du nom et de la valeur de chaque proprit d'un objet Recordset dans la fentre Excution.
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim prp As DAO.Property
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Clients")
' Parcourt les proprits
For Each prp In rst.Properties
On Error Resume Next
Debug.Print prp.Name & ":" & prp.Value
Next

ENI Editions - All rigths reserved

- 19 -

- 20 -

ENI Editions - All rigths reserved

Lemodled'accsauxdonnesADO
Prsentation
La bibliothque d'objets ADO (ActiveX Data Objects) vous permet d'crire une application qui accde des
donnessituessurunserveurdebasesdedonnesetdelesmanipulerparlebiaisd'unfournisseurOLE DB.
ADOal'avantaged'trefaciled'emploi,performant,etd'utiliserpeudemmoireetd'espacedisque.ADOoffreles
fonctionnalitsdebasepermettantdecrerdesapplicationsclient/serveuretdesapplicationsWeb.
Pour pouvoir utiliser la bibliothque d'objets ADO, il est ncessaire de cocher la rfrence Microsoft ActiveX
DataObjects2.xLibrary dans la liste des rfrences aux bibliothques d'objets. Si cette rfrence n'est pas
disponible,vousdevezslectionnerlefichierMSADO15.dllpartirduboutondecommandeParcourir.Cefichier
estgnralementsitudanslerpertoire"C:\ProgramFiles\Fichierscommuns\System\ADO".
VouspouvezgalementutiliserlesextensionsADOenslectionnantlarfrenceMicrosoftADOExt2.xforDLL
and Security (fichier MSADOX.DLL). Ces extensions vous permettent d'accder des objets complmentaires
(catalog,users,views...)aumodleADO.
Lefichierd'aideADO210.chmvouspermetd'obtenirdesinformationsdtaillessurl'utilisationdesmodlesADO.
ADOetOLEDB
OLE DB est une technologie permettant un accs uniforme aux donnes stockes dans diverses sources
d'informations : bases de donnes relationnelles ou non relationnelles, messageries, systmes de fichiers
Quasimenttouteslesdonnesdel'entreprisesontaccessiblesparOLEDB.
ADO (ActiveX Data Objects) est l'interface de programmation utilise pour accder aux donnes de tous les
fournisseursdedonnesOLEDB.
Architecturetechnologique

*Microsoft Office 12.0 Access Database Engine OLE DB Provider remplace Microsoft Jet 4.0 OLE DB Provider.
Les fournisseurs de donnes ou Providers sont des pilotes permettant de communiquer avec les sources de donnes.
HirarchiedesobjetsADO

ENI Editions - All rigths reserved

- 1-

ModledebasedeprogrammationADO
ADOvouspermetd'excuterlasquenced'actionssuivante:

- tablir une connexion une base de donnes OLE DB ou ODBC au moyen de l'objet Connection.
- crer une commande permettant d'envoyer une requte SQL au serveur en utilisant l'objet Command,
- excuter la commande. Si la commande renvoie des lignes, les stocker dans un objet Recordset,
- exploiter les donnes de l'objet Recordset: trier, filtrer, modifier, supprimer les enregistrements,

- 2-

ENI Editions - All rigths reserved

- mettre jour les donnes: valider les modifications ventuelles de l'objet Recordset, incorporer les mises jour dans une
transaction,

- si une transaction a t utilise: accepter ou rejeter les mises jour apportes au cours de cette dernire.
Exemple
Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset
' Etape 1 : tablir une connexion une source de
donnes
' SQL Server au moyen de la technologie OLEDB
cnn.Open "Provider=SQLOLEDB.1;Data Source=SRV;" _
& "Initial Catalog=Devis;" _
& "Integrated Security=SSPI;Persist Security Info=False;"
' Etape 2 : crer une commande
Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * FROM Clients"
' Etape 3 : excuter la commande
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenStatic, adLockBatchOptimistic
' Etape 4 : manipuler les donnes
rs.Filter = "CLI_VILLE LIKE 'Nantes'"
Do While Not rs.EOF
rs("CLI_PAYS") = "F"
rs.MoveNext
Loop
' Etape 5 : mettre jour les donnes modifies
cnn.BeginTrans
rs.UpdateBatch
' Etape 6 : terminer la mise jour de la base SQL
If MsgBox("Confirmez-vous les mises jour ?", _
vbYesNo) = vbYes Then
cnn.CommitTrans
Else
cnn.RollbackTrans
End If
DescriptiondesobjetsADO
Connection:Reprsenteuneconnexionavecunesourcededonnes.
Command:Dfinitunecommandespcifiqueexcutersurunesourcededonnes.
Recordset:Reprsentelejeud'enregistrementscompletd'unetabledebasesdedonnesoulesrsultatsd'une
commande(ex :rsultatsd'unerequteSQL).
Record : Fonctionne essentiellement comme un objet Recordset d'une seule ligne. La source des donnes dans
un objet Record peut tre une commande qui renvoie une ligne de donnes partir du fournisseur. L'utilisation
d'objetsRecordlaplaced'objetsRecordsetpourrecevoirlesrsultatsd'unerequterenvoyantuneseuleligne
dedonnesliminelachargedetraitementliel'instanciationdel'objetRecordset,lequelestpluscomplexe.
Stream:Fournitlemoyendelire,crireetgrerunfluxd'octetsconstitudetexteoudedonnesbinaires.
LescollectionsADO
Parameters:CollectiondetouslesobjetsParameterd'unobjetCommand.L'objetParameterreprsenteun
paramtre ou argument associ un objet Command bas sur une requte paramtre ou une procdure
stockeparamtre.
Properties : Collection de tous les objets Property pour un objet donn (Connection, Command,
Recordset).L'objetPropertyreprsenteunecaractristiquedynamiqued'unobjetADOdfiniparl'utilisateur.
ENI Editions - All rigths reserved

- 3-

Errors : Collection de tous les objets Error crs en rponse un chec unique li au fournisseur OLE DB.
L'objetErrorcontientdesinformationsrelativesuneerreurd'accsauxdonnes.
Fields:CollectiondetouslesobjetsFieldcorrespondunecolonne(ouchamp)d'unobjetRecordset.
LesobjetsConnection
Mthodes

BeginTrans :Commenceunenouvelletransaction.
Cancel : Interrompt et annule l'excution d'une requte lance en mode asynchrone l'aide des mthodes
ExecuteouOpen.
Close:Fermeuneconnexionouverteainsiquetouslesobjetsdpendantdecelleci.
CommitTrans:Enregistrelesmodificationseffectuessurlesdonnesetarrtelatransactionencours.
Execute:Excutelarequte,l'instructionSQL,laprocdurestockeouletextepropreaufournisseurOLEDB.
Open:Ouvreuneconnexionunesourcededonnes,afindepouvoirexcuterdescommandes.
OpenSchema :Obtientdesinformations,enprovenancedufournisseurOLE DB,relativesauschmadelabase
dedonnes.
RollbackTrans : Annule les modifications effectues sur les donnes durant la transaction en cours et arrte
celleci.
Proprits

Attributes : Dfinit ou renvoie une ou plusieurs caractristiques d'un objet Connection. La valeur par dfaut
estzro.
CommandTimeout : Indique le dlai respecter, en secondes, lors d'une tentative d'excution d'une
commandeavantd'interromprecettetentativeetdegnrerunmessaged'erreur.Lavaleurpardfautest30.
ConnectionString : Dfinit ou renvoie les informations utilises pour tablir une connexion avec la source de
donnes.
ConnectionTimeout : Indique le dlai respecter, en secondes, lors d'une tentative de connexion avant d'y
mettreuntermeetdegnrerunmessaged'erreur.Lavaleurpardfautest15.
CursorLocation:Dfinitourenvoieletypedecurseurutiliserpardfautpourcetteconnexion(curseurct
clientoucurseurctserveur).
DefaultDatabase:Indiquelabasededonnespardfautd'unobjetConnection.
IsolationLevel:Indiqueleniveaud'isolationd'unobjetConnection.
Mode:Indiquelesautorisationsdemodificationdedonnesd'unobjetConnection.
Provider:IndiquelenomdufournisseurOLEDBdel'objetConnection.
State:Indiquesil'objetConnectionestouvertouferm.Enlectureseule.
Version:Indiquelenumrodeversiond'ADO.Enlectureseule.
Exemple

- 4-

ENI Editions - All rigths reserved

Cration d'une rfrence sur la base de donnes courante.


Dim cncDevis as ADODB.Connection
Set cncDevis = CurrentProject.Connection
Ouverture d'une base de donnes externe.
Dim cncDevis as ADODB.Connection
Set cncDevis = New ADODB.Connection
cncDevis.Open "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source = C:\Devis\Devis.accdb"
Utilisation des mthodes CommitTrans et RollbackTrans pour confirmer ou annuler la mise jour d'enregistrements.
Dim cnc As ADODB.Connection
Dim strSQL As String
Dim strMessage As String
' Ouvre la connexion.
Set cnc = CurrentProject.Connection
' Dbut de la transaction
cnc.BeginTrans
' Requtes SQL de mises jour
strSQL = "UPDATE CLIENTS SET CLI_PAYS = 'France'" _
& "WHERE CLI_VILLE = 'Paris'"
cnc.Execute strSQL
strSQL = "UPDATE CLIENTS SET CLI_PAYS = 'Espagne'" _
& "WHERE CLI_VILLE = 'Madrid'"
cnc.Execute strSQL
' Demande l'utilisateur s'il veut valider les mises jour
If MsgBox("Confirmez-vous la mise jour des pays ?", vbYesNo) _
= vbYes Then
' Enregistre les modifications
cnc.CommitTrans
Else
' Annule les modifications
cnc.RollbackTrans
End If
LesobjetsCommand
Mthodes

Cancel : Interrompt et annule l'excution d'une requte lance en mode asynchrone l'aide de la mthode
Execute.
CreateParameter:CreunnouvelobjetParameteretspcifiesesproprits.
Execute : Excute la requte, l'instruction SQL ou la procdure stocke spcifie par la proprit
CommandText.
Proprits

ActiveConnection:Indiquel'objetConnectionauquelestassocielacommande.
CommandText:ContientletextedelacommandeenvoyeraufournisseurOLEDB.
CommandTimeout : Indique le dlai (en secondes) respecter, lors d'une tentative d'excution de la
commandeavantd'interromprecettetentativeetdegnrerunmessaged'erreur.Lavaleurpardfautest30.
CommandType:Indiqueletypedel'objetCommand.
Name:Indiquelenomdel'objetCommand.

ENI Editions - All rigths reserved

- 5-

Prepared:Indiques'ilfautenregistreruneversioncompiledelacommandesurleserveuravantexcution.
State:Indiquesil'objetCommandestouvertouferm.Enlectureseule.
Exemple
Utilisation de l'objet Command pour crer un jeu d'enregistrements.
Dim cnc As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
' Ouvre la connexion
cnc.Open "Provider=Microsoft.Jet.OLEDB.4.0.;" _
& "Data Source = C:\Devis\Devis.mdb"
' Excute la commande Select
Set cmd.ActiveConnection = cnc
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT * FROM CLIENTS WHERE " _
& " CLI_VILLE = 'Paris'"
Set rst = cmd.Execute
' Affiche le nom de la Socit
' dans la fentre Excution
Do While Not rst.EOF
Debug.Print rst("CLI_SOCIETE")
rst.MoveNext
Loop
rst.Close
cnc.Close
LesobjetsRecordset
Mthodes

AddNew:CreunnouvelenregistrementpourunobjetRecordsetpouvanttremisjour.
Cancel:Annulel'excutiond'uneoprationOpenasynchroneenattente.
CancelBatch:Annuleunemisejourparlotsenattente.
CancelUpdate : Annule toutes les modifications apportes l'enregistrement en cours ou un nouvel
enregistrementavantd'appelerlamthodeUpdate.
Clone:CreunobjetRecordsetendoublepartird'unobjetRecordsetexistant.
Close:Fermel'objetRecordsetouvertainsiquetouslesobjetsdpendantdeceluici.
CompareBookmarks:Comparedeuxsignetsetrenvoieunevaleurindiquantleurspositionsrelatives.
Delete:Supprimel'enregistrementencoursouungrouped'enregistrements.
Find:RecherchedansunobjetRecordsetl'enregistrementcorrespondantdescritresspcifiques.
GetRows:Extraitplusieursenregistrementsd'unobjetRecordsetetlesplacedansuntableau.
GetString:RenvoieunobjetRecordsetsousformedechane.
Move:Dplacelapositiondel'enregistrementencoursdansunobjetRecordset.
MoveFirst : Dplace la position de l'enregistrement en cours jusqu'au premier enregistrement de l'objet
Recordset.
MoveLast:Dplacelapositiondel'objetencoursjusqu'audernierenregistrementdansl'objetRecordset.

- 6-

ENI Editions - All rigths reserved

MoveNext : Dplace la position de l'enregistrement en cours jusqu' l'enregistrement suivant dans l'objet
Recordset.
MovePrevious:Dplacelapositiondel'enregistrementencoursjusqu'l'enregistrementprcdentdansl'objet
Recordset.
NextRecordset : Renvoie le jeu d'enregistrements suivant dans le cas d'une commande comportant plusieurs
requtesd'extraction.
Open:Ouvreuncurseurquireprsentelesenregistrementsd'unetableoulesrsultatsd'unerequte.
Requery:Metjourlesdonnesd'unobjetRecordsetenrexcutantlarequtesurlaquellel'objetestbas.
Resync:Actualiselesdonnesdel'objetRecordsetencourspartirdelabasededonnessousjacente.
Save:Enregistrel'objetRecordsetdansunfichier.
Seek:Recherchedansl'indexd'unobjetRecordsetunenregistrementcorrespondantunevaleur,etremplace
l'enregistrementencoursparceluitrouv.(Ils'agitd'unenouvellefonctionnalitd'ADO2.1).
Supports:DterminesiunobjetRecordsetprendenchargeuntypedefonctionnalitparticulier.
Update:Enregistrelesmodificationsapportesl'enregistrementencoursdel'objetRecordset.
UpdateBatch:Enregistretouteslesmisesjourparlotsenattentesurledisque.
Proprits

AbsolutePage :Indiquelapagedel'enregistrementencours.
AbsolutePosition:Indiquelapositionordinaledel'enregistrementencoursdansunobjetRecordset.
ActiveCommand:Indiquel'objetCommandquiacrl'objetRecordsetcorrespondant.Enlectureseule.
ActiveConnection:IndiquequelobjetConnectionappartientl'objetRecordset.
BOF : Indique si le pointeur d'enregistrement est positionn avant le premier enregistrement de l'objet
Recordset.Enlectureseule.
Bookmark:Renvoieunsignetquiidentifiedemanireuniquel'enregistrementencoursdansl'objet Recordset
oudplacel'enregistrementencourssurunenregistrementidentifiparunsignetvalide.
CacheSize:Indiquelenombred'enregistrementsd'unobjetRecordsetstockenmmoirecache.
CursorLocation:Dfinitourenvoieletypedecurseurutiliserpardfautpourcetteconnexion(curseurct
clientoucurseurctserveur).
CursorType:IndiqueletypedecurseurutilispourcetobjetRecordset.
DataMember:Indiquelenomdumembrededonnesextrairedel'objetdfiniparlapropritDataSource.En
lectureseule.
DataSource : Indique qu'un objet contenant des donnes doit tre reprsent comme objet Recordset. En
lectureseule.
EditMode:Indiquelestatutdemodificationdel'enregistrementencours.Enlectureseule.
EOF : Indique si le pointeur d'enregistrement est positionn aprs le dernier enregistrement dans l'objet
Recordset.Enlectureseule.

ENI Editions - All rigths reserved

- 7-

Filter:DfinitunfiltrededonnesdansleRecordset.
Index:Indiquelenomdel'indexencourspourleRecordset.
LockType:Indiqueletypedeverrouillagedesenregistrementslorsdesmodifications.
MarshalOptions:Indiquelesenregistrementsrenvoyerauserveur.
MaxRecords : Indique le nombre maximal d'enregistrements renvoyer un objet Recordset pour une mme
requte.Lavaleurpardfautestzro(aucunelimite).
PageCount:Indiquelenombredepagesdedonnescontenuesdansl'objetRecordset.Enlectureseule.
PageSize:Indiquelenombred'enregistrementscontenusdansunepageduRecordset.
Properties:RfrencelaCollectiondesobjetsPropertydel'objetRecordsetencours.
RecordCount:Indiquelenombreactueld'enregistrementsdansl'objetRecordset.Enlectureseule.
Sort:Spcifieunouplusieursnomsdechampsselonlesquelsl'objetRecordsetesttri,etdterminel'ordrede
tridechaquechamp.
Source:Indiquelasourcedesdonnesd'unobjetRecordset.
State:Indiquel'tatduRecordset :ouvert,fermouoprationasynchroneencours.Enlectureseule.
Status : Indique le statut de l'enregistrement en cours en ce qui concerne les mises jour par lots ou autres
oprationsglobales.Enlectureseule.
StayInSync:Indique,dansunobjet Recordsethirarchique,silaligneparentdoitchangerlorsquel'ensemble
desenregistrementsenfantssousjacentschange.Enlectureseule.
Exemple
Transformation en majuscules des caractres du champ Cli_Societe dans la table Clients.
Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
' Cration du Recordset
Set cnc = CurrentProject.Connection
rstCli.Open "Select * From Clients", cnc, _
adOpenKeyset, adLockOptimistic
' Parcours des enregistrements
With rstCli
Do Until .EOF
rstCli("Cli_Societe") = _
UCase(rstCli("Cli_Societe"))
' Mise jour
.Update
' Enregistrement suivant
.MoveNext
Loop
End With
rstCli.Close
cnc.Close
Utilisation de la mthode Seek : recherche d'un client partir de son code.
Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
Dim strCodeCli As String
' Cration du Recordset
Set cnc = CurrentProject.Connection

- 8-

ENI Editions - All rigths reserved

rstCli.Open "Clients", cnc, adOpenKeyset, _


adLockReadOnly, adCmdTableDirect
With rstCli
' Saisie du code client
strCodeCli = _
InputBox("Saisissez le code client")
' Index courant : cl primaire
.Index = "PrimaryKey"
' Recherche
.Seek strCodeCli, adSeekFirstEQ
' Enregistrement non trouv
If .EOF Then
MsgBox "Client non trouv"
Else
' Enregistrement trouv
MsgBox "Socit : " & rstCli("Cli_Societe")
End If
End With
rstCli.Close
cnc.Close
Utilisation de la mthode Find : recherche des clients dont le nom de Socit commence par une valeur donne.
Dim
Dim
Dim
Dim
Dim

cnc As New ADODB.Connection


rstCli As New ADODB.Recordset
strSoc As String
strCrit As String
bkm As Variant

' Cration du Recordset


Set cnc = CurrentProject.Connection
rstCli.Open "Clients", cnc, adOpenKeyset, _
adLockReadOnly, adCmdTableDirect
With rstCli
' Saisie du code client
strSoc = InputBox("Saisissez les 1res " _
& "lettres de la Socit")
' Recherche
strCrit = "Cli_Societe Like '" & strSoc & "%'"
.Find strCrit, , adSearchForward
' Enregistrement non trouv
If .EOF Then
MsgBox "Client non trouv"
Else
' Si trouve : recherche des suivants
Do While Not .EOF
MsgBox rstCli("Cli_Societe")
' Position en cours.
bkm = .Bookmark
.Find strCrit, 1, adSearchForward, bkm
Loop
End If
End With
rstCli.Close
cnc.Close
LacollectionFields
Mthodes

Append:AjouteunobjetFieldunecollectionFields.
Delete:SupprimeunobjetFielddelacollectionFields.
Refresh:MetjourlesobjetsFielddanslacollectionFields.
LesobjetsField
Mthodes

AppendChunk:AjoutedesdonnesunobjetFielddetypebinaireoudegrandetaille.

ENI Editions - All rigths reserved

- 9-

GetChunk:Renvoietoutouunepartieducontenud'unobjetFielddetypebinaireoudegrandetaille.
Proprits

ActualSize:Indiquelalongueurdelavaleurd'unchamp.Enlectureseule.
Attributes:Indiqueuneouplusieurscaractristiquesd'unobjetField.
DefinedSize:Indiquelatailledel'objetField.Encritureseule.
Name:Indiquelenomdel'objetField.
NumericScale:Indiquel'chelledesvaleursnumriquesdel'objetField.Encritureseule.
OriginalValue:Indiquelavaleurdel'objetFieldavantmodification.Enlectureseule.
Precision:Indiqueledegrdeprcisiondesvaleursdetypenumriquedansl'objetField.Enlectureseule.
Properties:ComprendtouslesobjetsPropertyd'unobjetField.
Type:Indiqueletypededonnesdel'objetField.
UnderlyingValue:Indiquelavaleurencoursdel'objetFielddanslabasededonnes.Enlectureseule.
Value :Indiquelavaleurdel'objetField.
LacollectionParameters
Mthodes

Append:AjouteunobjetParameterlacollectionParameters.
Delete:SupprimeunobjetParameterdelacollectionParameters.
Refresh:MetjourlesobjetsParameterdanslacollectionParameters.
Exemple
Affichage de la liste de tous les champs (nom et type) de la table Clients dans la fentre Excution.
Dim cnc As New ADODB.Connection
Dim rstCli As New ADODB.Recordset
Dim fld As ADODB.Field
' Cration du Recordset
Set cnc = CurrentProject.Connection
rstCli.Open "Employes", cnc, adOpenKeyset, adLockReadOnly, _
adCmdTableDirect
For Each fld In rstCli.Fields
Debug.Print fld.Name & " " & fld.Type
Next
rstCli.close
LesobjetsParameter
Mthodes

AppendChunk:AjoutedesdonnesunobjetParameterdetypebinaireoutextedegrandetaille.
Proprits

Attributes:Indiqueuneouplusieurscaractristiquesd'unobjetParameter.

- 10 -

ENI Editions - All rigths reserved

Direction : Indique si l'objet Parameter correspond un paramtre d'entre, de sortie, ou les deux, ou si le
paramtreestletypederetourd'uneprocdurestocke.
Name:Indiquelenomdel'objetParameter.
NumericScale:Indiquel'chelledesvaleursnumriquesdel'objetParameter.
Precision:IndiqueledegrdeprcisiondesvaleursdetypeNumericdel'objetParameter.
Properties :ComprendtouslesobjetsPropertyd'unobjetParameter.
Size:Indiquelataillemaximale,enoctetsouencaractres,d'unobjetParameter.
Type:Indiqueletypededonnesdel'objetParameter.
Value:Indiquelavaleurattribuel'objetParameter.
LacollectionProperties
Mthodes

Refresh:MetjourlesobjetsPropertydanslacollectionPropertiespartirdesinformationsdufournisseur.
LesobjetsProperty
Proprits

Attributes:Indiqueuneouplusieurscaractristiquesd'unobjetProperty.
Name:Indiquelenomdel'objetProperty.Enlectureseule.
Type:Indiqueletypededonnesdel'objetProperty.
Value:Indiquelavaleurdel'objetProperty.
LacollectionErrors
Mthodes

Clear:Supprimel'ensembledesobjetsErrordelacollectionErrors.
Refresh:MetjourlesobjetsErrorpartirdesinformationsdufournisseurOLEDB.
Proprits

Count:Indiquelenombred'objetsErrordelacollectionErrors.Enlectureseule.
Item:Permetl'indexationdelacollectionErrorsafinderfrencerunobjetErrorspcifique.Enlectureseule.
LesobjetsError
Proprits

Description:Renvoielachanedescriptiveassociel'objetError.Enlectureseule.
HelpContext:IndiqueleContextIDdufichierd'aideassocil'objetError.Enlectureseule.
HelpFile:Indiquelenomdufichierd'aideassocil'objetError.Enlectureseule.

ENI Editions - All rigths reserved

- 11 -

NativeError:Indiquelecoded'erreurspcifiquedufournisseurassocil'objetError.Enlectureseule.
Number:Indiquelenumroidentifiantdemanireuniquel'erreurporteparl'objetError.Enlectureseule.
Source:Indiquelenomdel'objetoudel'applicationl'origined'uneerreur.Enlectureseule.
SQLState:IndiquelavaleurrenvoyeparlefournisseurOLEDB.Chanedecinqcaractresconformelanorme
SQLANSI.Enlectureseule.

- 12 -

ENI Editions - All rigths reserved

Prsentation
LelangageSQL(StructuredQueryLangageoulangagederequtestructur)estunlangaged'interrogationet
degestiondebasesdedonnesrelationnelles.
Access 2007 utilise SQL comme langage de requte. Lorsque vous crez une requte en mode Cration de
requte, Access construit en tche de fond les instructions SQL quivalentes. En fait, la plupart des proprits
delarequteenmodeCrationderequteontdesclausesquivalentesetdesoptionsaccessiblesenlangage
SQL.
Ilestpossibled'afficheroudemodifierl'instructionSQLcorrespondantunerequteenpassantenmodeSQL.
Exemple

Ouvrez une requte existante en mode cration.

Cliquez ensuite sur l'option Mode SQL de l'icne Affichage.

Vous obtenez alors l'instruction SQL correspondant votre requte :

ENI Editions - All rigths reserved

- 1-

Cette manipulation est trs intressante notamment si vous n'tes pas coutumier du langage SQL : vous pouvez crer vos requtes
dans Access et rcuprer l'instruction SQL gnre pour l'inclure dans votre code VBA.
CertainesrequtesSQL,nommesrequtesspcifiquesSQL,nepeuventtrecresdanslagrilledecration
derequtesmaisdoiventtresaisiesdirectementenmodeSQL.Ils'agit :

- des "requtes directes" qui vous permettent de travailler directement avec les tables sur le serveur,
- des "requtes dfinition des donnes" qui vous permettent de crer, supprimer ou modifier la structure des tables,
- des "requtes Union" qui vous permettent de regrouper les champs de deux tables (ou plus) dans un mme champ rsultat de
la requte. Ces requtes sont trs utiles pour fusionner des enregistrements provenant de tables diffrentes.

- 2-

ENI Editions - All rigths reserved

LangageSQLetVBA
Les requtes SQL s'intgrent parfaitement VBA et peuvent tre utilises partir des mthodes de diffrents
objets:

- mthode OpenRecordset des objets DataBase et Connection,


- mthode CreateQueryDef des objets DataBase et Connection,
- mthode Execute des objets Command et Connection,
- etc.
LesrequtesSQLsontaussitrsutilisesdanslesformulaires :

- proprit RecordSource d'un formulaire ou d'un tat,


- proprit RowSource d'une liste droulante,
- etc ...
LaplupartdecespropritspeuventtremodifiesparducodeVBA.
Lesavantagesdel'utilisationd'instructionsSQLenVBAsontlessuivants :
Vitessed'excution:uneinstructionSelectestplusrapidequeleparcourssquentield'unetable.
Performance accrue : en mode client/serveur, les requtes sont compiles par le SGBD qui optimise leurs
performances.
Maintenanceplusfacile:lecodedesinstructionsSQLestpluscourt,doncpluslisiblequel'quivalentVBA.
Standardisation:lelangageSQLestlestandardd'interrogationdesbasesdedonnesrelationnelles.

ENI Editions - All rigths reserved

- 1-

DescriptiondulangageSQL
L'instructionSELECT
SELECT est l'instruction SQL la plus utilise : elle correspond la requte Slection sous Access. Elle permet
d'extrairedeschampsd'unensembled'enregistrementsrpondantcertainscritres.
Syntaxe
SELECT [ALL | DISTINCT] <liste de champs>
FROM <liste de tables>
[WHERE... ]
[GROUP BY...]
[HAVING... ]
[ORDER BY... ]
All (valeurpardfaut):Touslesenregistrementsrpondantauxcritressontprisencompte.
Distinct :Lesenregistrementspourlesquelsleschampsslectionnscontiennentdesdonnesendoublesont
omis.
<liste de champs> : Liste des champs slectionns, spars par des virgules, en respectant la syntaxe
suivante :
*|table.*|[table.]champ1[ASalias1][,
[table.]champ2[ASalias2][,...]]
* :Indiquequetousleschampsdela(des)table(s)spcifie(s)sontslectionn(s).
alias1, alias2 : Indiquent les noms utiliser comme enttes de colonne la place des noms de colonnes
originauxdanstable.
<liste de tables> : Nom de la ou des tables contenant les donnes extraire. Si la requte utilise plusieurs
tables,lemodedejointuredoitgalementtreprcisdanslaclauseFROM.
Exemples
- SELECT * FROM Produits
- SELECT Produits.* FROM Produits
- SELECT Prod_ref, Prod_desig, Prod_prix, Prod_tva
FROM Produits
- SELECT Prod_ref As Reference, Prod_desig As Designation,
Prod_Prix as Prix, Prod_tva as Tva From Produits
LaclauseFROM
LaclauseFROMspcifielestablesoulesrequtesdontsontextraiteslesdonnes.
Syntaxe
FROM table1 [ LEFT | RIGHT | INNER ] JOIN table2
ON table1.champ1 <Oprateur de comparaison> table2.champ2
[ LEFT | RIGHT | INNER ] :Ces oprateurs permettent de dfinir le type de jointure entre les tables.
LEFT JOIN : Utilisez une opration LEFT JOIN pour crer une jointure externe gauche. Le rsultat de la jointure externe gauche
comprend tous les enregistrements issus de la premire table (celle de gauche: <table1>) mme ceux pour lesquels il n'existe pas
de valeur correspondante dans la deuxime table (celle de droite: <table2>).
RIGHT JOIN : Utilisez une opration RIGHT JOIN pour crer une jointure externe droite. Le rsultat de la jointure externe droite
comprend tous les enregistrements issus de la deuxime table (celle de droite: <table2>) mme ceux pour lesquels il n'existe pas
de valeur correspondante dans la premire table (celle de gauche: <table1>).

ENI Editions - All rigths reserved

- 1-

INNER JOIN : Utilisez INNER JOIN pour crer une jointure ne comprenant que les enregistrements dans lesquels les donnes des
champs relis sont identiques.
<oprateur de comparaison> : Utilisez tout oprateur de comparaison relationnelle tel que: = , <, >, <= , >= ,<> (diffrent de).
L'oprateur = est le plus couramment utilis.
Exemples
Liste des commandes avec le nom et le n de tlphone du messager.
Premier exemple
Seules les commandes auxquelles un messager a t affect sont slectionnes.
SELECT Commandes.Cde_Numcde, Commandes.Cde_DateEnvoi,
Messagers.
Mes_Nom, Messagers.Mes_Telephone
FROM Commandes INNER JOIN Messagers ON Commandes.Cde_NumMess
=
Messagers.Mes_NumMes
Deuxime exemple
Toutes les commandes sont slectionnes.
SELECT Commandes.Cde_Numcde, Commandes.Cde_DateEnvoi,
Messagers.Mes_Nom, Messagers.Mes_Telephone
FROM Commandes LEFT JOIN Messagers ON Commandes.Cde_NumMess
= Messagers.Mes_NumMes
LaclauseWHERE
LaclauseWHEREpermetdefiltrerlesenregistrementspartirdecritres.
LesconditionsdelaclauseWHEREs'exprimentaveclesoprateurssuivants :

- oprateurs de comparaison: =, <, >, <=, >=, <> (diffrent de), Is [Not] Null, [Not] In, Between.
- oprateurs logiques : And, Or, Not.
Exemples
SELECT * FROM Produits WHERE [Prod_Prix] = 500
SELECT * FROM Produits WHERE [Prod_Prix]
BETWEEN 100 AND 200
SELECT * FROM Clients WHERE [Cli_pays] IN
('France','Italie','Espagne')
LaclauseGROUPBY
LaclauseGROUPBYcorrespondaux"Totaux"desrequtesAccess(appelsRegroupementsdanslesanciennes
versions).Ellepermetderegrouperdesdonnessurunouplusieurschamps.Elleestprincipalementutilisepour
effectuerdesfonctionsd'agrgationSQLtellesqueSum(somme),Count(compte),Avg(moyenne)...
Exemples
Cette requte renvoie le nombre de commandes passes par client.
SELECT Clients.Cli_Societe, Count(Commandes.Cde_Numcde) AS
Nb_Cdes

- 2-

ENI Editions - All rigths reserved

FROM Clients INNER JOIN Commandes ON Clients.Cli_NumCli=


Commandes.Cde_CodeCli
GROUP BY Clients.Cli_Societe
Cette requte renvoie le montant total de chacune des commandes.
SELECT Commandes.Cde_Numcde, Commandes.Cde_DateCde,
Sum([Cde_Prix]*[Cde_Qte]) AS TotalCde
FROM Commandes INNER JOIN [Dtails commandes] ON
Commandes.Cde_Numcde = [Dtails commandes].Cde_NumCde
GROUP BY Commandes.Cde_Numcde, Commandes.Cde_DateCde
LaclauseHAVING
La clause HAVING spcifie les enregistrements regroups afficher dans une instruction SELECT dote d'une
clause GROUP BY. Une fois le regroupement effectu suivant la liste des champs du GROUP BY, seuls sont
conservslesenregistrementsquivrifientlaconditionspcifiedanslaclauseHAVING.
Exemple
Cette requte extrait les commandes dont le montant total est suprieur 10000

SELECT Commandes.Cde_Numcde, Commandes.Cde_DateCde,


Sum([Cde_Prix]*[Cde_Qte]) AS TotalCde
FROM Commandes INNER JOIN [Dtails commandes] ON
Commandes.Cde_Numcde = [Dtails commandes].Cde_NumCde
GROUP BY Commandes.Cde_Numcde, Commandes.Cde_DateCde
HAVING (Sum([Cde_Prix]*[Cde_Qte])>10000)
LaclauseORDERBY
La clause ORDER BY trie, par ordre croissant ou dcroissant, les enregistrements rsultants d'une requte en
fonctionduoudeschampsspcifis.
Syntaxe
[ORDER BY champ1 [ASC | DESC ][, champ2 [ASC | DESC ]][, ...]]]
ASC:Ordrecroissant.
DESC:Ordredcroissant.
Exemple
Cette requte renvoie le nombre de commandes passes par client, tri par ordre dcroissant du nombre de commande.
SELECT Clients.Cli_Societe, Count(Commandes.Cde_Numcde) AS
Nb_Cdes
FROM Clients INNER JOIN Commandes ON
Clients.Cli_NumCli=Commandes.Cde_CodeCli
GROUP BY Clients.Cli_Societe
ORDER BY Count(Commandes.Cde_Numcde) DESC
L'instructionUPDATE
L'instruction UPDATE correspond une requte de Mise jour qui modifie les valeurs des champs dans la table
spcifie,pourlesenregistrementsquirpondentaucritrefourni(facultatifs).
Syntaxe
UPDATE table
SET champ1 = nouvellevaleur1[, champ2 = nouvellevaleur2]...
[WHERE critre]

ENI Editions - All rigths reserved

- 3-

Si aucune clause Where n'est spcifie, tous les enregistrements sont mis jour.
Exemple
Cette requte modifie le code pays de tous les enregistrements de la table Clients.
UPDATE Clients SET Clients.Cli_pays = 'F'
Cette requte modifie dans la table Clients le code pays des enregistrements des clients dont la ville est 'Marseille'.
UPDATE Clients SET Clients.Cli_Pays = 'F'
WHERE Clients.Cli_ville='Marseille'
L'instructionDELETE
L'instruction DELETE correspond une requte Suppression qui supprime des enregistrements dans la table
mentionnedanslaclauseFROM,selonlescritresfournis(facultatifs).
Syntaxe
DELETE FROM table
[WHERE critres]
Si aucune clause Where n'est spcifie, tous les enregistrements sont supprims.
Exemple
Cette requte supprime les commandes antrieures 2007.
DELETE FROM Commandes
WHERE ((Commandes.Cde_DateCde) < #1/1/2007#)
L'instructionINSERTINTO
L'instructionSQLINSERTINTOcorrespondunerequteAjoutquiajoutedesenregistrementsdansunetable.
Syntaxe
Requte Ajout avec un seul enregistrement :
INSERT INTO <TableDestination> [(champ1[, champ2[, ...]])]
VALUES (valeur1[, valeur[, ...]])
Cette requte doit contenir le mme nombre de valeurs, du mme type et dans le mme ordre, que de colonnes valoriser.
Requte Ajout avec un ou plusieurs enregistrements :
INSERT INTO <TableDestination> [(champ1[, champ2[, ...]])]
SELECT [<Tablesource>.]champ1[, champ2[, ...]]
FROM <liste de tables>
L'instruction SELECT doit renvoyer autant de valeurs, dans le mme ordre et du mme type que les colonnes valoriser (champs de
l'instruction INSERT).
Exemples
Ajout d'un enregistrement dans la table Clients.
INSERT INTO Clients ( Cli_CodeCLi, Cli_societe, Cli_ville,
Cli_pays )

- 4-

ENI Editions - All rigths reserved

VALUES ('ENI','Editions ENI', 'Nantes','F').


Ajout des enregistrements de la table Prospects dans la table Clients.
INSERT INTO Clients
SELECT Prospect.*
FROM Prospect
Autresinstructions
Requtesd'interrogation

TRANSFORM:Creunerequteanalysecroise.Cetteinstructionestutiliselorsdelacrationd'unerequte
partirdel'assistantRequteanalysecroised'Access.
UNION : Cre une requte qui fusionne les rsultats de deux, ou plusieurs, requtes ou tables indpendantes.
Lesstructuresdestableset/oudesrequtesfusionnesdoiventtreidentiques.
Crationetgestiondetables

CREATETABLE:Creunenouvelletable.
CREATEINDEX:Creunnouvelindexpourunetableexistante.
ALTERTABLE:Modifielastructured'unetable.
DROPTABLE:Supprimeunetabledelabasededonnes.
DROPINDEX:Supprimeunindexd'unetable.
Crationetgestiond'utilisateursetdegroupes

CREATEUSER:Creunouplusieursnouveauxutilisateurs.
ADDUSER:Ajouteunouplusieursutilisateursungrouped'utilisateursexistant.
DROPUSER:Supprimeunouplusieursutilisateurs.
CREATEGROUP:Creunouplusieursnouveauxgroupes.
DROPGROUP:Supprimeunouplusieursgroupesd'utilisateurs.
GRANT:Attribuedesprivilgesspcifiquesunutilisateurouungrouped'utilisateursexistant.
REVOKE:Retiredesprivilgesspcifiquesunutilisateurouungrouped'utilisateursexistant.
Vous pouvez obtenir de plus amples informations au sujet du langage SQL et de ses instructions, partir de la rubrique "Rfrence
de Microsoft jet SQL", du sommaire de l'aide Access.

ENI Editions - All rigths reserved

- 5-

Exemplesd'utilisationderequtesSQL
Afindedmontrerl'intrtdulangageSQL,lesexemplessuivantsproposentdeuxprocduresquivalentes:l'une
utiliselelangageSQL,l'autrenon.
Pour raliser ces exemples vous devez crer une table Clients avec un champ nomm Cli_Societe, et saisir
quelquesenregistrementsdanscettetable.VouspouvezgalementimporterlatableClientsdelabaseexemple
Comptoir.mdb livre avec Access 2003 et renommer les champsSocit en Cli_Societe, Pays en Cli_Pays et
VilleenCli_Ville.
Misejourd'enregistrements
Lecodedel'exemplesuivantpermetdemodifierlecontenud'unchampdansunetablepourdesenregistrements
rpondantcertainscritres.
Code VBA utilisant une requte SQL de type UPDATE.
Private Sub Maj_Pays()
Dim cncDevis As ADODB.Connection
Dim strSQL As String
' Mise jour du code pays dans la table clients
Set cncDevis = CurrentProject.Connection
strSQL = "UPDATE Clients SET " _
& "Clients.CLI_PAYS = 'F' " _
& "WHERE Clients.CLI_VILLE = 'Marseille'"
cncDevis.Execute strSQL
End Sub
Code VBA quivalent sans requte SQL.
Private Sub Maj_Pays1()
Dim cncDevis As ADODB.Connection
Dim rstClient As ADODB.Recordset
' Ouverture d'un jeu d'enregistrement
Set cncDevis = CurrentProject.Connection
Set rstClient = New ADODB.Recordset
rstClient.Open "CLIENTS", cncDevis, adOpenForwardOnly,
adLockOptimistic
' Parcours squentiel de la table Clients
Do While Not rstClient.EOF
If rstClient("CLI_VILLE") = "Marseille" Then
rstClient("CLI_PAYS") = "F"
rstClient.Update
End If
rstClient.MoveNext
Loop
End Sub
Chargementd'unelistedroulante
Le code de l'exemple ciaprs permet d'afficher dans une liste droulante (contrle zone de liste) le nom des
clientsdontlenomdeSocitcommenceparunelettredonne(lalettreestsaisiedansunezonedetexte).
Pourtestercetexemplevousdevez:

- crer un formulaire nomm Clients.


- Ajouter les contrles suivants dans ce formulaire:
- une zone de texte nomm txtNomSoc.

ENI Editions - All rigths reserved

- 1-

- Une zone de liste nomme lstSoc.


- Un bouton de commande cmdListe1.
Code VBA utilisant une requte SQL de type SELECT. Le contenu de la liste est le rsultat de la requte SQL.
Private Sub cmdListe1_Click()
Dim strSQL As String
' Contrle du nom saisi
If txtNomSoc = "" Then
MsgBox "Vous devez saisir au moins une lettre",
vbExclamation
txtNomSoc.SetFocus
Exit Sub
End If
' Proprits de la liste droulante
' La liste contient une requte
Me.lstSoc.RowSourceType = "Table/Requte"
strSQL = "SELECT Clients.CLI_SOCIETE FROM Clients " _
& "WHERE (Clients.CLI_SOCIETE Like '" & Me.txtNomSoc &
"*')"
Me.lstSoc.RowSource = strSQL
' Ractualisation des donnes de la liste
Me.lstSoc.Requery
End Sub
Code VBA quivalent sans requte SQL. La liste est renseigne partir d'une liste de valeur.
Private Sub cmdListe1_Click()
Dim cncDevis As ADODB.Connection
Dim rstClient As ADODB.Recordset
Dim strNomSoc as String
' Contrle du nom saisi
If txtNomSoc = "" Or IsNull(txtNomSoc) Then
MsgBox "Vous devez saisir au moins une lettre",
vbExclamation
txtNomSoc.SetFocus
Exit Sub
End If
' Initialisation de la liste droulante
' La liste contient une liste de valeurs
Me.lstSoc.RowSourceType = "Liste valeurs"
Me.lstSoc.RowSource = ""
Me.lstSoc.Requery
' Ouverture d'un jeu d'enregistrement
Set cncDevis = CurrentProject.Connection
Set rstClient = New ADODB.Recordset
rstClient.Open "CLIENTS", cncDevis, adOpenForwardOnly, _
adLockOptimistic
' Parcours squentiel de la table et ajout d'lments la
liste
Do While Not rstClient.EOF
If Left(rstClient("CLI_SOCIETE"), 1) = Left(Me.txtNomSoc, _
Len(Me.txtNomSoc)) Then
strNomSoc = rstClient("CLI_SOCIETE")
Me.LstSoc.AddItem strNomSoc
End If
rstClient.MoveNext
Loop
rstClient.close
End Sub
Les exemples prcdents permettent de constater que le code utilisant SQL est plus court et son excution plus rapide, ce qui peut
s'avrer trs intressant par exemple si la table client contient un nombre important d'enregistrements.

- 2-

ENI Editions - All rigths reserved

Prsentation
Dfinition
Unvnementestissud'uneactiondel'utilisateuroudusystmesurunobjet.Ildclenchel'excutionducode
correspondantlaprocdurevnementielledel'objetactiv.

L'utilisation d'une procdure vnementielle ou d'une macro permet d'ajouter la rponse propre l'application
unvnementseproduisantdansunformulaire,untatouuncontrle.
AssociationdecodeVBAunvnement
VouspouvezaffecteruncodeVBAl'vnementd'unobjetdedeuxfaons :

- partir de l'onglet vnement de la fentre des proprits de l'objet dans Access.

- partir des listes droulantes d'objets et d'vnements dans l'diteur Visual Basic

ENI Editions - All rigths reserved

- 1-

- 2-

ENI Editions - All rigths reserved

Catgoriesd'vnements
Leslistesd'vnementssuivantessontclassespartypeetcomportent:

- le nom de l'vnement,
- le nom de la proprit correspondante dans la fentre des proprits de l'objet (entre parenthses),
- la description de l'vnement,
- la mention Annulation indique si l'vnement peut tre annul ou pas. L'annulation d'un vnement fait l'objet du paragraphe
Annulation d'un vnement.
EvnementsdetypeFentre
Open:(Surouverture)
Seproduitl'ouvertureduformulairemaisavantquelepremierenregistrementsoitaffich.
Seproduitl'ouvertured'untat,maisavantsonimpression.
Annulation:Oui
Load:(Surchargement)
Seproduitl'ouvertureduformulairelorsquelepremierenregistrementestaffich.
Annulation:Non
Resize:(Surredimensionnement)
Seproduitlorsdupremieraffichageduformulaireetlorsdesmodificationsdesataille.
Annulation:Non
UnLoad:(Surlibration)
Se produit lors de la fermeture et lorsque les enregistrements sont librs, mais avant que le formulaire ne
disparaisse.
Annulation:Oui
Close:(Surfermeture)
Seproduitlorsqueleformulaireoul'tatdisparatlafermeture.
Annulation:Non
EvnementsdetypeFocus
Lesvnementsdetype"focus"peuvents'appliquerauxformulaires(Activate,Deactivate,GotFocus,LostFocus)
ouauxcontrles(Enter,Exit,SetFocus,LostFocus).
On dit qu'un objet a le focus lorsqu'il peut recevoir une saisie de l'utilisateur via des actions la souris ou au
clavier.Lesobjetsquiontlefocussontappelsobjetsactifs(ActiveFormouActiveControl).
La mthode SetFocus permet de donner le focus un contrle ou un formulaire.
Activate:(Suractiv)
Seproduitlorsquelafentreduformulaireoudel'tatdevientactive.
Annulation:Non
Deactivate:(Surdsactiv)
Seproduitlorsdel'activationd'uneautrefentre,maisavantqu'ellenesoitactive.
Seproduitgalementlorsdelafermeturedelafentre.

ENI Editions - All rigths reserved

- 1-

Annulation:Non
Enter:(Surentre)
Seproduitavantqu'uncontrleneprennelefocuspartird'unautrecontrleoul'ouvertureduformulaire.
Annulation:Non
Exit:(Sursortie)
Se produit avant qu'un contrle ne perde le focus au profit d'un autre contrle du formulaire ou d'un autre
formulaire.
Annulation:Oui
GotFocus:(Surrceptionfocus)
Seproduitlorsqu'uncontrleouunformulairesanscontrleactifreoitlefocus.
Annulation:Non
LostFocus:(Surpertefocus)
Seproduitlorsqu'uncontrleouunformulaireperdlefocus.
Annulation:Non
EvnementsdetypeDonnes
Les vnements de type "donnes" s'appliquent aux formulaires associs une source de donnes (proprit
RecordSourcerenseignepartird'unnomdetableoud'unerequte)etauxcontrlesassocisunchampdela
sourcededonnesduformulaire(propritControlSourcerenseigne).
AfterInsert:(Aprsinsertion)
Seproduitaprsl'ajoutd'unnouvelenregistrementdanslatable.
Annulation:Non
AfterUpdate :(AprsMAJ)
Seproduitaprslamisejourd'uncontrleoud'unenregistrementavecdesdonnesmodifies.
Annulation:Non
AfterDelConfirm:(Aprssuppression)
Seproduitaprsquel'utilisateuraitrpondulademandedesuppressiondesenregistrements.
Annulation:Non
BeforeInsert:(Avantinsertion)
Se produit lors de la frappe du premier caractre d'un nouvel enregistrement, mais avant l'ajout rel de
l'enregistrement.
Annulation:Oui
BeforeUpdate :(AvantMAJ)
Seproduitavantlamisejourd'uncontrleoud'unenregistrementavecdesdonnesmodifies.
Annulation:Oui
BeforeDelConfirm:(Avantsuppression)
Seproduitaprsquel'utilisateuraitsupprimdesenregistrements,etavantqu'Accessnedemandeconfirmation.
Annulation:Oui
NotInList:(Surabsencedansliste)
- 2-

ENI Editions - All rigths reserved

Seproduitlorsdelasaisied'unevaleurnefigurantpasdansunelisteetlorsquelapropritlimiteunelisteest
vraie.
Annulation:Non
Current:(Suractivation)
Seproduitlorsquelefocuspassed'unenregistrementl'autre.
Seproduitgalementl'ouvertureavantquelepremierenregistrementnedevienneceluiencours.
Annulation:Non
Change:(Surchangement)
Seproduitlorsdelamodificationducontenud'unezonetexteoulistemodifiable(clavieroumacro/VisualBasic).
Annulation:Non
Updated:(SurMAJ)
Seproduitlorsquelesdonnesd'unobjetOLEonttmodifies.
Annulation:Non
Delete:(Sursuppression)
Seproduitavantlasuppressioneffective.Lorsdel'appuisur[Suppr]parexemple.
Annulation:Oui
Dirty:Seproduitlorsquelecontenud'unformulaireoulapartietexted'unezonedelistemodifiablechange.
Seproduitgalementlorsdupassaged'unepageuneautredansuncontrleOnglet.
Annulation:Oui
EvnementsdetypeSouris
Click:(Surclic)
Seproduitlorsdel'appuisurleboutongauchedelasourissuruncontrleouunezonevierged'unformulaire.
Annulation:Non
DblClick:(Surdoubleclic)
Se produit lors de deux appuis sur le bouton gauche de la souris sur un contrle ou une zone vierge d'un
formulaire.
Annulation:Oui
MouseDown:(Sursourisappuye)
Seproduitlorsdel'appuisurunboutondelasourissuruncontrleouunformulaire.
Annulation:Oui
MouseMove:(Sursourisdplace)
Seproduitlorsquel'utilisateurdplacelasourissurunformulaireouuncontrle.
Annulation:Non
MouseUp:(Sursourisrelche)
Seproduitlorsquel'utilisateurrelcheleboutondelasourissuruncontrleouunformulaire.
Annulation:Non
EvnementsdetypeClavier

ENI Editions - All rigths reserved

- 3-

KeyDown:(Surtoucheappuye)
Seproduitlorsdel'appuisurunetoucheoulorsdel'excutiondeSendKeysouEnvoiTouches.
Ilestpossiblecependantd'empcherl'objetderecevoirlatoucheenattribuantlavaleur0l'argumentKeycode
delaprocdureKeyDowndel'objet.
Annulation:Non
KeyPress:(Surtoucheactive)
Se produit lors de l'appui sur une touche mettant un caractre ANSI standard ou lors de l'excution de
SendKeysouEnvoiTouches.
Ilestpossiblecependantd'empcherl'objetderecevoirlatoucheenattribuantlavaleur0l'argumentkeyAscii
delaprocdureKeyPressdel'objet.
Annulation:Oui(parmacroouVBA)
KeyUp:(Surtoucherelche)
Seproduitlorsquel'utilisateurrelchelatoucheoulorsdel'excutiondeSendKeysouEnvoiTouches.
Ilestpossiblecependantd'empcherl'objetderecevoirlatoucheenattribuantlavaleur0l'argumentKeyCode
delaprocdureKeyUpdel'objet.
Annulation:Non
La proprit KeyPreview (aperu des touches) d'un formulaire dtermine si les procdures vnementielles de clavier du niveau
formulaire sont appeles avant celles du niveau contrle. Vous pouvez utiliser la proprit KeyPreview pour crer une procdure de
gestion du clavier au niveau d'un formulaire.
Exemple
L'exemple suivant montre comment afficher un formulaire lorsque l'utilisateur tape sur la touche [F1], et ce quel que soit le contrle
actif.
Private Sub Form_Load()
KeyPreview = True
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As
Integer)
' Si la touche est F1, le formulaire Recherche est
affich
' KeyCode est rinitialis pour ne pas afficher l'aide
Access
If KeyCode = vbKeyF1 Then
DoCmd.OpenForm "Recherche"
KeyCode = 0
End If
End Sub
vnementsdetypeImpression
Cesvnementss'appliquentauxtatsAccess.
Format:(Auformatage)
SeproduitlorsqueMicrosoftAccessdterminequellesdonnesappartiennentquellessections.
Annulation:Oui
Print:(Surimpression)
Seproduitlorsdelamiseenformedesdonnesd'unesectionpourimpression.
Annulation:Oui
Retreat:(Aureformatage)
SeproduitlorsqueMicrosoftAccessretourneunesectionprcdentependantlamiseenformed'untat.

- 4-

ENI Editions - All rigths reserved

Annulation:Non
NoData:(Suraucunedonne)
SeproduitlorsqueMicrosoftAccessamisenformeuntatenvuedesonimpressionetqueceluicinecontient
aucunedonne.
Annulation:Oui
Page:(Surlapage)
SeproduitaprsqueMicrosoftAccessaitmisenformeunepaged'untatenvuedesonimpression,maisavant
quelapagenesoitimprime.
Annulation:Non
Les vnements Format, Print et Retreat s'appliquent aux sections des tats.
vnementsdetypeFiltre
ApplyFilter:(Surfiltreappliqu)
Seproduitlorsquel'utilisateurappliqueunfiltre.
Annulation:Oui
Filter:(Surfiltre)
Seproduitlorsquel'utilisateurcreunfiltre.
Annulation:Oui
vnementsdetypeErreuretMinuterie
Error:(Surerreur)
Seproduitlorsqu'uneerreursurvient.
Annulation:Non
Timer:(Surminuterie)
Seproduitlorsqu'undlaispcifis'estcoul.
Annulation:Non

ENI Editions - All rigths reserved

- 5-

Annulationd'unvnement
Dans certains cas, il est souhaitable de pouvoir annuler un vnement. Pour cela, il existe deux faons de
procder:

- en spcifiant le nom d'une macro, contenant l'action AnnulerEvnement, comme paramtre de la proprit de type vnement
correspondante, par exemple pour annuler la mise jour d'un contrle ou pour placer le nom de la macro contenant l'action
AnnulerEvnement sur sa proprit AvantMAJ. L'action AnnulerEvnement en Visual Basic utilise la mthode CancelEvent
de l'objet Docmd.

- en donnant la valeur True l'argument Cancel d'une procdure vnementielle.


Exemple
Si la date est incorrecte, l'vnement Exit (Sortie) est annul : le curseur reste positionn sur le champ.
Private Sub txtDateFin_Exit(Cancel As Integer)
If IsNull(txtDateFin) Then Exit Sub
' La date doit tre correcte
If Not IsDate(txtDateFin) Then
MsgBox "Date incorrecte", vbCritical
Cancel = True
Exit Sub
End If
' La date de fin doit tre >= date de dbut
If DateValue(txtDateFin) < DateValue(txtDateDeb) Then
MsgBox "Date de fin antrieure la date de dbut",
vbCritical
Cancel = True
Exit Sub
End If
End Sub
Tous les vnements ne sont pas annulables (voir tableaux des catgories d'vnements prcdents).

ENI Editions - All rigths reserved

- 1-

Squencestypesd'vnements
Une action utilisateur ou systme gnre directement un vnement, mais plusieurs vnements sousjacents
peuventtreactivs.
Voiciquelquessquencestypesd'enchanementsd'vnements:
Ouvertured'unformulaire:
OpenLoad Resize ActivateCurrent
Fermetured'unformulaire:
UnLoad Deactivate Close
Entredansuncontrle:
Enter GotFocus
Sortied'uncontrle:
Exit LostFocus
Passaged'unformulaireunautre:
Deactivate(form1) Activate(form2)
Modificationd'unezonedetexte:
KeyDown KeyPress Change KeyUp
Misejourd'uncontrle:
KeyDown KeyPress Change KeyUp Exit(Zone1) LostFocus(Zone1) Enter(Zone2)
GotFocus(Zone2)
Misejourd'unenregistrement:
KeyDown KeyPress Change KeyUp BeforeUpdate(Zonedetexte) AfterUpdate(Zone
detexte) BeforeUpdate(Formulaire)AfterUpdate(Formulaire)
Introductiondanslepremierchampd'unnouvelenregistrement:
KeyDown KeyPress BeforeUpdate(Formulaire) Change KeyUp
Suppressiond'enregistrements:
Delete Current BeforeDelConfirm AfterDelConfirm

ENI Editions - All rigths reserved

- 1-

Lesvnementsdemisejour
DansMicrosoftAccesslesvnementsdemisejourinterviennentdeuxniveaux :

- mise jour d'un contrle,


- mise jour d'un enregistrement.
Danslecasd'unemisejourd'uncontrle,cesontlesvnementsBeforeUpdateetAfterUpdateducontrle
luimmequisontexcuts.
Dans le cas d'une mise jour d'enregistrement, ce sont les vnements BeforeUpdate et AfterUpdate du
formulairequisontexcuts.
Lesvnements"misejourdescontrles"sontexcutsavantlesvnements"misejourduformulaire".

ENI Editions - All rigths reserved

- 1-

Lesdiffrentstypesd'erreur
Ondistinguediffrentstypesd'erreurdanslelangageVBA :

- les erreurs de syntaxe,


- les erreurs de compilation,
- les erreurs d'excution,
- les erreurs de logique.
Leserreursdesyntaxe
LeserreursdesyntaxepeuventtredcelesautomatiquementlorsdelasaisieducodedansVBA.
Pouractiverlavrificationdesyntaxe,danslemenuOutils:

Slectionnez Options.

Puis slectionnez l'onglet diteur et cochez la case Vrification automatique de la syntaxe.

Exemple

Les erreurs de syntaxe non corriges provoqueront une erreur de compilation (cf. message affich).
Leserreursdecompilation
LeserreursdecompilationsontdceleslorsqueAccesstentedecompilervotrecode.
LecodeVBApeuttrecompildedeuxfaons:

- la demande de l'utilisateur en slectionnant l'option Compiler du menu Dbogage. Dans ce cas le code est entirement
compil.

- Automatiquement lors de l'excution du code. Dans ce cas, le code contenu dans les procdures n'est compil que lors du
premier appel de la procdure. Les procdures non appeles ne seront pas compiles.
Il est recommand de compiler le programme avant de l'excuter afin de gagner du temps sur la mise au point.

ENI Editions - All rigths reserved

- 1-

Exemple

Ilestpossibled'viterleserreursd'excutionduesdesvariablesnondclaresenutilisantl'instructionOption
Explicit.Sivoustentezd'utiliserunevariablenondclare,uneerreurseproduitlorsdelacompilation.
Leserreursd'excution
Les erreurs d'excution sont dceles lorsque Access lance l'excution de votre code. Une instruction, une
opration, un appel de fonction... invalides provoquent une erreur d'excution. Par exemple, l'utilisation d'une
variable non dclare ou un calcul effectu sur une variable comportant une valeur non numrique peuvent
provoqueruneerreurd'excution.
Exemple
La variable dblRayon transmise comme argument contient une valeur non numrique.

- 2-

ENI Editions - All rigths reserved

Leserreursdelogique
Leserreursdelogiquesontliesdeserreursderaisonnementouunemauvaisetraductiond'unraisonnement
encodeVBA.Parexempleunalgorithmedecalculpeutproduireuneerreurdersultatsi,lorsdesatranscription
enVBA,uneoprationestomiseoumaltraduite,ousil'algorithmeesterron.
Leserreursdelogiquesontlesplusdifficilesdtecter.Ellesn'entranentgnralementpasd'erreurd'excution,
maisproduisentunrsultatdiffrentdeceluiattendu.
Dansl'exemplecitprcdemment,silavaleurdePiestfausseoulaformuledecalculduvolumeincorrecte,la
valeurretourneparVolSphereseraerrone.

ENI Editions - All rigths reserved

- 3-

DbogageavecVBA
Prsentation
Le mode dbogage permet, entre autres, de dtecter et de corriger interactivement les erreurs autorisant ainsi
lapoursuitedel'excutionduprogramme.
Lorsqu'une erreur d'excution se produit, un code erreur est affich, l'excution du programme est interrompue
parAccessetlemodedbogageestactiv.
Aveclesdiffrentsoutilsdedbogage,onpeut :

- excuter le code pas pas,


- ajouter des points d'arrt,
- connatre tout moment la valeur d'une variable ou d'une expression,
- modifier interactivement le code,
- etc.
Labarred'outilsDbogage
Labarred'outilsDbogagepermetd'accderdirectementauxdiffrentsoutilsdedbogage.

1. Mode cration : Active ou dsactive le mode cration.


2. Excuter (F5) : Excute le code de la procdure en cours, la feuille UserForm active ou une macro.
3. Arrt (Ctrl Pause) : Interrompt l'excution du programme en cours et passe en mode Arrt.
4. Rinitialiser : Efface le contenu des variables et rinitialise le projet.
5. Basculer le point d'arrt (F9) : Dfinit ou supprime un point d'arrt sur la ligne en cours ; le code est excut jusqu'au point
d'arrt, puis passe en mode dbogage.
6. Pas pas dtaill (F8] : Excute le code, instruction par instruction, en parcourant la procdure en cours et des procdures
appeles.
7. Pas pas principal (Shift F8) : Excute le code, instruction par instruction, uniquement pour la procdure en cours (les
instructions des procdures appeles sont excutes en continu).
8. Pas pas sortant (Ctrl Shift F8) : Excute en continu les lignes restantes de la procdure en cours.
9. Fentre variable locales : Affiche les valeurs des variables locales de la procdure.
10. Fentre excution (raccourci-clavier Ctrl G) : Affiche la fentre excution permettant d'excuter interactivement une instruction.
11. Fentre espions : Affiche la liste des variables espions.
12. Espion express (Shift F9) : Affiche la valeur actuelle de l'expression slectionne.

ENI Editions - All rigths reserved

- 1-

13. Pile des appels : Affiche la liste des appels de procdure dont l'excution est en cours.
L'objetDebug
L'objet Debug permet d'envoyer des donnes pour affichage dans la fentre Excution au moment de
l'excution.
Mthodes

Print :Affichedutexteoulersultatdel'valuationd'uneexpressiondanslafentreExcution.
Assert :Suspendl'excutiondemanireconditionnelle,laligneoapparatlamthode.
Exemple
VolSphere = 4 / 3 * Pi * ((dblRayon) ^ 3)
Debug.print dblRayon
Debug.Assert VolSphere > 0

- 2-

ENI Editions - All rigths reserved

GestiondeserreursparVBA
Principe
Lorsqu'uneerreurd'excutionseproduit,uncodeerreurestgnrparAccess.Lagestiondeserreursconsiste
identifierl'erreureninterceptantsoncodeetlatraiterpour,parexemple:

- afficher un message plus explicite que celui dfini par le systme,


- corriger ventuellement l'erreur.
Le systme de gestion des erreurs d'Access offre deux possibilits pour intercepter l'erreur selon l'endroit o elle
s'estproduite:

- dans la procdure vnementielle Error d'un formulaire ou d'un tat, si l'erreur a t provoque au niveau de l'interface de
Microsoft Access ou du moteur Microsoft Jet,

- en utilisant l'instruction On Error si l'erreur a eu lieu dans du code VBA.


Afin de pouvoir traiter les erreurs, il est ncessaire d'en connatre la liste. La liste des codes erreur est dtaille en Annexe A.
LaprocdurevnementielleError
LaprocdurevnementielleErrorpossdedeuxarguments:
Sub Form_Error (DataErr As Integer, Response As Integer)
DataErr :Contientlecodedel'erreur.
Response : Permet d'afficher (acDataErrDisplay) ou non (acData ErrContinue) le message d'erreur standard
d'Access.
Exemple
L'exemple suivant permet d'intercepter une erreur et de remplacer le message standard d'Access (ex : un index ou une cl principale
ne peut contenir de valeur nulle : correspondant au numro d'erreur 3058), par un message spcifique.
Sub Form_Error (DataErr As Integer,Response As Integer)
'Index Null
If DataErr = 3058 Then
MsgBox "Un employ doit avoir un numro"
'le message standard d'Access ne s'affiche pas
Response = acDataErrContinue
End If
End Sub
L'instructionOnError
OnErrorGoTo
L'instructionOnErrorGoToindiqueunesquenced'instructionsexcuterencasd'erreur.Cetteinstructiondoit
treplaceavantlesinstructionspouvantdclencheruneerreur.
Syntaxe
On Error {GoTo <tiquette>| GoTo 0}
<tiquette> : Nom de l'tiquette indiquant le dbut de la squence d'instructions. Une tiquette est compose
d'unnomcommenantparunelettreetdusignedeuxpoints(:).
Ex:Gest_erreur:
La squence d'instructions appele pour grer les erreurs est place en gnral la fin de la procdure ou de la
ENI Editions - All rigths reserved

- 1-

fonction et prcde d'une instruction Exit Sub ou Exit Function afin d'viter son excution s'il n'y a pas
d'erreur.
0 :Dsactiveletraitementd'erreurs.
D'autre part, dans la squence d'instructions de traitement d'erreurs, il est ncessaire d'indiquer quel endroit
doitreprendrel'excutiondelaprocdureoufonctionaprsletraitementdel'erreur.Pourcela,ilfaututiliserl'une
desinstructionssuivantes:
Resume :Reprendl'excutionduprogrammel'instructionquiaprovoqul'erreur.
Resume Next :Reprendl'excutionduprogrammel'instructionquisuitcellequiaprovoqul'erreur.
Resume <tiquette> :Reprendl'excutionduprogrammel'tiquettedfinie.
Exemple
Sub MaProcdure()
On Error GoTo Erreur
...
Exit Sub
Erreur:
Select Case Err
Case 11
'Division par Zro
MsgBox ...
...
Resume Next
Case 13
'Types incompatibles
...
End Select
End Sub
L'objetErr
L'objetErrcontientdesinformationspermettantdeconnatrel'originedel'erreur.
Proprits

Description:Renvoieunechainedecaractresexpliquantl'originedel'erreur.
HelpContext:Renvoiel'identificateurdecontexteassociunerubriqued'unfichierd'aide.
HelpFile:Renvoieunechanedecaractrescontenantlechemind'accscompletaufichierd'aide.
LastDLLError:Renvoieuncoded'erreursystmeproduitparunappelunebibliothquedeliaisonsdynamiques.
Number:Renvoieunevaleurnumriqueindiquantlenumrodel'erreur.
Source:Renvoieunechanedecaractrescontenantlenomdel'objetoudel'applicationquiagnrl'erreur.
Mthodes

Clear:Effacedemanireexplicitelecontenudel'objetErr.
Raise:Permetdegnrerdeserreursd'excution.
Exemple
Le code suivant permet d'afficher un message donnant des informations sur la nature de l'erreur.

- 2-

ENI Editions - All rigths reserved

Exemple de bote de message renvoye lorsqu'une erreur se produit:

ENI Editions - All rigths reserved

- 3-

Prsentation
Le langage VBA permet de personnaliser vos formulaires et tats lors de leur excution. Vous pourrez, par
exemple,effectuerlesoprationssuivantes:

- Modifier l'apparence d'un contrle dans un formulaire ou un tat (couleur, taille, position...).
- Ajouter ou supprimer des contrles dans un formulaire ou un tat.
- Enchaner des formulaires partir de boutons de commandes.
- Afficher ou imprimer un tat,
- Appliquer des filtres sur les enregistrements d'un tat ou d'un formulaire.
- Etc.
Les assistants "Boutons de commande" et "Zones de liste droulante" gnrent automatiquement du code VBA
dans des procdures vnementielles. Ils constituent des premiers exemples simples de personnalisation de
formulairesetd'tats.
Vous trouverez d'autres exemples de personnalisation de formulaires et d'tats dans la "mini application" dcrite au chapitre Code
d'une mini-application.

ENI Editions - All rigths reserved

- 1-

Personnalisationdesformulaires
Un objet Form fait partie de la collection Forms qui reprsente tous les formulaires actuellement ouverts.
L'objetActiveForm(Screen.ActiveForm)etl'objetMedsignentleformulaireactif.
N'utilisez le mot rserv Me pour reprsenter un objet Form ou Report dans du code que si vous faites rfrence ce formulaire ou
tat partir du code dans le module de classe. Si vous y faites rfrence partir d'un module standard ou d'un autre module du
formulaire ou de l'tat, vous devez utiliser la rfrence complte du formulaire ou de l'tat.
Syntaxes
Pourfaire rfrenceunformulaire,vousdisposezdesdiffrentessyntaxes,permettantdefairerfrence
unobjetd'unecollection,suivantes :
Forms!<Nomformulaire>
ex: Forms!Commandes
Forms![<Nomformulaire>]
ex: Forms![Commandes]
Forms("<Nomformulaire>")
ex: Forms("Commandes")
Forms(<Index>)
ex: Forms(0)
La syntaxe Forms![<Nomformulaire>] est la plus couramment utilise.
Si un nom de formulaire contient un espace, la premire syntaxe ne fonctionne pas.
Utilisez toujours la mme syntaxe afin de faciliter la lecture du code.
Il est prfrable de rfrencer un formulaire spcifique par son nom plutt que par son index, car ce dernier peut changer.
Pour faire rfrence un sousformulaire partir d'un formulaire, vous devez utiliser le nom du contrle
contenantlesousformulairesuividumotclForm.
Exemple
[sFrmParticipant].Form!txtNbStag
[sFrmFormations].Form.RecordSource = strSQL
[sFrmFormations].Form.Requery
PropritsdisponiblesenmodeCration
Pour connatre le nom VBA et la description d'une proprit disponible en mode cration, vous devez vous
positionnerdanslafentrePropritsdel'objetFormulaireetcliquersurlatoucheF1.

ENI Editions - All rigths reserved

- 1-

Propritsdel'ongletFormat

- 2-

ENI Editions - All rigths reserved

1.
2.

Caption

Chanedecaractres

DefaultView

Octet

0Formulaireunique(modesimple)
1Formulairescontinus(modecontinu)
2Feuillededonnes
3Tableaucroisdynamique
4Graphiquecroisdynamique
5Formulairedoubleaffichage

3.
4.
5.
6.
7.
8.

AllowFormView

Boolen

AllowDatasheetView

Boolen

AllowPivotTableView

Boolen

AllowPivotChartView

Boolen

AllowLayoutView

Boolen

Picture

Chanedecaractres

ENI Editions - All rigths reserved

- 3-

9.
10.

PictureTiling

Boolen

PictureAlignment

Octet

0 Hautgauche
1 Hautdroite
2 Centr
3 Basgauche
4 Basdroite
5 Centreduformulaire

11.

PictureType

Octet

0Intgr(ouincoropor)
1Attach(ouli)

12.

PictureSizeMode
0 Dcoupage

Octet

1 Echelle
2 Zoom

13.
14.
15.
16.
17.

Width

Relsimple

AutoCenter

Boolen

AutoResize

Boolen

FitToScreen

Boolen

BorderStyle

Octet

0 Aucun
1 Fin
2 Dimensionnable
3 Traitdoublefixe

18.
19.
20.
21.
22.

RecordSelectors

Boolen

NavigationButtons

Boolen

NavigationCaption

Boolen

DividingLines

Boolen

ScrollBars

Octet

0 Aucun
1 Horizontale
2 Verticale
3 Lesdeux

23.
24.
25.

ControlBox

Boolen

CloseButton

Boolen

MinMaxButtons

Octet

0 Aucun
1 Minactiv
2 Maxactiv
3 Lesdeuxactivs

26.
27.
28.

Moveable

Boolen

SplitFormSize

Entierlong

SplitFormOrientation

Octet

0 Enhaut
1 Enbas

- 4-

ENI Editions - All rigths reserved

2 Agauche
3 Adroite

29.
30.

SplitFormSplitterBar

Boolen

SplitFormDatasheet

Octet

0 Modifautorise
1 Lectureseule

31.

SplitFormPrinting

Octet

0 Formulaireuniquement
1 Feuillededonnesuniquement

32.
33.
34.
35.
36.
37.
38.

SplitFormSplitterBarSave

Boolen

SubdatasheetExpanded

Boolen

SubdatasheetHeight

Boolen

GridX

Entier

GridY

Entier

LayoutForPrint

Boolen

Orientation
0 Degauchedroite
1 Dedroitegauche

39.

PaletteSource

Chanedecaractres

Propritsdel'ongletDonnes

1.
2.

RecordSource

Chanedecaractres

TypeRecordSet

Octet

0 Feuillederponsedynamique
1 Feuillerp.Dyn(MAJglobale)
2 Instantan

3.
4.
5.
6.
7.

FetchDefaults

Boolen

Filter

String

FilterOnLoad

Boolen

OrderBy

String

OrderByOnLoad

Boolen
ENI Editions - All rigths reserved

- 5-

8.
9.
10.
11.
12.
13.

DataEntry

Boolen

AllowAdditions

Boolen

AllowDeletions

Boolen

AllowEdits

Boolen

AllowFilters

Boolen

RecordLocks

Boolen

Propritsdel'ongletvnement

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.

- 6-

OnCurrent

Chanedecaractres

OnLoad

Chanedecaractres

OnClick

Chanedecaractres

BeforeUpdate

Chanedecaractres

AfterUpdate

Chanedecaractres

BeforeInsert

Chanedecaractres

AfterInsert

Chanedecaractres

BeforeDelConfirm

Chanedecaractres

OnDelete

Chanedecaractres

AfterDelConfirm

Chanedecaractres

OnDirty

Chanedecaractres

OnGotFocus

Chanedecaractres

OnLostFocus

Chanedecaractres

OnDblClick

Chanedecaractres

ENI Editions - All rigths reserved

15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.

OnMouseDown

Chanedecaractres

OnMouseUp

Chanedecaractres

OnMouseMove

Chanedecaractres

OnKeyUp

Chanedecaractres

OnKeyDown

Chanedecaractres

OnKeyPress

Chanedecaractres

OnUndo

Chanedecaractres

OnOpen

Chanedecaractres

OnClose

Chanedecaractres

OnResize

Chanedecaractres

OnActivate

Chanedecaractres

OnDeactivate

Chanedecaractres

27.
28.
29.
30.
31.
32.
33.
34.
35.
36.

OnUnload

Chanedecaractres

OnError

Chanedecaractres

MouseWheel

Chanedecaractres

OnFilter

Chanedecaractres

OnApplyFilter

Chanedecaractres

OnTimer

Chanedecaractres

TimerInterval

Chanedecaractres

SelectionChange

Chanedecaractres

BeforeRender

Chanedecaractres

AfterFinalRender

Chanedecaractres

ENI Editions - All rigths reserved

- 7-

37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.

AfterRender

Chanedecaractres

AfterLayout

Chanedecaractres

OnConnect

Chanedecaractres

OnDisconnect

Chanedecaractres

BeforeQuery

Chanedecaractres

Query

Chanedecaractres

DataChange

Chanedecaractres

DataSetChange

Chanedecaractres

CommandExecute

Chanedecaractres

CommandBeforeExecute

Chanedecaractres

CommandChecked

Chanedecaractres

DataSetChange

Chanedecaractres

ViewChange

Chanedecaractres

PivotTableChange

Chanedecaractres

BeforeScreenTip

Chanedecaractres

KeyPreview

Chanedecaractres

Propritsdel'ongletAutres

1.
2.
3.

Popup

Boolen

Modal

Boolen

DisplayOnSharePointSite

Octet

0 Nepasafficher
1 Suivreleparamtredelatable

4.

Cycle

Octet

0 Touslesenregistrements
1 Enregistrementencours
2 Pageencours

5.
6.
- 8-

RibbonName

Chanedecaractres

ToolBar

Chanedecaractres

ENI Editions - All rigths reserved

7.
8.
9.
10.
11.
12.
13.
14.

ShortcutMenu

Boolen

MenuBar

Chanedecaractres

ShortcutMenuBar

Chanedecaractres

HelpFile

Chanedecaractres

HelpContextID

Entierlong

HasModule

Boolen

FastLaserPrinting

Boolen

Tag

Chanedecaractres

PropritsnondisponiblesenmodeCration
Propritsserapportantaumoded'affichageduformulaire
CurrentView:Retournelemoded'affichageencoursduformulaire.
OpenArgs : Retourne l'expression chane spcifie dans l'argument OpenArgs de la mthode OpenForm qui a
ouvertleformulaire.
Page:Spcifielenumrodelapageencours.
Section:Identifieunesectionetpermetd'accderauxpropritsdecettesection.
SelHeight : Spcifie ou dtermine le nombre de lignes slectionnes (enregistrements) dans le rectangle de
slectionencours.
SelLeft:Spcifieoudterminequellecolonne(champ)figureleplusgauchedanslerectangledeslectionen
cours.
SelTop:Spcifieoudterminequelleligne(enregistrement)figuretoutenhautdurectangledeslection.
SelWidth : Spcifie ou dtermine le nombre de colonnes (champ) slectionnes dans le rectangle de slection
encours.
Propritsserapportantauxenregistrementsetleurmisejour
BatchUpdates :Indiquesileformulairespcifiprendenchargelesmisesjourparlotsdetransactions.
BookMark:Dfinitunsignetquiidentifiedefaonuniqueunenregistrement.
CurrentRecord:Permetd'identifierl'enregistrementencours.
Dirty:Permetdedterminersil'enregistrementencoursasubidesmodificationsdepuissaderniresauvegarde.
NewRecord:Dterminesil'enregistrementencoursestunnouvelenregistrement.
RecordSet : Dtermine ou renvoie l'objet DAO Recordset reprsentant la source d'enregistrement d'un
formulaire.
RecordSourceQualifer : Renvoie ou dfinit une chane de caractres indiquant le nom du propritaire de la
sourced'enregistrementsSQLServerpourleformulaire.
Propritsserapportantlaprsentationduformulaire
CurrentSectionLeft:Dtermineladistanceentwipsentrelecoinsuprieurgauchedelasectionencoursetle
coinsuprieurgaucheduformulaire(twip:unitdemesurequivalente1/20depointou1/1440depouce.
Uncentimtrecontient567twips).
CurrentSectionTop:Reprsenteladistanceen twipsentrelecoinsuprieurdelasectionencoursetlecoin
ENI Editions - All rigths reserved

- 9-

suprieurduformulaire.
DataSheetBackColor:Spcifieoudterminelacouleurd'arrireplandelatotalitd'unefeuillededonnes.
DatasheetBorderLineStyle :Indiquelestyledetraitutiliserpourlaborduredelafeuillededonnes.
DatasheetCellsEffect : Permet de spcifier si les effets spciaux s'appliquent aux cellules d'une feuille de
donnes.
DatasheetColumnHeaderUnderlineStyle :Indiquelestyledetraitutiliserpourlebordinfrieurdesenttes
decolonnedelafeuillededonnes.
DataSheetFontHeight:Spcifielatailleenpointsutilisepourafficheretimprimerlesnomsdeschampsetles
donnesenmodeFeuillededonnes.
DataSheetFontItalic:MetenitaliquelesnomsdechampsetlesdonnesenmodeFeuillededonnes.
DataSheetFontName:Spcifielapoliceutilisepourafficheretimprimerlesnomsdeschampsetlesdonnes
enmodeFeuillededonnes.
DataSheetFontUnderline :SoulignelesnomsdechampsetlesdonnesenmodeFeuillededonnes.
DataSheetFontWeight : Spcifie l'paisseur de la police utilise pour afficher et imprimer les caractres des
nomsdechampsetdesdonnesenmodeFeuillededonnes.
DataSheetForeColor:Spcifieoudterminelacouleurdutextedelatotalitd'uneFeuillededonnes.
DatasheetGridlinesBehavior:PermetdespcifierletypedequadrillagedevantapparatreenmodeFeuillede
donnes.
DatasheetGridlinesColor:Permetdespcifierlacouleurduquadrillaged'unefeuillededonnes.
HorizontalDatasheetGridlineStyle : Indique le quadrillage horizontal utiliser pour la bordure de la feuille de
donnes.
InsideHeight:Dterminelahauteur(entwips)delafentrecontenantunformulaire.
InsideWidth:Dterminelalargeur(entwips)delafentrecontenantunformulaire.
Pages:Indiquelenombretotaldepages.
Painting:Permetdespcifiersileformulairedoittreredessin.
PaintPalette:Spcifielapalettedevanttreutiliseparleformulaire.
PictureData : Permet de copier l'image du formulaire dans un autre objet qui reconnat la proprit Image
(Picture).
VerticalDatasheetGridlineStyle : Indique le quadrillage vertical utiliser pour la bordure de la feuille de
donnes.
WindowHeight:Indiquelahauteurd'unformulaireexprimeentwips.
WindowLeft :Indiquelapositionl'cran,entwips,dubordgaucheduformulaire.
WindowTop :Indiquelapositionl'cran,entwips,dubordsuprieurduformulaire.
WindowWidth:Renvoielalargeurd'unformulaireexprimeentwips.
Propritsrenvoyantunobjet

- 10 -

ENI Editions - All rigths reserved

Application :Permetd'accderl'objetApplicationd'Access.
ChartSpace :RenvoieunobjetChartSpacequireprsentel'espacegraphique.
Form:Permetdefairerfrenceunformulaireassociuncontrlesousformulaire.
Module:Permetdespcifierunmoduledeformulaire.LesmthodesInsertLines,DeleteLinesetReplaceLinede
l'objetModulepermettentdemodifierlecontenud'unmoduledecode.
Parent:Permetdefairerfrencel'objetpre.
PivotTable :RenvoieunobjetPivotTablequireprsenteleconteneurd'unelistedetableaucroisdynamique.
Printer :RenvoieoudfinitunobjetPrinterquireprsentel'imprimantepardfautdusystmeactuel.
RecordsetClone:Permetdefairerfrencel'objetRecordsetduformulaire.
Propritsrelativesl'impressionduformulaire
PrtDevMode : Permet de dfinir ou d'obtenir des informations relatives au mode du priphrique d'impression
spcifi.
PrtDevNames:Permetdedfiniroud'obtenirdesinformationsrelativesl'imprimantechoisie.
PrtMip:Dfinitouretournedesinformationssurlemodedupriphriquespcifi.
UseDefaultPrinter :Indiquesileformulaireutilisel'imprimantepardfautdusystme.
MthodesdesobjetsForm
Mthodes

GotoPage:Dplacelefocussurlepremiercontrledelapageindique.
Move:Dplaceet/ouredimensionneleformulaireauxcoordonnesindiquesparlesvaleursdesarguments.
Recalc:Recalculeimmdiatementlescontrlesduformulaire.
Refresh : Met jour les donnes du formulaire afin qu'elles contiennent les dernires modifications
ventuellementeffectuespard'autresutilisateurs.
Repaint:Effectuetouteslesmisesjourenattenteduformulaire.
Requery:Metjourlesdonnesduformulairespcifi.
SetFocus:Donnelefocusauformulaire.
UnDo:Restaureunformulairetelqu'iltaitavantd'tremodifi.
Exemple
Affichage de la fiche Client en fonction du nom de la Socit slectionne dans une zone de liste.
Private Sub lstRechCli_AfterUpdate()
Dim rs As Object
' Recherche l'enregistrement correspondant
' au client slectionn
Set rs = Me.Recordset.Clone
rs.FindFirst "[Cli_CodeCLi] = '" & Me![lstRechCli] & "'"

ENI Editions - All rigths reserved

- 11 -

If Not rs.EOF Then Me.Bookmark = rs.Bookmark


End Sub
Affectation d'un filtre en fonction du contenu d'une case cocher : slection des clients franais, trangers ou de tous les clients.
Private Sub chkPays_AfterUpdate()
Select Case chkPays
' Clients franais
Case 1
Me.FilterOn = True
Me.Filter = "[Cli_Pays] = 'France'"
Me.Refresh
' Clients hors France
Case 2
Me.FilterOn = True
Me.Filter = "[Cli_Pays] <> 'France'"
Me.Refresh
' Tous les clients
Case 3
Me.FilterOn = False
Me.Refresh
End Select
End Sub

- 12 -

ENI Editions - All rigths reserved

Personnalisationdestats
Un objet Reportfaitpartiedelacollection Reportsquireprsentetouslestatsactuellementouverts.L'objet
ActiveReport(Screen.ActiveReport)etl'objetMedsignentl'tatactif.
Syntaxes
Pourfairerfrenceuntat,vousdisposezdesmmessyntaxesquepourlesformulaires.
Exemple
Reports![ListeCde]
Reports("ListeCde")
Reports![ListeCde]![DateCde]
PropritsdisponiblesenmodeCration
Propritsdel'ongletProprits

1.
2.

Caption

Chanedecaractres

DefaultView

Octet

0 Modesimple
1 Modecontinu
2 Feuillededonnes
3 Tableaucroisdynamique
ENI Editions - All rigths reserved

- 1-

4 Graphiquecroisdynamique
5 Formulairedoubleaffichage

3.
4.
5.
6.
7.

AlloReportView

Boolen

AllowLayoutView

Boolen

Picture

Chanedecaractres

PictureTiling

Boolen

PictureAlignement

Octet

0 Suprieurgauche
1 Suprieurdroit
2 Centr
3 Infrieurgauche
4 Infrieurdroit
5Centreformulaire

8.

PictureType

Octet

0 Intgr(ouincorpor)
1 Attach(ouli)

9.

PictureSizeMode

Octet

0 Dcoupage
1 Echelle
2 Zoom

10.
11.
12.
13.

Width

Entier

AutoCenter

Boolen

AutoResize

Boolen

BorderStyle

Octet

0 Aucun
1 Fin
2 Dimensionnable
3 Traitdoublefixe

14.

ScrollBars

Octet

0 Aucun
1 Horizontale
2 Verticale
3 Lesdeux

15.
16.
17.

ControlBox

Boolen

CloseButton

Boolen

MinMaxButtons

Octet

0 Aucun
1 Minactiv
2 Maxactiv
3 Lesdeuxactivs

18.
19.
20.
21.
22.
- 2-

Moveable

Boolen

GridX

Entier

GridY

Entier

LayoutForPrint

Boolen

GrpKeepTogether

Octet

ENI Editions - All rigths reserved

0 Parpage
1 Parcolonne

23.

PicturePages

Octet

0 Touteslespages
1 Premirepage
2 Pasdepage

24.

PageHeader

Octet

0 Touteslespages
1 Sansentted'tat
2 Sanspiedd'tat
3 Sansentte/piedd'tat

25.

PageFooter

Octet

0 Touteslespages
1 Sansentted'tat
2 Sanspiedd'tat
3 Sansentte/piedd'tat

26.

Orientation

Octet

0 Degauchedroite
1 Dedroitegauche

27.

PaletteSource

Chainedecaractres

Propritsdel'ongletDonnes

1.
2.
3.
4.
5.
6.

RecordSource

Chanedecaractres

Filter

Chanedecaractres

FilterOnLoad

Boolen

OrderBy

String

OrderByOnLoad

Boolen

AllowFilters

Boolen

Propritsdel'ongletvnement

ENI Editions - All rigths reserved

- 3-

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
- 4-

OnCurrent

Chanedecaractres

OnLoad

Chanedecaractres

OnNoData

Chanedecaractres

OnClick

Chanedecaractres

OnGotFocus

Chanedecaractres

OnLostFocus

Chanedecaractres

OnDblClick

Chanedecaractres

OnMouseDown

Chanedecaractres

OnMouseUp

Chanedecaractres

OnMouseMove

Chanedecaractres

OnKeyUp

Chanedecaractres

OnKeyDown

Chanedecaractres

OnKeyPress

Chanedecaractres

OnOpen

Chanedecaractres

OnClose

Chanedecaractres

OnResize

Chanedecaractres

OnActivate

Chanedecaractres

OnDeactivate

Chanedecaractres

OnUnload

Chanedecaractres

OnError

Chanedecaractres

MouseWheel

Chanedecaractres

OnFilter

Chanedecaractres

ENI Editions - All rigths reserved

23.
24.
25.
26.
27.

OnApplyFilter

Chanedecaractres

OnTimer

Chanedecaractres

TimerInterval

Chanedecaractres

OnPage

Chanedecaractres

KeyPreview

Boolen

Propritsdel'ongletAutres

1.
2.
3.

PopUp

Boolen

Modal

Boolen

DisplayOnSharePointSite

Octet

0 Nepasafficher
1 Suivreleparamtredelatable

4.

DateGrouping
0 ParamtresUS
1 Paramtressystme

5.

Cycle
0 Touslesenregistrements
1 Enregistrementencours
2 Pageencours

6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

RecordLocks

Boolen

RibbonName

Chanedecaractres

ToolBar

Chanedecaractres

MenuBar

Chanedecaractres

ShortcutMenuBar

Chanedecaractres

HelpFile

Chanedecaractres

HelpContextID

Entierlong

HasModule

Boolen

FastLaserPrinting

Boolen

Tag

Chanedecaractres

ENI Editions - All rigths reserved

- 5-

Propritsnondisponiblesenmodecration
Propritsserapportantaumoded'affichagedel'tat
Moveable :Indiquesil'tatpeuttredplacparl'utilisateur.
Page:Indiquelenumrodepageencours.
Propritsserapportantauxenregistrementsetleurmisejour.
CurrentRecord:Identifiel'enregistrementencours.
Dirty:Permetdedterminersil'enregistrementencoursasubidesmodificationsdepuissaderniresauvegarde.
HasData:Indiquesil'tatestdpendantd'unjeud'enregistrementsvide.
RecordSourceQualifier : Renvoie ou dfinit une chane de caractres indiquant le nom du propritaire de la
sourced'enregistrementsSQLServerpourl'tat
Propritsserapportantlaprsentationdel'tat
DrawMode : Spcifie comment le crayon (la couleur utilise pour le dessin) affecte les couleurs d'arrireplan
surl'tatlorsquevousutilisezlesmthodesLine,CircleouPSetpourdessinersuruntatimprimer.
DrawStyle:SpcifielestyledetraitlorsquevousutilisezlesmthodesLine et Circle pour imprimer des traits
suruntat.
DrawWidth : Spcifie la largeur de trait pour les mthodes Line, Circle et PSet lorsque vous imprimez des
lignessuruntat.
FillColor:Permetdespcifierlacouleurdelatramedesrectanglesetdescerclesdessinsdansuntatl'aide
desmthodesLineetCircle.
FillStyle:Spcifiesiuncercleouuntraitdessinl'aidedelamthodeCircleouLineesttransparent,opaque
ouavecunmotifdetrame.
FontBold : Spcifie si une police doit apparatre en gras lors de l'impression de contrles d'tats ou lors de
l'utilisationdelamthodePrintdansuntat.
Left:Dfinitlapositiongauchedel'tat.
Painting:Permetdespcifiersil'tatdoittreredessin.
PaintPalette:Spcifielapalettedevanttreutiliseparl'tat.
ScaleLeft : Spcifie les units des coordonnes horizontales reprsentant le bord gauche d'une page lorsque
vous utilisez les mthodes Circle, Line, PSet ou Print pour l'impression ou l'aperu d'un tat ou pour son
enregistrementsousformedefichier.
ScaleMode : Spcifie l'unit de mesure pour les coordonnes d'une page quand vous utilisez les mthodes
Circle,Line,PSetouPrintpourl'impressionoul'aperud'untatousonenregistrementsousformedefichier.
ScaleTop : Spcifie les units des coordonnes verticales reprsentant le bord suprieur d'une page lorsque
vous utilisez les mthodes Circle, Line, PSet ou Print pour l'impression ou l'aperu d'un tat ou pour son
enregistrementsousformedefichier.
ScaleWidth : Spcifie le nombre d'units utilises dans la largeur de la page lorsque vous utilisez les mthodes
Circle,Line,PSetouPrintpourl'impressionoul'aperud'untatousonenregistrementsousformedefichier.

- 6-

ENI Editions - All rigths reserved

Top:Dfinitlapositionhautedel'tat.
WindowLeft :Indiquelapositionl'cran,entwips,dubordgauchedel'tat.
WindowTop :Indiquelapositionl'cran,entwips,dubordsuprieurdel'tat.
Propritsrenvoyantunobjet
Application:Permetd'accderl'objetApplicationd'Access.
Module : Permet de spcifier un module d'tat. Les mthodes InsertLines, DeleteLines et ReplaceLine de
l'objetModulepermettentdemodifierlecontenud'unmoduledecode.
Parent:Permetdefairerfrencel'objetpre.
Printer :RenvoieoudfinitunobjetPrinterquireprsentel'imprimantepardfautdusystmeactuel.
Recordset:Dtermineourenvoiel'objetDAORecordsetreprsentantlesenregistrementsd'untat.
Shape : Renvoie une chane reprsentant la commande de type Shape permettant d'effectuer le tri et le
regroupementdel'tatspcifi.Enlectureseule.
Report:Permetdefairerfrencel'tatassociuncontrle soustat.
Propritsrelativesl'impressiondel'tat
CurrentX:Permetdespcifierlacoordonnehorizontaledudbutdelaprochainemthoded'impressionoude
dessind'untat.
CurrentY : Permet de spcifier la coordonne verticale du dbut de la prochaine mthode d'impression ou de
dessind'untat.
MoveLayout:SpcifiesiMicrosoft Accessdoitpasserlapositiond'impressionsuivantesurlapage.
NextRecord:Spcifiesiunesectiondoitpasserl'enregistrementsuivant.
Pages:Indiquelenombretotaldepages.
PrintCount : Renvoie le nombre d'valuations de la proprit SurImpression (OnPrint) pour la section en cours
d'untat.
PrintSection:Spcifiesiunesectiondoittreimprime.
PrtDevMode:Permetdedfinirouderestituerdesinformationsrelativesaumodedupriphriqued'impression
spcifi.
PrtDevNames:Permetdedfinirouderetournerdesinformationsrelativesl'imprimantechoisie.
PrtMip:Dfinitouretournedesinformationssurlemodedupriphriquespcifi.
UseDefaultPrinter:Indiquesil'tatutilisel'imprimantepardfautdusystme.
Autresproprits
FormatCount:Permetdedterminerlenombred'valuationsdelapropritAuFormatage(OnFormat)pourla
sectionencoursdansuntat.
GroupLevel:Faitrfrenceauniveauderegroupementsurlequelporteleregroupementouletrid'untat.
Hwnd : Retourne le descripteur (une valeur unique de type Entier long) attribu la fentre en cours par

ENI Editions - All rigths reserved

- 7-

Microsoft Windows.
PictureData:Permetdecopierl'imagedel'tatdansunautreobjetquireconnatlapropritImage(Picture).
Section:Identifieunesectionetpermetd'accdersesproprits.
Mthodes
Circle:Permetdedessineruncercleouuneellipse.
Line:Permetdedessinerdeslignesoudesrectangles.
Move :Dplaceet/ouredimensionnel'tatauxcoordonnesindiquesparlesvaleursdesarguments.
Print:Envoieletextedfinil'objetReport.
Pset:Dtermineunpointdel'tatpourmodifiersacouleur.
Scale:Dfinitlesystmedecoordonnes.
TextHeight:Retournelahauteurd'unechaneimprimer.
TextWidth :Retournelalargeurd'unechaneimprimer.

- 8-

ENI Editions - All rigths reserved

LesobjetsControl
Unobjet ControlfaitpartiedelacollectionControlsquireprsentetouslescontrlesd'unformulaire,d'untat
ou d'un sousformulaire. L'objet ActiveControl (Screen.ActiveControl ou <NomFormulaire>.ActiveControl)
dsignelecontrleactif.
Syntaxes
Vouspouvezrfrenceruncontrledefaonimplicite:
<Formulaire>|<Etat>!<NomContrle> ex: Me!DateCde
<Formulaire>|<Etat>![<NomContrle>] ex: Me![DateCde]
<Formulaire>|<Etat>("<NomContrle>") ex: Me("DateCde")
<Formulaire>|<Etat>.<NomContrle> ex: Me.DateCde
ouexplicitementcommemembredelacollectionControls :
<Formulaire>|<Etat>.Controls{("<contrle>")|!<contrle>|
(<index contrle>)}
ex:
Me.Controls!DateCde
Me.Controls![DateCde]
Me.Controls("DateCde")
Me.Controls(0)
Chaque contrle a ses proprits, mthodes et vnements particuliers. Seules les proprits et mthodes
communestouslescontrlessonticirpertories.
Pour rfrencer un contrle du formulaire ou de l'tat actif, le mot cl Me n'est pas obligatoire. Vous pouvez directement utiliser le
nom du contrle.
Propritscommuneslaplupartdescontrles
Application:Permetd'accderl'objetApplicationdeMicrosoftAccess.
Form:Permetdefairerfrenceauformulairecontenantlecontrle.
Hyperlink:Renvoieunerfrenceunobjetlienhypertexte.
Object:PermetderetournerunerfrenceunobjetActiveXassociunobjetOLEliouincorpordansun
contrle.
ObjectVerbs:PermetdedterminerlalistedesactionsOLEprisesenchargeparunobjetOLE.
OldValue:Renvoielavaleurnonmodified'uncontrledpendant(anciennevaleur).
Parent:Permetdefairerfrencel'objetpred'uncontrle.
Report:Permetdefairerfrencel'tatcontenantlecontrle.
Mthodescommuneslaplupartdescontrles
Requery:Recalculelavaleurd'uncontrle.
SetFocus:Donnelefocusuncontrle.
SizeToFit:Ajusteuncontrleautexteoul'imagequ'ilcontient.
UnDo:Restaureuncontrletelqu'iltaitavantd'tremodifi.
LamthodeMove

ENI Editions - All rigths reserved

- 1-

La mthode Move est disponible pour la plupart de contrles (CheckBox, ComboBox, CommandButton,
Image,Label,Line,TexteBox...).
Elle permet de dplacer et/ou redimensionner le contrle en fonction des coordonnes indiques par les valeurs
desarguments.
SyntaxedelamthodeMove
<expression>.Move(<Gauche>, <Haut>, <Largeur>, <Hauteur>)
<expression> :Dsigneuncontrle,tatouformulaire.
Gauche : Obligatoire. Position l'cran, en twips, du bord gauche de l'objet par rapport au bord gauche de la
fentredeMicrosoftAccess.
Haut : Facultatif. Position l'cran, en twips, du bord suprieur de l'objet par rapport au bord suprieur de la
fentredeMicrosoftAccess.
Largeur :Facultatif.Largeurdsire,entwips,del'objet.
Hauteur :Facultatif.Hauteurdsire,entwips,del'objet.

- 2-

ENI Editions - All rigths reserved

Lescontrlesd'Access
Prsentation
MicrosoftAccess2007estpourvud'unnombreintressantdecontrlesfacilitantl'laborationd'uneapplication.
Ces contrles sont placs dans des formulaires ou dans des tats de faon aboutir l'interface dsire.
Chacun d'eux possde ses propres caractristiques (proprits), ses propres comportements (mthodes) ainsi
qu'une liste d'vnements auxquels ils peuvent ragir, tout cela accessible par l'intermdiaire de l'explorateur
d'objets.
Ondistinguedeuxtypesdecontrles:

- les contrles intrinsques, directement intgrs au moteur Access,


- les contrles ActiveX, chacun d'eux faisant l'objet d'un fichier OCX.
Lescontrlesintrinsquesfigurenttousdanslaboteoutils.
LescontrlesActiveXpeuventtreslectionnsparl'intermdiairedel'outil
delaboteoutils,quilistetous
les contrles ActiveX prsents sur le systme. Ils fonctionnent de la mme manire que les contrles
intrinsques et sont implants dans le systme par l'installation de nouveaux logiciels ou par l'achat de
bibliothquesdecontrlesActiveX.
La version Office 2007 Professionnel permet notamment l'utilisation du contrle Calendrier qui facilite l'affichage
etlamisejourd'uncalendrier.
ListedescontrlesAccess2007
Pour accder aux contrles depuis un formulaire ou un tat ouvert en Mode Cration, activez l'onglet Crer du
ruban:lalistesdescontrlesetdesoutilsdemiseenformeestalorsdisponibledepuislegroupeContrles.

Nom du contrle
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

Typed'objetVBA

Logo

Image

Titre

TextBox

Numrodepage

TextBox

DateetHeure

TextBox

Zonedetexte

TextBox

Etiquette

Label

Boutondecommande

CommandButton

Zonedelistedroulante

ComboBox

Zonedeliste

ListBox

SousFormulaire/SousEtat

SubForm/SubReport

ENI Editions - All rigths reserved

- 1-

11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

- 2-

Trait

Line

Rectangle

Rectangle

Cadred'objetdpendant

BoundObjectFrame

Grouped'options

OptionGroup

Casecocher

CheckBox

Cased'option

OptionButton

Boutonbascule

ToggleButton

Contrleonglet

TabControl

Page

Page

Graphique

Chart

Cadred'objetindpendant

UnboundObjectFrame

Image

Image

Sautdepage

PageBreak

Lienhypertexte

Label

Picejointe

Attachment

ENI Editions - All rigths reserved

Lesoptionsdedmarrage
Lesoptionsdedmarraged'Access2007permettentdedfinirl'aspectetlecomportementd'uneapplicationlors
desonouverture.
Pourmodifierlesoptionsdedmarrage:

Cliquez sur le bouton Microsoft Office

, puis sur le bouton Options Access (en bas de la bote de dialogue).

Slectionnez la catgorie Base de donnes active.


Labotededialoguesuivanteestalorsaffiche:

Certaines de ces options correspondent des proprits de la base de donnes courantes (objet Database) et
peuventtremodifiesaumoyendulangageVBA:

1.
2.
3.
4.
5.
6.
7.

PropritVBA

Type

AppTitle

String

AppIcon

String

UseAppIconForFrmRpt

Boolen

StartupForm

String

StartupShowStatusBar

Boolen

AllowSpecialKeys

Boolen

AutoCompact

Boolen
ENI Editions - All rigths reserved

- 1-

8.
9.
10.
11.
12.

RemovePersonalInformation

Boolen

ThemedFormControls

Boolen

StartupShortcutMenuBar

String

AllowFullMenus

Boolen

AllowShortcutMenus

Boolen

Pour modifier une proprit l'aide du langage VBA, vous devez utiliser la collection Properties de l'objet
Database.Silapropritn'apasdjtdfinie,vousdevezlacreraumoyendelamthodeCreateProperty.
L'exemple suivant permet de modifier certaines options de dmarrage.
Sub modifieOptions()
Dim intX As Integer
' Titre de l'application
intX = AddAppProperty("AppTitle", DB_Text, _
"Gestion des Formations")
' Icne de l'application
intX = AddAppProperty("AppIcon", DB_Text,
"C:\Formations\Formation.bmp")
' Option "Utiliser comme icne de formulaire ou
d'tat"
intX = AddAppProperty("UseAppIconForFrmRpt", DB_BOOLEAN,
1)
' Option "Compacter lors de la fermeture"
intX = AddAppProperty("Auto Compact", DB_BOOLEAN, 1)
End Sub
Function AddAppProperty(strName As String, _
varType As Variant, varValue As Variant) As Integer
Dim dbs As Object, prp As Variant
Const conPropNotFoundError = 3270
' Modifie la valeur de la proprit
Set dbs = CurrentDb
On Error GoTo AddProp_Err
dbs.Properties(strName) = varValue
AddAppProperty = True
AddProp_Bye:
Exit Function
AddProp_Err:
' En cas d'erreur, ajoute la proprit
' au moyen de la mthode CreateProperty
If Err = conPropNotFoundError Then
Set prp = dbs.CreateProperty(strName, varType, varValue)
dbs.Properties.Append prp
Resume
Else
AddAppProperty = False
Resume AddProp_Bye
End If
End Function

- 2-

ENI Editions - All rigths reserved

Personnalisationduruban
Prsentation
DansAccess2007,ilestpossibledepersonnaliserintgralementl'apparencedurubanaumoyendulangageXML.
Celangagepermet:

- de masquer les onglets existants,


- de crer de nouveaux onglets, groupes de commandes et commandes,
- de personnaliser la prsentation des commandes l'aide d'icnes,
- d'associer des macros ou du code VBA aux commandes,
- d'afficher des commandes intgres Access.
Le code XML peut tre stock diffrents emplacements mais il est fortement recommand de le stocker dans
unetablesystmedelabasededonnes.LesrubanscrsenlangageXMLpeuventtreassocisl'application
Accessouuniquementcertainsformulairesettats.
Configurationd'Accesspourlapersonnalisationduruban
AfindepouvoircrerettesteraumieuxvotrecodeXML,ilestrecommanddemodifierlesoptionssuivantes :
Affichagedestablessystmesdanslevoletdenavigation
Par dfaut, les tables systmes ne sont pas affiches dans le volet de navigation. Par consquent vous ne
pourrezpasaccderlatablesystmepermettantdestockervotrecodeXML.
Pourmodifiercetteoption:

Cliquez avec le bouton droit sur la barre de navigation situe en haut du volet de navigation.

Slectionnez l'option Options de navigation dans le menu contextuel.

Dans la bote de dialogue Options de navigation, activez l'option Afficher les objets systme, puis cliquez sur le bouton de
commande OK.

Affichagedesmessagesd'erreurscontenuesdanslecodeXML
Par dfaut, les messages d'erreurs dtects dans le code XML ne sont pas affichs. De ce fait, si votre code
XMLcontientdeserreurs,lerubannepourratreaffichetilseradifficiled'identifierlacausedel'erreur.
Pourmodifiercetteoption:

Cliquez sur le bouton Microsoft Office

, puis sur le bouton Options Access (situ en bas de la bote de dialogue).

Slectionnez la catgorie Avanc dans le menu de gauche.

Activez l'option Afficher les erreurs du complment d'interface utilisateur situ sous Gnral.

Cliquez sur le bouton de commande OK.


Si une erreur est dtecte lors de l'excution du code XML permettant de gnrer le ruban personnalis, une
message d'erreur est affich. Le message indique les numros de ligne et de colonne du code concern par
ENI Editions - All rigths reserved

- 1-

l'erreurainsiqueledescriptifdel'erreur.
Exemple:

Crationd'unetablesystmeUSysRibbons
LatablesystmeUSysRibbonspermetdestockerlecodeXMLpermettantdecrerunouplusieursrubans.
Pourcrercettetable:

Activez l'onglet Crer.

Dans le groupe Tables, cliquez sur Cration de table.

Insrez les champs suivants:

RibbonIdNumroAuto
RibbonName Texte sur 255 caractres
RibbonXML Mmo

Slectionnez le champ RibbonId et cliquez sur la commande Cl primaire (situe dans le groupe Outils de l'onglet Cration).

Cliquez sur Enregistrer depuis la barre d'outils Accs rapide.

Nommez la nouvelle table UsysRibbons.

AjoutducodeXMLdepersonnalisationlatableUSysRibbons
PourassocierducodeXMLvotretable UsysRibbons,lasolutionlaplussimpleestdegnrerunformulairede
saisie.Pourcela :

Slectionnez la table UsysRibbons dans le volet de navigation.

Activez l'onglet Crer, puis cliquez sur Formulaire dans le groupe Formulaires.

Saisissez le nom du ruban et le code XML associ dans le formulaire.

Exemple :
Le code XML suivant permet de masquer les onglets Crer et Donnes externes du Ruban:

- 2-

ENI Editions - All rigths reserved

Afin de faciliter la saisie et la lecture du code XML, vous pouvez utiliser un diteur XML (ex : Visual Web Developper Express
tlchargeable depuis le site de Microsoft) pour crer votre code et le copier ensuite dans la table UsysRibbon.
Associationdurubanl'applicationactive

Cliquez sur le bouton Microsoft Office

, puis sur le bouton Options Access (situ en bas de la bote de dialogue).

Slectionnez la catgorie Base de donnes active dans le menu de gauche.

Inscrivez le nom du ruban (ex : ruban1) dans la liste Nom du ruban situe sous Options de la barre d'outils et du ruban.

Cliquez sur le bouton de commande OK. Le message suivant est alors affich :

Fermezvotrebasededonnesetouvrezlanouveauafind'activerlenouveauruban.
Le code XML du ruban est excut l'ouverture de la base de donnes. Pour tester les modifications apportes votre code XML,
vous devez systmatiquement fermer puis rouvrir votre base de donnes.
Associationdurubanunformulaireouuntat

Ouvrez le formulaire ou l'tat en Mode cration.

Affichez la feuille de proprit du formulaire ou de l'tat.

Sous l'onglet Autre de la feuille de proprit, cliquez sur la liste Nom du ruban et slectionnez le ruban afficher lors de
l'ouverture du formulaire ou de l'tat.

ENI Editions - All rigths reserved

- 3-

Enregistrez puis fermez votre formulaire.

Ouvrez le formulaire en Mode Formulaire: le ruban slectionn est alors affich. la fermeture du formulaire, le ruban associ
l'application sera restaur.

- 4-

ENI Editions - All rigths reserved

PrsentationdulangageXML
LelangageXML
LelangageXML(eXtensibleMarkupLanguage)estlelangagestandarddedescriptionetd'changededonnes,
utilisnotammentsurleweb.
ToutcommelelangageHTML,lelangageXMLutilisedesbalises(ou"tags")pourdlimiteruncontenu.Unebalise
estfacilementidentifiablecarellecommenceparlecaractre<etsetermineparlecaractre>(lesbalisesde
findecontenucommencentpar/).
ElmentsXMLutilisspourpersonnaliserleruban
LesprincipalesbalisesXMLutilisesdanslecodeXMLd'unruban
Nomdebalise

Description

<customUI>

Baliseprincipaled'unrubanpersonnalis

<ribbon>

Balisecontenantladescriptionduruban

<OfficeMenu>

Menu accessible depuis le bouton Microsoft


Office

<tab>

Ongletdansleruban

<group>

Groupedansunongletdansleruban

<labelControl>

Etiquette(titreouintitul)

<button>

Boutondecommande

<splitButton>

Boutondemenu

<toggleButton>

Boutonbascule

<menu>

Menudroulant

<dynamicMenu>

Menudroulantdynamique

<gallery>

Galerieoupalettedechoix

<dialogBoxLauncher>

Bouton dclenchant l'ouverture d'une bote


dedialogue

Lespropritsassociesauxobjetsduruban
Les proprits suivantes permettent de personnaliser les diffrents contrles affichs dans le ruban (bouton de
commande,menudroulant)
Proprit

Description

Id

Identifiantuniqued'uncontrlepersonnalis.

idMso

Identifiant
Microsoft.

enabled

"true"silecontrleestaccessbile,"false"sinon.
Lavaleurpardfautest"true".

insertBeforeMso

Placel'objetavantuncontrleOfficeexistant.

insertAfterMso

Placel'objetaprsuncontrleOfficeexistant.

imageMso

Nomdel'imageutiliserpourlecontrle.

itemSize

Tailledeslmentsdumenu.

label

Texteaffichsurlecontrle.

onAction

MacrooucodeVBAassociaucontrle.

screentip

Titredel'infobulleducontrle.

supertip

Texteapparaissantdansl'infobulleducontrle.

size

Tailleducontrle("normal"ou"large").

showImage

"true" si l'image du contrle est affiche, "false"


sinon.Lavaleurpardfautest"true".

unique

d'un

contrle

standard

ENI Editions - All rigths reserved

- 1-

showLabel

"true"sil'intitulducontrleestaffiche,"false"
sinon.Lavaleurpardfautest"true".

visible

"true" si le contrle est visible, "false" sinon. La


valeurpardfautest"true".

Lespropritssuivantespermettentdepersonnaliserleruban :
OnLoad

startFromScratch

- 2-

Macro ou code VBA associ au chargement du


ruban.
"true" si le ruban personnalis doit remplacer le
ruban standard d'Access. Si "false", les
nouveaux onglets s'ajoutent aux onglets du
rubanAccess.

ENI Editions - All rigths reserved

Exemplederubanpersonnalis
L'exempledecodeXMLdcritdanscechapitrepermetdecrerlerubanprsentcidessous:

CodeXMLdurubanpersonnalis
<customUI
xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="Initialisation">
ribbon startFromScratch="true">
' Modification du menu Microsoft Office
<officeMenu>
' Cration d'un bouton de menu
<splitButton id="spltListe1"
insertBeforeMso="FileCloseDatabase">
<menu id="spltMenu"
itemSize="large" label="Listes de formulaires">
<button id="Option1" label="Toutes les listes"
imageMso="FileCreateDocumentWorkspace"
onAction="OuvreListes"/>
<button id="Option2" label="Liste des Clients"
imageMso="DirectRepliesTo"
onAction="OuvreListeClients"/>
<button id="Option3" label="Liste des Employs"
imageMso="DistributionListAddNewMember"
onAction="OuvreListeEmployes"/>
<button id="Option4" label="Liste des Fournisseurs"
imageMso="DistributionListRemoveMember"
onAction="OuvreListeFournisseurs"/>
</menu>
</splitButton>

ENI Editions - All rigths reserved

- 1-

' Masque les boutons standards du menu Microsoft Office


<button idMso="FileNewDatabase" visible="false"/>
<button idMso="FileOpenDatabase" visible="false"/>
<button idMso="FileSaveAsMenuAccess" visible="false"/>
</officeMenu>
' Cration d'onglets personnaliss
<tabs>
' Onglet Listes
<tab id="Listes" label="Listes">
' Groupe Etiquette
<group id="grpListes1" label="Etiquettes">
<labelControl id="lbl1" label="Liste des Clients"/>
<labelControl id="lbl2" label="Liste des Employs"/>
<labelControl id="lbl3" label="Liste des Fournisseurs"/>
</group>
' Groupe de boutons
<group id="grpBoutons" label="Groupe de boutons">
<button id="btn1" label="Toutes les listes"
imageMso="FileCreateDocumentWorkspace"
onAction="OuvreListes"
size="large"/>
<button id="btn2" label="Liste des Clients"
imageMso="DirectRepliesTo"
onAction="OuvreListeClients"
size="normal"/>
<button id="btn3" label="Liste des Employs"
imageMso="DistributionListAddNewMember"
onAction="OuvreListeEmployes"
size="normal"/>
<button id="btn4" label="Liste des Fournisseurs"
imageMso="DistributionListRemoveMember"
onAction="OuvreListeFournisseurs"
size="normal"/>
</group>
' Groupe bouton d'options
<group id="grpSplit" label="Bouton d'options">
<splitButton id="spl1" size="large">
<button id="btnSplit" label="Listes"
onAction = "OuvreListes"
imageMso="DistributionListSelectMembers"/>
<menu id="mnuSplit" label="Menu" itemSize="large">
<button id="btnSplit1" label="Listes des Clients"
imageMso="DirectRepliesTo"
onAction = "OuvreListeClients"/>
<button id="btnSplit2" label="Liste des Employs"
imageMso="DistributionListAddNewMember"
onAction = "OuvreListeEmployes"/>
<button id="btnSplit3" label="Liste des Fournisseurs"
imageMso="DistributionListRemoveMember"
onAction = "OuvreListeFournisseurs"/>
<button id="btnSplit4" label="Toutes les listes"
imageMso="DistributionListSelectMembers"
onAction = "OuvreListes"/>
</menu>
</splitButton>
</group>
' Groupe bouton bascule
<group id="grptb1" label="Bouton Bascule">
<toggleButton id="tb1" label="Afficher/Masquer les listes"
imageMso="PictureBrightnessGallery"
size="large"
onAction = "AffichageListes">
</group>
' Groupe Menus
<group id="grpMenus" label="Menus">
<menu id="menu1" label="Menu 1"
imageMso="DistributionListSelectMembers">
<button id="btnMenu1"
label="Liste des Clients"
onAction = "OuvreListeClients"/>

- 2-

ENI Editions - All rigths reserved

<button id="btnMenu2"
label="Liste des Employs "
onAction = "OuvreListeEmployes"/>
<button id="btnMenu3"
label="Liste des Fournisseurs"
onAction = "OuvreListeFournisseurs"/>
<button id="btnMenu4"
label="Toutes les listes"
onAction = "OuvreListes"/>
</menu>
<menu id="menu2"
label="Menu 2"
itemSize="large"
imageMso="DistributionListSelectMembers">
<button id="btnMenu5"
label="Liste des Clients"
imageMso="DirectRepliesTo"
onAction = "OuvreListeClients"/>
<button id="btnMenu6"
label="Liste des Employs "
imageMso="DistributionListAddNewMember"
onAction = "OuvreListeEmployes"/>
<button id="btnMenu7"
label="Liste des Fournisseurs"
imageMso="DistributionListRemoveMember"
onAction = "OuvreListeFournisseurs"/>
<button id="btnMenu8"
label="Toutes les listes"
imageMso="DistributionListSelectMembers"
onAction = "OuvreListes"/>
</menu>
</group>
</tab>
' Onglet Outils Access
<tab id="tabAccess" label="Outils Access">
<group idMso="GroupPrintPreviewPrintAccess"/>
<group id="grpExport" label="Export">
<button idMso="ExportExcel" label="ExportExcel"
screentip="Export Excel"
supertip="Cliquez ici pour exporter au format Excel"/>
<button idMso="FileSaveAsPdfOrXps" label="Export PDF"
screentip="Export PDF"
supertip="Cliquez ici pour exporter au format PDF"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
CodeVBAappelparlescommandesdurubanpersonnalis
LecodeVBAsuivantestappelaumoyendespropritsOnActiondesdiffrentscontrles.
Option Compare Database
Option Explicit
________________________________________________________________________
Sub Initialisation(ruban As IRibbonUI)
' Message de bienvenue
MsgBox "Bienvenue dans l'application NorthWind 2007"
' Verrouille le volet de navigation
DoCmd.LockNavigationPane True
End Sub
________________________________________________________________________
Sub OuvreListes(ctl As IRibbonControl)
' Ouvre les 3 formulaires Listes
DoCmd.OpenForm "Liste des clients"
DoCmd.OpenForm "Liste des employs"
DoCmd.OpenForm "Liste des fournisseurs"
End Sub
________________________________________________________________________
Sub OuvreListeClients(ctl As IRibbonControl)
DoCmd.OpenForm "Liste des clients"

ENI Editions - All rigths reserved

- 3-

End Sub
________________________________________________________________________
Sub OuvreListeEmployes(ctl As IRibbonControl)
DoCmd.OpenForm "Liste des employs"
End Sub
________________________________________________________________________
Sub OuvreListeFournisseurs(ctl As IRibbonControl)
DoCmd.OpenForm "Liste des fournisseurs"
End Sub
________________________________________________________________________
Sub AffichageListes(ctl As IRibbonControl, blnActif As Boolean)
' Affiche ou masque les formulaires
If blnActif Then
DoCmd.OpenForm "Liste des clients"
DoCmd.OpenForm "Liste des employs"
DoCmd.OpenForm "Liste des fournisseurs
Else
DoCmd.Close acForm, "Liste des clients"
DoCmd.Close acForm, "Liste des employs"
DoCmd.Close acForm, "Liste des fournisseurs"
End If
End Sub

- 4-

ENI Editions - All rigths reserved

ImagesdelagaleriedesicnesMicrosoftOffice
Les noms des images utilises pour personnaliser le ruban (ex : FileCreateDocumentWorkspace,
DirectRepliesTo...),correspondentl'intituldel'icnedanslagaleriedesicnesMicrosoftOffice.
Pourconnatrelalistedesnomsd'icnesdelagalerieMicrosoftOffice:
Ouvrez dans Excel 2007 le fichier Office2007IconsGallery.xlsm (fichier livr avec les exemples ou tlchargeable sur le site de
Microsoft).

Activez l'onglet Dveloppeur.

Cliquez sur l'un des boutons "Galerie" pour afficher la liste des icnes.

Lorsque vous survolez une icne, son nom est affich dans l'infobulle associe:

Sil'ongletDveloppeurn'estpasaffichdansExcel:

Cliquez sur le bouton Microsoft Office

, puis sur le bouton Options Excel (situ en bas de la bote de dialogue).

Slectionnez la catgorie Standard dans le menu de gauche.

Activez l'option Afficher l'onglet Dveloppeur dans le ruban situ sous Meilleurs options pour travailler avec Excel.

Cliquez sur le bouton OK : l'onglet Dveloppeur a t ajout au ruban d'Excel, droite de l'onglet Affichage.

ENI Editions - All rigths reserved

- 1-

LatechnologieAutomation
Prsentation
Automation, appele galement OLE (Object Linking and Embedding) ou OLE Automation, est une technologie
permettantdemanipulerlesobjetsd'uneautreapplicationdirectementpartird'AccessoudeVBAAccess.
Pour fonctionner, Automation ncessite un client et un serveur appel serveur OLE. Le serveur est
l'applicationoulecomposantquifournitlesservicesauclient.Leclient(appelgalementcontrleur)utiliseces
services pour piloter l'application serveur et manipuler ses objets. Par exemple si vous lancez un publipostage
WordpartirdeVBAAccess,AccessestleclientetWordleserveurOLE.
Une bibliothqued'objets est un fichier, dot gnralement d'une extension olb, fournissant les informations
permettant de manipuler les objets mis disposition par un serveur. Vous pouvez utiliser l'Explorateur d'objets
pourexaminerlecontenud'unebibliothqued'objets.
Pour avoir accs aux objets d'une autre application, vous devez rfrencer sa bibliothque d'objets de la faon
suivante:

Dans un module, slectionnez le menu Outils Rfrences.


LabotededialogueRfrencess'afficheavectouslesserveursOLEenregistrsdanslabasederegistre.

Activez la rfrence voulue.

l'aide de l'explorateur d'objets, il est simple de consulter la liste des objets, mthodes et proprits d'un serveur OLE.
UtilisationdelatechnologieAutomation
Pourpouvoirmanipulerlesobjetsd'uneautreapplication,vousdevezprocderdelafaonsuivante :

- dfinissez dans le code VBA une variable objet,


- utilisez les fonctions CreateObject ou GetObject pour faire rfrence l'objet.
Exemple

ENI Editions - All rigths reserved

- 1-

LancementdeWord.
Dim AppWord as Object
Set AppWord = CreateObject("Word.Application")
ou
Dim appWord As New Word.Application
RfrenceundocumentWordexistant.
Dim DocWord As New Word.Document
Set DocWord = GetObject("C:\Clients\relance.docx")
LesparagraphessuivantsdcriventcommentpiloterdiffrentslogicielsdelasuiteMicrosoftOfficeenutilisantla
technologieAutomation.
Les objets, collections, mthodes et proprits des modles objet de la suite Microsoft Office tant trs nombreux, seuls les plus
utiliss sont dcrits dans les paragraphes suivants.

- 2-

ENI Editions - All rigths reserved

PiloterWorddepuisAccess
LemodleObjetWord
ExtraitdumodleObjetWord:

ObjetsetcollectionsWord
Documents:Collectiondetouslesclasseurs(objetsDocument)ouverts.

ENI Editions - All rigths reserved

- 1-

Dictionaries:Collectiondetouslesdictionnairespersonnelsactifs(objetsDictionary).
EmailOptions:ObjetcontenantlesattributsglobauxqueMicrosoftWordutiliselorsquevouscrezetmodifiez
desmessageslectroniquesetdesrponsescesmessages.
FileConverters : Collection de tous les convertisseurs de fichier (objets FileConvert) disponibles pour ouvrir et
enregistrerdesfichiers.
FontNames:Objetcontenantlalistedesnomsdetouteslespolicesdisponibles.
Languages : Collection des langues (objets Language) utilises dans Word pour les vrifications linguistiques
etlamiseenforme.
ListGalleries : Collection des trois premiers onglets (objets ListGallery) de la bote de dialogue Puces et
numros.
MailMessage : Objet reprsentant le message lectronique actif si Word est votre diteur de courrier
lectronique.
Options : Reprsente les options d'application et de document de Word. La plupart des proprits de l'objet
OptionscorrespondentdeslmentsdelabotededialogueOptions(menuOutils).
Selection:Reprsentelaslectionencoursd'unefentreoud'unvolet.
System:Contientdesinformationssurlesystmedevotreordinateur.
Templates:Collectiondetouslesmodles(objetsTemplate)actuellementdisponibles.
LacollectionDocuments
Mthodes

LacollectionDocumentsestconstituedetouslesobjetsDocumentouvertsdansWord.
Add:CreunnouveauDocumentetl'ajoutelacollectionDocuments.
Ex:Documents.Add Template:="Normal"
Close:FermetouslesdocumentsWordouverts.
Ex :Documents.Close
Open:OuvreleDocumentspcifietl'ajoutelacollectionDocuments.
Ex :Documents.Open _
FileName:="C:\Clients\Relance.doc", _
ReadOnly:=True
Save :Enregistretouslesdocumentsouverts.
Ex :Documents.Save
LesobjetsDocument
UnobjetDocumentpermetdefairerfrenceundocumentWord.
ActiveDocumentdsigneledocumentactif.
Mthodes

Activate:Activeundocumentdjouvert.
Ex:Documents("Achats.doc").Activate
Close:FermeundocumentWordouvert.
Ex:Documents("Achats.doc").Close
ou ActiveDocument.Close

- 2-

ENI Editions - All rigths reserved

PrintPreview:AfficheundocumentenmodeAperuavantimpression.
Ex :ActiveDocument.PrintPreview.
Range:RenvoieunobjetRange(Plage).
Ex :ActiveDocument.Range(0, 50).Bold = True
Save:Enregistreundocument.
Ex :ActiveDocument.Save
SaveAs:Enregistreundocumentsousunnouveaunomet/ousousunnouveauformat.
Ex :ActiveDocument.SaveAs FileName:=strDocName
Objetsetcollections

Characters:Collectiondescaractressitusdansundocument,uneplageouuneslection.
MailMerge:FusionetpublipostagedansWord.
PageSetup:Descriptiondelamiseenpage.
Ex :ActiveDocument.PageSetup.RightMargin = InchesToPoints(1)
Paragraphs:Collectiondesparagraphesd'undocument.
SmartTags : Collection des balises actives (objets SmartTag) d'un document ou d'une plage de texte au sein
d'undocument.
Words:Collectiondesmotsdudocument.
Ex : ActiveDocument.Words.Count
Exemples
Miseengrasdescaractresd'undocumentWord.
Private Sub Word_EnGras()
Dim AppWord As New Word.Application
With AppWord
.Documents.Open CurrentProject.Path & "\Relance.docx"
.ActiveDocument.Select
.Selection.Font.Bold = True
.ActiveDocument.Close wdSaveChanges
.Quit
End With
End Sub
Lancementd'unpublipostage
Le code suivant permet de gnrer une lettre de relance pour les clients ayant une commande livre et non
rgle.Lepublipostagefaitappellarequte"CommandesNonRgles"delabaseClients.mdb.
Private Sub Relances()
Dim AppWord As Word.Application
Dim DocWord As Word.Document
Dim m_Provider As String
' Lancement de Word
Set AppWord = New Word.Application
AppWord.Visible = True
' Ouverture de la lettre type
Set DocWord = AppWord.Documents.Open(CurrentProject.Path & _
"\Relance.docx")
' Provider = Base Access Clients.mdb
m_Provider = "Microsoft.ACE.OLEDB.12.0;Password="""";User
ENI Editions - All rigths reserved

- 3-

ID=Admin;" _
& "Data Source=" & CurrentProject.Path & "\Clients.accdb;
" _
& "Mode=Read;"
' Prparation du publipostage pour les commandes non
rgles
With DocWord.MailMerge
.OpenDataSource Name:= _
CurrentProject.Path & "\Clients.accdb", _
ConfirmConversions:=False, _
ReadOnly:=False, LinkToSource:=True,
AddToRecentFiles:=False, _
Connection:=" & m_Provider & ", _
SQLStatement:="SELECT * FROM `COMMANDES NON REGLEES`"
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
' Lancement du publipostage
.Execute
End With
End Sub

- 4-

ENI Editions - All rigths reserved

PiloterExceldepuisAccess
LemodleObjetExcel
ExtraitdumodleObjetExcel :

ObjetsetcollectionsExcel
Workbooks:Collectiondetouslesclasseurs(objetsWorkbook)ouverts.
Worksheets:Collectiondetouteslesfeuillesdecalculs(objetsWorksheet)d'unclasseur.
Charts:Collectiondetouteslesfeuillesgraphiques(objetsChart)d'unclasseur.
CustomViews :Collectiondevuespersonnalises(objetsCustomView)d'unclasseur.
Names : Collection de tous les objets Name dans l'application ou le classeur. Chaque objet Name reprsente
unnomdfinipouruneplagedecellules.
SmartTagOptions:Objetreprsentantlesoptionsrelativesauxbalisesactives.

ENI Editions - All rigths reserved

- 1-

Ex :activationdesbalisesactives
ActiveWorkbook.SmartTagOptions _
.EmbedSmartTags = True
Styles:Collectiondetouteslesdescriptionsdestyles(objetsStyle)d'unclasseur.
LacollectionWorkbooks
LacollectionWorkbooksestconstituedetouslesclasseursouverts.
Add:Creunnouveauclasseurquidevientleclasseuractifetl'ajoutelacollectionWorkbooks.
Ex:Workbooks.Add
Close:FermetouslesclasseursExcelouverts.
Ex :Worksheets.Close
Open:Ouvreleclasseurspcifiquidevientleclasseuractifetl'ajoutelacollectionWorkbooks.
Ex :Workbooks.Open Filename:="C:\Devis\devis.xls"
Save:Enregistretouslesclasseursouverts.
Ex :Workbooks.Save
LesobjetsWorkbook
UnobjetWorkbookpermetdefairerfrenceunclasseurExcel.
LapropritActiveWorkbookdsigneleclasseuractif.
Activate:Activeunclasseurdjouvert.
Ex:Documents("Achats.xlsx").Activate
Close:FermeunclasseurExcelouvert.
Ex:Documents("Achats.xlsx").Close
ou ActiveDocument.Close
PrintPreview:Affichelafeuilleactived'unclasseurenmodeAperuavantimpression.
Ex :ActiveWorkbook.PrintPreview
Save:Enregistreunclasseur.
Ex :ActiveWorkbook.Save
SaveAs:Enregistreunclasseursousunnouveaunomet/ousousunnouveauformat.
Ex :ActiveWorkbook.SaveAs FileName:= "Devis.xlt"
EcriturededonnesdansdescellulesExcel
Lecodesuivantpermetd'afficherlalistedescommandesnonrgles.
Private Sub ExportXLS_Commandes()
' Objets Access
Dim dbsClients As DAO.Database
Dim rstCommandes As DAO.Recordset
Dim fld As DAO.Field
' Objets Excel
Dim appExcel As Excel.Application
Dim wbkCommandes As Excel.Workbook
Dim wksCommandes As Excel.Worksheet
' Variables de boucles
Dim intLig As Integer
Dim intCol As Integer
' Cration du classeur Excel
- 2-

ENI Editions - All rigths reserved

Set appExcel = CreateObject("Excel.application")


Set wbkCommandes = appExcel.Workbooks.Add
Set wksCommandes = appExcel.ActiveSheet
appExcel.Visible = True
' Ouverture de la table Commandes
Set dbsClients = DBEngine.OpenDatabase(CurrentProject.Path _
& "\Clients.accdb")
Set rstCommandes = dbsClients.OpenRecordset _
("COMMANDES NON REGLEES", dbOpenDynaset)
' Mise jour de la feuille active
With wksCommandes
' En-ttes de colonnes renseignes partir des noms
de champs
intCol = 1
For Each fld In rstCommandes.Fields
.Cells(1, intCol).Value = fld.Name
intCol = intCol + 1
Next fld
' Parcours des enregistrements
' Ajout d'une ligne par enregistrement
intLig = 2
Do While Not rstCommandes.EOF
intCol = 1
For Each fld In rstCommandes.Fields
.Cells(intLig, intCol).Value = rstCommandes(intCol - 1)
intCol = intCol + 1
Next fld
intLig = intLig + 1
rstCommandes.MoveNext
Loop
' Affectation d'un nom la feuille Excel
.Name = "Liste des commandes non rgles"
End With
' Fermeture des objets Access
rstCommandes.Close
dbsClients.Close
' Activation du classeur dans Excel
appExcel.ActiveWindow.Activate
End Sub

ENI Editions - All rigths reserved

- 3-

PiloterOutlookdepuisAccess
LemodleObjetOutlook
ExtraitdumodleObjetOutlook :

Exemple :affichagedescontactsOutlook
Cet exemple permet d'afficher la liste des contacts Outlook (nom et adresse email) dans une zone de liste d'un
formulaireAccess.
Pourtestercetexemplevousdevez:

- crer un nouveau formulaire,


ENI Editions - All rigths reserved

- 1-

- ajouter au formulaire une zone de liste lstContacts et un bouton de commande cmdContacts.


Private Sub CmdContacts_Click()
Dim objOle As Outlook.Application
Dim objNamespace As Namespace
Dim objAddrList As AddressList
Dim objAddrEntries As AddressEntries
Dim objAdrEntry As AddressEntry
Dim i As Integer
' Initialisation de la liste droulante
With Me.lstContacts
.ColumnCount = 1
.RowSourceType = "Liste valeurs"
.RowSource = ""
End With
' Application Outlook
Set objOle = CreateObject("Outlook.Application")
' Ouverture du carnet d'adresses Contacts
Set objNamespace = objOle.GetNamespace("MAPI")
Set objAddrList = objNamespace.AddressLists("Contacts")
Set objAddrEntries = objAddrList.AddressEntries
' Accs au premier contact
Set objAdrEntry = objAddrEntries.GetFirst
' Ajout des contacts dans la liste
For i = 1 To objAddrEntries.Count
With Me.lstContacts
.AddItem objAdrEntry.Name
End With
' Contact suivant
Set objAdrEntry = objAddrEntries.GetNext
Next i
End Sub

- 2-

ENI Editions - All rigths reserved

LeprotocoleDDE
DDE (Dynamic Data Exchange) est un protocole d'change dynamique de donnes entre deux applications
Windows, l'une appele Client ou Destination, l'autre appele Serveur ou Source. Le lien est rompu si l'une
desdeuxapplicationsvienttreferme.
UneliaisonDDEcomprendtroisphasesprincipales:

- initialisation: l'application destination recherche l'application source et tablit avec elle un canal de communication (liaison).
- conversation: des donnes sont changes sur le canal.
- clture: le canal de communication est ferm.
L'initialisation

DDEInitiate
La fonction DDEInitiate permet d'initialiser la conversation entre deux applications. Elle renvoie le numro de
canalsilacommunicationaputretablie,sinonuneerreurseproduit.
Syntaxe

DDEInitiate (<application>,<sujet>)
Application :Nomdel'applicationSource.
Sujet :Groupededonnesutiliser.
Exemple
'cre un lien DDE avec la feuille feuil1 d'Excel
canal = DDEInitiate ("Excel","Feuil1")
Laliaison

DDE
La fonction DDE permet d'entamer une conversation DDE avec une autre application, de demander cette
derniredeslmentsd'informationpourlesafficherdansuncontrlefigurantsurunformulaireousuruntat.
Syntaxe

DDE(<Application>, <Rubrique>, <Elment>)


Application :Expressionchaneidentifiantuneapplication.
Rubrique :Fichierdocumentoufichierdedonnes.
Elment :Rfrenceunedonnedel'applicationSource.
Exemple
' Affecte le contenu de la cellule L1C1 une zone
' de texte via sa proprit Source Contrle.
=DDE("excel","classeur1","L1C1")

DDESend

ENI Editions - All rigths reserved

- 1-

La fonction DDESend permet d'entamer une conversation DDE avec une autre application, et d'envoyer un
lmentd'informationcetteapplicationdepuisuncontrlesitusurunformulaireousuruntat.
Syntaxe
DDESend(<Application>, <Rubrique>, <Elment>, <Donnes>)
Application :Expressionchaneidentifiantuneapplication.
Rubrique :Fichierdocumentoufichierdedonnes.
Elment :Rfrenceunedonnedel'applicationSource.
Donnes :Chaneouexpressioncontenantlesdonnesenvoyerapplication.
Exemple
' Affecte la cellule L1C1 le contenu du contrle
' Ville via la proprit Source Contrle d'une zone '
de texte.
=DDESend("excel","classeur1","L1C1",[Ville])

DDEPoke
L'instructionDDEPokeenvoiedesinformationsl'applicationSourcesuruncanalouvert.
Syntaxe

DDEPoke(<Numro de canal>, <lment>, <Donne>)


Numro de canal :NdecanalretournparlafonctionDDEInitiate.
lment :Rfrenceunedonnedel'applicationSource.
Donne :Donneenvoyerl'applicationSource.
Exemple
'envoie la valeur 15 dans la cellule L1C1
DDEPoke canal,"L1C1","15"

DDERequest
LafonctionDDERequestdemandedesinformationsl'applicationSource.
Syntaxe

DDERequest(<Numro de canal>, <lment>)


Numro de canal :NducanalretournparlafonctionDDEInitiate.
lment :Rfrenceunedonnedel'applicationSource.
Exemple
'affecte le contenu de la cellule L1C1
' la variable montant
montant = DDERequest (canal,"L1C1")

DDEExecute

- 2-

ENI Editions - All rigths reserved

L'instructionDDEExecuteenvoieunechanedecommandesl'autreapplicationencoursdeliaison.
Syntaxe
DDEExecute(<Numro de canal>, <Commande>)
Numro de canal :NducanalretournparlafonctionDDEInitiate.
Commande :Chanecontenantunecommandereconnueparl'autreapplication.
Exemple
'Cre une nouvelle feuille de calcul.
DDEExecute Canal,"[New(1)]"
Laclture

DDETerminate
L'instructionDDETerminatefermelecanaldecommunicationDDE.
Syntaxe

DDETerminate(<Numro de canal>)
Numro de canal :NducanalretournparlafonctionDDEInitiate.
Exemple
DDETerminate canal

DDETerminateAll
L'instructionDDETerminateAllfermetouslescanauxdecommunicationDDE.
Syntaxe

DDETerminateAll

ENI Editions - All rigths reserved

- 3-

ImportetexportdedonnesauformatXML
Le langage XML (eXtensible Markup Language) est le langage standard de description et d'change de donnes
sur le Web, tandis que HTML (HyperText Markup Language) est le langage standard de cration et d'affichage
depagesWeb.
XSL (eXtensible Stylesheet Language) est une instance de XML permettant de contrler la prsentation des
documentsXML.
MicrosoftAccess2007offrelapossibilitd'importeroud'exporterdesdonnessouslaformed'unfichierXMLet
desprsentationssouslaformed'unfichierXSL.
En VBA, vous pouvez utiliser les mthodes ImportXML et ExportXML de l'objet Application pour importer ou
exporterdesdonnesauformatXML.
LamthodeExportXML
La mthode ExportXML permet d'exporter les donnes et/ou la prsentation d'un objet Access spcifi. Il est
possibled'exporterauformatXMLlesobjetsAccesssuivants :

- tables,
- requtes,
- formulaires,
- tats,
- pages d'accs aux donnes.
Syntaxe
Application.ExportXML(<ObjectType>, <DataSource>,
[<DataTarget>], [<SchemaTarget>],
[<PresentationTarget>], [<ImageTarget>], [<Encoding>],
[<OtherFlags>])
ObjectType : Obligatoire. Type d'objet Access exporter (acExportDataAccessPage, acExportForm,
acExportReport...).
DataSource :Obligatoire.Chanedecaractresindiquantlenomdel'objetAccessexporter.
DataTarget :Facultatif.Chanedecaractresindiquantlenomdefichieretlechemindesdonnesexportes.
Sicetargumentestomis,lesdonnesnesontpasexportes.
SchemaTarget : Facultatif. Chane de caractres indiquant le nom de fichier et le chemin des informations sur
les schmas exports. Si cet argument est omis, ces informations sont incorpores dans le document des
donnes.
PresentationTarget : Facultatif. Chane de caractres indiquant le nom de fichier et le chemin des
informationsdeprsentationexportes.Sicetargumentestomis,cesinformationsnesontpasexportes.
ImageTarget :Facultatif.Chanedecaractresindiquantlecheminpourlesimagesexportes.Sicetargument
estomis,lesimagesnesontpasexportes.
Encoding :Facultatif.Indiquel'encodagedetexteutiliserpourlefichierXMLexport.
OtherFlags : Facultatif. Entier long qui reprsente la somme des valeurs d'options dcrites dans la liste
suivante.

ENI Editions - All rigths reserved

- 1-

Valeur

Description

Tablesconnexes:inclutlesdiffrentestablesconcernantl'objetspcifiparDataSource.

Propritsrelationnelles:credespropritsdeschmarelationnel.

4
Excutionpartirduserveur : cre un wrapper ASP sinon, c'est un wrapper HTML par dfaut.
S'appliqueuniquementlorsdel'exportationd'tats.
8

Propritsspciales:credespropritsdeschmatendues.

LamthodeImportXML
La mthode ImportXML permet d'importer des donnes et/ou des informations de prsentation dans une table
MicrosoftAccesspartird'unfichierXML.
Syntaxe
Application.ImportXML(<DataSource>, [<ImportOptions>])
Datasource :ChanedecaractrescontenantlenometlechemindufichierXMLimporter.
ImportOptions :Facultatif.Dfinitlesoptionsrelativesl'importdufichierXML.
Constantesutilisablespourdfinirlesoptionsd'importation.
acAppendData : Si une table porte dj le nom du fichier XML, les donnes sont ajoutes la table, sinon la
tableestcre.
acStructureAndData :Valeurpardfaut.Importelastructureetlesdonnes.Siunetableportedjlenomdu
fichierXML,Accessgnreunnouveaunomdetable.
acStructureOnly : Importe uniquement la structure. Si une table porte dj le nom du fichier XML, Access
gnreunnouveaunomdetable.
Exempled'import/exportXML
Dansl'exemplesuivant,nousallonsvoircomment :

- exporter une table au format XML,


- afficher le fichier XML dans le navigateur Internet Explorer,
- exporter une prsentation de formulaire,
- importer le fichier XML dans une nouvelle table aprs avoir modifi son contenu.
Pourralisercetexemple,vousdevezcrerunrpertoire"C:\XML".
tape1:ExportdelatableClients

Saisissez le code suivant dans un nouveau module appel ImportExportXML et excutez la procdure ExportTabClient.

Private Sub ExportTabClient()


' Export de la table Client
ExportTable ("Clients")
End Sub
Private Sub ExportTable(strTableName As String)
' Export des donnes (XML) et de leur prsentation
(XSL)
- 2-

ENI Editions - All rigths reserved

Application.ExportXML _
ObjectType:=acExportTable, _
DataSource:=strTableName, _
DataTarget:="C:\XML\" & strTableName & ".xml", _
PresentationTarget:="C:\XML\" & strTableName & ".xsl", _
Encoding:=acUTF8
End Sub
tape2:LienentrelesfichiersXMLetXSL

DanslerpertoireXML,lestroisfichierssuivantsonttcrs:clients.xml,clients.xsletclients.htm.
Sivousouvrezlefichierclients.xmldansInternetExplorer,vousobtenezlersultatsuivant:

Pour pouvoir afficher correctement la liste des clients, vous devez soit utiliser le fichier clients.htm qui fait le
lien entre les fichiers xml et xsl, soit modifier le fichier clients.xml afin de lui associer le fichier clients.xsl
(insrerladeuximeligne).
Pour modifier le code contenu dans les fichiers xml ou xsl, vous pouvez utiliser le bloc-note de Windows (Notepad.exe) ou tout autre
diteur de fichiers texte.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Clients.xsl"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata">
<Clients>
tape3 :Exportd'uneprsentationdeformulaire

Saisissez le code suivant dans le module ImportExportXML et excutez la procdure ExportFormClient.

Private Sub ExportFormClient()


' Export de la table Client
ExportFormulaire ("Clients")
End Sub
Private Sub ExportFormulaire(strFormName As String)
' Export de de la prsentation (XSL) d'un formulaire
Application.ExportXML _
ObjectType:=acExportForm, _
DataSource:=strFormName, _
PresentationTarget:="C:\XML\" & strFormName & ".xsl", _
Encoding:=acUTF8
End Sub
Lefichierclients.xslatremplacdanslerpertoireC:\XML.

Ouvrez le fichier clients.xml dans Internet Explorer.


Vousobtenezmaintenantlersultatsuivant:

ENI Editions - All rigths reserved

- 3-

tape4:ImportdufichierClients.XMLaprsmodification

Modifiez le fichier clients.xml de manire ne conserver que le premier enregistrement.

<?xml version="1.0" encoding="UTF-8"?>


<?xml-stylesheet type="text/xsl" href="Clients.xsl"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata">
<Clients>
<Code_x0020_clientALFKI</Code_x0020_client>
<SocitAlfreds Futterkiste</Socit>
<Contact>Maria Anders</Contact>
<Fonction>Reprsentant(e)</Fonction>
<Adresse>Obere Str. 57</Adresse>
<Ville>Berlin</Ville>
<Code_x0020_postal>12209</Code_x0020_postal>
<Pays>Allemagne</Pays>
<Tlphone>030-0074321</Tlphone>
<Fax030-0076545</Fax>
</Clients>
</dataroot>

Saisissez le code suivant dans le module ImportExportXML.

Sauvegardez votre table clients sous un autre nom dans Access.

Excutez la procdure ImportTableClient.

Private Sub ImportTableClient()


' Import de la table Client
ImportTable ("Clients")
End Sub
Private Sub ImportTable(strTableName As String)
' Import d'une table
Application.ImportXML "C:\XML\" & strTableName & ".xml"
End Sub
La table Clients est cre dans Access avec un seul enregistrement.

- 4-

ENI Editions - All rigths reserved

Exempledecrationd'unfichierHTML
Vous pouvez partir du langage VBA crer un fichier HTML. Pour cela vous devez utiliser l'objet
FileSystemObject.
Les mthodes et proprits de cet objet sont dtailles dans le chapitre Programmation Windows.
L'exemple suivant permet de crer le fichier ImageListe.htm contenant toutes les images du rpertoire
slectionnparl'utilisateur.
Private Sub CreeHTML()
Dim fso As Object
' Dossier
Dim fld As Object
' Collection Files
Dim fls As Object
' Objet File
Dim fl As Object
' Fichier Html
Dim fHtml As Object
Dim strFolder As String
Dim strHtml As String
' Slection du dossier
strFolder = InputBox("Saisissez le chemin du dossier
contenant " _
& "les images", "Test VBA", "C:\")
' Recherche des fichiers images
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.folderExists(strFolder) Then
Set fld = fso.GetFolder(strFolder & "\")
Set fls = fld.Files
strHtml = "<html>"
For Each fl In fls
If Left(fl.Type, 5) = "Image" Then
strHtml = strHtml & "<img src=" & "'" & strFolder & "\"
_
& fl.Name & "'" height=" & x & 100 & x & ">" _
& fl.Name & "<BR>"
End If
Next
' Cre le fihier HTML
strHtml = strHtml & "</html>"
Set fHtml = fso.CreateTextFile(strFolder & "\" & _
"ImageList.htm", True)
fHtml.Write (strHtml)
Else
MsgBox "Dossier " & strFolder & " non trouv"
End If
End Sub
Aperu dans Internet Explorer d'un fichier HTML cr par le code de l'exemple.

ENI Editions - All rigths reserved

- 1-

- 2-

ENI Editions - All rigths reserved

PrsentationdesAPI
L'interface de programmation Windows API (Application Programming Interface) offre des fonctions qui
permettent de contrler les aspects les plus internes du systme d'exploitation. Vous pouvez tendre et
personnaliser vos applications Access en appelant des fonctions Windows API partir de VBA. Bien qu'Access
continue voluer et que son langage de programmation natif (VBA) intgre de plus en plus de fonctions
systmes,ilestncessairepourcertainestchesdesfonctionsdel'API.
Une API est un ensemble de fonctions que vous pouvez utiliser pour travailler avec un composant, une
application ou le systme d'exploitation. Elle se compose gnralement d'une ou de plusieurs DLL (Dynamic Link
Libraryoubibliothquedeliaisondynamique).
L'API la plus couramment utilise est l'API Windows qui inclut les DLL constituant le systme d'exploitation
Windows. Chaque application Windows interagit directement ou indirectement avec l'API Windows. Ceci garantit
uncomportementcohrentdetouteslesapplicationsfonctionnantsousWindows.
LesDLLdeWindowslespluscourammentutilisessontlessuivantes:
Kernel32.dll:Fonctionsdebasniveaudusystmed'exploitation,tellesquegestiondelammoireetgestiondes
ressources.
User32.dll : Fonctions de gestion Windows, telles que traitement des messages, horloges, menus et
communication.
GDI32.dll : Bibliothque GDI (Graphics Device Interface) qui contient des fonctions de sortie vers les
priphriques(graphisme,contexted'affichageetgestiondespolices).
D'autres API sont galement disponibles comme par exemple l'interface MAPI (Mail Application Programming
Interface)quipermetd'criredesapplicationsdecourrierlectronique.
Pourobtenirdesinformationssurlesfonctionsdel'APIWindows,ilexistedeuxsourcesd'informations :

- la visionneuse d'API (fichier excutable ApiLoad.Exe inclus dans Microsoft Office XP Developer et dans Microsoft Visual Basic)
permet d'afficher les constantes, dclarations et les types d'API. Les lments slectionns peuvent tre copis de la
Visionneuse d'API vers les applications VBA.
Les informations de la visionneuse d'API sont contenues dans des fichiers texte (win32api.txt, mapi32.txt...) pouvant tre
exports dans une base mdb pour en faciliter la consultation ultrieure.

- la plateforme Microsoft SDK (Software Development Kit) contient une documentation complte de l'API Windows et est
disponible gratuitement sur le site Microsoft Developer Network.

ENI Editions - All rigths reserved

- 1-

Appeld'unefonctiondel'APIWindows
Pour appeler une fonction de l'API Windows, vous devez la dclarer en utilisant l'instruction Declare dans la
section Dclarations d'un module de votre projet (gnralement un module ddi aux procdures gnrales de
l'application).
Syntaxedel'instructionDeclare
Dans les versions 32 bits de Visual Basic, le respect des minuscules et majuscules est obligatoire pour les noms
defonctionsetdeprocduresdesDLL.
[Public|Private] Declare Sub <nom_proc> Lib "<Nom_DLL>"_
[Alias "<Nom_alias>"] [([liste_arguments])]
[Public|Private] Declare Function <Nom_fonc> _
Lib "<Nom_DLL>"_
[Alias "<Nom_alias>"] [([Liste_arguments])] [As <Type>]
Nom_proc, Nom_fonc :Nomdelaprocdureoudelafonctiontelqu'utilisdansVisualBasic.
Nom_DLL :NomdelaDLL.
Nom_alias :NomdelaprocdureoudelafonctiondanslaDLL.
Liste_arguments :Paramtrespasserlaprocdure(cf.chapitreLelangageVisualBasic).
Type :Typedelavaleurduretourd'uneprocdureFunction.
CertainesDLLnefournissentpasdenompourleursprocduresetleursfonctionsmaispluttunnombreordinal.
Ladclarationdetellesprocduresoufonctionsutiliselammesyntaxe,maisilfautdfinirlenombreordinalau
niveaudel'Aliassouslaformed'undise(#)suividunombre(ex:Alias"#52").
Passagedesarguments
Les fonctions et procdures des DLL sont crites pour la plupart en langage C et utilisent sa syntaxe. Aussi, le
passaged'argumentsuneprocdureouunefonctiond'uneDLLdepuisVisualBasic,n'estpastoujourssimple.
AuniveaudesDLLutilisantlasyntaxeduC,touslesargumentssontpasssparvaleurs,sauflestableaux.
LeschanesenlangageCsontconsidrescommedestableauxdecaractres.
Certains arguments de procdures de DLL peuvent accepter diffrents types de donnes (un peu comme les
Variant), ils doivent tre dclars avec le type Any (ex : variable As Any). Visual Basic, pour ce type
d'argument, considre que celuici est pass systmatiquement par rfrence s'il y a lieu de le passer par
valeur,ilfautl'expliciterauniveaudel'appel(etnondeladclaration)delaprocdureoudelafonctionavecla
mentionByVal.
Pardfaut,VisualBasicpasselesargumentsparRfrence.
Tableaudesdclarationsdesarguments

Dclaration
en langage C
BOOL

Dclaration Visual
Basic

Appel

ByVal <variable>
As Boolean

Une expression dont l'valuation produit


une valeur de type Boolean.

ByVal <variable> As
Long

Une expression dont l'valuation produit


une valeur de type Long.

WORD

ByVal <variable> As
Long

Une expression dont l'valuation produit


une valeur de type Long.

NULL

As Any ou ByVal
<variable> As Long

ByVal Nothing ou ByVal 0$ ou


vbNullString.

long, DWORD, LONG,


COLORREF

ENI Editions - All rigths reserved

- 1-

int, short

Byval <variable>
As Integer

Une expression dont l'valuation produit


une valeur de type Integer.

char, BYTE

Byval <variable>
As Byte

Une expression dont l'valuation produit


une valeur de type Byte.

Entier (INT, UINT) 32 bits avec


compilateur 32 bits

ByVal <variable> As
Long

Une expression dont l'valuation produit


une valeur de type Long.

Identificateur Windows (hWnd,


hDC, hMenu...)

ByVal <variable> As
Long

Une expression dont l'valuation produit


une valeur de type Long.

Vide (valeur de renvoi de


fonction)
Pointeur vers une chane
(LPSTR)
Pointeur vers un entier long
(LPDWORD)

Sub <procdure>

Sans objet.

ByVal <variable> As
String
<variable> As Long

Une expression dont l'valuation produit


une valeur de type String.
Une variable de type Long.

Pointeur vers un vide

<variable> As Any

Une variable (utilisez ByVal pour passer


une chane).

Pointeur vers un char

<variable> As Byte

Une expression dont l'valuation produit


une valeur de type Byte.

Pointeur vers
un entier (LPINT)
Pointeur vers
une structure

- 2-

<variable> As Long
<variable>
As <type>

Une variable de type Long.


Une variable de type dfinie par
l'utilisateur.

ENI Editions - All rigths reserved

ListedefonctionsAPIWindows
Cettelistecomportelesfonctionsdel'APIWindowscourammentutilises.Desexemplesd'utilisationdecertaines
decesfonctionssontdonnesdansleparagraphesuivant.
GetWindowsDirectory() : Renvoie le chemin complet du rpertoire de Windows (applications, outils du
systme).
GetSystemDirectory() :RenvoielechemincompletdurpertoiresystmedeWindows.
GetSystemInfo() : Renvoie tout un ensemble d'informations sur le systme. Ces donnes sont stockes dans
unestructuredetypeSYSTEM_INFO.
GetActiveWindow():Renvoielehandledelafentreactive.
FindWindow():Renvoielehandledelafentreenfonctiondesonnometdelaclassepartirdelaquelleellea
tdfinie.
SetFocus():Attribuelefocusd'entrelafentrerfrenceparsonhandle.
GetPrivateProfileString() :Renvoieuneoptionextraited'unfichier.Inipartird'unnomdesectionetdecl.
WNetGetUser() :Renvoielenomduloginrseauutilispourlasessionencours.

ENI Editions - All rigths reserved

- 1-

Exemplesd'utilisationdefonctionsAPIWindows
RcuprationdurpertoireWindows
Dclaration de la fonction API.
Private Declare Function GetPrivateProfileString Lib
"KERNEL32" _
Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Appel de la fonction API.
Function GetWinPath() As String
' Cette fonction VBA renvoie le rpertoire Windows
Dim strResult As String
Dim strProfile As String
strResult = String(255, " ")
strProfile = GetWindowsDirectory(strResult, 255)
' Tronque la chane au premier caractre nul
If strProfile <> "" Then
strResult = Trim(strResult)
GetWinPath = Left(strResult, InStr(1, strResult,
vbNullChar) - 1)
Else
GetWinPath = ""
End If
End Function
Lancementdel'applicationExcelsinonactive
Cetexemplepermetderecherchersil'applicationExcelestactive,etdelancersonexcutionsibesoinest.
Deux fonctions API sont ici utilises : FindWindow permet de rechercher la fentre Excel, FindExecutable de
rechercherl'emplacementdufichierExcel.exe.
Dclaration de la fonction API.
' Cette fonction API recherche une fentre
Public Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
' Cette fonction API recherche un fichier excutable
Public Declare Function FindExecutable Lib "shell32.dll" _
Alias "FindExecutableA" (ByVal lpFile As String, _
ByVal lpDirectory As String, ByVal lpResult As String) As
Long
Appel des fonctions API.
Private Function LanceExcel() As Boolean
Dim strClassName As String
Dim strWindowName As String
Dim Hwnd As Long
Dim blnExe As Boolean
Dim strRepExcel As String
Dim Result As Long
' Initialisation

ENI Editions - All rigths reserved

- 1-

LanceExcel = False
' Recherche de la fentre Excel active
strClassName = vbNullString
strWindowName = "Microsoft Excel - Classeur1"
Hwnd = FindWindow(strClassName, strWindowName)
' Si non trouve recherche du rpertoire Excel
' et lancement de l'application Excel
If Hwnd = 0 Then
strRepExcel = String$(255, 0)
Result = FindExecutable("Excel.exe", "C:\", strRepExcel)
If Result = 0 Then Exit Function
blnExe = Shell(strRepExcel, vbNormalFocus)
If Not blnExe Then Exit Function
End If
LanceExcel = True
End Function
Rcuprationd'unevaleurdansunfichier.ini
LefichierAppDevis.iniestconstitudestroislignessuivantes :
[BASE]
BasePath=C:\DEVIS
BaseName=DEVIS.ACCDB
L'exemple suivant permet de rcuprer le nom et le chemin d'accs dans le fichier AppDevis.ini situ dans le
rpertoireWindows(enfaisantappellafunctionGetWinPathdel'exemple1).
Dclaration de la fonction API.
Public Declare Function GetPrivateProfileString Lib
"kernel32" _
Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Appel de la fonction API.
Public Function LireCle(Section As String, Cl As String, _
Fichier As String) As String
' Cette fonction renvoie la valeur de la cl
' qu'on peut trouver dans un fichier .ini quelconque
Dim strResult As String
Dim strProfile As Integer
Dim i As Integer
strResult = String(255, " ")
strProfile = GetPrivateProfileString(Section, Cl, "", _
strResult, 255, Fichier)
If strProfile = 0 Then
LireCle = ""
Exit Function
End If
' Tronque la chaine au premier caractre nul
strResult = Trim(strResult)
LireCle = Left(strResult, InStr(1, strResult, vbNullChar) 1)
End Function
Appel de la fonction VBA LireCle.

- 2-

ENI Editions - All rigths reserved

Private Sub Init_Projet()


Dim strBaseName As String
Dim strPath As String
Dim strWinPath As String
' Recherche du nom et du rpertoire de la base
strWinPath = GetWinPath()
If strWinPath = "" Then Exit Sub
' Recherche de valeurs dans Devis.ini
strBaseName = Trim(LireCle("BASE", "BASENAME", strWinPath _
& "\" & "Devis.ini"))
strPath = Trim(LireCle("BASE", "BASEPATH", strWinPath & "\" _
& "Devis.ini"))
End Sub

ENI Editions - All rigths reserved

- 3-

L'objetFileSystemObject
L'objet FileSystemObject donne accs au systme de fichier d'un ordinateur. Il permet notamment de
rechercher,crer,supprimeroudplacerdesfichiersoudesdossiers.
Mthodes
Mthoderelativesauxfichiers
CopyFile:Copieunouplusieursfichiersd'unemplacementversunautre.
CreateTextFile:Creunfichiersurledisqueportantlenomspcifietrenvoieunobjet TextStreampouvant
treutilispourlireoucriredanslefichier.
DeleteFile:Supprimeunfichierspcifi.
FileExists:Renvoieunboolenindiquantsilefichierspcifiexiste.
MoveFile:Dplaceunouplusieursfichiersd'undossierversunautre.
OpenTextFile : Ouvre le fichier spcifi et renvoie un objet TextStream pouvant tre utilis pour lire le fichier
ouyeffectuerunajout.
Mthoderelativesauxdossiers
CopyFolder:Copieundossierd'unemplacementversunautre.
CreateFolder:Creundossier.
DeleteFolder:Supprimeledossierspcifietsoncontenu.
FolderExists:Renvoieunboolenindiquantsiledossierspcifiexiste.
MoveFolder:Dplaceunouplusieursdossiersd'unemplacementversunautre.
Mthoderelativesauxlecteurs
DriveExists:Renvoieunboolenindiquantsilelecteurlogiquespcifiexiste.
GetDrive:RenvoieunobjetDrivecorrespondantaulecteurdansuncheminspcifi.
GetDriveName:Renvoieunechanecontenantlenomdulecteurpouruncheminspcifi.
Proprits
Drives:RenvoieunecollectionconstituedetouslesobjetsDrivedisponiblessurlamachinelocale.
Exemple
L'exemple suivant permet d'afficher la liste des lecteurs disponibles et l'espace disponible sur chacun d'eux.
Sub
Dim
Dim
Dim
Dim

AfficheLecteur()
fso As Object
strMsg As String
drv As Object
drvs As Object

Set fso = CreateObject("Scripting.FileSystemObject")


Set drvs = fso.Drives
For Each drv In drvs
If drv.isready Then
ENI Editions - All rigths reserved

- 1-

strMsg = strMsg & drv.driveletter & ": " _


& Format(EspaceDisponible(drv.driveletter & ":"), _
"# ### ##0") & " KOctets" & vbCrLf
End If
Next
MsgBox strMsg
End Sub

- 2-

ENI Editions - All rigths reserved

Prsentation
noncduproblme
Le service Ressources Humaines d'une entreprise souhaite effectuer un suivi des formations auxquelles
participentsesemploys.
L'applicationAccess,raliseceteffetetprsentedanscechapitre,permet:

- de saisir les stages de formations,


- de rechercher les stages de formation en fonction d'un ensemble de critres,
- d'imprimer la liste des stages correspondants en rappelant les diffrents critres de slection.
BasededonnesFormations
LabasededonnesFormationscontenantcetteapplicationestconstituededeuxformulairesetd'untat:

- le formulaire Formations permet de saisir, modifier et supprimer des stages de formation.


- Le formulaire Recherche permet de rechercher des stages en fonction de diffrents critres.
- L'tat Formations affiche la liste des stages slectionns dans le formulaire Recherche.
L'option Effacer en cascade est active sur la relation entre les tables Formations et Participants.
Modlerelationneldelabase

ENI Editions - All rigths reserved

- 1-

Formulaire"Formations"
Ceformulairepeuttresoitouvertdirectementpartird'Accesspourajouterdesstages,soitappelpartirdu
formulaire"Recherche"pourmodifierousupprimerunstageexistant.

LapropritsourceduformulaireestFormations(TableFormations).
Listedescontrles
Nom du contrle

Description

txtInitul

cboOrganisme

Zone de texte associe au champ FOR_INTITULE


Zone de liste droulante base sur la table Organismes et
associe au champ FOR_IDORGA

cboDomaine

Zone de liste droulante base sur la table Domaines et


associe au champ FOR_IDDOM

txtCout

Zone de texte associe au champ FOR_COUT

txtCoutStage

Zone de texte

txtDateDeb

Zone de texte au format Date associe au champ


FOR_DATEDEB

txtDateFin

Zone de texte au format Date associe au champ


FOR_DATEFIN

txtDuree

sFrmParticip

10

txtNbStag

Zone de texte

11

cmdEnregistrer

Bouton de commande

12

cmdSupprimer

Bouton de commande

13

cmdFermer

Bouton de commande

Zone de texte associe au champ FOR_DUREE


Contrle sous-formulaire affichant le sous-formulaire Access
SF Participants

ENI Editions - All rigths reserved

- 1-

Contrle

Proprit spcifique

Form

Entres Donnes = Oui


Source = Formations

txtNbStag

Valeur par dfaut = 0


Verrouill = Oui
Source Contrle =
[sFrmParticipant].[Formulaire]![txtNbStag]

txtCoutStag

Verrouill = Oui

CodeVBA
LecodeVBAassociceformulairemontrelesaspectssuivants :

- synchronisation entre formulaire et sousformulaire : lors de l'ajout ou de la suppression d'un participant, le nombre de
stagiaires et le cot par stagiaires sont recalculs et raffichs,

- gestion des doublons au niveau du sousformulaire,


- utilisation d'un contrle calendrier pour saisir des dates,
- appel d'une fonction pour effectuer des calculs sur les dates,
- ...
CodeVBAgnrall'application :procduresetdclarationscommunes

Insrez le code suivant dans un module standard (ProcGene par exemple).

Option Compare Database


Option Explicit
' Critres de recherche
Public p_strCond As String
' N de l'employ
Public p_lngEmp As Long
' Titre de l'tat
Public p_strTitre As String
________________________________________________________________________
Function NbJourOuvres(Date1, Date2) As Integer
Dim NbJour, NbSem As Integer
' Calcule le nombre de jours ouvrs
' entre deux dates
NbJour = DateDiff("d", Date1, Date2) + 1
' Nombre de semaines entre les 2 dates
NbSem = DateDiff("ww", Date1, Date2)
NbJourOuvres = NbJour - (NbSem * 2)
End Function
CodeVBAduformulaire

Option Explicit
Dim BlnMaj As Boolean
________________________________________________________________________
Private Sub cmdEnregistrer_Click()
Dim intRep As String
' Contrle des champs obligatoires
If Not Ctrl_Info Then Exit Sub
If IsNull(txtDateDeb) Or IsNull(txtDateFin <> "") Then
If MsgBox("Dates non<+>saisies, confirmez-vous " _
& "l'enregistrement ?", vbQuestion & vbYesNo) = vbNo Then
txtDateFin.SetFocus
Exit Sub
End If
End If
- 2-

ENI Editions - All rigths reserved

' Passe la cration du stage suivant


' si mode ajout de donnes
If Me.DataEntry Then
txtDuree = "
txtCoutStag = ""
BlnMaj = False
DoCmd.GoToRecord , , acNewRec
txtIntitule.SetFocus
CmdSupprimer.Enabled = False
cmdEnregistrer.Enabled = False
Else
DoCmd.Close
End If
End Sub
________________________________________________________________________
Private Sub cmdFermer_Click()
' Teste si saisie d'un stage en cours
If txtIntitule <> "" Then
MsgBox ("Enregistrez ou supprimez le stage avant de fermer")
Else
DoCmd.Close
End If
End Sub
________________________________________________________________________
Private Sub CmdSupprimer_Click()
On Error GoTo Err_Suppr
If BlnMaj Then
' Supprime l'enregistrement
DoCmd.DoMenuItem acFormBar,
DoCmd.DoMenuItem acFormBar,
Else
' Annule la saisie sinon
DoCmd.DoMenuItem acFormBar,
End If
On Error GoTo 0
Exit Sub

si modifi
acEditMenu, 8, , acMenuVer70
acEditMenu, 6, , acMenuVer70
acEditMenu, acUndo, , acMenuVer70

Err_Suppr:
MsgBox "Suppression impossible : " & Err.Number, vbCritical
On Error GoTo 0
End Sub
________________________________________________________________________
Private Sub Form_AfterUpdate()
' Indicateur de mise jour
BlnMaj = True
End Sub
________________________________________________________________________
Private Sub Form_Load()
' Dsactive les boutons Supprimer
' et Enregistrer si mode ajout donnes
If Me.DataEntry Then
cmdEnregistrer.Enabled = False
CmdSupprimer.Enabled = False
Else
' Calcul du cot par stagiaire
Me.Recalc
If txtNbStag > 0 Then
txtCoutStag = txtCout / txtNbStag
End If
BlnMaj = True
End If
End Sub
________________________________________________________________________
Private Sub sFrmParticipant_Enter()
' Contrle des informations obligatoires
Ctrl_Info
End Sub
________________________________________________________________________
Private Sub txtCout_AfterUpdate()
' Calcul du cot / Stagiaire
If txtCout > 0 And txtNbStag > 0 Then
txtCoutStag = txtCout / txtNbStag
End If
End Sub
________________________________________________________________________
Private Sub txtDateDeb_LostFocus()
' Calcul de la dure du stage
ENI Editions - All rigths reserved

- 3-

Calc_Dure
End Sub
________________________________________________________________________
Private Sub txtDateFin_LostFocus()
' Calcul de la dure du stage
Calc_Dure
End Sub
________________________________________________________________________
Private Sub txtIntitule_BeforeUpdate(Cancel As Integer)
' Active le bouton Supprimer
CmdSupprimer.Enabled = True
End Sub
________________________________________________________________________
Private Function Ctrl_Info() As Boolean
' Contrle si les champs obligatoires ont t saisis
If IsNull(txtIntitule) Then
MsgBox "Intitul obligatoire", vbCritical
txtIntitule.SetFocus
Exit Function
End If
If IsNull(cboOrganisme) Then
MsgBox "Organisme obligatoire", vbCritical
cboOrganisme.SetFocus
Exit Function
End If
If IsNull(cboDomaine) Then
MsgBox "Domaine obligatoire", vbCritical
cboDomaine.SetFocus
Exit Function
End If
If IsNull(txtCout) Then
MsgBox "Montant du stage obligatoire", vbCritical
txtCout.SetFocus
Exit Function
End If
Ctrl_Info = True
CmdSupprimer.Enabled = True
cmdEnregistrer.Enabled = True
End Function
________________________________________________________________________
Private Sub Calc_Dure()
Dim intDuree As Integer
' Si les deux dates sont renseignes
' Contrle des dates et calcul de la dure
If txtDateDeb <> "" And txtDateFin <> "" Then
intDuree = DateValue(txtDateFin) - DateValue(txtDateDeb)
If intDuree < 0 Then
MsgBox "Vous devez spcifier une date de dbut antrieure " _
& " la date de fin", vbCritical, "Gestion des Formations"
Exit Sub
Else
txtDuree = NbJourOuvres(DateValue(txtDateDeb), _
DateValue(txtDateFin))
End If
End If
End Sub
Sousformulaire"SFParticipants"
Le formulaire "Formations" et le sousformulaire "SF Participants" sont lis sur les champs FOR_IDFORM et
PART_IDFORM.

- 4-

ENI Editions - All rigths reserved

Nom du contrle
1

cboEmploye

txtNbStag

Contrle

Description
Zone de liste droulante base sur la table Employes
associe au champ FOR_IDEMP
Zone de liste indpendante

Proprit spcifique

Form

Source = Participants

txtNbStag

Source Contrle = Compte([PART_IDEMP])

CodeVBA
Private Sub cboEmploye_AfterUpdate()
' Si Doublons : la mthode Refresh choue
On Error GoTo Doublons
Me.Refresh
On Error GoTo 0
' Recalcule le cot par stagiaire
' Si le formulaire principal est Formations
If UCase(Screen.ActiveForm.Name) = "FORMATIONS" Then
CalcCoutStage
End If
Exit Sub
' Gestion des doublons : message d'erreur
Doublons:
If Err.Number = 3022 Then
MsgBox "Participant dj saisi"
Else
MsgBox "Erreur lors de l'ajout du participant : " _
& Err.Number, vbCritical
End If
' Remise blanc du champ
cboEmploye = ""
End Sub
________________________________________________________________________
Private Sub Form_AfterDelConfirm(Status As Integer)
' Recalcule le cot par stagiaire
' Si le formulaire principal est Formations
If UCase(Screen.ActiveForm.Name) = "FORMATIONS" Then
CalcCoutStage
End If
End Sub
________________________________________________________________________
Private Sub CalcCoutStage()
Dim frmFormat As Object
' Calcule le cot / Stagiaire
Set frmFormat = Forms![FORMATIONS]
frmFormat.Recalc
If frmFormat.txtCout <> 0 And txtNbStag <> 0 Then
frmFormat.txtCoutStag = frmFormat.txtCout / txtNbStag
End If
' Active le bouton de commande Enregistrer
If txtNbStag <> 0 Then frmFormat.cmdEnregistrer.Enabled = True
End Sub

ENI Editions - All rigths reserved

- 5-

- 6-

ENI Editions - All rigths reserved

Formulaire"Recherche"
Ceformulairepermetd'afficheretd'imprimerlalistedesstagesrpondantcertainscritres.Ceformulairen'est
associaucunesourcededonnes.

Listedescontrles
Nom du contrle

Description

cboOrganisme

Zone de liste droulante base sur la table Organismes

cboDomaine

Zone de liste droulante base sur la table Domaines

cboEmploye

Zone de liste droulante base sur la table Employes

txtDateDeb

Zone de texte au format Date

txtOperat1

Zone de liste droulante contenant les valeurs "=",">","<"

txtDateFin

txtOperat2

Zone de liste droulante contenant les valeurs "=",">","<"

cmdRechercher

Bouton de commande

cmdEffacer

Bouton de commande

10

cmdImprimer

Bouton de commande

11

cmdFermer

Bouton de commande

12

sFrmformation

Zone de texte au format Date associe au champ


FOR_DATEFIN

Contrle sous-formulaire affichant le sous formulaire


Access SF Formations

CodeVBA
LecodeVBAassociceformulairemontrelesaspectssuivants :

- constitution d'une requte de type SQL partir de critres saisis,

ENI Editions - All rigths reserved

- 1-

- affectation de la requte au sousformulaire pour n'afficher que les enregistrements souhaits,


- affectation de la requte un tat pour n'imprimer que les enregistrements souhaits.
Option Compare Database
Option Explicit
Dim strSQL As String
________________________________________________________________________
Private Sub cmdRechercher_Click()
' Cre la requte en fonction des critres saisis
If cboEmploye <> "" Then
' Tables formations et participants
strSQL = "SELECT FOR_IDFORM, FOR_INTITULE, " _
& "FOR_IDDOM, FOR_IDORGA, FOR_DATEDEB, " _
& "FOR_DATEFIN, PART_IDEMP " _
& "FROM FORMATIONS INNER JOIN PARTICIPANTS " _
& "ON FORMATIONS.FOR_IDFORM = " _
& "PARTICIPANTS.PART_IDFORM"
Else
' Table formation
strSQL = "SELECT FOR_IDFORM, FOR_INTITULE, " _
& "FOR_IDDOM, FOR_IDORGA, " _
& "FOR_DATEDEB, FOR_DATEFIN FROM FORMATIONS "
End If
' Prpare la clause Where de la requte SQL
' en concatnant les critres
p_strCond = ""
p_lngEmp = 0
If cboDomaine <> "" Then
p_strCond = p_strCond _
& " AND FOR_IDDOM = " & cboDomaine
End If
If cboOrganisme <> "" Then
p_strCond = p_strCond _
& " AND FOR_IDORGA = " & cboOrganisme
End If
If cboEmploye <> "" Then
p_strCond = p_strCond _
& " AND PART_IDEMP = " & cboEmploye
p_lngEmp = cboEmploye
End If
' Critres sur les dates
If cboOperat1 <> "" And txtDateDeb <> "" Then
p_strCond = p_strCond & " AND (FOR_DATEDEB " & cboOperat1 _
& " #" & Format(DateValue(txtDateDeb), "MM/DD/YY") & "#)"
End If
If cboOperat2 <> "" And txtDateFin <>"" Then
p_strCond = p_strCond & " AND (FOR_DATEFIN " & cboOperat2 _
& " #" & Format(DateValue(txtDateFin), "MM/DD/YY") & "#)"
End If
' Suppression du 1er AND
If p_strCond <> "" Then
p_strCond = Right(p_strCond, (Len(p_strCond) - 4))
End If
' Affecte la requte SQL au sous-formulaire
If p_strCond <> "" Then
strSQL = strSQL & " WHERE " & p_strCond & " ORDER BY FOR_DATEDEB"
Else
strSQL = strSQL & " ORDER BY FOR_DATEDEB"
End If
SFrmFormations.Form.RecordSource = strSQL
SFrmFormations.Form.Requery
End Sub
________________________________________________________________________
Private Sub cmdEffacer_Click()
Dim ctl As Control
' Efface les zones de texte et zones de listes
For Each ctl In Me.Controls

- 2-

ENI Editions - All rigths reserved

If TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox Then


ctl.Value = ""
End If
Next
End Sub
________________________________________________________________________
Private Sub cmdImprimer_Click()
' Constitution du titre de
p_strTitre = ""
If cboDomaine <> "" Then
p_strTitre = p_strTitre & "
End If
If cboOrganisme <> "" Then
p_strTitre = p_strTitre & "
End If
If cboEmploye <> ""Then
p_strTitre = p_strTitre & "
End If

l'tat
- Domaine : " & cboDomaine.Column(1)
- Organisme : " & cboOrganisme.Column(1)
- Employe : " & cboEmploye.Column(1)

' Critres sur les dates


If cboOperat1 <> "" And txtDateDeb <> "" Then
p_strTitre = p_strTitre & " - Date de dbut " & cboOperat1 _
& " " & txtDateDeb
End If
If cboOperat2 <> "" And txtDateFin <> "" Then
p_strTitre = p_strTitre & " - Date de fin " & cboOperat1 _
& " " & txtDateDeb
End If
If p_strTitre <> "" Then
p_strTitre = Right(p_strTitre, Len(p_strTitre) - 3)
End If
' Ouverture de l'tat
DoCmd.OpenReport "Formations", acViewPreview
End Sub
_______________________________________________________________________
Private Sub cmdFermer_Click()
DoCmd.Close
End Sub
Sousformulaire"SFFormations"
Lesousformulaire"SFFormations"estbassurunerequteeffectuepartirdelatable"Formations".
LapropritRecordSourceduformulaireest :"SELECT*FROMFORMATIONS".

CodeVBA

Option Compare Database


Private Sub Form_DblClick(Cancel As Integer)
Dim lngIDForm As Long
' Affichage du formulaire Formations
IngIDForm = [FOR_IDFORM]
DoCmd.OpenForm "Formations", acNormal, , "[FOR_IDFORM]=" _
ENI Editions - All rigths reserved

- 3-

& lngIDForm, acFormEdit


End Sub
Etat"Formations"
L'tat"SFFormations"estbassurlatable"Formations".

CodeVBA

Private Sub Report_Open(Cancel As Integer)


' Titre dtermin en fonction des critres de
slection
txtCriteres.Caption = p_strTitre
' Modifie la source de donnes si un employ a t
slectionn
If p_lngEmp <> 0 Then
Me.RecordSource = "SELECT FORMATIONS.*, EMPLOYES.EMP_IDEMP,
" _
& "PARTICIPANTS.PART_IDEMP " _
& "FROM EMPLOYES INNER JOIN (FORMATIONS INNER JOIN " _
& "PARTICIPANTS ON FORMATIONS.FOR_IDFORM =
PARTICIPANTS.PART_IDFORM)" _
& "ON EMPLOYES.EMP_IDEMP = PARTICIPANTS.PART_IDEMP"
Else
Me.RecordSource = "FORMATIONS"
End If
' Critres de slection
Me.FilterOn = True
Me.Filter = p_strCond
End Sub

- 4-

ENI Editions - All rigths reserved

FonctionsetinstructionsVBA
Manipulationdechanesdecaractres
Fonctions

Format():Miseenformed'unechane.
Instr():Recherched'unesouschanedecaractres.
Lcase():Conversionenminuscules.
Left():Extractiondelapartiegauched'unechanedecaractres.
Len():Longueurd'unechane.
Ltrim():Suppressiondesespacesgauche.
Mid() : Renvoie une valeur de type Variant (String) contenant un nombre indiqu de caractres extraits d'une
chanedecaractres.
Right():Extractiondelapartiedroited'unechanedecaractres.
Rtrim():Suppressiondesespacesdroite.
Space():Crationd'unechaned'espaces.
StrComp():Comparaisondechanes.
StrConv:RenvoieunevaleurdetypeVariant(String)convertieauformatindiqu.
String():Crationd'unechanedecaractresrpts.
Trim():Suppressiondesespacesgauche/droite.
Ucase():Conversionenmajuscules.
Instructions

Lset:Alignementgauched'unechanedecaractres.
OptionCompare:Mthodedecomparaisonpardfaut.
Rset:Alignementdroited'unechanedecaractres.
Contrledudroulementduprogramme
Fonctions

Choose():Renvoielavaleurd'unelistedechoixenfonctiond'unindice.
DoEvents() : Arrte momentanment l'excution afin que le systme d'exploitation puisse traiter d'autres
vnements.
IIf():Renvoieunevaleurenfonctiond'unecondition.
Switch():Renvoielavaleurassocielapremireexpressionvraie.
Instructions

ENI Editions - All rigths reserved

- 1-

Call:AppelleuneprocdureSub.
Do...Loop:Crationd'uneitration.
End:Terminaisondeprogramme.
ExitDo:Sortied'uneitration.
ExitFor:Sortied'uneitration.
ForEach...Next:Permetdepasserenrevuetousleslmentsd'unecollectionoud'untableau.
For...Next:Crationd'uneitration.
Function...
EndFunction:Dfinitledbutetlafind'unefonction.
GoSub...Return:Appeld'unsousprogramme.
Goto:Effectueunbranchementinconditionnelversunelignedtermined'uneprocdure.
If...Then...Else:Crationd'unealternative.
On...GoSub:Excutiondesousprogrammesenfonctiond'unevariable.
On...Goto:Branchementversplusieurstiquettesdeprogrammeenfonctiond'unevariable.
PropertyGet:Dclarationd'uneprocdurePropertyGet.
PropertyLet:Dclarationd'uneprocdurePropertyLet.
PropertySet:Dclarationd'uneprocdurePropertySet.
SelectCase:Crationd'unealternative.
Stop:InterruptionprovisoireducodeACCESSBASIC.
Sub...EndSub:Dfinitledbutetlafind'uneprocdure.
While...Wend:Crationd'uneitration.
With:Permetd'excuterunesried'instructionssurunobjet.
Conversiondedonnes
Fonctions

Asc():ValeurAsciid'uncaractre.
Cbool():Conversiond'uneexpressionenBoolean.
CByte():Conversiond'uneexpressionenByte.
CCur():ConversiondechanedecaractresnombredetypeCurrency.
Cdate():Conversiond'uneexpressionenDate.
CDbl():Conversiondechanedecaractresnombredetypedouble.

- 2-

ENI Editions - All rigths reserved

CDec():Conversiond'uneexpressionenDcimal.
Chr():CaractreAsciid'unnombre.
CInt():Conversiond'unechanedecaractresenunnombredetypeentier.
CIng():Conversiond'unechanedecaractresenunnombredetypelong.
CSng():Conversiond'unechanedecaractresenunnombredetypesingle.
CStr():Conversiond'uneexpressionauformatString.
CVar():Conversiond'unechanedecaractresenunnombredetypevariant.
CVErr:Renvoieuncoded'erreurspcifiparl'utilisateur.
DateSerial():Crationd'unnombredatepartirdeAAMMJJ.
DateValue() :Conversiond'uneexpressionchaneoud'uneexpressionquireprsenteunedateendate.
Day():Jourd'unedate.
Hex():Conversiond'unnombreenunechanelereprsentantenHexadcimal.
Oct():Conversiond'unnombreenunechanelereprsentantenOctal.
Str()::Conversiondenombreenchanedecaractres.
Val():Conversiondechanedecaractresennombre.
Dateetheure
Fonctions

Date():Dateetheurecourante.
DateAdd():Ajoutunedate.
DateDiff():Diffrenceentredeuxdates.
DatePart():Extractiond'unepartiededate.
DateSerial():Retourneunedatepartirdujour,dumoisetdel'anne.
DateValue():Retourneunedatepartird'unechane.
Day():Retournelenumrodujourdanslemois.
Hour():Retournelenumrodel'heure(023)d'uneexpressionheure.
IsDate():Indiquesil'argumentVariantpeuttreconvertienDate.
Minute():Retournelenombredeminutes(059)d'uneexpressionheure.
Month():Retournelenumrodumoisd'unedate.
Now():Dateetheurecourante.
Second():Retournelenombredesecondes(059)d'uneexpressionheure.

ENI Editions - All rigths reserved

- 3-

Time():Renvoiel'heuresystme.
Timer():NombredesecondescoulesdepuisMinuit.
TimeSerial():Retourneletempssried'uneheure.
TimeValue():Retourneuneheurepartird'unechane.
WeekDay():Retournelenumrodujourdanslasemainepartird'unedate.
Year():Retournelavaleurdel'annepartird'unedate.
Instructions

Date:Permetdemodifierladatesystme.
Time:Permetdemodifierl'heuresystme.
Dclaration
Instructions

Const:Dfinituneconstantesymbolique.
Declare:DclareunesousroutinedeDLL.
Deftype:Dfinitiond'untypepardfaut.
Dim:Dfinitunevariable.
Let:Affecteunevaleurunevariable.
OptionBase:Dfinitlapluspetitevaleurdel'indiced'untableau.
OptionCompare:Dfinitlemodedecomparaisondesfichierstextes.
OptionExplicit:Imposeladclarationdesvariables.
OptionPrivate
Module:Interditaucontenud'unmoduled'trerfrencl'extrieurdel'application.
Private:Dfinitunevariableouuneprocdurecommetantprive.
Public:Dfinitunevariableglobale.
Redim:Redfinitlesdimensionsd'untableaudynamique.
Set:Affecteunobjetunevariable.
Static:Dfinitunevariablestatique.
Type:Dfinitdesvariablesstructuresutilisateurs.
Domaine
Fonctions

DAvg():Moyenned'undomaine.

- 4-

ENI Editions - All rigths reserved

DCount():Dnombrementsurundomaine.
DFirst():Premierd'undomaine.
DLast():Dernierd'undomaine.
DLookUp():Recherchedansundomaine.
DMax():Maximumd'undomaine.
DMin():Minimumd'undomaine.
DStDevP():Ecarttyped'unepopulationd'undomaine.
DStDev():Ecarttyped'unchantillond'undomaine.
DSum():Sommed'undomaine.
DVar():Varianced'unchantillond'undomaine.
DVarP():Varianced'unepopulationd'undomaine.
changedynamiquededonnes
Fonctions

DDE():CreuncanalDDEetdemanded'uneinformation.
DDEInitiate():Envoid'unecommandeviauncanalDDE.
DDERequest():Demanded'uneinformationviauncanalDDE.
DDESend():Envoid'uneinformationviauncanalDDE.
Instructions

DDEExecute:UtiliseuncanalDDEouvertpourenvoyerunecommandeuneapplication.
DDEPoke:UtiliseuncanalDDEouvertpourenvoyerdesdonnesuneapplication.
DDETerminate:Fermetured'uncanalDDE.
DDETerminateAll:FermeturedetouslescanauxDDEouverts.
Entres/sortiesfichiers
Fonctions

Curdir():Retourneledernierrpertoireutilisdanslabotededialogue"Ouvrirunebasededonnes".
Dir():Recherchedefichierscorrespondantsuncheminetunnomgnrique.
Eof():Findefichier.
FileAttr():Renvoielemodedegestiond'unfichierouvert.
FileDateTime():Retourneladateetl'heuredecrationoudederniremodificationd'unfichier.
FileLen():Retournelatailled'unfichier.

ENI Editions - All rigths reserved

- 5-

FreeFile():Renvoieleprochainnumrodefichierdisponible.
GetAttr():Retournelesattributsd'unfichieroud'unrpertoire.
Loc():Positionactuelledanslefichier.
Lof():Renvoielalongueurd'unfichier.
Seek():Renvoielapositioncourantedansunfichier.
Spc():DplacementdexespacesdansuneinstructionPrint.
Tab():DplacementdextabulationsdansuneinstructionPrint.
Instructions

Chdir:Changementderpertoirecourant.
Chdrive:Changementd'unitdedisquecourante.
Close:Fermetured'unfichier.
FileCopy:Permetlacopiedefichier.
Get:Lecturededonnesdansunfichiersquentiel.
Input:Lecturedansunfichiersquentiel.
Kill:Suppressiondefichierdudisque.
LineInput:Lectured'unelignedansunfichiersquentiel.
Lock:Verrouillaged'accsunsegmentdefichier.
Mkdir:Crationd'unrpertoire.
Name:Affectationd'unnouveaunomunfichierdisque.
Open:Ouvertured'unfichier.
Print:Ecriturededonnesdansunfichiersquentiel.
Put:Ecritured'unevariabledansunfichier.
Reset:Fermeturedetouslesfichiers.
RmDir:Suppressiond'unrpertoire.
SetAttr:Modificationdesattributsd'unfichier.
Unlock:Dverrouillaged'accsunsegmentdefichier.
Width:Affectationd'unelargeurdeligneensortiesurunfichier.
Write:criturededonnesdansunfichiersquentiel.
Finance
Fonctions

- 6-

ENI Editions - All rigths reserved

DDB() : Amortissement d'un bien au cours d'une priode spcifique en utilisant la mthode d'amortissement
dgressiftauxdoubleoutouteautremthodeprcise.
FV() : Valeur future d'une annuit sur la base d'une srie de versements priodiques constants et d'un taux
constant.
IPmt():Montantdel'intrtpourunepriodedonnesurlabasedeversementspriodiquesconstantsetd'un
tauxd'intrtfixe.
IRR():Tauxderentabilitinterned'unesriedeversements.
MIRR():Tauxderentabilitinternemodifid'unesriedeversements.
Nper() : Nombre de priodes pour une annuit sur la base de versements priodiques constants et d'un taux
d'intrtconstant.
NPV() : Valeur actuelle nette d'un investissement sur la base d'une srie de versements priodiques et d'un
taux.
Pmt() : Versement pour une annuit sur la base d'une srie de versements priodiques constants et d'un taux
constant.
PPmt():Versementprincipalpourunepriodedonned'uneannuitsurlabasederemboursementspriodiques
constantsetd'untauxd'intrtconstant.
PV() : Valeur prsente d'une annuit sur la base de versements priodiques constants et d'un taux d'intrt
constant.
RATE():Tauxd'intrtparprioded'uneannuit.
SLN():Amortissementconstantd'unbiendurantunepriodedtermine.
SYD():Amortissementd'unbienpourunepriodedonnedemanireproportionnellel'ordrenumriqueinverse
desannes.
Gestiond'erreurs
Fonctions

CVErr:RenvoielavariableError.
Err():Coded'erreursouslaformed'uninteger.
Error():Retournelemessagestandardcorrespondantunnumrod'erreur.
IsError():Indiquesiuneexpressionestunevaleurd'erreur.
Instructions

Error:Simuleuneerreur.
Onerror:Choixdubranchementeffectuerencasd'erreur.
Resume:Choixdubranchementeffectueraprstraitementd'erreur.
Graphiquesdanslestatsimprims
Fonctions

QBColor():Renvoielavaleurd'unecouleurRVBenfonctiond'unnumrodecouleur.

ENI Editions - All rigths reserved

- 7-

RGB():RenvoieunentierlongreprsentantunecouleurRVB.
Liaisonsetincorporationd'objets
Fonctions

CreateObject() :CreetrenvoieunerfrenceunobjetActiveX.
GetObject() :RenvoieunerfrenceunobjetfourniparuncomposantActiveX.
Manipulationd'objets
Mthodes

CreateControl:Creuncontrledansunformulaireouvert.
CreateForm:Creunformulaire.
CreateReport:Creuntat.
CreateReportControl:Creuncontrledansuntatouvert.
DeleteControl:Dtruituncontrledeformulaire.
DeleteReportControl:Dtruituncontrled'tat.
Mathmatiques
Fonctions

Abs():Valeurabsolued'unnombre.
Atn():Arctangented'unnombre.
Cos():Cosinusd'unangleenradians.
Exp() :Exponentielle.
Fix():Partieentired'unnombre.Pourlesnombresngatifs,renvoielepremiernombreentierngatifsuprieur
ougal.
Int() :Partieentired'unnombre.Pourlesnombresngatifs,renvoielepremiernombreentierngatifinfrieur
ougal.
Log():Logarithmenprien.
Rnd():Renvoieunnombrealatoire.
Sgn():Valeurindiquantlesigned'unnombre.
Sin():Sinusd'unangleenradians.
Sqr():Racinecarred'unnombre.
Tan():Tangented'unangleenradians.
Instructions

Randomize:Initialisationdugnrateuralatoire.

- 8-

ENI Editions - All rigths reserved

SQL
Fonctions

Avg():Retournelamoyennedesvaleursd'unchampd'unesried'enregistrements.
Count():Dnombrementd'enregistrements(contrlesouexpressionsSQL).
First():Retournelavaleurd'unchampdupremierenregistrementd'unerequte,formulaireoutat.
Last():Retournelavaleurd'unchampdudernierenregistrementd'unerequte,formulaireoutat.
Max():Retournelemaximumdesvaleursd'unchampd'unesried'enregistrements.
Min():Retourneleminimumdesvaleursd'unchampd'unesried'enregistrements.
StDev(), StDevP() : Retourne une estimation de l'cart type d'une population ou d'un chantillon de
population.
Sum():Retournelasommedesvaleursd'unchampd'unesried'enregistrements.
Var(),VarP():Retourneuneestimationdelavarianced'unepopulationoud'unchantillondepopulation.
Tableaux
Fonctions

IsArray():RenvoieunevaleurdetypeBoolean(boolen)quiindiquesiunevariableestuntableau.
Array():RenvoieunevariabledetypeVariantcontenantuntableau.
Instructions

Erase:Rinitialisationdetableaustatiqueetlibrationdelammoirealloueuntableaudynamique.
Lbound,Ubound:Recherchedesbornesinfrieuresetsuprieuresd'untableau.
OptionBase:Fixelaborneinfrieuredestableaux.
ReDim:Redimensionnementdynamiquedetableaux.
Vrificationdevariables
Fonctions

IsDate():Testesiunevariableestdetypedate.
IsEmpty():Testesiunevariableestvide.
IsMissing():Indiquesiunargumentfacultatifatpassuneprocdure.
IsNull():TestesiunevariableestNull.
IsNumeric():Testesiunevariableestdetypenumrique.
IsObject():Indiquesiuneexpressionfaitrfrenceunobjet.
TypeName():Renvoieunechaneindiquantletyped'unevariable.
VarType():Dtermineletypededonnessourced'unevariabledetypevariant.
ENI Editions - All rigths reserved

- 9-

Fonctionsetinstructionsdiverses
Fonctions

Command():ContientlapartieargumentdelalignedecommandeutilisepourlancerMicrosoftAccess.
CreateGroupLevel():Crationd'unniveauderegroupementdansuntat.
CurrentUser():Renvoielenomdel'utilisateuractuellementconnect.
DoEvents():RendleprocesseurprovisoirementWINDOWSpourqu'ilpuissetraiterlesvnements.
Environ():Renvoielachaneassocieunevariabled'environnement.
GetAllSettings:Renvoielalistedescls(etleursvaleursrespectives)figurantdansuneentred'applicationde
labasederegistredeWindows.
GetSetting:Renvoieunevaleurdecldel'entreduregistreWindowsd'uneapplication.
InputBox : Affiche une invite dans une bote de dialogue, puis renvoie le contenu de la zone de texte sous la
formed'unevaleurdetypeString.
MsgBox():Affichaged'unebotedemessage.
Shell():Excutiond'unprogramme.
StrReverse:Renvoieunechanecontenantdescaractresdontl'ordreatinversparrapportunechane
donne.
Instructions

AppActivate:Activationd'unefentred'applicationWindows.
Beep:metunBip.
SendKeys:Envoid'unesquencedetouchesclavier.
DeleteSetting:Supprimeunesectionouunparamtredecld'uneentrederegistreWindows.
Rem :Permetd'incluredesremarquesexplicativesdansunprogramme.
SaveSetting:Sauvegardeoucreuneentred'applicationdansleregistreWindows.
Codeserreursrcuprables
Des erreurs rcuprables peuvent survenir lors de l'excution d'une application. Certaines d'entre elles peuvent
galementseproduirelorsdudveloppementoudelacompilation.Vouspouveztesteretrpondredeserreurs
rcuprablesl'aidedel'instructionOnErroretdel'objetErr.
CodeErreur Description
3

ReturnsansGoSub.

Appeldeprocdureincorrect.

Dpassementdecapacit.

Mmoireinsuffisante.

- 10 -

ENI Editions - All rigths reserved

Indiceendehorsdelaplage.

10

Cetableauestfixeoutemporairementverrouill.

11

Divisionparzro.

13

Typeincompatible.

14

Espacedechaneinsuffisant.

16

Expressiontropcomplexe.

17

Impossibled'excuterl'oprationrequise.

18

Interruptionparl'utilisateur.

20

Reprisesanserreur.

28

Espacepileinsuffisant.

35

Sub,FunctionouPropertynondfinie.

47

Tropdeclientsd'applicationpourlaDLL.

48

ErreurdechargementdelaDLL.

49

Conventiond'appeldeDLLincorrecte.

51

Erreurinterne.

52

Nomounumrodefichierincorrect.

53

Fichierintrouvable.

54

Moded'accsaufichierincorrect.

55

Fichierdjouvert.

57

Erreurd'entre/sortiedepriphrique.

58

Cefichierexistedj.

59

Longueurd'enregistrementincorrecte.

61

Disqueplein.

62

L'entredpasselafindefichier.

63

Numrod'enregistrementincorrect.

67

Tropdefichiers.

68

Priphriquenondisponible.

70

Permissionrefuse.

71

Disquenonprt.

74

Impossiblederenommeravecunlecteurdiffrent.

ENI Editions - All rigths reserved

- 11 -

75

Erreurdanslechemind'accs.

76

Chemind'accsintrouvable.

91

VariableobjetouvariableblocWithnondfinie.

92

BoucleFornoninitialise.

93

Formatdechaneincorrect.

94

UtilisationincorrectedeNull.

97
dfinition.

Impossible d'appeler une procdure Friend sur un objet qui n'est pas une instance de classe de

98
Un appel de proprit ou de mthode ne peut pas faire rfrence un objet priv ni en tant
qu'argumentnientantquevaleurrenvoye.
298

ImpossibledechargerlaDLLsystme.

320

Impossibled'utiliserdesnomsdepriphriquesdecaractresdanslesnomsdefichiersspcifis.

321

Formatdefichierincorrect.

322

Impossibledecrerlefichiertemporairencessaire.

325

Formatincorrectdanslefichierressource.

327

Lavaleurdel'objetdedonnesnommestintrouvable.

328

Paramtreincorrect.Impossibled'criredestableaux.

335

Impossibled'accderauregistresystme.

336

Lecomposantn'estpascorrectementenregistr.

337

Composantintrouvable.

338

Excutionincorrecteducomposant.

360

Objetdjcharg.

361

Impossibledechargeroudedchargercetobjet.

363

Lecontrlespcifiestintrouvable.

364

L'objettaitdcharg.

365

Impossiblededchargerdanscecontexte.

368

Lefichierspcifiestprim.Ceprogrammerequiertuneversionplusrcente.

371

L'objetspcifinepeuttreutiliscomepropritairedelafeuillepourlamthodeShow.

380

Valeurdepropritincorrecte.

381

Indexdutableaudepropritsincorrect.

382

PropertySetnepeutpastreexcuteenmodeexcution.

- 12 -

ENI Editions - All rigths reserved

383

PropertySetnepeuttreutiliseavecunepropritenlectureseule.

385

Indexdetabledepropritrequis.

387

PropertySetnonautorise.

393

PropertyGetnepeutpastreexcuteenmodeexcution.

394

PropertyGetnepeutpastreexcutesurunepropritencritureseule.

400

Feuilledjafficheaffichagemodalimpossible.

402

Lecodedoitd'abordfermerlafeuillemodaledepremierplan.

419

Autorisationd'utiliserl'objetrefuse.

422

Propritintrouvable.

423

Propritoumthodeintrouvable.

424

Objetrequis.

425

Utilisationd'objetincorrecte.

429

Uncomposantnepeutpascrerl'objetoufournirunerfrencecetobjet.

430

CetteclassenegrepasAutomation.

432

NomdefichieroudeclassenontrouvpendantuneoprationAutomation.

438

Cetobjetnegrepascettepropritoumthode.

440

ErreurAutomation.

442

Laconnexionlabibliothquedetypesoud'objetspourunprocessusdistantatperdue.

443

L'objetAutomationn'apasdevaleurpardfaut.

445

L'objetnegrepascetteaction.

446

L'objetnegrepaslesargumentsnomms.

447

L'objetnegrepaslesparamtresrgionauxencours.

448

Argumentnommintrouvable.

449

Argumentnonfacultatifouaffectationdepropritincorrecte.

450

Nombred'argumentsincorrectouaffectationdepropritnonvalide.

451

Cetobjetn'estpasunecollection.

452

Numroincorrect.

453

FonctionDLLspcifieintrouvable.

454

Ressourcedecodeintrouvable.

455

Erreurdeverrouillagederessourcedecode.
ENI Editions - All rigths reserved

- 13 -

457

Cetteclestdjassocieunlmentdecettecollection.

458

CettevariableutiliseuntypenongrparVisualBasic.

459

Cecomposantnegrepaslejeud'vnements.

460

FormatdePressepapiersincorrect.

461

Mthodeoumembrededonnesintrouvable.

462

Leserveurdistantn'existepasoun'estpasdisponible.

463

Laclassen'estpasenregistresurlamachinelocale.

480

ImpossibledecreruneimageenmodeAutoRedraw.

481

Imageincorrecte.

482

Erreurd'imprimante.

483

Legestionnaired'imprimantenegrepaslapropritspcifie.

484
Problme pour obtenir des informations du gestionnaire d'imprimante du systme. Assurezvous
quelegestionnaired'imprimanteestinstallcorrectement.
485

Typed'imageincorrect.

486

Impossibled'imprimerl'imagedefeuillesurcetyped'imprimante.

520

ImpossibledeviderlePressepapiers.

521

Impossibled'ouvrirlePresse papiers.

735

Impossibled'enregistrerlefichierdansunrpertoireTEMP.

744

Letexterecherchestintrouvable.

746

Remplacementstroplongs.

31001

Mmoireinsuffisante.

31004

Pasd'objet.

31018

Classenondfinie.

31027

Impossibled'activerl'objet.

31032

Impossibledecrerunobjetincorpor.

31036

Erreurl'enregistrementdanslefichier.

31037

Erreurdechargementpartirdufichier.

- 14 -

ENI Editions - All rigths reserved

ConstantesVBA
VisualBasicpourApplicationspermetdedfinirdesconstantesafind'amliorerlalisibilitducodeetd'enfaciliter
lamaintenance.
Vous pouvez galement utiliser les constantes VBA (constantes intrinsques) suivantes partout dans votre
code.
Constantesdecouleur
Constante

Valeur

Description

vbBlack

0x0

Noir

vbRed

0xFF

Rouge

vbGreen

0xFF00

Vert

vbYellow

0xFFFF

Jaune

vbBlue

0x0FF0000

Bleu

vbMagenta

0x0FF00FF

Magenta

vbCyan

0x0FFFF00

Cyan

vbWhite

0x0FFFFFF

Blanc

Constantesdedate
Constante

Valeur

Description

vbSunday

Dimanche

vbMonday

Lundi

vbTuesday

Mardi

vbWednesday

Mercredi

vbThursday

Jeudi

vbFriday

Vendredi

vbSaturday

Samedi

Constantesdestouchesclavierlettresetchiffres
LesvaleursdestouchesAZsontlesmmesqueleursquivalentsASCII.
Constante

Valeur

Description

vbKeyA

65

Touche A

vbKeyB

66

Touche B

vbKeyC

67

Touche C

...

...

...

vbKeyZ

90

Touche Z

Lesvaleursdestouches09sontlesmmesqueleursquivalentsASCII.
Constante

Valeur

Description

vbKey0

48

Touche 0

vbKey1

49

Touche 1

vbKey2

50

Touche 2

...

...

...

vbKey9

57

Touche 9

ENI Editions - All rigths reserved

- 1-

Constantesdetouchesdefonction
Constante

Valeur

Description

vbKeyF1

0x70

Touche F1

vbKeyF2

0x71

Touche F2

...

...

...

vbKeyF11

0x7A

Touche F11

...

...

...

vbKeyF16

0x7F

Touche F16

Constantesdetouchesdiverses
Constante

Valeur

Description

vbKeyCancel

0x3

Touche ANNULER

vbKeyBack

0x8

Touche Retour arrire

vbKeyTab

0x9

Touche Tab

vbKeyClear

0xC

Touche EFFACER

vbKeyReturn

0xD

Touche Entre

vbKeyShift

0x10

Touche Shift

vbKeyControl

0x11

Touche Ctrl

vbKeyMenu

0x12

Touche MENU

vbKeyPause

0x13

Touche PAUSE

vbKeyCapital

0x14

Touche Caps Lock

vbKeyEscape

0x1B

Touche Echap

vbKeySpace

0x20

Touche ESPACE

vbKeyPageUp

0x21

Touche Pg Up

vbKeyPageDown

0x22

Touche Pg Dn

vbKeyEnd

0x23

Touche Fin

vbKeyHome

0x24

Touche Dbut

vbKeyUp

0x25

Touche Flche haut

vbKeyDown

0x26

Touche Flche bas

vbKeyRight

0x27

Touche Flche droite

vbKeyLeft

0x28

Touche Flche gauche

vbKeySelect

0x29

Touche Slection

vbKeyPrint

0x2A

Touche Impr cran

vbKeyExecute

0x2B

Touche EXCUTER

vbKeySnapshot

0x2C

Touche SNAPSHOT

vbKeyInsert

0x2D

Touche Ins

vbKeyDelete

0x2E

Touche Suppr

vbKeyHelp

0x2F

Touche AIDE

vbKeyNumlock

0x90

Touche Caps lock

vbKeyLButton

0x1

Bouton gauche de la souris

vbKeyRButton

0x2

Bouton droit de la souris

- 2-

ENI Editions - All rigths reserved

Raccourcisclavier
F1 :Aidesurlemotclsurlequelsetrouvelecurseur.
F5 :Excuteuneprocdure.
F8 :ModePaspasdtaill.
ShiftF8 :ModePaspasprincipal.
CtrlShiftF8:ModePaspassortant.
CtrlF8 :Excutejusqu'aucurseur.
ShiftF9 :Affichelavaleurencours.
F9 :Afficheoudsactiverlepointd'arrt.
CtrlShiftF9 :Supprimetouslespointsd'arrt.
CtrlF9 :Dfinitl'instructionsuivante.

ENI Editions - All rigths reserved

- 1-

Vous aimerez peut-être aussi