Vous êtes sur la page 1sur 565

MS OFFICE ACCESS 95-2013

V22.0 Revision 995, {oUUID 1.680}

Please consider the environment - do you really need to print this document!?
Vincent Isoz
2015-03-09

Vincent ISOZ
Remarques:
Pour qu'il soit utilisable d'une manire rationnelle et sans danger, ce support qui constitue un
"super condens" d'un expos qui tiendrait trs facilement sur plusieurs milliers de pages (voir
les ouvrages de cette taille disponible sur le commerce) doit absolument tre complt par de
nombreuses notes et exposs oraux, au cours desquels les notions nouvelles sont prsentes au
moyen de situations concrtes et illustres par de nombreux exemples dont le choix dpend
essentiellement du droulement de la formation afin d'exciter l'esprit critique des apprenants.
Ce support correspond une formation d'environ 15 jours 6.5 heures par jour pour un
groupe de 6 personnes.
Ce qui est vu dans ce support peut tre appliqu toutes les versions antrieures
MS Access 2007. Je ne mettrai donc pas ce document jour pour qu'il corresponde la
version 2007, 2010 ou 2012 (sauf pour les nouveauts) puisque Microsoft la tendance ces
dernires annes changer l'interface chaque version et j'ai autre chose faire de mon temps
que de mettre jour des captures d'cran.
Je tiens galement m'excuser du fait que ce document mlange les captures d'cran d'un
grand nombre de versions de MS Access (97 2010) et en plus de diffrentes langues
(franais + anglais). Effectivement, mon mtier m'oblige constamment changer d'ordinateur
et ainsi le contenu des documents que je rdige. J'espre que le lecteur comprendra en
attendant une uniformisation.
Il y a de nombreuses marques dposes qui sont nommes dans le prsent support. Plutt que
d'utiliser le symbole du trademark sur chaque occurrence de marque nomme, j'ai choisi
d'utiliser le nom seul uniquement dans un souci d'esthtique ditoriale (ce qui devrait aussi
bnficier au propritaire de la marque), sans aucune intention de violer une quelconque
rglementation ou lgislation.
Pour terminer, je voudrais remercier ici les quelques collgues (Olivier Weber,
Fabrice Fournier) et clients qui ont bien voulu me faire part de leurs remarques pour amliorer
le contenu de ce livre lectronique. Il est cependant certain qu'il est encore perfectible sur de
nombreux points.
Si vous souhaitez tre inform des nouvelles versions majeures de ce document n'hsitez pas
m'crire un mail dans ce sens: isoz@sciences.ch.

MS Office Access

1/564

Vincent ISOZ

TABLE DES MATIRES


Contents
TABLE DES MATIRES ............................................................................................................ 2
1 Liens internet ......................................................................................................................... 10
1. propos du rdacteur .......................................................................................................... 11
2 Introduction ........................................................................................................................... 12
2.1 Environnement ............................................................................................................................. 13
2.2 Protocole ...................................................................................................................................... 14
2.3 MS Excel (tableur) VS MS Access (SGBDR) ............................................................................. 15

3 Notions de base de donnes .................................................................................................. 17


3.1 Types de BDD ............................................................................................................................. 17
3.2 Vues d'une base de donnes ......................................................................................................... 18
3.3 Modules d'un SGBDR ................................................................................................................. 19
3.4 Mthodes de cration de BDD ..................................................................................................... 20
3.5 Modle entit-relation (MER) ..................................................................................................... 22
3.6 Normalisation .............................................................................................................................. 24
3.6.1 Premire forme normale ...................................................................................................... 25
3.6.2 Deuxime forme normale .................................................................................................... 26
3.6.3 Troisime forme normale .................................................................................................... 26
3.6.4 Exercice ............................................................................................................................... 27
3.7 Modlisation de BDD avec MS VISIO ....................................................................................... 28
3.8 Nomenclature de Leszynski/Reddic ............................................................................................ 36

4 Tables .................................................................................................................................... 39
4.1 Liaison MS Excel/CSV ................................................................................................................ 41
4.2 Cration de tables......................................................................................................................... 42
4.3 Formulaire simple (auto-form) .................................................................................................... 44
4.4 Contrle des donnes ................................................................................................................... 45
4.4.1 Lgende ............................................................................................................................... 45
4.4.2 Types de donnes (Typages) ............................................................................................... 47
4.4.3 Formats ................................................................................................................................ 55
4.4.4 Masques de saisie ................................................................................................................ 55
4.4.5 Validation (Valide Si) .......................................................................................................... 58
4.5 Import MS Excel.......................................................................................................................... 62
4.6 Import MS ACCESS.................................................................................................................... 63
4.7 Import/liaison MS Outlook .......................................................................................................... 64
4.8 Format des tables ......................................................................................................................... 67
4.9 Outil recherche............................................................................................................................. 68
4.10 Proprits des tables................................................................................................................... 69
4.11 Tris et filtres ............................................................................................................................... 70
4.11.1 Critres numriques et textes ............................................................................................. 71
4.11.2 Critres numriques et dates .............................................................................................. 71
4.11.3 Caractres gnriques (wildcards) ..................................................................................... 71
4.11.4 Fonctions gnriques ......................................................................................................... 72
4.11.5 Tris et filtres avancs ......................................................................................................... 73

5 Relations (jointures) .............................................................................................................. 74


5.1 Assistant liste de choix ................................................................................................................ 74
5.1.1 Assistant liste de choix (ALC) statique ............................................................................... 74
5.1.1.1 ALC statique choix unique de type zone de liste droulante .....................................74
5.1.1.2 ALC statique choix unique de type zone de liste .......................................................77
5.1.1.3 ALC statique choix unique de type liste droulante extensible .................................79

MS Office Access

2/564

Vincent ISOZ
5.1.1.4 ALC statique choix multiple de type liste droulante extensible...............................81
5.1.2 Assistant liste de choix (ALC) li ........................................................................................ 83
5.1.2.1 ALC statique li choix unique de type zone de liste droulante ................................83
5.2 Relation un un ........................................................................................................................... 88
5.3 Relation un plusieurs................................................................................................................. 89
5.4 Relation plusieurs plusieurs ...................................................................................................... 93
5.5 Relation "simple" (sans intgrit rfrentielle) ............................................................................ 93
5.6 Relation avec intgrit rfrentielle ............................................................................................. 93
5.7 Relation circulaire (auto-liaison) ................................................................................................. 99
5.8 Relations d'hritage et composites ............................................................................................. 101
5.9 Index simples et combins ......................................................................................................... 102

6 Formulaires (simples) ......................................................................................................... 105


6.1 Choix de la mthode d'affichage des formulaires ...................................................................... 105
6.2 Filtre par formulaire ................................................................................................................... 107
6.3 Formulaire en mode design........................................................................................................ 111
6.4 Cration de boutons de formulaires ........................................................................................... 111
6.5 Filtres requtes ........................................................................................................................... 118
6.6 Outil recherche........................................................................................................................... 118
6.7 ComboBox de recherche ............................................................................................................ 119
6.8 Groupes d'options ...................................................................................................................... 121
6.9 Champs calculs ........................................................................................................................ 123
6.10 ListBox de recherche ............................................................................................................... 123
6.11 Fonction DSum ........................................................................................................................ 124
6.12 Fonction DCount ..................................................................................................................... 125
6.13 Fonction IIf (formulaire) .......................................................................................................... 126
6.14 Fonctions d'environnement ...................................................................................................... 126
6.15 Fonction DLookUp .................................................................................................................. 126
6.16 Onglets ..................................................................................................................................... 127
6.17 Valeurs par dfaut et filtres ...................................................................................................... 130

7 Requtes (simples) ............................................................................................................... 132


7.1 Optimisation des requtes .......................................................................................................... 134
7.2 Requte simple (de projection) .................................................................................................. 135
7.3 Tris dans les requtes ................................................................................................................. 135
7.4 Requte multitable sans liaisons ................................................................................................ 137
7.5 Requte multitable avec liaisons................................................................................................ 138
7.6 Requte de distinction................................................................................................................ 139
7.7 Cinq premiers............................................................................................................................. 139
7.8 Requte avec critre ................................................................................................................... 140
7.9 Requte concatnation dans liste de choix................................................................................. 142
7.10 Colonne calcule ...................................................................................................................... 144
7.11 Critres multiples ..................................................................................................................... 144
7.12 Calcul de synthse (d'agrgation) ............................................................................................ 146
7.13 Regroupement et calculs .......................................................................................................... 146
7.14 Requte et macro d'export ....................................................................................................... 148
7.15 Requte mise--jour ................................................................................................................. 151
7.16 Requte mise--jour (Rechercher/Remplacer) ......................................................................... 152
7.17 Requtes de synthse ............................................................................................................... 154
7.18 Requte d'union ....................................................................................................................... 155
7.19 Requte d'intersection .............................................................................................................. 159
7.20 Requte de comptage ............................................................................................................... 160
7.21 Requte d'union (bis) ............................................................................................................... 161
7.22 Requtes de requtes ................................................................................................................ 162
7.23 Divers (exercices) .................................................................................................................... 164

8 tats-formulaires (complexes) ............................................................................................ 165


8.1 Carnet d'adresse ......................................................................................................................... 167

MS Office Access

3/564

Vincent ISOZ
8.2 Synthse et requte .................................................................................................................... 169
8.3 Sous-tats ................................................................................................................................... 171
8.4 Rapports avec groupes (pour lettres ou factures) ....................................................................... 175
8.5 Rapport paramtr par formulaire.............................................................................................. 190
8.6 Objet ActiveX ............................................................................................................................ 191
8.7 Graphique statistique insr ....................................................................................................... 192
8.8 Graphique insr ........................................................................................................................ 196
8.9 Tableaux croiss dynamiques .................................................................................................... 197
8.10 Graphiques croiss dynamiques............................................................................................... 198

9 Requtes (complexes avec ou sans VBA) ............................................................................ 199


9.1 Requtes avec jointures ............................................................................................................. 199
9.2 Requte regroupement par premiers lments ........................................................................... 201
9.3 Requte avec critres ................................................................................................................. 203
9.4 Requte d'analyse de frquence (contingence) .......................................................................... 204
9.5 Requte paramtre.................................................................................................................... 205
9.6 Requte d'ajout........................................................................................................................... 207
9.7 Requte de suppression.............................................................................................................. 208
9.8 Requte d'analyse croise (avec assistant) ................................................................................. 208
9.9 Requte d'analyse croise (sans assistant) ................................................................................. 209
9.10 Requte d'analyse croise temporelle ...................................................................................... 210
9.11 Requte d'analyse croise paramtre...................................................................................... 211
9.12 Requte doublons..................................................................................................................... 212
9.13 Requte de suppression des doublons d'enregistrements ......................................................... 213
9.14 Requte de non correspondance............................................................................................... 214
9.15 Requtes de cration/dfinition (mode SQL) .......................................................................... 215
9.16 Requte de distribution en % sur comptage ............................................................................. 217
9.17 Requte de (Pareto) distribution en % sur somme ................................................................... 218
9.18 Requte de cumul chronologique............................................................................................. 219
9.19 Requte systme ...................................................................................................................... 220
9.20 Requtes de statistiques non natives ........................................................................................ 220
9.20.1 Requte de valeur modale................................................................................................ 221
9.20.2 Requte d'obtention de la mdiane .................................................................................. 224
9.20.3 Requtes d'intervalle de fluctuation ................................................................................. 227
9.20.4 Requtes moyenne mobile et somme cumule ................................................................ 228
9.20.5 Requtes de data mining/machine learning ..................................................................... 230
9.21 Analyse simple de portefeuilles ............................................................................................... 230
9.22 Transactions ............................................................................................................................. 233

10 Fonctions ........................................................................................................................... 235


10.1 Relation d'ordre comme validation d'un record (table) ............................................................ 235
10.2 Fonctions Date comme valeur par dfaut (tables) ................................................................... 236
10.3 Fonctions Now comme valeur par dfaut (tables) ................................................................... 237
10.4 Fonctions d'environnement (tables) ......................................................................................... 237
10.5 Fonction textes Left, Right, Instr (requte) .............................................................................. 238
10.6 Fonctions textes UCase, LCase, &, TRIM, StrConv (requte) ................................................ 239
10.7 Fonctions replace et MID (requte) ......................................................................................... 241
10.8 Fonctions de dates Year, Day, Month (requte) ...................................................................... 243
10.9 Fonction de formatage de dates et DatePart (requte) ............................................................. 244
10.10 Fonction de date DateDiff (requte) ...................................................................................... 246
10.11 Calculs de jours avec DateAdd (Formulaire)......................................................................... 246
10.12 Fonction Logique IIf (formulaire) ......................................................................................... 248
10.13 Fonctions d'arrondi Round (requte) ..................................................................................... 249
10.14 Fonction conditionnelle Switch (requte) .............................................................................. 249
10.15 Fonctions IsNull et NZ (requte) ........................................................................................... 251
10.16 Fonction DSum (formulaire) ................................................................................................. 253
10.17 Fonction DCount (formulaire) ............................................................................................... 255

MS Office Access

4/564

Vincent ISOZ
10.18 Fonction DLookUp (formulaire)............................................................................................ 256
10.19 Fonctions Count et DCount (requte) .................................................................................... 257
10.20 Fonction Dsum (requte) ....................................................................................................... 258
10.21 Fonction Dsum et Dates (requte) ......................................................................................... 259

11 Interfacage de l'application .............................................................................................. 261


11.1 Proprits des formulaires ....................................................................................................... 261
11.2 Proprits des champs de formulaires...................................................................................... 263
11.3 Sous-formulaires (Assistant).................................................................................................... 265
11.4 Champs calculs ...................................................................................................................... 267
11.5 Sous-formulaires (Bote outils contrle) ............................................................................... 268
11.6 Formatage ................................................................................................................................ 270
11.7 Champs OLE ........................................................................................................................... 272
11.8 Esthtique rapports .................................................................................................................. 277
11.9 Formulaire de dmarrage (switchboard) .................................................................................. 278
11.10 Options de dmarrage ............................................................................................................ 280
11.11 Barre d'outils personnalise ................................................................................................... 285
11.11.1 MS Access 2003 et antrieur ......................................................................................... 285
11.11.2 MS Access 2007 et ultrieur .......................................................................................... 286
11.11.2.1
Masquer le ruban au dmarrage de MS Access 2007 ........................................286
11.11.2.2
Masquer le ruban au dmarrage de MS Access 2010 ........................................287

12 Finitions lmentaires ....................................................................................................... 288


12.1 Compactage ............................................................................................................................. 288
12.2 Protection par mot de passe ..................................................................................................... 288
12.3 MS Query................................................................................................................................. 289
12.4 Publipostage ............................................................................................................................. 290

13 Macros ............................................................................................................................... 291


13.1 Macros simples ........................................................................................................................ 292
13.1.1 Excution de requtes en mode cration ......................................................................... 292
13.1.2 Contrle de saisie simple ................................................................................................. 293
13.1.3 Import de donnes ........................................................................................................... 294
13.1.4 Contrles sur formulaires ................................................................................................ 295
13.2 Groupe de macros .................................................................................................................... 297
13.3 Groupe conditionnel de macros ............................................................................................... 298
13.4 Macro AutoExec ...................................................................................................................... 300
13.5 Macros Run Code .................................................................................................................... 301
13.6 Macros Import/Export.............................................................................................................. 303
13.7 Macro ReQuery........................................................................................................................ 303
13.8 Groupe de macros simple ........................................................................................................ 305
13.9 Groupe de macros complexe.................................................................................................... 308

14 Thorie internet / intranet ................................................................................................. 310


14.1 Formulaire web ........................................................................................................................ 310
14.2 Application Web avec SharePoint 2010/Access 2010 ............................................................. 313
14.3 Application Web avec SharePoint 2013/Access 2013)............................................................ 317

15 Optimisation et analyse ..................................................................................................... 324


15.1 Table ........................................................................................................................................ 324
15.2 Performances ........................................................................................................................... 324
15.3 Documenter.............................................................................................................................. 326

16 Distribution ....................................................................................................................... 327


16.1 Fractionnement d'une base ....................................................................................................... 328
16.2 Rseau ...................................................................................................................................... 330

17 Securit avance ................................................................................................................ 332


17.1 Dfinition d'un mot de passe.................................................................................................... 332
17.2 Scurit au niveau utilisateur ................................................................................................... 334
17.2.1 Protocole .......................................................................................................................... 334

MS Office Access

5/564

Vincent ISOZ
17.2.2 Mthodes ......................................................................................................................... 335
17.2.3 Modlisation des droits .................................................................................................... 337
17.2.4 Dangers de l'espace de travail "par dfaut": .................................................................... 338
17.2.5 Un peu de VBA avec la scurit ...................................................................................... 355
17.2.6 A propos du fichier ldb .................................................................................................... 358
17.2.7 Problmes de scurit avec les requtes .......................................................................... 358
17.3 Dploiement ............................................................................................................................. 359

18 Synchronisation (rplication) ............................................................................................ 361


18.1 Types de rplicas ..................................................................................................................... 361
18.2 Cration d'un rplica matre ..................................................................................................... 361
18.3 Cration d'un rplica partiel ..................................................................................................... 367
18.4 Modifications sur les objets de la base de donnes .................................................................. 368
18.5 Comparatif Maitre-Rplica lors de la synchronisation ............................................................ 371
18.6 3 Conflits rencontrs lors de la synchronisation des bases ...................................................... 372
18.6.1 Subtilits de prdominance du matre.............................................................................. 372

19 Visual Basic Application ................................................................................................... 374


19.1 Objectifs ................................................................................................................................... 376
19.2 Historique ................................................................................................................................ 376
19.3 Types de donnes ..................................................................................................................... 377
19.4 Nomenclature de Lezsynski-Reddick ...................................................................................... 380
19.5 Commentaires .......................................................................................................................... 381
19.6 Table des objets VBA et table ASCII ...................................................................................... 383
19.7 Prise en main du V.B.A ........................................................................................................... 386
19.7.1 Exemples gnriques Office ......................................................................................... 388
19.8 Appliquer le filtre par formulaire automatiquement ................................................................ 392
19.9 Appliquer un filtre avec critres sur un formulaire .................................................................. 392
19.10 Dtection formulaire ouvert ................................................................................................... 393
19.11 Dtection de la version et compactage................................................................................... 393
19.12 Cration d'un bouton ouvrant une page web .......................................................................... 393
19.13 Excution de code SQL ......................................................................................................... 393
19.14 Cration d'une table ............................................................................................................... 394
19.15 Imports/Exports ..................................................................................................................... 395
19.15.1 Import de donnes de MS Excel .................................................................................... 395
19.15.2 Export paramtr d'un fichier MS Excel ....................................................................... 395
19.15.3 Import d'un fichier CSV ................................................................................................ 396
19.16 Automatiser la mise jour des tables de type BDD lies ...................................................... 398
19.17 Champ de Recherche sur formulaire...................................................................................... 401
19.18 Evnement sur sortie de formulaire (validation des champs de saisie) ................................. 401
19.19 Evnement sur fermeture de formulaire (validation des champs de saisie) ........................... 402
19.20 Focus sur formulaire .............................................................................................................. 403
19.21 Filtres ..................................................................................................................................... 405
19.21.1 Filtre paramtr par bouton ........................................................................................... 405
19.21.2 Filtre paramtr par une zone d'options ......................................................................... 408
19.21.3 Adaptation au filtre par formulaire ................................................................................ 408
19.21.4 Filtres avec boutons a bascule ....................................................................................... 409
19.21.5 Listes droulantes .......................................................................................................... 409
19.21.5.1
Ouvrir une liste droulante lors du survol avec la souris ...................................410
19.21.5.2
Filtrage d'une liste droulante sur la base d'un champ .......................................411
19.21.5.3
Filtrage d'une liste droulante sur la de la saisie dans la liste droulante ..........411
19.21.5.4
Ajout directe d'une donnes dans une liste droulante ......................................413
19.22 Liste droulante choix multiples ......................................................................................... 417
19.23 Autres vnements ................................................................................................................. 418
19.24 Fonctions................................................................................................................................ 421
19.25 Gestion des erreurs................................................................................................................. 421
19.26 Calendriers ............................................................................................................................. 422

MS Office Access

6/564

Vincent ISOZ
19.27 Identification .......................................................................................................................... 425
19.28 Utilisation de la scurit avec VBA ....................................................................................... 429
19.29 Automation ............................................................................................................................ 432
19.29.1 Ouvrir MS Excel et y faire des tratements.................................................................... 432
19.30 D.A.O. et ADO (avec MS Word ou MS Excel)..................................................................... 433
19.30.1 D.A.O............................................................................................................................. 433
19.30.1.1
Mthodes de lecture et criture de tables et requtes en DAO ..........................433
19.30.1.2
Mise jour de tables DAO ................................................................................436
19.30.1.3
Recherche VBA DAO .......................................................................................437
19.30.1.4
Excution requte d'action VBA DAO ..............................................................438
19.30.2 A.D.O............................................................................................................................. 439
19.30.2.1
MS Excel - lecture ADO ...................................................................................441
19.30.2.2
Curseurs adLockReadOnly, adLockPessimistic, adLockOptimistic,
adLockBatchOptimistic ...........................................................................................................441
19.30.2.3
MS Excel - Recherche ADO .............................................................................443
19.30.2.4
MS Excel - criture ADO .................................................................................443
19.30.2.5
MS Word - Recherche ADO .............................................................................444
19.31 DLookup syntaxe ................................................................................................................... 445
19.32 tats ....................................................................................................................................... 446
19.33 Requtes ................................................................................................................................. 447
19.33.1 Lecture du contenu d'une Query DAO .......................................................................... 448
19.33.2 ReQuery ......................................................................................................................... 448
19.34 Choix multiple ....................................................................................................................... 449
19.35 Calendrier .............................................................................................................................. 450
19.36 Connexion .............................................................................................................................. 452
19.37 Nouveauts VBA Access 2007-2010..................................................................................... 453
19.37.1 Connecteur ADODB...................................................................................................... 453
19.37.2 Export flat-file (schema.ini)........................................................................................... 454
19.37.3 Mode Hors-Ligne/En-Ligne SharePoint ........................................................................ 454

20 Confusions courantes ........................................................................................................ 455


20.1 Masques VS Valide Si, VBA & Null interdit .......................................................................... 455
20.2 Valide Si VS VBA & Null interdit .......................................................................................... 456
20.3 Null interdit VS VBA .............................................................................................................. 457
20.4 Intgrit VS Limit la liste & VBA ...................................................................................... 457
20.5 Cls primaires combines VS Macro Requery & VBA ........................................................... 458
20.6 tat VS Formulaire A4 ............................................................................................................ 458
20.7 Scurit MDW VS Scurit VBA ........................................................................................... 458

21 VBScript ............................................................................................................................ 460


22 XML XSL ........................................................................................................................ 461
22.1 Import XML............................................................................................................................. 464

23 Reverse Engineering (rtro-conception) ........................................................................... 468


24 A.S.P. et MDB ................................................................................................................... 471
24.1 Affichage de donnes............................................................................................................... 473
24.2 Ajout de donnes ..................................................................................................................... 474
24.3 Mise jour d'enregistrements .................................................................................................. 475

25 P.H.P. et MDB................................................................................................................... 479


26 MS Infopath ....................................................................................................................... 482
26.1 Ajout de donnes ..................................................................................................................... 482
26.2 Echange de donnes ................................................................................................................. 488

27 MS SQL Server .................................................................................................................. 499


27.1 Reverse engineering vers SQL server ...................................................................................... 499
27.2 Connexion SQL server .......................................................................................................... 506

28 AS/400 ............................................................................................................................... 510


29 Oracle Express 11.2g ........................................................................................................ 514

MS Office Access

7/564

Vincent ISOZ
30 MySQL ............................................................................................................................... 522
31 PocketPC ........................................................................................................................... 527
32 Business Objects ................................................................................................................ 532
33 Crystal Reports .................................................................................................................. 538
34 Runtime.............................................................................................................................. 540
34.1 Activer le clic droit dans le runtime ......................................................................................... 541

35 Optimisation de bases de donnes .................................................................................... 544


35.1 Systme FAT (File Allocation System) ................................................................................... 545
35.2 Systme ISAM (Indexed Sequential Access Method) ............................................................. 545
35.3 Arbres ...................................................................................................................................... 547
35.3.1 Arbre B ............................................................................................................................ 548
35.3.2 Arbre B+ .......................................................................................................................... 550
35.3.3 Arbre-R ............................................................................................................................ 552

36 Limites MS Office Access .................................................................................................. 553


36.1 Limites MS Access 2000+2002+2007+2010 .......................................................................... 553

37 Nouveauts MS Office Access ........................................................................................... 558


37.1 Propositions de nouveauts ultrieures .................................................................................... 560

38 Raccourcis claviers ........................................................................................................... 561

MS Office Access

8/564

Vincent ISOZ

TABLE DES FIGURES


Figure 1 Modle Logique de Donnes (MLD) dans MS Visio ................................................ 29
Figure 2 Accs BDD distance (ADP) .................................................................................... 39
Figure 3 Schma (simple) de la BDD ...................................................................................... 95
Figure 4 Exemple de BDD (taille standard) ............................................................................. 98
Figure 5 Requte d'union ....................................................................................................... 158
Figure 6 Calendrier Access .................................................................................................... 191
Figure 7 Tableau crois dynamique ....................................................................................... 197
Figure 8 Schma SQL Server ................................................................................................. 505

TABLE DES TABLEAUX


Tableau 1 Type de bases de donnes ....................................................................................... 18
Tableau 2 Lgendes Modlisation BDD .................................................................................. 36
Tableau 3 Codes pour masque de saisie ................................................................................... 56
Tableau 4 Codes de masque de saisie types ............................................................................. 57
Tableau 5 Raccourcis clavier dmarrage ............................................................................... 281
Tableau 6 Stratgies de dploiement ...................................................................................... 328
Tableau 7 Autorisations d'accs une base ........................................................................... 353
Tableau 8 Type de donnes VBA .......................................................................................... 377
Tableau 9 Objets VBA ........................................................................................................... 383
Tableau 10 Tableau ASCII Standard ..................................................................................... 384
Tableau 11 Tableau ASCII tendu ......................................................................................... 384
Tableau 12 Objets MS Access ............................................................................................... 384
Tableau 13 Objets MS Access en mode ouverture ................................................................ 385

MS Office Access

9/564

Vincent ISOZ

1 Liens internet
Voici une liste non exhaustive de quelques excellents liens concernant MS Access!
visiter absolument !!!
http://ww.testoffice.com (testez vos connaissances)
http://msdn.microsoft.com (page des dveloppeurs)
http://msdn.microsoft.com/fr-fr/library/bb726434%28v=office.12%29.aspx (lien direct VBA)
http://communities.microsoft.com (newsgroups)
http://mypage.bluewin.ch/w.stucki/astuces.htm (page perso)
http://ww.info-3000.com/access/supportdecours/index.htm (page perso)
http://access.seneque.free.fr (page perso)
http://ww.self-access.com/access (page perso)
http://memoaccess.free.fr (page perso)
http://cerig.efpg.inpg.fr/tutoriel/bases-de-donnees/sommaire.htm (page universitaire)
http://ww.wrox.com (livres MS Access en anglais)
http://ww.developpez.com (forum)
http://ww.microsoft.fr (pour les mises jour et plug-ins)
http://w.mvps.org/accessfr/ (page des MVP)
http://homepage.bluewin.ch/wstucki/astuces.htm (plein d'astuces VBA!)
http://www.mvps.org/access/general/gen0012.htm (Leszynski/Reddick naming convention)
http://www.techonthenet.com/access/functions/index.php (liste de fonctions Access avec
exemples)
http://www.bandwood.com/gbs.htm (plug-in permettant de crer rapidement des Gantt sous
Microsoft Access: Gantt Chart Builder System)
http://www.iheartmacros.com (site officiel du VBA de Microsoft Office)

MS Office Access

10/564

Vincent ISOZ

1. propos du rdacteur
Nom Prnom: ISOZ Vincent
Domicili ce jour Lausanne (Suisse)
Formation: Ingnieur Physicien HES (B.Sc.)
quivalence Internationale: Bachelor of Science
Anne de naissance: 1978
Actuellement, je suis consultant trilingue (franais, anglais et allemand) en mathmatiques
appliques dans le tutorat d'analystes quantitatifs (niveau Bac+5 Bac+7) et auteur de
plusieurs livres lectroniques dans les domaines suivants:
- matrise statistique des processus/procds (mthodes paramtriques et non paramtriques)
- modlisation prvisionnelle/dcisionnelle avance (arbres de dcisions, chanes de Markov)
- recherche oprationnelle (simplexe, algorithmes gntiques, algorithme GRG)
- data mining (rseaux de neurones, ACP, AFC, rgressions, scoring, clustering, etc.)
- modlisation du risque en gestion de projets et finance d'entreprise (monte-carlo, etc.)
- gestion de projets (modles et best practices thoriques EFQM+Six Sigma, MS Project)
- ISO 9001:2008, 5807:1985, 10015:1999, 31000+31010:2009, 8258:1991, 10017:2003, etc.
- Adobe Photoshop et Illustrator
- 12 applications de la suite Microsoft Office System (Project, Visio, SharePoint, Access, etc.)
ce jour interventions dans plus de ~200 entreprises dont 10 du Fortune 500 selon listing
2009 et 3 universits et coles d'ingnieurs suisses dans des cours de modlisation de bases de
donnes et simulations stochastiques du risque. Formation de plusieurs dirigeants de
multinationales en one to one.
Accessoirement j'interviens pour des formations sur des logiciels comme MS Project,
MS Visio, MS Access et une vingtaine d'autres dont je dlgue l'organisation des entreprises
spcialises dans la formation continue en bureautique (niveau licence et en-dessous).

MS Office Access

11/564

Vincent ISOZ

2 Introduction
"Je gre ma base de donnes sur Excel"
"Je travaille sur une base de donnes Excel"
Il est encore frquent d'entendre cette phrase, un non-sens puisque MS Office Excel n'est pas
un systme de gestion de base de donnes mais un tableur!
Cette confusion trouve son origine en partie dans le fait que les interfaces des deux logiciels
sont similaires, lorsque les donnes sont prsentes en tableau. Mais la ressemblance s'arrte
l! Le tableau se caractrise par sa souplesse et sa rapidit de mise en oeuvre, alors que le
systme de gestion de bases de donnes permet avant tout d'assurer la cohrence d'une grande
quantit d'informations, indpendamment de leur prsentation: tables, relations, intgrit
rfrentielle sont autant de puissants outils spcifiques aux bases de donnes permettant
d'assurer un contrle permanent de la cohrence des informations qu'elles renferment.
Une base de donnes relationnelle (S.G.B.D.R.) a plusieurs avantages compars une base de
donnes simple aussi appele "flat file". Elle utilise beaucoup moins d'espace mmoire, car
elle rduit au minimum les redondances ou les rptitions des donnes (si elle a t bien
conue).
Remarques:
R1. En prvision de l'volution technologique des bases de donnes, il est habituellement
prfrable de mettre les tables dans un fichier MS Access prdfini "indpendant" d'un autre
fichier o se trouveront les formulaires, requtes et tats (voir page 328).
R2. Contrairement aux exercices donns dans ce support, les noms des champs de donnes
doivent tre des mots uniques (sans espaces), en minuscules, sans accents et autres symboles
spciaux (c'est ce qui est fait pendant le cours).
R3. Pour plus d'informations sur les conventions de nommage voir la page 36.
De plus, pendant le cours, nous n'allons pas ncessairement suivre l'ordre et la structure des
exercices tels que prsents dans ce support (il faut savoir tre flexible!).
Par ailleurs, en toute rigueur nous ne devrions pas parler de "base de donnes MS Access"
mais de "base de donnes JET", JET (Joint Engine Technology) tant le moteur de base de
donnes de MS Access 2003 et antrieur qui est lui-mme un outil RAD (Rapid Application
Development).
Remarque: MS Access 2007 et ultrieur utilisent un nouveau moteur appel "Access Database
Engine"
Enfin, la stabilit des fichiers MS Access (fichiers *.mdb) n'est pas garantie. Il arrive qu'un
fichier soit endommag et, malgr les outils de rparation, ne puisse tre rcupr. Il est donc
impratif de soigner tout particulirement sa politique de sauvegarde.
Pour finir, je pense sincrement que les SGBDR clients sont des outils morts et dsuets face
aux bases de donnes internet qui permettent une beaucoup plus grande flexibilit, une

MS Office Access

12/564

Vincent ISOZ
interface plus conviviale, des possibilits grandioses, un environnement multi-utilisateur rel
et j'en passe... Donc, rflchissez srieusement avant de faire une base de donnes avec des
techniques qui ont 30 d'ge (est-ce que vous rouleriez avec une voiture dont la carrosserie est
neuve, mais dont le moteur a 30 ans... probablement pas!).

2.1 Environnement
Certes, MS Access est un L4G1 cr en 1992. Mais ce n'est pas le seul logiciel client de ce
type sur le march et pas le plus vieux! Je souhaiterais donc indiquer les grands classiques
dans l'ordre de popularit afin d'tre neutre:

Microsoft Office Access Payant (www.microsoft.com)

FileMaker Payant (www.filemaker.com)

Open Office Base Gratuit (http://fr.openoffice.org)

un L4G (sigle de langage/logiciel de quatrime gnration) est un terme utilis pour dsigner un type de
logiciel qui comporte un langage de programmation combin avec un systme de gestion de base de donnes.

MS Office Access

13/564

Vincent ISOZ
4D Payant (www.4d.com)
et nous pourrions encore citer SQL Server Express, ORACLE Express et MySQL.

2.2 Protocole
Lorsque l'on cre une base MS Access, on procde toujours de la faon suivante (les temps cidessous sont donns relativement une qualit professionnelle assure - ces temps ne sont pas
valables pour des amateurs o les facteurs peuvent aller de 0.1 100:
1. Analyse des besoins (2 jours 2 semaines)
2. Choix d'une stratgie de nommage2 (1 2 heures)
3. Modlisation selon les formes normales (2 jours 2 semaines)
4. Dfinir un *.mdw selon le protocole donn dans le chapitre de gestion de la scurit
voir page 332)
5. Cration des tables (1 jour 2 semaines)
a. Dfinition des proprits des tables3 (types de donnes, formats, contraintes,
lgendes, index).
b. Cration des liaisons (aprs la cration des listes de choix !!!) entre les tables
(un un, un plusieurs, intgrit)
6. Cration des requtes (simple, ajout, suppression, table) (1 2 semaines)
7. Cration et design des formulaires (simples, imbriqus ne pas oublier les infobulles!)
(1 2 semaine)
8. Cration et design des tats (1 semaine)
9. Sparation des tables dans un fichier indpendant: stratgie dorsale/frontale (1 jour)
10. Analyse/Optimisation de la base (1 jour)
11. Dfinir la gestion des utilisateurs (1 3 jours)
12. Compression de la base (1 5 minutes)
13. "Beta Testing" de la base (plusieurs jours) et ensuite validation (1 plusieurs
semaines)
14. Crypter la base (*.mde/*.accde) et la dployer en runtime

Ne pas prendre comme exemple ce support de cours qui ne respecte pas 100% la norme pour faciliter la
comprhension du lecteur
3

Ne pas oublier de mettre une cl primaire sur des champs AutoNum sur chaque table mme si pas ncessaire
dans un premier temps sinon problmes en perspective lors de migrations !!!

MS Office Access

14/564

Vincent ISOZ
Remarques:
R1. Dans une dmarche rigoureuse, aucune donne ne devrait tre saisie dans les tables tant
que la base n'est pas totalement termine.
R2. Commentez vos tables, vos champs etc et il vaut mieux en mettre trop que pas assez !!!
R3. Il est possible que dans certains cas l'ensemble de la base doive tre faite en
programmation V.B.A cause de contraintes ou complications trop leves.

2.3 MS Excel (tableur) VS MS Access (SGBDR)


L'exprience nous montre que plus de 95% des utilisateurs de la suite MS Office utilisent
MS Excel tort pour la gestion de listes et consolidation de donnes. Ce qui est incroyable
c'est que ces utilisateurs se rendent pourtant bien compte que ce logiciel n'est pas fait pour la
gestion de donnes tant donn les difficults qu'ils rencontrent et la perte de temps que cela
engendre!
Le problme vient au fait, d'un manque de recul et de formation de ses utilisateurs car
rappelons-le, MS Excel est un TABLEUR (graphiques et calculs) et MS Access un systme
gestion de BASE DE DONNES RELATIONNELLES (cela veut bien dire ce que cela veut
dire !!).
Certes, il est possible d'argumenter le fait que MS Access est un logiciel mtier pour
spcialistes (informaticiens) et que contrairement MS Excel qui est tudi ds le gymnase
(collge) dans les coles publiques, MS Access n'est lui souvent seulement enseign qu'en
premier ou deuxime cycle universitaire dans les branches d'conomie.
Cependant, toute entreprise doit se poser les questions suivantes:
1. Est-ce normal que les employs perdent des centaines d'heures par anne dans
MS Excel faire ce qui peut tre fait dans MS Access en 10 minutes (il est aberrant de
faire de la consolidation, des TCD ou travailler plusieurs dans un mme fichier dans
MS Excel ! On voit trs bien que cela n'est pas fait pour !)
2. Sachant pertinemment que tout fichier MS Excel volumineux finit toujours un jour ou
l'autre par se changer en une base MS Access, n'est-il pas plus avantageux de
directement commencer par celle-ci et payer une formation d'une dizaine de jours
ses employs plutt que de perdre du temps et de l'argent
3. Est-ce vraiment optimal que chaque employ fasse ses propres fichiers MS Excel, ou
MS Access alors que dans une bonne entreprise, la majorit des donnes devraient tre
centralises dans une unique base ?
4. Est-ce vraiment optimal que chaque employ enregistre ses documents sur son espace
disque n'importe comment (alors qu'aujourd'hui des technologies comme
MS SharePoint Portal Server permettent de faire de la gestion lectronique de
documents G.E.D. sur une base de donnes MS SQL Server)
Ces observations proviennent de nos expriences dans plus de 400 PMI/PME et il nous parat
clair qu'il y a des sommes d'argent astronomiques perdues chaque anne dans le suivi
d'informations non organises et par les mauvais usages de logiciels.
MS Office Access

15/564

Vincent ISOZ
Il y aurait encore beaucoup dire comme:
-

MS Excel est lent pour l'analyse de millions de lignes de donnes

MS Excel ne permet pas de faire un contrle fin de la saisie sans programmation VBA

MS Excel ne permet pas de faire des relations de un plusieurs entre tables avec la
fonction RECHERCHEV( ) ou sans passer par du VBA

MS Excel n'est pas adapt un environnement multi-utilisateurs

etc.

Heureusement, les technologies venir s'orientent toujours plus vers des systmes GDD
(gestion de donnes) ou GED (gestion lectronique de documents) supports par des bases de
donnes relationnelles (comme SharePoint).

MS Office Access

16/564

Vincent ISOZ

3 Notions de base de donnes


Ce chapitre traite des notions de fondamentales relatives aux bases de donnes et est
largement indpendant du programme de base de donnes MS Access. Nous allons expliquer
quelques concepts fondamentaux de la terminologie des bases de donnes et prsenter certains
outils et techniques de dveloppement de base de donnes.
Lors du dveloppement de processus de travail informatiss, il est frquemment ncessaire
d'enregistrer de gros volumes de donnes.
Un programme de base de donnes gre ces donnes et permet de les lire, de les modifier, de
les supprimer et d'en ajouter. La faon dont les donnes sont enregistres dpend du type de
base de donnes et du systme de base de donnes.
Dfinition:
En informatique, une base de donnes relationnelle est un stock d'informations dcomposes
et organises dans des matrices appeles "tables" lies de manire directement ou
indirectement connexes conformment au modle de donnes relationnel (MDR). Le contenu
de la base de donnes peut ainsi tre synthtis par des oprations d'algbre relationnelle telles
que l'intersection, la jointure et le produit cartsien et est bas sur des algorithmes performants
de gestion des donnes au niveau de la mmoire morte et de la mmoire vive de l'ordinateur.

3.1 Types de BDD


Il existe diffrents types de bases de donnes, les bases de donnes relationnelles tant les
plus connues:
Type de BDD
Base de donnes
hirarchiques

Base de donnes
rseau

Base de donnes
orientes objet

Base de donnes
rparties

Base de donnes
relationnelles

MS Office Access

Remarques
Il existe une hirarchie entre les enregistrements (organigrammes). Un
enregistrement subordonn appartient un enregistrement suprieur
(contrairement au modle relationnel, le type des enregistrements d'une
relation ne sont pas forcment identiques!)
Ce modle est semblable au modle relationnel. Les relations entre les
donnes sont toujours de type un plusieurs et gnrent un graphique
galement appel "rseau" ou "flocon". Les relations sont appeles des
"ensembles" (cubes OLAP).
Les bases de donnes orientes objets ne comprennent pas de donnes,
mais des objets (donnes + oprations sur les objets selon les mthodes
de Programmation Oriente Objet). Par exemple SharePoint est bas
sur une telle structure.
Les bases de donnes rparties enregistrent des donnes dans plusieurs
bases de donnes (ex. sur des ordinateurs dans diffrentes villes) et
possdent des mcanismes de regroupement et d'interrogation des
donnes rparties
Les systmes de bases de donnes relationnelles (SGBDR) constituent
le type de base de donnes le plus important. Les donnes sont
enregistres dans des tables lies par des relations. Le langage SQL a
t dfini pour l'valuation des donnes

17/564

Vincent ISOZ
Tableau 1 Type de bases de donnes

3.2 Vues d'une base de donnes


Les divers groupes de personnes qui travaillent avec une base de donnes ont, selon leur
tche, des vues diffrentes de la base de donnes. Par exemple, le chef du personnel a besoin
d'informations sur les employs, alors que l'administrateur de base de donnes s'occupe de
l'enregistrement et de la scurit des donnes. Le chef du personnel ne s'intresse pas aux
dtails du projet de base de donnes physique. Ils sont dfinis et, au besoin, mis jour par
l'administrateur de base de donnes. L'architecture de base de donnes repose sur le projet
logique, physique et visuel et l'ordre correspondant dans MS Access est souvent le suivant:
Vue interne (ou physique): La vue interne (ou "schma interne") concerne l'organisation
physique des donnes sur les disques. Les donnes peuvent tre rparties sur plusieurs
ordinateurs dans diffrents btiments et villes. Les donnes que vous affichez
ultrieurement, par exemple, sous forme de table ne doivent pas ncessairement tre
enregistres ensemble. Souvent la vue interne est associe la terminologie de modle
physique de donnes (MPD).
Vue logique: Cette vue reprsente l'ensemble des donnes avec leurs relations sans souci
d'implmentation physique ni d'utilisation. La conception de la base de donnes commence
dans la vue logique: les donnes, leur gestion et leurs relations avec d'autres informations.
Cette reprsentation peut tre sous la forme d'un modle conceptuel de donne (MCD), soit
une synoptique empirique mais comprhensible. Une fois le MCD effectu, nous passons
normalement un modle logique de donnes (MLD), soit un synoptique respectant des
rgles bien prcises comme Merise ou UML. Quand nous travaillons par exemple sur une
base de donnes du type relationnelle, nous parlons alors de modle logique de donnes
relationnelles (MLDR).
Vue externe (ou utilisateur): Elle reprsente la vue de l'utilisateur, qui ne travaille qu'avec
une partie des donnes. Il ne connat ni la structure interne ni la vue globale de la base de
donnes, mais uniquement les donnes qui lui sont visibles. Ces donnes peuvent tre lies
et groupes d'une autre manire que dans la vue logique.
Les utilisateurs d'une base de donnes ne doivent normalement pas connatre l'organisation
physique des donnes. La structure physique des donnes peut donc tre modifie, sans
rpercussion sur la conception de la base de donnes ou la vue de l'utilisateur. En particulier,
les applications qui utilisent la base de donnes continuent fonctionner sans problme.
Au niveau interne, vous pouvez utiliser diffrents formats de table (ex. MS Access, dBase,
MS SQL Server ou Oracle). L'utilisateur ne doit pas connatre l'origine des donnes.
La structure des donnes d'une vue logique est spcialement adapte aux besoins et aux
autorisations de l'utilisateur. Par exemple, le chef du personnel peut afficher les salaires des
employs, alors qu'un collaborateur du dpartement personnel ne peut accder qu' leurs
coordonnes.

MS Office Access

18/564

Vincent ISOZ
Projet de base de
donnes logique

Projet de base de
donnes physique

Le projet logique dcrit la structure des donnes et les liaisons entre


elles:
rassemblement des donnes (ex. dans des tables)
apparence des relations entre les donnes (ex. intgrit
rfrentielle)
ajout de la couche Business Logic: vrification de validit,
formats de saisie, etc. Cette logique est alors la disposition
de tous les utilisateurs des donnes. Elle garantit une gestion
cohrente des donnes.
Le projet physique porte sur l'enregistrement des donnes:
rpartition des donnes sur le disque
possibilits d'accs aux donnes (rseau, internet, local)
optimisation de l'enregistrement des donnes pour les
oprations de recherche frquentes
intgration de mcanismes de scurit automatiques (ex.
enregistrement de donnes en plusieurs exemplaires, en miroir
en cas de dfaillance d'un ordinateur, une autre machine peut
prendre le relais avec les mmes donnes)

3.3 Modules d'un SGBDR


Un SGBDR client ou serveur est bas sur plusieurs couches pour fonctionner. Sans aller pour
l'instant dans les dtails en voici une numration dans l'ordre du plus bas niveau de la
couche lectronique jusqu'au niveau utilisateur que le lecteur comprendra normalement une
fois lu l'ensemble du prsent livre lectronique:

Gestionnaire de fichiers (SGF)


Le gestionnaire de fichiers gre les affectations de mmoire sur disque et les
structures de donnes qui reprsentent l'information sur disque. Il contient la
description de l'organisation des fichiers (pages) de la base de donnes.

Gestionnaire de buffer
Le gestionnaire de buffer supervise les changes entre les disques et la mmoire
centrale grce une mmoire tampon.

Gestionnaire de la base de donnes


Le gestionnaire de la base de donnes sert d'interface entre les donnes au niveau
physique et les applications visuelles.

Processeur de consultation
Le processeur de consultation transcrit les requtes de consultation dans la mmoire
physique en instructions comprhensibles par le gestionnaire de la base.

Optimiseur
L'optimisateur tente de formuler la requte de l'utilisateur de faon optimale en vue
d'en acclrer l'excution partir de statistiques d'utilisation de la base de donnes.

Pr-compilateur DML
Le pr-compilateur DML convertit les instructions DML (Data Manipulation Langage
comme SQL) du programme d'application SQL en procdures et codes adquats pour
tre comprises par l'optimiseur.

MS Office Access

19/564

Vincent ISOZ

Compilateur DDL
Le compilateur DDL convertit les instructions DDL (Data Definition Language
comme SQL aussi) en un jeu de tableaux (pages) stocks dans un dictionnaire de
donnes.

Gestionnaire d'accs et d'intgrit


Le gestionnaire d'accs et d'intgrit conserve l'intgrit des donnes et gre les
habilitations des utilisateurs (autorisations d'accs).

Contrleur multitche
Le contrleur multitche traite les conflits ventuels entre traitements simultans.

Module de rcupration
Le module de rcupration assure la cohrence de la base mme la suite d'un
"crash".

Fichiers de donnes
Les fichiers de donnes contiennent la description de la base de donnes.

Fichiers systmes
Le fichier systmes conservent les donnes relatives la structure de la base, les
autorisations d'accs et le dictionnaire des donnes.

Index
Les index assurent la rapidit d'accs aux donnes de la base au niveau des requtes
(SQL).

Statistiques d'utilisation de la base


Les statistiques d'utilisation de la base sont exploites par le module optimiseur.

3.4 Mthodes de cration de BDD


Pour la gestion de donnes, vous avez besoin d'un logiciel appel "systme de gestion de base
de donnes" (SGBD). Il est principalement charg de traiter les requtes des utilisateurs et de
renvoyer les donnes dsires. Un SGBD utilise les trois vues d'une base de donnes. Par
exemple, si un utilisateur tente de demander des donnes sur un client, le SGBD peut excuter
les oprations suivantes:

La requte est convertie en procdure interne afin de prparer l'enregistrement dsir

La vue utilisateur est convertie en vue logique et les structures de donnes ncessaires
sont recherches.

L'emplacement d'enregistrement physique des donnes est dfini.

L'accs aux donnes s'effectue avec des oprations du systme d'exploitation

Les donnes sont transmises l'utilisateur

Le SGBD est donc l'origine de plusieurs transformations des vues. En outre, il peut tenir
compte des autorisations de l'utilisateur, noter les modifications des donnes, effectuer des

MS Office Access

20/564

Vincent ISOZ
vrifications lors de la saisie de donnes ou les prendre en considration lors de la suppression
de donnes et fonctionner en mode multiutilisateurs.
La cration d'un projet de base de donnes n'est gnralement pas une mince affaire comme
nous l'avons vu dans notre protocole au dbut de ce support. Vous devez rassembler toutes les
informations grer dans la base de donnes, raliser diffrentes vues utilisateur, rpartir
ventuellement les donnes sur plusieurs ordinateurs, etc. Vous devez choisir un modle de
donnes selon le systme de base de donnes utilis et le type de donnes, ainsi qu'une base
de donnes prenant ce modle en charge.
Si vous optez pour le modle de donnes relationnel, les donnes sont enregistres dans des
tables. Vous pouvez dfinir des relations et des rgles d'intgrit entre les tables.
Pour viter la rptition de donnes identiques dans diffrentes tables et une augmentation
excessive du volume des informations enregistres (erreurs nombreuses dans un
enregistrement), vous pouvez soumettre les donnes un processus de normalisation.
Il est galement utile de possder une vue d'ensemble des donnes sous la forme d'un
graphique. Pour ce faire, vous pouvez utiliser le modle E.R. (entit-relation).
Modle de donnes relationnel: reprsentations des donnes dans des tables pouvant tre
lies
Rgles d'intgrit: Rgles directement dfinies dans les tables et vrifiant l'intgrit des
donnes en cas de modification, de suppression et d'ajout.
Processus de normalisation: mthode d'enregistrement sans redondance des donnes (pas
d'enregistrement multiple) permettant d'viter les erreurs lors de la suppression, de la
modification et de l'insertion de donnes.
Modle entit-relation/association: reprsentation graphique de toutes les informations
importantes pour les tables dfinies et des relations entre elles.
Pour identifier de manire univoque tous les enregistrements d'une table, vous pouvez, par
exemple, ajouter cette dernire un attribut supplmentaire qui numrote les enregistrements.
Il est alors possible distinguer les entres de la table grce cet attribut. Dans ce cas, l'attribut
est la "cl primaire" de la table. Chaque table ne peut possder qu'une cl primaire qui permet
d'identifier de manire unique chaque enregistrement et qui n'est pas susceptible de changer
au cours du temps.
Dans l'exemple ci-dessous, l'ensemble d'entits Collaborateurs possde la cl primaire
N Personnel:
COLLABORATEUR
S
N Personnel

Nom

Adresse

Remarque: comme nous le verrons dans les dtails plus loin, la cl primaire d'une table peut
tre un attribut ou une association d'attribut dont la valeur permet d'identifier de manire
unique les enregistrements de cette table.

MS Office Access

21/564

Vincent ISOZ
Une "cl externe" est un champ d'une table qui cre une liaison avec un champ de cl primaire
d'une autre table. Par exemple, tous les enregistrements d'une table Commandes contiennent
le numro du client qui a pass commande. Ce numro identifie de manire univoque un
client dans la table des clients. Le numro de client dans la table des commandes constitue
donc une cl externe ("cl trangre" d'une autre table).
Il arrive frquemment aussi que les enregistrements d'une table doivent tre organiss dans un
ordre diffrent (tris). Dans les grands volumes de donnes, cette procdure peut toutefois
prendre du temps. Pour que l'accs aux donnes soit plus rapide, vous pouvez d'autres index
que la cl primaire (nous verrons effectivement que la cl primaire cre automatiquement un
index), appels "index secondaires".
Remarque: Pour plus d'informations sur les relations voir la page 74

3.5 Modle entit-relation (MER)


Le modle de donnes relationnel a t dvelopp en 1970 par le mathmaticien E.F. Codd et
crit l'aide de la thorie des ensembles. Ce modle sert de base aux bases de donnes
relationnelles.
Pour tenir compte de toutes les informations pertinentes dans un systme de base de donnes,
il est utile de dcrire le domaine d'application et les objets ncessaires. L'outil graphique le
plus connu et le plus utilis cet gard est le "modle entit-relation" (MER) appel aussi
"modle entit-association" (MEA) qui illustre tous les lments d'un systme de base de
donnes relationnel et prsente les rapports entre eux.
Dans la terminologie des bases de donnes, une "relation" est une "table" et donc une
construction de colonnes et de lignes. Dans le domaine des bases de donnes, une relation ne
dsigne donc pas, par dfinition, une liaison.
Les donnes sont enregistres dans une table. Elle reprsente les informations grer (cidessous une table typique de MS Access):

Une table est constitue de colonnes, galement appeles "champs" ou "attributs". Les lignes
de la table contiennent des "enregistrements" ou "uplets". Tous les enregistrements d'une table
ont une structure identique.
La structure d'une table est galement appele son "schma". Les divers systmes de base de
donnes (ex. MS Access, dBase ou Paradox) disposent de diffrents formats de table, dont
MS Office Access

22/564

Vincent ISOZ
dpendent les conventions de noms des tables et des champs et les types de donnes de
champs.
Dfinitions:
D1. Une "entit" (ou "enregistrement" donc) peut tre un objet, un concept ou une
personne. Les entits se distinguent les unes des autres par leurs proprits.
D2. Un ensemble d'entits est un rassemblement d'entits avec des proprits identiques
et correspond une "table".
Remarque: lLrs de la cration d'une base de donnes rflchissez d'abord aux entits
et donc aux ensembles d'entits qu'elle doit contenir.
D3.Une "relation" est une "liaison d'entits". Les relations se distinguent les unes des
autres par leurs proprits.
Le type de relation dcrit les rapports numriques entre les diffrents lments par
exemple: combien d'enregistrements de la table "Collaborateur" ont t attribus un
enregistrement de la table "Dpartement" ? Le type de relation est gnralement dfini
par les mentions suivantes:
0 Pas d'attribution
1 Une seule attribution
n,m Plusieurs attributions
Les relations sont reprsentes par des lignes de connexion dans le modle ER: la
relation est dcrite par un symbole et la "cardinalit" est ajoute en fin de ligne.
D4. Les "proprits ou "attributs" caractrisent une entit, un ensemble d'entits, une
relation ou un ensemble de relations.
D5. Les proprits sont donnes par les "noms des champs de donnes" d'une table.
D6. Un "domaine de dfinition" indique la plage de valeurs autorises pour une proprit.
Exemple: une entreprise englobe des collaborateurs, des dpartements et des projets. Une
base de donnes relationnelle doit tre cre pour grer toutes les informations et tous les
vnements. Dans l'illustration suivante, tous les lments de la base de donnes et leurs
relations sont rassembls:

Tous les rsultats et informations peuvent tre rpartis en trois ensembles d'entits:
Dpartement, Collaborateur et Projets.

MS Office Access

23/564

Vincent ISOZ
Deux relations sont distingues entre les ensembles d'entits: un dpartement se compose
de collaborateurs, qui travaillent sur des projets.
tant donn qu'un dpartement comprend plusieurs collaborateurs, mais qu'un
collaborateur n'appartient qu' un dpartement, il s'agit d'une relation un plusieurs. Dans
ce cas, il est ncessaire d'insrer le champ de cl (primaire) de la table primaire
(Dpartement) dans la cl (trangre) de la table trangre (Collaborateurs) N
Dpartement.
Plusieurs collaborateurs peuvent travailler sur plusieurs projets. Il s'agit d'une relation
donc d'une relations plusieurs plusieurs.
Les ensembles d'entits Dpartement, Collaborateurs et Projets possdent certaines
proprits. Par exemple, l'ensemble d'entits Projets possde les proprits N Projet et
Description. La proprit N Projet identifie exactement une entit ou un enregistrement
et est donc choisie comme cl primaire.
Une relation plusieurs plusieurs ncessite un autre ensemble d'entits, appel "table de
transition" car l'association entre les collaborateurs et les projets n'est pas identifiable. Le
nouvel ensemble d'entits comprend au moins les champs de cl des deux ensembles
d'entits qui composent la relation plusieurs--plusieurs.
Pour obtenir une description compacte des entits, attributs et champs de cl, vous pouvez
utiliser la forme textuelle suivante. Elle commence par le nom de l'entit (table), suivi, entre
parenthses, des attributs (champs), les champs de cl primaire tant souligns.
DEPARTEMENT (N Dpartement, Description)
COLLABORATEURS (N Personnel, Nom, Prnom, N Dpartement)
PROJETS (N Projet, Description)
EVALUATION_PROJET (N Projet, N Personnel, HeuresTravail)

3.6 Normalisation
La rpartition des donnes dans des tables relationnelles peut entraner des erreurs lors de la
modification, de l'insertion et de la suppression de donnes et ainsi gnrer des redondances et
incohrences des donnes. Ces erreurs sont galement appeles "anomalies".
Par exemple, chaque collaborateur est associ avec son dpartement et ses donnes de projet
selon la table ci-dessous:

Toutes les donnes sont enregistres dans une seule table. Les problmes suivants surviennent
lors de la modification, de l'insertion et de la suppression de donnes:

MS Office Access

24/564

Vincent ISOZ

1. Lorsque vous insrez un nouveau collaborateur qui n'a travaill sur aucun projet, des
champs de donnes sont laisss vides, ce qui gaspille de l'espace disque. Des
problmes de traitement peuvent galement survenir en cas de requtes, ex. lorsqu'un
collaborateur travaille sur plusieurs projets en mme temps. Ils figurent tous dans un
champ N Projet et doivent faire l'objet d'une opration supplmentaire. Une requte
ne peut porter que sur tout le contenu d'un champ ou une partie de celui-ci.
2. Lorsque vous supprimez un collaborateur, vous devez galement supprimer les
donnes du projet correspondantes. Des donnes sont alors perdues.
3. Lorsque la dnomination d'un projet a t modifie, par exemple, Enqute des clients
est remplac par Etude de march, tous les enregistrements contenant cette valeur
doivent tre modifis (si plusieurs collaborateur y travaillent bien sr !)
Le processus de normalisation permet notamment de rsoudre les problmes susmentionns.
Pour ce faire, les donnes des tables doivent respecter certaines rgles. Le rsultat de
l'application de ces rgles est appel "forme normale" des tables.
Lors du processus de normalisation, les donnes sont rparties sur plusieurs tables. Les
diffrentes tapes du processus de normalisation sont dsignes sous le nom de formes
normales: premire, deuxime et troisime formes normales.
La structure des donnes de l'exemple ci-dessus est appele "non normalise", car plusieurs
informations sont enregistres dans certains champs d'un enregistrement. Par exemple, le
collaborateur Demus travaille sur les projets 1, 2 et 3.

3.6.1 Premire forme normale


Supprimez toutes les entres multiples dans un champ. Chaque champ de donnes d'un
enregistrement doit contenir une valeur maximum.
La premire forme normale spcifie donc uniquement que chaque entre d'un champ doit tre
indivisible (une valeur atomique soit: non compose) et en plus impose qu'il y ait au moins
une cl primaire.
Cela ne veut pas dire qu'une remarque sur un projet ne peut contenir qu'un mot. Si le champ
contient toutefois plusieurs remarques avec des indications de date, l'entre n'est plus
automatique et peut tre rpartie en plusieurs champs de dates, avec textes de remarques
correspondants.

MS Office Access

25/564

Vincent ISOZ

Mais cette premire forme normale a encore les problmes suivants:


1. La table comprend des redondances. Des donnes de collaborateurs et des noms de
dpartements et de projets apparaissent plusieurs fois.
2. La table contient les domaines indpendants suivants: collaborateurs, dpartements,
projets.
3. Les donnes ne peuvent pas tre identifies de manire univoque. Par exemple, le nom
du dpartement ne peut tre renvoy qu' l'aide d'un numro personnel.

3.6.2 Deuxime forme normale


La deuxime forme normale exige que chaque champ non-cl (trangre) contenant des
doublons dpende d'une cl (primaire) simple ou combine.
Les donnes de la table initiale sont dsormais rparties dans quatre tables:
COLLABORATEURS (N Personnel, N Dpartement, Nom, Prnom)
DEPARTEMENT (N Dpartement, Nom)
EVALUATION_PROJET (N Projet, N Personnel, Heures, Description)

Remarque: La cl trangre N Personnel de la table EVALUATION_PROJET n'a aucune


raison valable d'tre en tant que cl primaire dans l'exemple ci-dessus (au fait on s'en sert plus
tard en cours de formation).

3.6.3 Troisime forme normale


Une table rpond la troisime forme normale lorsque tous les champs de donnes ne
dpendent que de cls primaires (ce qui a t fait dans la deuxime forme dans l'exemple
prcdent) par l'intermdiaire de cls trangres.

MS Office Access

26/564

Vincent ISOZ
En d'autres termes, il faut aussi que les champs interdpendants (dpendances transitives)
soient reports dans des tables externes l'aide d'une cl primaire et trangre.
Par exemple le champ Description une dpendance transitive avec les valuations du projet.
Nous pouvons donc le sortir de la table d'valuation (meilleures performances d'affichages
dans certaines situations comme les discussions pour les forums sur le web par exemple!):
COLLABORATEURS (N Personnel, N Dpartement, Nom, Prnom)
DEPARTEMENT (N Dpartement, Nom)
PROJETS (N Projet, Description)
EVALUATION_PROJET (N Projet, N Personnel, Heures, Description)

Cette normalisation peut amener dsimbriquer des entits caches.

3.6.4 Exercice
Les donnes d'un magasin doivent tre enregistres dans une base de donnes. L'illustration
suivante montre les donnes essentielles dans une table non normalise. Esquissez un modle
ER pour les donnes indiques:

1. Normalisez le projet de base de donnes (jusqu' la troisime forme normale).

MS Office Access

27/564

Vincent ISOZ
2. Crez une base de donnes MS Access avec votre formateur soit directement dans le
logiciel lui-mme avec les outils disposition soit en utilisant SQL ou MS Visio
(votre formateur vous aidera)
3. Quelles mesures pouvez-vous prendre pour garantir l'intgrit des donnes ?
4. Crez les relations ncessaires. Quelles relations doivent tre cres avec l'intgrit
rfrentielle et les mise jour et suppression en cascade?
Remarque: N'hsitez pas faire usage dans MS Access de l'outil Analyse (dans le menu
Outils) qui va vous proposer de normaliser vos tables (voir les dtails sur cet outil la
page 313)

3.7 Modlisation de BDD avec MS VISIO


Quand nous construisons directement les tables d'une base de donnes dans un logiciel de
gestion des bases de donnes, nous sommes exposs deux difficults:
1. Nous ne savons pas toujours dans quelle table placer certaines colonnes (par exemple
l'adresse de livraison se met dans la table des clients ou dans la table des
commandes?).
2. Nous avons du mal prvoir les tables de jonction intermdiaires (par exemple une
table des articles vendus qui est indispensable entre les tables des clients et la table des
articles)
Il est donc ncessaire de recourir une tape prliminaire de conception et il s'agit d'une
partie importante du travail du dveloppeur est la modlisation de la base de donnes (sinon le
cot de correction est trs important!). Pour exercer cela correctement (sans passer par une
feuille A0 colle sur un mur et gribouille de part en part), il existe des logiciels spciaux tels
que Merise ou MS Visio (pour ne citer que ceux que l'auteur connat relativement bien).
Remarque: Il existe des cours de modlisation sur 2 jours, mais le sujet est au fait beaucoup
plus tendu et fait l'objet d'un mtier lui seul. Le spcialiste dans le domaine est souvent
informaticien thoricien ou mathmaticien avec un excellent bagage d'algbre relationnelle.
Nous allons nous restreindre dans le cadre de ce cours l'utilisation de MS Visio 2000. La
dmarche a chang dans la 2002 et la 2003 et le forward-engineering (le fait d'exporter le
schma d'une base de donnes existante dans MS Visio) n'est disponible depuis la version
2007 que dans la version Vision Enterprise Architect (il y a quatre versions de
Microsoft Office Visio ma connaissance). Par contre, le reverse-engineering (le fait
d'importer le schma d'une base de donnes existante dans MS Visio) est toujours disponible
dans le version pro et premium.
L'utilisation en tant trs simple, le formateur va vous orienter sur la manire de procder
pour crer par exemple les schmas de base de donnes auxquels doivent arriver les
participants un cours MS Access aprs 3 4 jours de cours. Le schma de notre base de
donnes pour l'ensemble de la formation ressemblera au tout dbut au modle logique de
donnes (MLD) prsent ci-dessous.

MS Office Access

28/564

Vincent ISOZ

Figure 1 Modle Logique de Donnes (MLD) dans MS Visio


Sur la gauche de l'cran, se trouvent les deux formes "Entity" et "Relations" ncessaires la
modlisation des donnes de la page suivante:

MS Office Access

29/564

Vincent ISOZ

Lgende: PK = Primary Key, FK = Foreign Key, I = Index


Lors de l'insertion d'une table, aprs un double clic sur cette dernire (nous avons pris pour
exemple ci-dessous la table "tbl_sorties") apparat la fentre pop-up suivante:

Et voici les proprits des autres registres (voir page suivante):

MS Office Access

30/564

Vincent ISOZ

Concernant le typage des colonnes ci-dessus, celui-ci a nettement chang dans les ultrieures.
Il a t standardis pour proposer une compatibilit vers diffrentes normes SQL, raison pour
laquelle on trouvera par exemple les typages LONGTEXT et LONGCHAR (ce dernier tant
privilgier pour MS Access) qui pour un forward engineering vers MS Access se retrouveront
de toute faon convertis en type Mmo.

Pour le registre "Trigger" le lecteur se rfrera une formation SQL Server, DBL2, Oracle.
Pour le registre "Check" l'auteur de ce document donne sa langue au chat Les deux autres
registres "Entended" et "Notes" ne sont pas absolument indispensables, nous en ferons donc
pas mention.

MS Office Access

31/564

Vincent ISOZ
Concernant les relations, il suffit de "glisser" une forme reprsentative de cette dernire entre
les deux tables et de l'y accrocher (il faut que les tables deviennent alors rouge).

Pour relier la cl primaire (PK) idArticles de la table tblArticles la cl trangre


strNbArticles (oui la dnomination des champs est mauvaisesur les captures d'cran) de
tblEntrees (un article peut tre entr plusieurs fois) il suffit par un double clic sur la relation
pour faire apparatre la bote suivante:

Avec la touche Ctrl du clavier, slectionnez dans la liste de droite et de gauche, les champs
lier et cliquez sur le bouton Associate.
Ensuite, vous pouvez dans Misceallaneous:

Nous voyons que dans MS Visio, les options proposes vont plus loin que celles proposes
par MS Access seul.
MS Office Access

32/564

Vincent ISOZ
En ce qui concerne l'intgrit rfrentielle:

Pour exporter le schma dans une base, il faut d'abord avoir cr le support logique de cette
dernire. Dans MS Access cela consiste, par exemple, crer un fichier *.mdb vide (exemple:
visio.mdb).
Enfin, nous remarquons qu'il est dsagrable de ne pas avoir la cardinalit des relations, pour
cela heureusement dans le menu Database/Options nous avons une bote de dialogue
permettant de les afficher (nous conseillons vivement de tout cocher):

Ds lors nous avons:

MS Office Access

33/564

Vincent ISOZ

Avec MS Visio, allez dans le menu Database/Generate (avec MS Visio 2003 et antrieur
puisque depuis 2007 il faut Visual Studio avec Visio Enterprise Architect...). Apparat alors la
fentre suivante (si aucune erreur n'est dtecte par MS Visio dans votre modlisation):

Cliquez sur Next aprs avoir activ les mmes options que dans la figure ci-dessus.

MS Office Access

34/564

Vincent ISOZ

Slectionnez MDB file already exists et cliquez sur Next autant de fois que ncessaire pour
arriver la fentre suivante:

Cliquez dans la bote ci-dessus sur OK sans saisir ni User ni Password. Allez ensuite chercher
la base cible:

Cliquez sur OK:

MS Office Access

35/564

Vincent ISOZ

Cliquez enfin sur Next et Finish. Ouvrez le fichier visio.mdb et vous y trouverez toutes les
tables et relations modlises dans MS Visio (c'est pas beau a non !!??).
Suite cette dmonstration, nous vous demandons de faire deux exercices (au cas o
MS Visio n'est pas disponible, nous vous demandons d'utiliser du papier grand format) en
groupe(s) et de prsenter ensuite votre rsultat et vos conclusions au formateur ainsi qu'aux
autres groupes.
Remarques: les notations seront les suivantes sur vos feuilles:
I = index
PK = Primary Key
FK = Foreign Key

Tableau 2 Lgendes Modlisation BDD


1 = one
CU = Cascade Update
CD = Cascade Deletion
= many
RI = Referential
LJ = Left Jointure
Integrity

LR = Right Jointure
LS = Simple Jointure

Veuillez galement respecter la nomenclature pour les objets et champs MS Access (voir page
suivante).

3.8 Nomenclature de Leszynski/Reddic


Pour le dveloppement (base de donnes et autres), il y a certaines rgles et traditions qu'il
vous faut respecter dans un premier temps pour votre confort, dans un deuxime temps pour
tre compatible avec vos collgues et enfin, dans un troisime temps, pour viter les
problmes de possibles futures migrations ou les confusions entre nom de fonctions rserves
et noms de champs (une erreur typique tant de nommer un champ Nom car il s'agit aussi
d'une fonction et c'est cette dernire qui prendra le dessus dans les rapports/tats).
Remarques:
R1. Une partie de cette nomenclature est inspire de la norme ISO 9660
R2. Il y a plusieurs manires d'crire Leszynski/Reddic par exemple on trouve parfois dans
la littrature Leszinsky/Reddick
Des exemples: www.mvps.org/access/general/gen0012.htm
Les rgles Lezsynski/Reddick pour le dveloppement de base de donnes sont les suivantes
(elles ont t galement adoptes pour d'autres langages de programmation):
MS Office Access

36/564

Vincent ISOZ
1. Majuscule au dbut de chaque mot d'une variable
2. Pas d'accents
3. Pas de caractres spciaux
4. Pas d'espaces
5. Nom des champs en anglais
6. Eviter de dpasser les 15 caractres (3+12)
7. Ne jamais commencer avec des chiffres!
Il faut aussi dbuter avec cette nomenclature les noms des objets par trois caractres en
minuscule tel qu'indiqu ci-dessous:
-

Nom des tables: tbl.

Nom des requtes: qry

Nom des vues: vue (pour les SGBDR qui en ont)

Nom des tats (rapports): rpt

Nom des formulaires: frm

Nom des index: idx

Nom des macros: mcr

Nom des modules: mod

Et les noms des champs de table par des identificateurs tels que ci-dessous:
-

Nom des champs cls primaire avec numro automatique: idNomTablePK ou


pkNomTable

Nom des champs cls trangres: tblNomTableNomChamp ou


tblNomTableNomChampFK ou encore (mais dconseill) lstNomTableNomChamp

Nom des champs texte: strNom

Nom des champs numriques entiers: intNom

Nom des champs numriques dcimaux: sngNom

Nom des champs de date: datNom

Nom des champs boolens (Oui/Non): bolNom

Nom des champs objets (Object Linked and Embedded): oleNom

MS Office Access

37/564

Vincent ISOZ
-

Nom des champs avec liens hypertextes: strNom

Nom des champs mmo: blbNom ou memNom ou strNom sont accepts

Et les noms des objets de formulaires par des identificateurs tels que ci-dessous:
-

Listes droulantes: lstNomListe

Groupe d'options: optGroupeOptions

Cases cocher: chkChoixCase

Boutons bascules: tglToggleButton

Champs: fldNomChamp

Bouttons: btnButton

Onglets: regRegistres

Lgendes: lgdLegendes

Le respect de ces rgles vous permet d'assurer une cohrence dans votre travail et une
compatibilit sre avec des systmes autres que MS Access en cas de migration de la base.
Le non-respect de ces rgles peut entraner des consquences telles qu'un norme travail
pourrait tre refaire dans la base de donnes !!!

MS Office Access

38/564

Vincent ISOZ

4 Tables
Avant de commencer travailler voici quelques informations:
1. Il existe plusieurs fichiers de base de donnes sous MS Access: *.mdb, *.adp, *.mde et
les donnes peuvent provenir de plusieurs sources compatibles gres par MS ADO
(Microsoft ActiveX Data Objects). tel que MS Excel, DB2, Exchange, SQL Server,
etc
Pendant l'ensemble de cette formation, nous allons travailler sur des fichiers *.mdb.
Les fichiers *.adp sont destins plutt des dveloppeurs (informaticiens) qui utilisent
SQL Server comme gestionnaire de bases de donnes relationnelles (SGBDR).
Cependant, si vous crez un fichier *.adp (Access Database Project), la fentre (bien
connue par les dveloppeurs) suivante apparat, qui vous demande quelle base de
donnes SQL Server vous dsirez vous connecter:

Figure 2 Accs BDD distance (ADP)

Remarques:
R1. Il existe plusieurs technologies de SGBDR (FileMaker, SQL Server, MySQL, Oracle,
AS400,)
R2. MS Access est un environnement grant ADO, SQL, VBA, XML, etc.
R3. Une fois une erreur effectue ou des enregistrements effacs, on ne peut plus revenir en
arrire!!!
MS Office Access

39/564

Vincent ISOZ
R3. La provenance des tables de donnes, dans MS Access, peut tre diverses:
1. Cas simples: base MS Excel Externe, base MS Access Externe
2. Cas plus complexes: Oracle, MySQL, DB2, SAP, ou autres
A chaque fois que vous crez un objet en utilisant un des logiciels de la suite MS Office il
faudrait dfinir les proprits de ce dernier. Microsoft Project et Visio le font
automatiquement. Ce n'est malheureusement pas le cas de MS Access. C'est pourquoi nous
allons tout de suite nous attarder cette tche. Dans le menu Fichier, slectionnez l'option des
Proprits et saisissez les informations suivantes:

La fentre d'explorateur d'objets sera votre outil principal pendant votre travail dans Access.
Vous pouvez depuis cette fentre:
Lancer l'aperu, modifier, crer, supprimer, copier, renommer, excuter, masquer et afficher
des objets.
Avant que nous attaquions la cration d'une base, il est ncessaire de dfinir les objets
disponibles dans Access (formulaires, tables, requtes, tats, macros, modules et pages)
Il arrive lorsque l'on travaille sur d'normes bases, que l'explorateur d'objets soit remplis d'un
trop grand nombre d'objets pour les visualiser d'un simple regard. On choisira alors parfois de
masquer les objets (quels qu'ils soient) dont on est certain que l'on ne modifiera probablement
jamais les proprits et le contenu.
On peut masquer un objet en cliquant dessus avec le bouton droit de la souris et en
slectionnant l'option "Proprits" et en cochant la case "Masquer".

MS Office Access

40/564

Vincent ISOZ
Pour afficher nouveau les lments masqus, il suffit d'aller dans Outils/Options l'onglet
Affichage et activer la case Objets cachs.

Les tables ont-elles quelques cases cocher en plus comme Rplicable et Suivi du nombre de
lignes mais ce n'est que pour les utilisateurs travaillant avec les options de rplication.
Si vous souhaitez utiliser cette option pour empcher certaines personnes de modifier votre
base, ne procdez pas ainsi. Nous verrons plus tard comment il est possible de protger sa
base avec un mot de passe afin que personne d'autre que vous ne puisse la modifier.

4.1 Liaison MS Excel/CSV


Nous allons tout de suite voir comment lier une feuille MS Excel de deux manires
diffrentes (cette table sera utilise bien plus loin dans le cadre du cours intermdiaire/avanc)
avant mme de crer une table par la mthode standard:
1. Importer physiquement et dfinitivement une table MS Excel:
Dans MS Access allez dans Fichier/Source de donnes externe/Importer (File/Get External
Data/Import):

MS Office Access

41/564

Vincent ISOZ
et slectionnez dans Type de fichier le type MS Excel. Slectionnez le fichier
TableNouveauxVendeurs et suivez simplement l'assistant. Observez l'icne qui reprsente la
table dans MS Access 2007 et ultrieur dans le ruban Donnes Externes/Fichier Texte:

et suivez l'assistant
2. Lier une table MS Excel de manire dynamique:
Dans MS Access allez dans Fichier/Source de donnes externe/Lier et slectionnez dans Type
de fichier le type MS Excel (remarquez que vous pouvez aussi vous connecter MS Outlook
comme une base de donnes !!!) Slectionnez le fichier TableNouveauxVendeurs.xls et
suivez simplement l'assistant. Observez l'icne qui reprsente la table.

Modifiez le fichier MS Excel et ouvrez ensuite la table lie dans MS Access pour voir si la
liaison s'effectue bien (vous pouvez ajouter/supprimer/modifier les lignes ou colonnes dans le
fichier source votre guise!). Vous verrez que MS Access ne peut pas modifier les proprits
des champs de cette table lie (donc pas de cl primaire, pas de relations, etc)
Attention, sur ce genre de tables lies, vous ne pouvez:
1. Pas crer de cls primaires et donc de liaisons (mais vous pouvez quand mme crer
des assistants liste de choix)
2. Vous ne pouvez pas appliquer de requte de suppression
3. Vous ne pouvez plus renommer les champs une fois l'import effectu
4. Vous ne pouvez pas ajouter ou modifier des champs (colonnes)
5. et autres que vous dcouvrirez par vous-mme
L'import d'un fichier CSV a une icne particulire que voici:

4.2 Cration de tables


Nous allons travailler sur une base qui permet de grer le stock des produits d'un magasin.

MS Office Access

42/564

Vincent ISOZ
Crer une nouvelle base nomme: Magasin.mdb (fichier mdb pour "Microsoft Data Base").
Dans le cas o vous tes sur une version antrieure d'Access faites apparatre les barres
d'outils de Formatage et Feuille de donnes.
1. Crez une nouvelle table en mode Feuille de donnes
2. Entrez tous les noms et donnes de champs ci-dessous dans les colonnes 1 5
3. Ajustez correctement la largeur des colonnes
4. Modifiez le type de donnes des champs (Texte, Nombre, Montaire)
5. Saisissez une description pour chaque champ et sa Lgende dans les proprits du
champ

On mettra les dtails des fournisseurs dans une autre table, o ils seront reconnus pas des
numros.
Pour crer la cl primaire de la table:
1. Faire passer la table en "mode cration"
2. Slectionner la ligne voulue comme cl primaire (strArticleNb)
3. Cliquer sur l'icne de la barre d'outils reprsentant une cl
4. Enregistrer la table sous le nom tblArticles
La puissance d'un programme de gestion de bases de donnes relationnelles comme MS
Access provient de sa capacit trouver et runir rapidement des informations stockes dans
des tables spares en utilisant des requtes, des formulaires et des tats. A cette fin, chaque
table doit inclure un champ ou un ensemble de champs qui identifie, de manire unique,
chaque enregistrement stock dans la table. Cette information est appele la "cl primaire" de
la table. Une fois que vous avez dsign une cl primaire pour une table, Microsoft Access
empchera, pour en garantir le caractre unique, que des doublons ou des valeurs "Null" ne
soit entrs dans les champs de cl primaire.
Si un de vos champs contient des valeurs uniques, comme des numros d'identification ou des
numros de pices, vous pouvez dsigner ce champ comme cl primaire. Cependant, si ce
champ contient des doublons ou des valeurs Null, Microsoft Access ne l'acceptera pas comme
cl primaire.
Vous pouvez alors excuter une requte "Trouver les doublons" pour trouver les
enregistrements contenant des doublons (nous verrons cela lors de notre tude des requtes).
MS Office Access

43/564

Vincent ISOZ
Si vous ne parvenez pas liminer facilement les doublons en ditant vos donnes, vous
pouvez ajouter un champ nomm "numroter automatiquement" (insrer une ligne en mode
cration et dfinir le type de donnes comme "Numrotation automatique") et le dfinir
comme cl primaire, soit dfinir une cl primaire combine.

4.3 Formulaire simple (auto-form)


Pour crer votre premier formulaire:
Aller dans la fentre de Base de donnes et cliquer sur le bouton Formulaires et choisir Crer
un formulaire l'aide de l'assistant. Une fois un formulaire cr, compris et personnalis un
peu avec l'aide du formateur (n'oubliez pas de dfinir la proprit "Lgende"), fermez-le sans
l'enregistrer.
Crez un formulaire instantan pour la table tblArticles (dans le menu Fentres il y a une
commande fort utile pour les vieux ordinateurs ayant une rsolution d'cran trs infrieure:
Ajuster la taille du formulaire. Il faut videmment au pralable avoir ouvert le formulaire
sur lequel on veut activer cette option):

Vrifiez les enregistrements existants, et ajoutez les enregistrements suivants:

Remarque: L'enregistrement n'est sauvegard qu'au moment o le point d'insertion est dplac
sr un autre enregistrement (sinon il y a possibilit d'ajouter un bouton pour cela mais c'est trop
tt pour en parler de manire dtaille).
Supprimez maintenant l'enregistrement n5 (il y a 3 possibilits pour cela: 1. Menu 2. Bouton
standard 3. Cration de bouton) et rinsrez-le l'identique. Lorsque vous crez un bouton,
faites bien attention ce que l'assistant de la bote outils contrles soit bien activ !

MS Office Access

44/564

Vincent ISOZ

Concernant les ordres de tabulation des champs de donnes du formulaire: vous pouvez les
dfinir (peut s'avrer parfois trs utile) en allant en mode cration (quand votre formulaire est
ouvert) et en slectionnant ensuite le menu Affichage/Ordre de tabulation
Fermez le formulaire. Enregistrez le sous le nom frmArticles.
Crez une table tblFournisseurs avec les donnes de la table ci-dessous. Les numros de
fournisseurs serviront de cl primaire numrote automatiquement

Nous "relierons" plus tard la table tblFournisseurs et tblArticles afin que lorsqu'on insre de
nouveaux articles l'aide du formulaire, on ait le choix des numros des fournisseurs (on
verra dans le cours expert comment faire en sorte que le nom du fournisseur apparaisse
automatiquement dans un champ lorsque l'on slectionne son numro).

4.4 Contrle des donnes


Comme nous l'avons vu, lorsque vous passez une table en mode cration
, il y a
plusieurs zones de champs dans lesquelles l'on peut saisir du texte ou des options dans des
menus droulants. Voyons quelques-unes des possibilits qui nous sont offertes (il y aura des
exercices l-dessus, de suite aprs la thorie):

4.4.1 Lgende
Donc dans le mode cration vous aurez pour chaque champ la zone suivante:

MS Office Access

45/564

Vincent ISOZ

Ce qui nous intresse ici en priorit (pour faire simple) c'est le fait que nous devons respecter
la nomenclature de Leszinsky/Reddick. Il est donc important pour chaque champ cr
prcdemment de changer les noms des champs de manire conforme:

et ensuite pour chacun de mettre un Caption (en franais une Lgende) qui correspondra au
nom que l'utilisateur verra dans lors de l'utilisation de la base de donnes:

MS Office Access

46/564

Vincent ISOZ

4.4.2 Types de donnes (Typages)


Les types de donnes sont accessibles dans la liste droulante de la colonne Type de donnes:

TEXTE-TEXT
0 255 caractres alphanumriques au format brut (plain text) cod sur 8 bits et utilisent str
comme prfixe d'usage.
Il est important d'optimiser au mieux la taille des champs lorsque vous travaillez sur des base
de donnes de plusieurs millions de lignes!
Mmo-Memo
Texte long sur 65'536 caractres alphanumriques que l'on peut formater que de manire
lmentaire dans les versions antrieures 2007 et de manire plus fine depuis MS Access
2007 (couleurs sur une partie du texte seul, idem pour le gras, idem pour l'italique, gestion du
surlignage, etc.) si l'on met une des proprits du champ au format RTF.
Le champ memo utilise mem ou parfois blb comme prfixe.
Numrique-Number
Type

Caractristiques

Byte (Octet ) | byt:

0 255 (1 byte)

Integer (Entier) | int:

-32'768 32'767 (2 bytes)

Long Integer (Entier Long) | int:

-2'147'483'648 2'147'483'647 (4 bytes)

Single (Rel Simple) | sng :

-3.4.1038 3.4.1037 (4 bytes)

Double (Rel Double) | dbl:

-1.79710308 1.79710308 (8 bytes)

Decimal (Dcimal) | dec:

Nombre dfini dans MS Access par une


"prcision" (nombre de chiffres au total qui
peuvent apparatre dans le nombre avant et aprs la
virugle) allant de 1 28 et par une "chelle"

MS Office Access

47/564

Vincent ISOZ
correspondant aux nombres de chiffre qui
apparatront aprs la virgule en tant que dcimales.
Par exemple un dcimal de 15 avec prcision de 8,
pourra avoir 7 chiffres avant la virgule et 8 aprs la
virgule.
Il n'est pas conseill de faire usage du type
Dcimal car lors de l'utilisation de grands nombres
les arrondis peuvent avoir des consquences trs
fcheuses!!
Date/Heure-Date/Time
Une date ou une heure (une prcision la seconde seulement). Il existe plusieurs formats de
saisie choix dans les options gnrales de ce type de champ. A remarquer que ce dernier se
comporte comme MS Office Excel si la saisie est au format JJ.MM.AAAA on peut quand
mme crire 20 mai 2001 qui se changera alors automatiquement en 20.05.2001.
Les dates vont du 01.01.100 au 31.12.9999 de 00:00:00 23:59:59 cod sur 8 bytes et
utilisant dat comme prfixe d'usage.
Attention!!! Rappelons que depuis 1988 tout les pays du monde utilisant le calendrier
Grgorian doivent respecter la norme ISO 8601. Donc nous recommandonc donc de formater
les champs en conformit:

et mme d'aller plus loin en s'assurant que les utilisateurs ne confondent jamais les mois et les
jours la saisie (par exemple 2003-11-03 sera accept ainsi que 2003-03-11 donc c'est trs
dangereux suivant le domaine d'activit) et alors de sparer la saise des dates dans 3 champs

MS Office Access

48/564

Vincent ISOZ
diffrents avec les contraintes en adquation (quitte donc les rassembler plus tard dans les
requtes)!!!!

Montaire-Currency
Il s'agit au fait simplement d'un numrique avec un formatage montaire. Cod sur 8 bytes
avec 4 chiffres aprs la virgule. Je ne recommande pas d'en faire usage pour des raisons
d'intercompatibilit avec d'autres systmes et je ne vais donc pas m'tendre plus sur le sujet
(de toute faon il est bas sur un rel simple).
Numroauto-Autonumber
Il s'agit d'un champ souvent utilis pour les cls primaires et bas simplement sur un entier
long (4 bytes). Son prfixe d'usage est pk
Oui/Non-Yes/No
Il s'agit d'un champ boolen. Il peut contenir qu'une valeur binaire correspondant Vrai/Faux
ou 1/0. Il est cod que sur 1 bit et dans MS Access le Oui vaut -1 et le Non vaut 0 Son
prfixe d'usage est bol
Objet OLE -OLE Object
L'object OLE (Object Linked And Embedded) est un type de champ qui vous permet d'insrer
ou de lier des fichiers externes dans la base. Cela peut tre utile pour les entreprises ayant
faire un suivi des clients par rapports aux documents qu'ils ont taps pour eux (bureaux
d'avocats typiquement).
Depuis MS Access 2007 il est conseill pour les documents d'utiliser plutt le champ de type
Pices jointes et qui est moins instable que le champ OLE.
Son prfixe d'usage est ole
Lien hypertexte-Hyperlink
C'est un simple champ texte acceptant jusqu' 2048 caractres qui a la proprit de
fonctionner comme un lien hypertexte. C'est--dire que si l'utilisateur clique sur l'URL il sera
envoy sur la page web spcifie. Le lien hypertexte ne fonctionne pas pour les e-mail comme
c'est le cas dans MS Office Word et Excel et pose des problmes lors de migration de bases
MS Access vers d'autres technologies.
Le champ de type lien hypertexte peut cependant tre trs utile en tant qu'alternative au
champ de type Pice Jointe (voir un peu plus bas) qui est gourmand en matire de mmoire
(puisqu'une base MS Access est limite 2GB).
Une astuce possible est alors de crer une ou plusieurs tables contenant juste un champ de cl
primaire et un champ de lien hypertexte en relation de type un plusieurs et de crer des liens
vers des documents se trouvant sur un disque rseau. Ce qui donnerait par exemple:

MS Office Access

49/564

Vincent ISOZ

Ensuite, l'utilisateur aura typiquement un formulaire (vite fait mal fait...) du type suivant:

et pour crer un lien vers un document se trouvant sur un disque rseau il suffit de fair un clic
droit une des cellules de la colonne Document:

et de slectionner Edit Hyperlink... La suite est la mme que dans MS Word/Excel/Outlook ou


PowerPoint:

MS Office Access

50/564

Vincent ISOZ

et donc il n'y a rien en dire!


Son prfixe d'usage est hyp
ASSISTANT LISTE DE CHOIX-LOOKUP WIZARD
Il s'agit d'un type de donnes dans lequel les valeurs possibles du champ peuvent tre choisies
d'aprs une liste (table) disponible et deviendra donc une cl trangre base majoritairement
sur un entier log et crit avec le suffixe fk. La liste peut cependant aussi tre dfinie
individuellement.
Depuis MS Access 2007 il est possible de faire des champs multivalus (trs utile pour les
utilisateurs SharePoint). Bien qu'ils simplifient le travail de modlisation il faut si possible les
viter car le temps d'excution des requtes sur une grande quantit de donnes est parfois
10x plus long. + d'autres problmes qui seront expliqus pendant la formation.
PICES JOINTES-ATTACHMENT
Type de champ non visible sur la capture d'cran car il s'agit d'une nouveaut de MS Access
2007. Ce nouveau typage gre l'insertion de pices jointes multiples dans un document de
manire stable (contrairement OLE). Seul petit bmol l'esthtique d'affichage de ce
champ dans un formulaire est discutable.
Placer le curseur la ligne devant laquelle vous dsirez insrer un nouveau champ
d'enregistrement avec une liste de choix. Appelez le menu Insertion/Champ de recherche.
Remarque concernant les champs mmo: Ds que vous faites certains types des requtes
contenant des champs mmo, ceux-ci sont tronqu 256 caractres Voici quelques
solutions:
1. Lorsque vous avez une requte comportant un champ mmo avec la clause Groupe, le
mmo sera tronqu il faut mettre sur ce champ mmo (en particulier!) avec la clause
Premier et laisser les autres avec Groupe.

MS Office Access

51/564

Vincent ISOZ
2. Si vous faites une requte qui renvoie les lignes Uniques le champ mmo sera
tronqu. Il faut alors l'exclure de cette requte et le ramener plus tard en faisant une
requte de la requte pour le rapatrier via les cls primaires.
3. Si vous utilisez une requte d'Union, le champ mmo sera tronqu. Dans le code SQL
de la requte remplacez Union par Union All.
Ces limitations proviennent du moteur JET (qui n'est plus le moteur JET depuis
MS Access 2007). C'est un compromis de performance!
Calcul-Calculated
Nouveauts depuis MS Access 2010, permet de crer des calculs directement dans les tables
ce qui est fort pratique si l'on reste dans le monde MS Access mais ds qu'il s'agit de migrer
ensuite vers une autre technologie, c'est la catastrophe grer.
Voyons un exemple (idiot) de cette nouveaut... Considrons que quelqu'un souhaite dans le
cas de ventes dans un magasin avoir dans sa table sortie (tblSorties) les units de ventes
correspondant au rabais effectu sur la commande de l'article en question. Nous nous baserons
sur la proprit de commutativit de la multiplication:
Prabais Units PrixUnit 1 t % Units 1 t % PrixUnit
units virtuelles
correspondant au rabais

Nous ouvrons la table tblSorties en prenant soin de crer un nouveau champ appel
sngUnitesVirtuelles:

MS Office Access

52/564

Vincent ISOZ
Ds la slection de l'option Calcul effectue, la bote de dialogue suivante servant d'assistant
(mais ceux qui n'ont pas envie de l'assistant peuvent crire directement les formules de
mmoire):

Dans le prsent support, nous n'allons pas prsenter toutes les fonctions disponibles dans
l'arborescence Fonctions car le prrequis d'une formation MS Access est de matriser
MS Excel et au moins 200 de ses fonctions. Donc pour revenir nos moutons.... nous faisons
un bte formule d'arithmtique lmentaire:

et nous validons par OK. Nous avons alors:

MS Office Access

53/564

Vincent ISOZ

o le lecteur aura constat que dans l'onglet Gnral et plus particulirement dans le champ
Expression qui s'y trouve, notre formule a t reporte par l'assistant et donc in extenso il est
possible d'crire directement aussi des formules dans ce champ.
Ensuite, si nous passons en affichage Feuille de donnes en ayant pris soin d'enregistrer les
modifications au prlable, nous avons alors:

Donc toutes les anciennes donnes ont automatiquement la formule qui a t calcule et toutes
les nouvelles lignes ajoutes auront automatiquement le calcul qui s'excutera lors de la saise
des informations ncessaires cela.

MS Office Access

54/564

Vincent ISOZ

4.4.3 Formats
Pour chaque type de donne, vous pouvez spcifier en plus un format dans la zone prvue
cet effet:

Il faut dfinir ces formats avant de commencer saisir des valeurs dans la table (le principe
est cependant semblable MS Excel) !!!
#.##0" Kg"
#.##0 " kg rserve";-#.##0 "Kg achat"[Rouge]
jjjj (jours), mmmm (mois), aaaa (anne), t (trimestre), ss (semaine)
hh (heures), m (minutes), s (secondes)
#'###.00;-#'###.00[Rouge];0'000.00;"Non dfini"
> met toutes les donnes en majuscules (mais viter car ce n'est qu'une couche visuelle!)
Remarques:
R1. Ces options peuvent tres dfinies aussi sur des champs de formulaires en allant dans les
proprits de ceux-ci.
R2. Le format de comptabilit "CHF " * #'##0.00 avec l'toile pour avoir le symbole
montaire gauche et la valeur droite ne fonctionne plus depuis Access 2007 (sic!).

4.4.4 Masques de saisie


Par la suite, lorsque l'on prcise qu'une entre est obligatoire, cela signifie que si rien n'est
saisi l'endroit dfini par le symbole donn, alors MS Access retourne un message d'erreur
l'cran.
Voici le code propre aux masques de saisie pour MS Access (ces codes peuvent se retrouver
dans l'aide d'Access trs facilement) qu'il est recommand d'utiliser que dans des champs de
type Texte ou Date ( moins que l'on souhaite se compliquer la vie!!!):
0 Chiffre (0 9, entre obligatoire d'un chiffre, signes (+) et moins (-) non accepts).
9 Chiffre ou espace (entre facultative, signes plus et moins non accepts).
& Caractre gnrique pour une lettre ou un espace
# Chiffre ou espace (entre facultative, positions vierges converties en espaces en mode

MS Office Access

55/564

Vincent ISOZ
dition, mais les espaces sont effacs lors de la sauvegarde des donnes, signes plus et moins
accepts).
L Lettre (A Z minuscule ou majuscule, entre obligatoire d'une lettre).
? Caractre quelconque ou espace (entre obligatoire).
C Caractre quelconque ou espace (entre facultative).
. ,: ; - / Sparateur de dcimales, de milliers, de date et d'heure ( loisir)
A Lettre ou chiffre (entre obligatoire d'une lettre ou d'un chiffre).
Attention le nombre de A ne limitera cependant pas la taille d'un chiffre si le champ est de
type Numrique. De plus vous aurez des surprises si vous utiliser les maques avec les rels
simples.
a Lettre ou chiffre (entre facultative).
Attention le nombre de A ne limitera cependant pas la taille d'un chiffre si le champ est de
type Numrique. De plus vous aurez des surprises si vous utiliser les maques avec les rels
simples.
< Tous les caractres qui suivent sont transforms en minuscules
> Tous les caractres qui suivent sont transforms en majuscules
Tableau 3 Codes pour masque de saisie

Remarque: Si vous affectez la proprit Masque de Saisie la valeur "Mot de passe", vous
crez une zone de texte permettant de saisir un mot de passe. Tous les caractres taps dans la
zone sont enregistrs mais remplacs l'cran par un astrisque (*). Vous utilisez le masque
de saisie Mot de passe pour empcher l'affichage des caractres taps.

MS Office Access

56/564

Vincent ISOZ
Exemples:
(0) 00-00-00-00

(1) 55-50-24-48

(9) 99-99-99-99

(1) 55-50-24-48

( ) 55-50-24-48

(0) AA-AA-AA-AA

(1) 55-55-TE-LE

#999

20

2000

VERTEVE339M3

MAI R 452B7

>L0L 0L0

T2F 8M4

00000-9999

98115-

98115-3007

Marie

Dupont

SSN 000-00-0000

SSN 555-55-5555

>LL00000-0000

DB51392-0493

>L????L?0005L0

>L<??????????????

Sous forme finale:


Tableau 4 Codes de masque de saisie types

Dfinition du masque
00\ 00\ 00\ 00\ 00;0;_
LLL"--"??;;@
\(000") "000\-0000;1;*
>L<CCCCCCCCCCCCCCC
"ISBN "0\-&&&&&&&&&\-0
####
+41(0)00\/000.00.00

Avant saisie
__ __ __ __ __
@@@--@@
(***) ***-****
__________________
"ISBN "_-____________-_
____
+41(_)__/___.__.__

Exemple de saisie
01 23 45 67 89
aze--r
(206) 555-0248
Jean-claude sohm
ISBN 5-126795111-8
-26
+41(0)76/329.53.88

Spcifications sur les masques de saisie, en considrant l'exemple:


\(000") "000\-0000;1;*
le "1" aprs le premier ";" signifie" qu'il faudra stocker dans la table seulement les donnes
saisies (alors que la valeur "0" permet d'indiquer de stocker tous les caractres visibles). La
valeur aprs le deuxime ";" reprsente le caractre utilis pour reprsenter l'espace rserv
chaque caractre saisir.
MS Office Access

57/564

Vincent ISOZ
La principale diffrence entre la dfinition d'un style de saisie dans le champ "format" ou dans
le "masque de saisie" est la suivante:
Si vous dfinissez un style dans le champ "Format", alors la saisie sera adapte lorsqu'elle
sera insre dans la table et non pas au moment mme de la saisie dans le formulaire
correspondant (ce qui est le rle du masque de saisie).
Remarque:
R1. Les donnes du masque, bien qu'elles apparaissent dans les tables, ne s'y trouvent pas
physiquement. Ainsi, si vous exportez une table avec un masque vers MS Excel, vous perdrez
tous les caractres du masque.
R2. Ces options peuvent tre dfinies aussi sur des champs de formulaires en allant dans les
proprits de ceux-ci.

4.4.5 Validation (Valide Si)


Les options "Valide Si" et "Message si erreur", ont pour fonction d'afficher un message
d'erreur personnalis si le champ saisi ne correspond pas des donnes ayant t dfinies par
des relations d'ordre (ce qui n'est pas toujours possible) ou dans un langage plus commun: par
des critres.
Voici quelques exemples:
1. N'autorise que la saisie d'une valeur suprieure 5:
>=5
2. N'autorise la saisie d'une valeur qu'infrieur la date spcifie:
<#12.01.93#
3. N'autorise seulement que les textes commenant ou plus grand que la lettre spcifie:
>"A"
4. N'autorise que la saisie de valeurs gales celle spcifies:
="Madame" OU ="Monsieur"
5. N'autorise que la saisie d'une date comprise entre la date de jour et la mme date mais
65 ans plus tt:
= SrieDate(Anne (Maintenant ())-65;Mois(Maintenant());Jour(Maintenant())
Il est aussi possible de mettre une rgle de validation au niveau de la table. Effectivement,
lorsque vous tes en Mode cration et que vous cliquez sur le bouton
apparat la bote de
dialogue suivante:

MS Office Access

58/564

Vincent ISOZ

dans laquelle nous voyons un exemple d'application o la rgle impose que l'information
(date) se trouvant dans le champ nomm date naissance est infrieure la date se trouvant
dans le champ date dcs.
Attention!!!! Des critres multiples dans le Valide Si ncessitent obligatoirement l'usage de la
fonction VRAIFAUX( ) qui est l'quivalent de la fonction SI( ) de MS Office Excel
Maintenant que vous avez parcouru cette liste non exhaustive, nous allons passer un petit
exercice pratique:
Ouvrez la table tblArticles et entrez pour les noms de champs N Article, N Fournisseur et
Quantit par unit de commande une description comme ci-dessous (si l'quivalent n'a pas
dj t fait):

Modifiez la structure de la table en:


N Article
Taille du champ = 7 et Nul interdit
Dsignation
Taille du champ = 30 et Nul interdit
N Fournisseur
Format Nombre gnral (Entier) Dcimales 0
Quantit par unit de commande
Valeur par dfaut 5 Validit si >=5 (la logique de lecture est inverse de ce que l'on a
l'habitude d'utiliser) et message si erreur 'Valeur trop petite'
Prix unitaire
Format: Montaire et valeur par dfaut 0

MS Office Access

59/564

Vincent ISOZ
Fermez et enregistrez la table et testez ensuite le formulaire instantan que nous avions cr
en tout dbut de cours pour voir comment il se comporte maintenant que nous avons dfini
toutes ces proprits (il faut prendre l'habitude de faire systmatiquement ce genre de
contrles).
Dfinissez pour le champ d'enregistrements N Article, un masque de saisie qui n'accepte
pour l'entre au trois premires positions que trois lettres et pour les trois dernires, trois
nombres spars par un trait d'union (>LLL-000).
Etablissez l'aide de l'assistant de liste de choix, une liste telle que l'on puisse choisir le N
Fournisseur dans la table Articles au lieu de le saisir (cette liste doit afficher galement les
noms des fournisseurs et s'adapter automatiquement si des nouveaux sont entrs dans le table
Fournisseurs). Changez pour le Mode feuille de donnes et vrifiez le rsultat.
Ouvrez l'ancien formulaire de la table tblArticles et testez la saisie. Comme vous pouvez
certainement le voir, le formulaire ne s'est pas adapt aux nouvelles proprits des champs.
Deux possibilits s'offrent alors vous:
1. Ecraser l'ancien formulaire instantan par un nouveau (option trs gnante si vous
avez pass beaucoup de temps faire des modifications sur ce premier)
2. Mettre jour l'ancien formulaire en supprimant les champs qui ont changs en
cliquant sur le bouton suivant de la barre d'outils (quand votre formulaire est en mode
cration):

Ce bouton va faire apparatre une petite fentre dans laquelle se trouvent tous les champs
utiliss par votre formulaire. Il suffit ensuite de faire un "glisser/dplacer".
Crez un formulaire instantan pour la table tblFournisseurs et insrez un nouveau
fournisseur (laissez jouer votre imagination). Enregistrez ce formulaire sous le nom
"Fournisseurs".
Revenez dans le formulaire Articles et testez si le numro du nouveau fournisseur apparat
dans la liste des numros de fournisseurs.
Changez le champ d'enregistrement NPA de la table tblFournisseurs en un champ
d'enregistrement de type "Texte" avec une taille de 5 caractres.
Renommez le champ d'enregistrement Dlais de livraison/Jours en Dlais de livraison et
dfinissez un format d'affichage qui contienne le texte "jour(s)". (#" jour(s)"). Dfinissez la
valeur par dfaut 0.
Dans la table tblSorties dfinissez la valeur par dfaut du champ d'enregistrement Date de
Sortie comme tant la date du jour (fonction Date( )).
Ajouter dans la table tblVendeurs la colonne de Provisions (avec le type de donnes
Numriques, au format Pourcentage avec taille de champ de type Rel simple) o seul des
pourcentages avec au plus deux dcimales aprs la virgule doivent pouvoir tre saisis.

MS Office Access

60/564

Vincent ISOZ
Saisissez les valeurs comme reprsentes sur la figure suivante:

Comme vous pouvez l'observer nous devons faire face un problme relatif aux
pourcentages. Parlez-en avec votre formateur.
Dfinissez pour le champ Rgion un liste de choix dans laquelle vous mettez disposition les
valeurs Nord, Est, Sud, Ouest. De plus, il faut empcher l'utilisateur de pouvoir saisir autre
chose que propos dans cette liste. Ainsi:

Cette proprit est assez importante. Il faut essayer de ne jamais l'oublier. Ainsi, dans notre
magasin, toutes les listes doivent tre limites.
Ouvrez l'ancien formulaire instantan de la table Vendeurs vrifiez si la liste fonctionne et au
besoin mettez le champ jour.
Insrez, toujours dans la table Sorties, un champ nomm "Payement en espces" et un autre
nomm "Payement par crdit". Pour chacun de ces champs, prenez comme type de donnes
celui nomm "Oui/Non".
Crez un formulaire instantan pour la table Sorties et dfinissez au hasard, pour chaque
enregistrement, le type de payement.
Evidemment on peut actuellement cocher les deux cases mais on verra plus tard avec les
macros comment grer ce genre d'absurdits.

MS Office Access

61/564

Vincent ISOZ

4.5 Import MS Excel


Importez le fichier MS Excel TableSorties.xls. Le rsultat doit tre prsent comme cidessous (la cl primaire doit tre sur le champ N). Le but tant de connatre les
entres/sorties du magasin (on va crer la table des Entres de suite aprs). Faites attention au
fait que la colonne N doit tre de type "numrotation automatique" !

Crez manuellement (saisie clavier dans un formulaire instantan) la table tblEntree cidessous suivante (la cl primaire doit tre sur le champ idClient pour l'instant).

Saisissez partir de la fentre de base de donnes les proprits des tables (bouton droit sur
les tables). Fermez la base et observez ce qui ce passe (pas) !?
MS Office Access

62/564

Vincent ISOZ
Crez manuellement (saisie clavier dans un formulaire instantan) la table tblClients cidessous (la cl primaire doit tre sur le champ idClient pour l'instant).

Dans la table tblSorties, rajoutez une colonne ClientsId qui permettra plus tard de crer des
relations. Saisissez dans cette colonne des valeurs comprises entre 1 et 3 (y compris).

4.6 Import MS ACCESS


Un cas relativement rare d'import et celui d'autres bases de donnes MS Access. De mme
que pour les tables MS Excel, il suffit d'aller dans le menu Fichier/Import des donnes
externes et de choisir une des deux options.
Il faut savoir que l'option Lier ne permet que de lier des tables. Par contre, l'option Import
permet d'importer tous les objets MS Access comme le montre la figure ci-dessous:

N'oubliez pas de cliquer sur le bouton Options qui vous donne des possibilits parfois
pertinentes:

MS Office Access

63/564

Vincent ISOZ

4.7 Import/liaison MS Outlook


On peut se lier ou importer un carnet d'adresse d'entreprise ou local de MS Outlook (et
galement tout autre dossier Outlook!) avec une base de donnes Access. Le principe est le
mme que prcdemment. Voyons comment faire:

Vous allez donc dans File/Get External Data/Link Tableset ensuite:

MS Office Access

64/564

Vincent ISOZ

Ensuite, dans la liste des types de fichier, choisissez Outlook. Vient alors aprs quelques
secondes la bote de dialogue suivante:

Prenons le carnet d'adresse local Contacts. Validez par Next et vous aurez:

MS Office Access

65/564

Vincent ISOZ

Validez par Finish. Et vous aurez:

Mais cette mthode ne prend en compte que les modifications et suppressions d'lments
existants lors de la cration de la liaison et elle est unidirectionnelle (c'est Outlook qui pilote
Access!).
Il y a au fait un pige pour que la modification/ajout/suppression d'lments soit pris en
compte (mais toujours en unidirectionnel). Lors de l'assistant de liaison qui vous permet par
exemple de choisir le carnet d'adresse:

Il ne faut pas prendre celui-ci de la liste des Adress Books mais de la liste des dossiers du
Personnal Folders si situant en-dessous:

MS Office Access

66/564

Vincent ISOZ

Aprs quoi cela marche (donc les modifications sont prises au moins en unidirectionnel!).

4.8 Format des tables


Etablissez en mode de feuille de donnes, la table Vendeurs (tblVendeurs) avec les champs
d'enregistrements Nom du Vendeur (strVendeurs) et Rgion de Vente (StrRgVentes). Entrez
ensuite les donnes ci-dessous:

Gnrez automatiquement la cl primaire lors de la fermeture de la table. Ouvrez de nouveau


la table tblVendeurs, puis changez la dsignation de la colonne ID en idVendeur.
En mode cration vrifiez que les types de donnes soient adquats.
Changez la dsignation du champ N de la table tblSorties en idSortie
Insrez entre les colonnes N Sortie et N Article de la table tblSorties, une nouvelle colonne
N Vendeur (tblVendeurId). Dans cette colonne, le vendeur doit indiquer quelle vente il a
ralis en vue du calcul ultrieur des commissions (saisissez des valeurs alatoires entre 1 et
10).
MS Office Access

67/564

Vincent ISOZ
Dplacez la colonne N Vendeur (tblVendeurId) au dbut de la table, puis annulez cette
opration et dplacez la colonne N Vendeur (tblVendeurId) la fin de la table.
Figer les colonnes N Sortie (idSortie) et N Article (idArticles) en passant par Format/Figer
les colonnes. Cette fonction se base sur le mme principe que celle se trouvant dans
MS Excel. Puis modifiez le layout de la table en masquant les colonnes Nombre d'units
(intUnites) et Date de Sortie (datSortie) (Format/Masquer les colonnes). Cette fonction est
utile lorsque l'on a besoin d'imprimer seulement certaines informations d'une table.
Supprimer le figement des colonnes et donnez la table tblArticles, le layout suivant (Access
2000 et ultrieur):
1. Apparence de cellule: 3D Relach (Format/Feuille de donnes)
2. Apparence du texte: Italique (Format/Police)
Selon le rsultat donn la page suivante (dont l'utilit est plus que douteuse):

4.9 Outil recherche


Le but maintenant est d'apprendre utiliser l'outil de recherche. Recherchez dans la table
tblSorties et dans le champ contenant les rgions, tous les articles qui ont t vendus au Nord.
Rptez l'opration mais partir d'un formulaire instantan.
Recherchez et remplacez:

dans toute la table tblSorties, le vendeur numro 2 par le vendeur numro 11. Refaites la
procdure inverse partir d'un formulaire instantan.

MS Office Access

68/564

Vincent ISOZ
Remarque: L'outil Rechercher/Remplacer gre la wildcard * mais pas les crochets, ni le point
d'interrogation. Par ailleurs il ne peut rechercher/remplacer plus de 10'000 donnes Le
mieux est alors de faire une requte de mise jour dans lequel le Critre de slection sera la
valeur cherche et la valeur de Mise--jour le nouveau texte..
Vrifiez l'orthographe dans la colonne Lieu de la table tblFournisseurs, et ajoutez au besoin
les termes dans le dictionnaire personnalis d'Office.

4.10 Proprits des tables


Si vous ouvrez une des tables, et que vous la passez en en mode cration vous observerez la
fentre ci-dessous ( quelques dtails prs).

Remarque: la colonne Description est souvent utile au dveloppeur pour prendre des notes
quant l'utilit ou aux spcificits d'un champ. Par dfaut, les informations qui y sont saisies
seront visibles dans la barre d'tat du logiciel lorsque l'utilisateur cliquera sur le champ
concern dans un formulaire. La barre d'tat peut cependant tre dsactive comme nous le
verrons bien plus loin.
Pour chacun des champs de toutes les tables, dfinissez rigoureusement avec votre formateur
les proprits disponibles pour tous les diffrents champs.
Testez galement ensuite les modifications, soit en mettant jour votre formulaire existant (le
formulaire correspondant la table) soit en crant un nouveau formulaire automatique
(regardez bien le texte en bleu droite, il permet de comprendre l'utilit des diffrentes
fonctions).
Pour le champ Valide Si, mieux vaut se reporter l'aide d'Access, les exemples y sont
nombreux et c'est un bon exercice pour apprendre utiliser cette dernire. Cependant il y aura
plus tard un exercice ou nous utiliserons l'option Valide Si.
Le but principal de l'option Null Interdit est d'empcher l'utilisateur de faire une fausse saisie
en crivant uniquement avec espaces clavier. Evidemment cela peut faire doublon avec le

MS Office Access

69/564

Vincent ISOZ
masque mais le concept de Null Interdit existe dans la grande majorit des SGBR ce qui n'est
de loin pas le cas du masque de saisie!
Remarque: Attention ne pas mettre des Null Interdit partout car sinon vous pourriez ne
pas pouvoir crer de donnes o que ce soit!!! Il s'agirait alors d'une erreur de
modlisation de la part du dveloppeur (heureusement c'est une erreur qui prend que
quelques minutes corriger).
L'option Chane vide autorise permet de choisir si on considre l'espace vide comme une
valeur d'entre valable. Normalement on va plutt dire Non
La Compression Unicode doit tre active sur Oui si uniquement des caractres latins sont
supposs tre utiliss dans cette base (les caractres latins pouvant tre cods sur 1 octet
plutt que 2).
Depuis Access 2007 on trouve galement un champ Mode IME et Mode de formulation IME
(Input Methode Editor) qui concerne les diffrents caractres japonais Kanji et la manire de
les interprter.
L'onglet appel Liste de choix a galement certaines options trs intressantes qu'il faut
systmatiquement dfinir (voir capture d'cran page suivante).

Comme vous pouvez le voir ci-dessus, on retrouve les proprits du champ qui ont t
dfinies lors de l'utilisation de "l'assistant de liste de choix". Cependant l'option "Limiter la
liste" ne nous tait pas apparue et elle est pourtant importante.
Vu le nombre de paramtres qu'il faut dfinir dans Access, il est important de vous rappeler
que lorsque vous crez une base, vous devez d'abord commencer par crer les tables et de
dfinir toutes leurs proprits et contraintes avant mme de continuer avec quoi que ce soit!!!

4.11 Tris et filtres


Triez la table tblArticles dans l'ordre croissant des tblDesignation d'articles.
Filtrez ensuite avec un "filtre par slection", tous les articles avec le numro de fournisseur 3
(cliquer dans la cellule avec la valeur 3 et aller dans le menu Enregistrements/Filtre/Filtrer
par slection). Dsactivez ensuite le filtre en allant dans le menu Enregistrements/Afficher
Tous les enregistrements ou en cliquant sur l'icne de filtre.

MS Office Access

70/564

Vincent ISOZ
Filtrez tous les articles qui ont un prix suprieur 50.- (placer le curseur dans la colonne qui
doit servir de tri, menu contextuel Filtrer Pour et saisissez >50)
Il y a plusieurs mthodes pour dfinir des critres qui utilisent des symboles bien spcifiques
Access. Il est important de bien les comprendre, car ils sont utiles lors de la cration de
filtres et de requtes!
Attention!!! Certaines des critres ci-dessous ne fonctionnent que dans des requtes et pas
dans des filtres par slection.

4.11.1 Critres numriques et textes


> | >= | <> | <= | >=

4.11.2 Critres numriques et dates


K*
Tous les enregistrements dont le contenu du champ spcifi commence par la lettre K
COMME M?ier
LIKE M?ier
Tous les enregistrements dont le contenu du champ spcifi est du type Maier, Moier,) le ?
reprsente un caractre unique, selon les besoins on crirait: M*ier
#07.07.2002#
Tous les enregistrements dont le contenu du champ spcifi correspond la date 07.07.2002.
Les # ne sont pas obligatoires.

4.11.3 Caractres gnriques (wildcards)


Attention! Si quelqu'un a activ l'option de compatibilit SQL ANSI 92 dans les options
avances de MS Access la plupart des commandes ci-dessous ne fonctionneront pas.
*#
Tous les enregistrements dont le contenu du champ spcifi se termine par un chiffre.
COMME Du[pli]rex
LIKE Du[pli]rex
Tous les enregistrements dont le contenu du champ spcifi contient entre les lettres Du et rex
d'autres caractres, tels que Duprex, Dulrex, Duirex (vous pouvez choisir le nombre de
lettres entre crochets)
COMME Dupon[!t]
LIKE Dupon[!t]
Tout ce qui commence par Dupon mais qui ne finit pas avec la lettre t.
COMME Du[p-z]
LIKE Du[p-z]
Tous les enregistrements dont le contenu du champ spcifi se termine par Duprex, Durant..,
MS Office Access

71/564

Vincent ISOZ
la premire lettre du terme soulign restant compris entre p et z
>="D"
Tous les enregistrements dont le contenu du champ spcifi commence avec les lettres D Z
>3 ET <7
>3 AND <7
Tous les enregistrements dont le contenu des champs est compris entre les deux valeurs
spcifies. Il est donc possible d'utiliser des structures logiques
"A*" OU >"C*"
"A*" OR >"C*"
Tous les enregistrements qui commencent par A ou par un caractre plus grand que C
(attention Ca, Cb Ch seront compris dedans tant plus grands que C)
<>"G*"
Tous les enregistrements sauf ceux commenant par la lettre G
NOT IN ("France";"Allemagne")
PAS ("France";"Allemagne")
Tous les enregistrements qui ne sont ni en Allemagne ni en France
"K*" OU "L*"
"K*" OR "L*"
Tous les enregistrements commenant soit par la lettre K, soit par la lettre L

4.11.4 Fonctions gnriques


Pour exprimer des critres dans l'option Filtrer Pour, nous pouvons aussi utiliser des
fonctions, mais ces dernires sont spcifiques la fois du SGBDR et du type de donnes du
champ considr. Citons quelques exemples classiques:
NbCar([Nom])="4"
Len([Nom])="4"
Retrouve tous les noms de 4 caractres
Droite([Nom];2)="se"
Right([Nom];2)="se"
Retrouve les nom se terminant par "se"
Gauche([Nom];2)="du"
Left([Nom];2)="du"
Retrouve les noms commenant par "du"
ExtracChaine([Nom];2;3)="ach"
Mid([Nom];2;3)="ach"
Retrouve le nom "Machin", lequel contient la chane de trois caractres "ach" en commenant
au deuxime caractre.
PartDate("aaaa";[datCommande])=2000
DatePart("yyyy";[datCommande])=2000
MS Office Access

72/564

Vincent ISOZ
Retrouve les commandes de l'anne 2000. Cette fonction opre aussi (en franais) avec "j"
pour le jour, "m" pour le mois, et "t" pour l trimestre.
DiffDate("j";[datCommande];[datLivraison])>100
DateDiff("d";[datCommande];[datLivraison])>100
Retrouve les produits qui ont t livrs plus de 100 jours aprs avoir t commandes. Cette
fonction opre aussi (en franais) avec "j" pour le jour, "m" pour le mois, et "t" pour l
trimestre.
Jour([datCommande])=12
Day([datCommande])=12
Retrouve les commandes effectues le 12 (des mois prsents dans la table). La mme criture
est valable avec Mois/Month et Anne/Year au lieu de Jour/Day.

4.11.5 Tris et filtres avancs


Maintenant, triez les donnes de la table tblVendeurs dans l'ordre croissant du nom des
vendeurs, puis dans l'ordre dcroissant des rgions de ventes (Enregistrements/Filtrer/
Filtrage spcial).
Filtrer de faon obtenir:
1. Tous les vendeurs de la rgion Nord
2. Tous les vendeurs qui ne sont pas attribus la rgion Nord (attention, MS Access
n'est pas "case sensitive")
3. Tous les Vendeurs des rgions Nord ou Sud (ligne OU)
4. Tous les vendeurs ayant M ou C pour premire lettre du nom et se situant dans la
rgion Nord
Bien que l'on fasse rarement ainsi, sauvegardez ce filtre comme requte sous le nom
Fichier-Requte en passant par le menu "Ficher/Enregistrer la requte". On verra plus
tard, comment l'on procde traditionnellement pour crer des requtes.
5. Tous les vendeurs de la rgion de vente Nord avec un numro de vendeur suprieur ou
gal 4, tris dans l'ordre croissant du Nom Vendeur.

MS Office Access

73/564

Vincent ISOZ

5 Relations (jointures)
La notion de relation est ce qu'il y a de plus important dans MS Access o dans tout SGBDR.
C'est ce qui fait de cette famille de logiciel leur toute puissance dans la gestion simple de
bases de donnes plus ou moins complexes. Il est souvent trs difficile d'en comprendre le
principe, c'est pourquoi nous irons relativement lentement lors de l'tude de ce chapitre.
Remarque: Les relations ont une proprit sous-jacente qui se nomme la "jointure" techniquement il existe trois types de jointures possibles pour une relation. Une relation a
obligatoirement une des 3 jointures, d'o le fait que dans certains ouvrages, les auteurs ne
n'utilisent par le terme "relation" car pas assez prcis mais uniquement le terme "jointure".
Dans le prsent le prsent chapitre, nous ferons usage du terme "relation" pour signifier
qu'implicitement il s'agit de "jointures quivalentes".
Il existe diffrentes types de relations dont voici la liste (nous en avons dj fait mention lors
de notre introduction au schma ER page 22):

5.1 Assistant liste de choix


Avant de commencer ce chapitre nous sommes obligs de voir en dtails qu'est-ce que
l'Asssistant Liste de Choix (je ne voulais pas crire de chapitre l'origine sur ce sujet trivial
que l'on retrouve en masse dans les livres et sur Internet mais suite de nombreuses demandes
j'ai finalement chang d'avis).
Il existe deux formes majeures de l'assistant liste de choix. Nous allons commencer par le plus
simple (qui lui-mme peut tre driv en plusieurs sous-catgories) mais qui est aussi le
moins recommand car ne respectant pas la deuxime forme normale.

5.1.1 Assistant liste de choix (ALC) statique


Nous allons faire ici un exemple trs simple et imag (avec captures d'crans) des trois cas de
figures les plus courants des listes droulantes statistiques

5.1.1.1

ALC statique choix unique de type zone de liste droulante

Pour ce cas particulier, nous allons prendre la table tblClients pour laquelle nous souhaiterions
une liste droulante statistique choix unique permettant le choix des genres (M., Mme, Mlle,
Dr., etc.).
Nous ouvrons donc la table en mode cration dans laquelle nous crons un champ nomm
lstGenre qui sera du type Texte en Assistant liste de choix (captures effectues avec
MS Access 2010):

MS Office Access

74/564

Vincent ISOZ

Nous avons alors un assistant qui dmarre et la premire tape, nous slectionnons Je
taperai les valeurs souhaites:

et cliquons suir Suivant pour y saisir quelques titres par dfaut:

MS Office Access

75/564

Vincent ISOZ

Nous cliquons ensuite sur Suivant:

en spcifiant bien que nous ne souhaitons pas que les utilisateurs puissent taper ou choisir
autre chose que ce que nous avons dfini (Limiter la liste) et qu'il ne peuvent pas
slectionner plusieurs valeurs la fois (Autoriser plusieurs valeurs). Nous cliquons sur
Terminer.
Ensuite, dans les proprits Gnrales du champs nous allons typiquement prendre:

MS Office Access

76/564

Vincent ISOZ

et nous vrifions bien que dans l'onglet Liste de choix nous puissions changer ventuellement
plus tard les paramtres:

et la liste droulante statistique choix unique est alors directement utilisable en mode table:

Remarque: Ceci dit, n'importe quel connaisseur vous dira qu'il vaut mieux faire une liste
choix lie une table avec une intgrit rfrentielle que d'utiliser cette technique!

5.1.1.2

ALC statique choix unique de type zone de liste

La procdure est en tout point identique la prcdente. La seule chose qui change se situe au
niveau de l'option Contrle de l'affichage ci-dessous:

MS Office Access

77/564

Vincent ISOZ

Effectivement, dans l'exemple prcdent l'option a pour valeur (comme le montre la capture
ci-dessous) Zone de liste droulante. Ce qui donne dans un formulaire le rsultat suivant:

Mais si nous changeons la mme option avec la valeur Zone de liste:

Alors nous obtenons:

MS Office Access

78/564

Vincent ISOZ

et l nous voyons bien la diffrence entre une zone de liste droulante et une zone de liste
simple. Mais la diffrence n'est visible qu'avec les formulaires.
Remarque: Encore une fois, n'importe quel connaisseur vous dira qu'il vaut mieux faire une
liste choix lie une table avec une intgrit rfrentielle que d'utiliser cette technique!

5.1.1.3

ALC statique choix unique de type liste droulante extensible

Attention! Ce type de liste ne fonctionne pas avec le masque de saisie!


La mthode est la mme que l'antprcdente mais la diffrence que cette fois-ci, nous
dcochons l'option Limiter la liste:

MS Office Access

79/564

Vincent ISOZ
option qui peut aussi tre change tout moment des les options avances des listes:

En mettant la proprit Autoriser les modifications la valeur Oui.


La saisie alors comporte, que ce soit dans un formulaire ou dans une table, une option
complmentaire dans la liste comme le montre bien la capture ci-dessous:

et si nous cliquons sur ce petit bouton vient alors:

MS Office Access

80/564

Vincent ISOZ
La suppression d'une des valeurs de la liste ne la supprimera pas dans les enregistrements o
elle est dj utilise.
Malheureusement ce type de liste ne sera pas tri dans l'ordre alphabtique!
Remarque: Encore une fois, n'importe quel connaisseur vous dira qu'il vaut mieux faire une
liste choix lie une table avec une intgrit rfrentielle que d'utiliser cette technique!

5.1.1.4

ALC statique choix multiple de type liste droulante extensible

La mthode est la mme que la prcdente mais la diffrence que cette fois-ci, nous cochons
l'option Autoriser plusieurs valeurs:

Vous remarquerez ds lors que l'option Limiter la liste se cochera mme si vous l'avez
dcoche au pralable!
Nous avons alors (ce qui a peu de sens dans le cas prsent), la possibilit de choisir plusieurs
genres pour un mme client:

MS Office Access

81/564

Vincent ISOZ

Lorsque vous faites ce choix, vous avez trs probablement remarqu le message suivant:

Et effectivement, vous ne pourrez plus changer le type de ce champ. Il vous faudra ds lors le
supprimer entirement.
Remarque: Encore une fois, n'importe quel connaisseur vous dira qu'il vaut mieux faire une
liste choix multiple lie une table avec une intgrit rfrentielle que d'utiliser cette
technique!
Concernant l'option Afficher uniquement les valeurs de la source visible ci-dessous:

D'abord, elle ne marche que si et seulement si l'option Autoriser plusieurs valeurs et sur Oui.
Par dfaut elle est sur Non ce qui signifie que dans la table tblClients elle laissera visible dans
les cellules de colonne lstGenre les valeurs qui ne se trouvent pas dans la liste droulante
choix multiple. Si vous la passez Oui elle masquera (et non supprimera!) de la colonne
lstGenre toutes les valeurs non disponibles dans la liste droulante.

MS Office Access

82/564

Vincent ISOZ

5.1.2 Assistant liste de choix (ALC) li


Les listes de choix vues jusqu' maintenant posent d'normes problmes en matire de
mmoire, de rapidit et de migration des informations. Dans tous les cas, il faut lui prfrer la
mme technique mais associant une table externe.
Pour faire les exemples qui vont suivre, nous aurons au pralable prpars une table
tblGenres:

avec les quelques donnes suivantes:

5.1.2.1

ALC statique li choix unique de type zone de liste droulante

Pour ce cas particulier, nous allons prendre la table tblClients pour laquelle nous souhaiterions
une liste droulante statistique choix unique permettant le choix des genres (M., Mme, Mlle,
Dr., etc.).
Nous ouvrons donc la table en mode cration dans laquelle nous crons un champ nomm
lstGenre qui sera du type Texte en Assistant liste de choix (captures effectues avec
MS Access 2010):

MS Office Access

83/564

Vincent ISOZ

Nous avons alors un assistant qui dmarre et la premire tape, nous slectionnons Je que
que la champs Liste de choix extraie les valeurs d'une autre table ou requte (vous
remarquerez que j'ai mme recopi la faute d'orthographe de l'entreprise 50 milliards de
dollars de capital...):

MS Office Access

84/564

Vincent ISOZ
Nous cliquons sur Suivant:

Nous nous limiterons aux Tables tant donne que nous n'avons pas encore tudi les requtes
mais cela n'enlve rien l'intrt (potentiel) trs puissant qu'il a y de lier une liste choix
une requte!!!! Nous choisissons la table tblGenres et cliquons sur Suivant:

on prend les deux champs (pour les utilisateurs qui ne comprendraient pas les abrviations...)
et nous cliquons sur Suivant:

MS Office Access

85/564

Vincent ISOZ

Nous trions sur la base des abrviations seulement et nous cliquons sur Suivant:

C'est satisfaisant. Nous cliquons sur Suivant:

MS Office Access

86/564

Vincent ISOZ

Nous n'activons pas l'intgrit (nous ne voulons pas que les utilisateurs puissent supprimes
des Genres) et nous n'autorisons pas la slection de plusieurs genres.
Nous cliquons sur Terminer:

Nous validons par Oui:

Comme le champs lstGenres tait initialement un champ Texte et qu'il a besoin de le


transformer en numrique (Entier Long) pour le lier la cl primaire de la table tblGenres
nous validons par OK:

MS Office Access

87/564

Vincent ISOZ
et nous avons le rsultat souhait.
Nous pourrions refaire tous les exemples que nous avions prsents avec les listes statiques
mais ce serait du gaspillage de page...

5.2 Relation un un
Exemple 1: Une table tudiants table Taille, autrement dit: un tudiant une seule taille (
un moment donn de sa vie)
Exemple 2: une table classes table responsables, autrement dit: une classe a un responsable
et un responsable n'a la charge que d'une classe
Les deux exemples ci-dessus sont ceux que les spcialistes de l'algbre relationnelle appellent
une "dpendance fonctionnelle".
Prenons un exemple pratique avec notre base de donnes. Un vendeur peut travailler dans
plusieurs succursales au cours de sa carrire (c'est normal) mais nous allons supposer qu'un
vendeur ne peut tre responsable que d'un succursale tout au long de sa carrire.
Prenons la table tblVendeurs de notre base de donnes bddMagasin:

et crons une table de succursales:

Attention, dans cet exemple il est particulirement important de ne pas oublier de faire (avec
l'assistant liste de choix pour simplifier) une relation entre le champ strNomResp et le champ
strNom de la table tblVendeur et ensuite d'aller activer l'intgrit rfrentielle entre les deux
tables:

MS Office Access

88/564

Vincent ISOZ

Allez ensuite dans le mode cration de la table tblSuccursales et changez l'index ET le Null
interdit comme indiqu ci-dessous du champ strNomResp:

Si vous revenez ensuite dans le schma de votre base vous verrez alors que nous avons bien
maintenant une relation 1 1:

5.3 Relation un plusieurs


Exemple: une table tudiants table livres, autrement dit un tudiant emprunte plusieurs
livres et un livre ne peut tre emprunt que par un tudiant.
Remarque: La technique de travail avec les relations un plusieurs ncessite obligatoirement
la cration d'un champ dans la table "plusieurs" appel "cl trangre" (fk). Ce champ
contiendra des informations provenant du champ "cl primaire" (pk/id) de la table "un".
La cl primaire se champ toujours sur un champ identifiant unique c'est la raison pour
laquelle nous choisissons le plus souvent dans le domaine de l'informatique de mettre ces cls
sur des champs ID en Auto-Number (cela permet aussi de gagner de la place mmoire en
l'occurrence).
Si vous ouvrez la table matre d'une relation un plusieurs vous verrez une colonne avec un
petit + sur la gauche comme ci-dessous:

MS Office Access

89/564

Vincent ISOZ

Si la table tblVendeurs n'est lie qu' une seule table par une relation un plusieurs alors
MS Access vous imbrique immdiatement la table ou "sous-feuille" esclave aprs un clic sur
le petit +.
En faisant un clic droit dans le mode cration de la table tblVendeurs:

et en slectionnant Proprits nous voyons cela:

Donnons une description de chaque champ:


- Affichage par dfaut: La manire dont la table doit s'afficher lorsque nous l'ouvrons.
- Valide si: Il est possible ici de mettre des critres pour valider un enregistrement en son
entier. Un bon exemple dans la table tblVendeurs serait:

MS Office Access

90/564

Vincent ISOZ

Remarque: Il est galement autoris d'y mettre des formules du type


[NomDuChamp]=[NomChamp1]+[NomChamp2]. Ainsi, tant que [NomDuChamp] ne sera
pas gal la somme, l'enregistrement ne sera pas valid!
Ce qui obligerait un utilisateur saisir le Nom et le Prnom d'un vendeur avant de pouvoir
passer une autre saisie. Et si ceci n'est pas respect apparatrait alors le message d'erreur
indiqu:

- Filtre et Tri: Permettent qu'un filtre et un tri soient appliqus automatiquement chaque fois
que la table est ouverte. C'est rarement utilis mme si cela marche trs bien.
- Sous-feuille de donnes nom: indique la sous-feuille ouvrir par dfaut si la table en
question est relie avec plusieurs tables par une relation un plusieurs.
- Champ fils et Champ pre: Sont respectivement la cl trangre et primaire de la relation
dfinie par la table sur laquelle vous tes et celle choisie dans le champ Sous-feuilles de
donnes.
Si vous ouvrez une table MS Access qui est lie plusieurs tables en un plusieurs, alors le
logiciel ne sachant pas quoi faire va vous demander quelle liaison avec quelle table vous
souhaitez visualiser. Par exemple avec la table tblArticles, en cliquant sur le petit + nous
obtenons:

MS Office Access

91/564

Vincent ISOZ

Il faut ensuite faire un choix un tant soit peu cens:

et valider par OK:

MS Office Access

92/564

Vincent ISOZ
Ainsi, en dfinissant directement dans les proprits de la table, la sous-feuille de donnes, le
champ pre et le champ fils il ne sera plus utile de faire cette manipulation chaque ouverture
de la table.
- Sous-feuille de donnes hauteur: c'est simplement la hauteur fixe en centimtres que doit
avoir par dfaut chaque sous-feuille dans la table mre. C'est trs pratique si vous avez
chaque fois une sous-feuille de donnes avec 5000 lignes cela permet de restreindre
seulement quelques unes.
- Sous-feuille de donnes tendue: Permet simplement que lorsque la table est ouverte d'avoir
toutes les sous-feuilles de donnes ouvertes (comme si pour chaque ligne nous avions dj
cliqu sur le petit +).

5.4 Relation plusieurs plusieurs


Exemple: une table tudiants une table Cours, autrement dit: un tudiant suit plusieurs
cours, un cours est suivi par plusieurs tudiants
Remarque: la technique de travail avec les relations plusieurs plusieurs ncessite
obligatoirement la cration d'une table intermdiaire dite "table de jonction/transition" qui se
cre en fait trs naturellement.

5.5 Relation "simple" (sans intgrit rfrentielle)


Vous ne pouvez effacer ou modifier un enregistrement qui est li au contenu d'une autre table.
De plus, la table contenant la cl trangre peut contenir des lments ne correspondant
aucun lment de la table contenant la cl primaire. C'est assez dangereux mais le choix
dpend des besoins de l'entreprise (veut-elle assurer "l'intgrit" de ses donnes ou non ?).

5.6 Relation avec intgrit rfrentielle


En gros (fonction principale mais on reviendra plus en dtail l-dessus) par un double clic sur
une relation dans la vue des relations vous aurez la bote de dialogue suivante:

1. Activer l'intgrit rfrentielle (Enforce Referentiel Integrity):

MS Office Access

93/564

Vincent ISOZ
Si vous effacez un enregistrement, ceux qui y font rfrence seront bloqus mais le
choix est quand mme possible (sous-options). Vous n'avez aussi plus la possibilit
d'avoir dans la table contenant la cl trangre de la relation, d'lments qui ne
correspondent pas au contenu de la table contenant la primaire de la relation (d'o le
terme "intgrit").
2. Mise jour en cascade:
Cette option est disponible seulement si vous avez activ l'intgrit rfrentielle. Elle
est utile aux personnes qui auraient fait l'erreur de mettre leur cl primaire ailleurs que
sur un champ ID (numro auto). Nous n'en ferons donc pas usage dans ce support.
Cette option est par contre redondante (ce qui ne signifie pas qu'il ne faut quand mme
pas l'activer) si vos cls trangres sont bases sur des listes choix.
3. Suppression en cascade:
A pour fonction de supprimer tous les enregistrements relis l'objet supprim (vous
perdez ainsi en quelque sorte l'historique)
Remarques:
R1. Il n'est pas ncessaire que des champs relis aient un mme nom. C'est le contenu qui fait
foi.
R2. Les tables sources de la relation doivent avoir une cl primaire avec un index unique.
R3. La relation doit se baser sur le champ de la cl primaire (respectivement de l'index
unique).
Lisez galement le contenu de votre support et l'aide lectronique intgre MS Access au
sujet des relations pour avoir un complment d'informations.
Evidemment, habituellement il n'y a pas (du moins il ne devrait pas avoir) de donnes dans les
tables lorsque l'on cre les relations !!!
Entrons maintenant un peu plus dans les dtails au niveau des relations (partie thorique un
peu barbante mais ncessaire).
Dans un premier temps, voici un rappel des conditions satisfaire pour crer des relations:
1. La cl primaire est le champ de la table qui sert d'identifiant un enregistrement. Il
s'agit d'un champ index sans doublon.
2. La cl trangre est le champ de la table qui servira matrialiser la relation avec la
cl primaire. Il doit tre de mme taille et de mme type de donnes que la cl
primaire laquelle il est li. Il est utile de lui donner le mme nom que celui port par
la cl primaire correspondante.
3. Pour crer une relation de un un, il faut imprativement lier des champs ayant leur
proprit "index" "oui-sans doublon".

MS Office Access

94/564

Vincent ISOZ
4. Pour crer une relation de un plusieurs, il suffit de lier les champs entre eux.
D'habitude, la relation se fait d'une cl primaire vers une cl trangre.
5. Pour crer une relation de plusieurs--plusieurs il faut crer une troisime table (dont
le besoin et le contenu se dfinissent tout fait naturellement), appele une "table de
jonction" (au fait c'est une table normale mais bon), et lui ajouter des champs, cls
trangres, possdant les mmes dfinitions que les champs cl primaire de chacune
des deux autres tables.
6. Nous crons des cls primaires combines dans des tables de transitions ce qui assure
par exemple qu'un couple de champs soit unique.
Crez maintenant les relations suivantes entre les tables que vous avez pour l'instant par
rapport au schma ci-dessous (votre formateur vous expliquera les tenants et aboutissants
dans les dtails).
Attention, des erreurs ont exprs t glisses dans ce schma (erreurs de nommage des
champs, d'intgrit, de position de cl primaire, d'index, etc.) et n'oubliez pas que vous
n'avez pas encore toutes relativement la finalit du cours donc ne paniquez pas si vous
n'avez quelque chose d'identique ce qui est montr dans la figure !!!

Figure 3 Schma (simple) de la BDD

Remarques:
R1. D'une formation l'autre, ce schma peut changer un peu (votre formateur aime bien
parfois varier ses cours). Par exemple avec de bons participants en deux jours nous arrivons
un schma relationnel comme celui de la page suivante:

MS Office Access

95/564

Vincent ISOZ

Cl primaire simple
ou combine ?

R2. Certaines erreurs ont aussi t exprs introduites dans le schma ci-dessus afin que les
participants mettent en application leurs connaissances du cours initiation.
Pour vous exercer, vous pouvez tenter de rpondre ces questions (elles sont traites dans les
dtails lors du cours):
1. Pourquoi la cl primaire de la table tblArticles n'a pas t mise sur le champ idArticle?
2. O faudrait-il activer l'intgrit rfrentielle dans ce schma ?
3. La mise--jour en cascade a-t-elle alors un sens pour les tables relies cette cl
primaire strCodeArticle?
4. Et la mise--jour en cascade pour les autres relations ?
5. Quand faut-il activer la suppression en cascades des champs ?
6. Comment pouvons-nous rendre un champ unique sans utiliser de cl primaire (VBA?,
index?, etc.)???
7. Comment rendre le prnom et le nom d'un individu dans la table tblClients unique?
8. Faut-il mettre un index combin dans la table tblLanguesEmp ou pas ? Pourquoi ?
Ce schma est extrmement simple et il est aussi extrmement rare d'avoir quelque chose
d'aussi petit et simple dans MS Access, une bonne moyenne (nivele vers le bas) serait plutt
du type suivant (voir page suivante):

MS Office Access

96/564

Vincent ISOZ

MS Office Access

97/564

Vincent ISOZ
Figure 4 Exemple de BDD (taille standard)
Revenons notre exemple de dpart et dtaillons-le:

Prcisions sur l'intgrit rfrentielle:


L'intgrit rfrentielle est un mcanisme de vrification qui s'assure que chaque cl trangre
est en correspondance avec sa cl primaire. Non seulement il vrifie l'intgrit des donnes
crites dans la cl trangre, mais encore, il maintient cette intgrit en cas de modification ou
de suppression de la cl primaire.
En consquence, lorsque l'intgrit rfrentielle est applique sur une relation, on ne peut pas
trouver, dans la cl trangre, de donnes autres que celles contenues dans la cl primaire
correspondante.
Ds lors, bien que toutes les donnes figurant dans la table contenant la cl trangre soient en
relations avec les donnes de la table contenant la cl primaire, l'inverse n'est pas exact.
Si la "Mise jour en cascade" et la "Suppression en cascade" ne sont pas actives, il n'est pas
donn l'utilisateur la possibilit de supprimer ou de mettre jour AUTOMATIQUEMENT
le champ de la table d'origine tant dj en relation avec des champs de la table trangre. Il
sera toujours possible de le faire par automatisme ou programmation.
Testez, comme exercice:
1. L'intgrit rfrentielle
2. L'intgrit rfrentielle avec la mise jour en cascade
MS Office Access

98/564

Vincent ISOZ
3. L'intgrit rfrentielle avec la suppression en cascade
Au hasard, un des participants ira au poste du formateur pour dmontrer le bon
fonctionnement de ces outils.

5.7 Relation circulaire (auto-liaison)


La relation circulaire (dite aussi "auti-jointure" ou "jointure rflexive") est un cas typique du
modle conceptuel de donnes (MCD). Il s'agit au fait d'une relation entre une table et ellemme!
Malheureusement, il semblerait que cette fonctionnalit ne marche plus comme elle devrait
depuis Access 2007. Ce qui est une norme perte tant donnes les possibilits qui taient
offertes par les auto-liaisons. En attendant, le lecteur pourra sauter ce sous-chapitre.
Illustrons ce concept par un exemple.
Considrons la table suivante:

Nous souhaitons dfinir pour chaque vendeur, un vendeur responsable (une structure
d'organigramme d'entreprise en d'autres termes).
Pour faire cela, ajoutons cette table un champ strResponsable avec un champ de type
Integer. Ensuite dans la fentre des relations, ajoutons une deuxime fois la table tblVendeurs
(ce qui s'appelle techniquement un "alias de table"):

Remarque: Il est important de ne pas activer l'intgrit rfrentielle car il y a aura


normalement toujours au moins un employ qui n'auras pas de suprieur.
Dans la table tblVendeurs allez dans les proprits du champ strResponsable et activez les
options suivantes:
MS Office Access

99/564

Vincent ISOZ

Ensuite ditez la requte de liste de choix strResponsable en y crivant:


SELECT [idVendeurs], [strNom] & " " & [strPrenom] AS Resp FROM tblVendeurs
De retour dans votre table tblVendeurs, vous aurez alors le rsultat attendu:

et si nous cliquons sur les petits en slectionnant la table tblVendeurs nous avons alors un
visuel de l'organigramme (cellulaire) de vendeurs:

MS Office Access

100/564

Vincent ISOZ

5.8 Relations d'hritage et composites


Il existe encore d'autres types de relations comme les "relations composites" ou "relations
d'hritage" (utilises dans la modlisation objet) ainsi que les relations de "sousnumrotation" mais elles ncessitent des connaissances telles pour les appliquer tant un cas
concret que le dveloppeur amateur ne travaille ds lors plus sous MS Access normalement et
se trouve ds lors tre plus un ingnieur qu'un utilisateur bureautique.
Exemple de relation d'hritage pour la culture gnrale du lecteur:

Exemple de relation composite pour la culture gnrale du lecteur:

MS Office Access

101/564

Vincent ISOZ

5.9 Index simples et combins


Pour que MS Access puisse accder directement des enregistrements sans devoir lire chaque
enregistrement du dbut la fin d'une table (par le moteur JET/Microsoft Jet Database
Engine), les index peuvent tre utiliss. L'indexation acclre ainsi la recherche et le tri
d'enregistrements.
Un index dans une base de donnes est comparable l'index d'un livre dans lequel les
numros de pages sont indiqus pour certaines expressions. Si vous recherchez une
expression dans un livre, vous avez les possibilits suivantes:
1. Lire chaque page (1, 2, 3, ..) jusqu' ce que vous ayez trouv l'expression recherche.
2. Consulter l'index pour trouver le numro de la page o se trouve l'expression
recherche.
Derrire chaque table de donnes se cache un index dans lequel Access fait rfrence
chaque enregistrement d'une ligne donne. A chaque fois qu'une requte sera effectue dans la
table, celle-ci sera plus ou moins longue en fonction du type d'index et non du contenu de la
table.
Vous devriez crer un index pour tous les champs ou combinaisons de champs avec lesquels
vous rechercherez ou trierez souvent. Et notamment sur les champs cls primaires et cls
trangres.
Considrez toujours que chaque index provoque un ralentissement de la saisie ou de la
modification des donnes. En arrire-plan, MS Access doit automatique mettre jour toutes
les tables d'index. En plus, chaque table d'index occupe de la place sur le disque dur.
Un index est cr automatiquement ds que vous dfinissez une cl primaire. Sinon, pour
crer (ou changer) un index, il suffit d'aller dans une table en mode cration et dans le champ
Index choisir Non, Oui (avec doublons) ou Oui (sans doublons).

MS Office Access

102/564

Vincent ISOZ

Ouvrez la table tblClients, basculez en Mode cration. Cliquez sur le bouton mis en vidence
ci-dessous et observez les options qui vous sont offertes:

Remarque: Lisez galement le contenu de votre support et l'aide lectronique intgre MS


Access au sujet des index.
Testez, comme exercice, avec la table tblClients le bon fonctionnement d'une cl simple sur le
champ strNom et d'une cl combine sur les champs strNom et strPrenom.
Mthode typique avec le Nom et le Prnom de la table tblVendeurs:

Cliquez sur le bouton de gestion des index

MS Office Access

et crez la structure suivante:

103/564

Vincent ISOZ

Attention
!!

Le fait de ne pas mettre d'index la deuxime ligne a pour effet (au mme titre que pour les
macros que nous verrons plus loin) de cumuler l'index, et ainsi de le combiner, entre strNom
et strPrenom.

MS Office Access

104/564

Vincent ISOZ

6 Formulaires (simples)
Les formulaires sont des objets importants dans MS Access. Effectivement, ce sont eux qui
vont permettre l'utilisateur de la base de donnes de gagner du temps relativement ces
besoins quotidiens. De plus, il est connu que lorsqu'une application est conviviale, elle est
beaucoup plus apprcie par les utilisateurs.
Remarques:
R1. Les formulaires (et la partie "configuration de l'esthtique des formulaires") sont aussi
traits dans le chapitre "Interfaage de l'application" (voir page 235) de ce support.
R2. Ne crez jamais de formulaires en les mettant en mode "pleine fentre" ce n'est pas du
tout une bonne mthode de travail pour des raisons de compatibilit et de veille
technologique.
R3. Essayez toujours de faire des formulaires (interfaces) aussi petits que possibles car de
plus en plus d'entreprises quipent leurs employs en PDA quips de Windows CE et d'un
runtime MS Access. Nous verrons tout la fin du document quoi ressemble notre base de
donnes sur un SmartPhone Qtek 9090 quip du logiciel DB Anywhere
(www.handango.com) permettant de synchroniser et convertir les bases MS Access au format
CDB.

6.1 Choix de la mthode d'affichage des formulaires


Depuis Microsoft Access 2007 les formulaires s'affichent en mode non-modal en tant
qu'onglets dans la fentre principale de Microsoft Access comme le montre la capture d'cran
de la base Les Comptoirs ci-dessous:

MS Office Access

105/564

Vincent ISOZ

Le ct pratique des ces onglets c'est qu'ils que mme si un formulaire est devant un autre,
nous savons qu'il y en a derrire. Nous pouvons au mme titre qu' l'poque o nous avions
les fentres des formulaires modales passer de l'un l'autre par le raccourci Ctrl+F6 mais
part cela, beaucoup de concepteurs n'aiment pas cette nouvelle prsentation. Pour revenir
alors la version classique, il faut aller dans les options du logiciel:

MS Office Access

106/564

Vincent ISOZ
Ensuite:

et libre vous de faire le choix qui convient.

6.2 Filtre par formulaire


Attention!!!
1. La fonctionnalit dcrite ci-dessous ne marche pas en mode Runtime ni en mode
*.mde!!!
2. Le filtre par formulaire une fois activ, dsactive tous les boutons prsents sur le
formulaire et cela ne semble pas pouvoir a priori tre contourn (donc impossible de
crer un bouton pour appliquer un filtre par formulaire ou pour charger une filtre
d'une requte)
Nous allons maintenant voir un outil fort utile pour l'utilisateur de la base de donnes !!!
Ouvrez le formulaire instantan frmSorties.
Cliquez sur le bouton
pour activer le Filtre par formulaire. Dfinissez un ou plusieurs
critres (observez l'onglet "Ou" se situant en-bas du formulaire !!!) tel que prsent ci-dessous
(c'est une version un peu plus labore du formulaire frmSorties que vous n'avez pas
ncessairement mais le principe est le mme):

MS Office Access

107/564

Vincent ISOZ

Activez ensuite le filtre en cliquant sur le bouton

A chaque critre supplmentaire un nouvel onglet OR s'ajoute:

Si vous en avez plusieurs et que vous souhaitez en supprimer un en particulier, il suffit de


faire un clic droit et choisir Delete Tab:

Vous verrez que le formulaire ne vous indique plus que les enregistrements qui satisfont aux
critres choisis. Vous pouvez maintenant les parcourir et les modifier comme lorsque vous
travaillez avec un formulaire normal.
Remarque: Ce "filtre par formulaire" comme son nom ne l'indique pas, fonctionne aussi
partir des tables directement (pour les personnes intresses):

MS Office Access

108/564

Vincent ISOZ

Un autre intrt des filtres par formulaire est qu'il est possible de sauvegarder (avec leurs tris!)
ceux-ci sans avoir connaissance du concept de "requte". Pour ce faire, une fois le filtre par
formulaire cr, il suffit en haut gauche de l'cran de cliquer sur le bouton:

qui vous demandera sous quel nom vous souhaitez enregistrer les paramtres du filtre par
formulaire en cours. Plus tard, (le lendemain, la semaine prochaine) vous pourrez ainsi
tout moment rouvrir ce filtre enregistr en cliquant sur:

et en choisissant dans la liste qui se proposera vous dans la bote de dialogue suivante:

le filtre que vous souhaitez rutiliser s'il y en un! Mais attention!!!! vous perdrez les tris si
vous chargez le filtre en mode Filtre par formulaire lorsque vous tes dans une table. Si vous
souhaitez contourner cette limitation, lorsque vous tes dans le formulaire il faut passer par le
menu:

et aller en mode Advanced Filter/Sort et depuis l charger la requte prcdemment


enregistre. Vous pourrez alors retrouver votre filtre et votre requte!
Il y a cependant une autre possibilit d'activer un filtre et de trier des donnes qu'en passant
par un "Filtre par formulaire" mais il n'est quasiment jamais connu pas les utilisateurs lambda:

MS Office Access

109/564

Vincent ISOZ
Sur un formulaire quelconque on peut par clique droit de la souris (si cette action a t
autorise par l'administrateur de la base de donnes) activer les options que nous avons dj
vues prcdemment tel que l'on ait l'cran la mme chose que ce qui est reprsent sur la
figure de la page suivante.

La mconnaissance de cette fonction implique la ncessit de crer des formulaires spciaux


dans votre base de donnes faisant office de "Guide de l'utilisateur".

MS Office Access

110/564

Vincent ISOZ

6.3 Formulaire en mode design


Crez un petit guide d'utilisateur sur le futur formulaire d'accueil de votre base de donnes
(saisissez galement votre nom, prnom et adresse e-mail pour le helpdesk dans un champ de
lgende).
A faire avec votre formateur.

6.4 Cration de boutons de formulaires


Si l'on revient cependant notre filtre par formulaire, nous avons vu que le problme rside
dans le fait que l'utilisateur de la base (en supposant que vous en tes le responsable) ne sait
pas ncessairement que cet outil (et tous ceux que nous avons vu prcdemment) existe et
qu'il est disponible dans la barre d'outils. C'est pourquoi, nous allons tout de suite voir
comment ajouter des boutons sur le formulaire, qui permettront:
1. D'activer le filtrage des donnes (nous avons dj fait un travail quivalent dans un des
exercices prcdents!).
2. De modifier les proprits du filtre
Pour l'exemple nous utiliserons le formulaire suivant:

Nous le passons en mode cration:

MS Office Access

111/564

Vincent ISOZ

Ensuite, dans le ruban Cration, nous cliquons sur le contrle de type Bouton:

Ensuite nous dessinon un bout l'endroit de notre choix:

MS Office Access

112/564

Vincent ISOZ
Une fois que nous lachons le bouton gauche de la souris un assistant vient et nous prenons
alors la catgorie Opration sur formulaire avec l'action Appliquer le filtre d'un formulaire:

la prochaine tape aprs avoir cliqu sur Suivant, nous prenons:

Nous cliquons ensuite sur Suivant et donnons un nom au bouton:

MS Office Access

113/564

Vincent ISOZ

Ensuite, nous cliquons sur Terminer. Cependant le bouton ne fera pas un filtre par fomulaire...
il faut alors aller modifier l'action de l'vnement Sur clic associe:

Nous arrivons alors (du moins depuis la version 2010 de Microsoft Access):

MS Office Access

114/564

Vincent ISOZ

Nous ouvront la liste droulante pour aller chercher l'action:

Une fois ceci fait, nous cliquons sur le bouton Fermer:

MS Office Access

115/564

Vincent ISOZ
et la question qui vient:

Nous cliquons sur Oui. Ensuite nous repassons le formulaire en mode Formulaire:

Ce qui donne aprs que nous ayons cliqu sur ce nouveau bouton:

MS Office Access

116/564

Vincent ISOZ
Donc cela marche. Maintenant il nous faut un bouton pour appliquer les critres de
l'utilisateur. Nous recommenons la procdure depuis le dbut mais en prenant cette fois-ci:

et:

Une fois que nous arrivons la fin nous obtenons:

MS Office Access

117/564

Vincent ISOZ

Le problme est qu'activer le filtre par formulaire dsactive les boutons prsents sur le
formulaire... (voir les remarques en rouge au dbut de cette section). Donc nous sommes
coincs... Il semblerait que seule possibilit soit de crer un ruban contextuel ou une barre
d'outils contextuel mais cela sort du cadre de ce chapitre.
C'est pourquoi nous allons voir, ds maintenant, comment manipuler correctement un outil
aussi puissant et pratique que sont les filtres par requtes.

6.5 Filtres requtes


Crez un formulaire pour la table tblSorties enregistrez-le sous le mme nom. Ensuite, crez
deux filtres distincts pour les articles sortis durant l'anne 1997 et 1996 que vous enregistrerez
respectivement dans deux requtes diffrentes (qryArtSort1997 et qryArtSort1996).
Passez votre formulaire frmSorties en mode cration et ajoutez deux boutons qui excuteront
respectivement ces deux "filtres-requtes".
Ce qui est bien sr regrettable, c'est que l'utilisateur ne peut choisir facilement les dates
voulues. Nous verrons comment pallier ce problme en utilisant toute la puissance des objets
de type "Requtes" ds que nous les tudierons en dtail.
Cependant, afin que vous ne soyez pas frustr, regardez ce que va faire votre formateur pour
ajouter de l'interactivit avec l'utilisateur et vous verrez que cela est "simple comme bonjour".

6.6 Outil recherche


Il est trs frquent que l'on doive chercher des donnes dans une base. Pour cela, il faut que
l'utilisateur ait les outils ncessaires sa disposition. Et il en a quatre:
1. l'outil de recherche (recherche et remplacer) inclut dans MS Access et disponible par
l'accs au menu Edition ou par la barre d'outils mais inconnu des utilisateurs lambda

MS Office Access

118/564

Vincent ISOZ
2. l'outil de recherche (recherche et remplacer) inclus dans MS Access mais dont vous
avez cr un raccourci sur le formulaire l'aide de l'assistant de boutons.
3. l'outil de recherche par listes (combo box ou list box) inclus dans MS Access mais
dont vous avez cr l'accs en utilisant l'assistant correspondant de la bote outils
contrle (voir plus loin)
4. le dveloppement d'un formulaire spcial ddi la recherche derrire lequel se cache
du code VBA (si la recherche est labore)

Voyons comment marchent les deux premires options (la troisime est vue beaucoup plus
loin en cours).

6.7 ComboBox de recherche


Nous allons maintenant crer un petit (tout petit) et trs simple outil de recherche sur notre
formulaire (qui peut se substituer au Rechercher/Remplacer).
Pour cela, placez votre formulaire en "Mode Cration" et utilisez la palette d'outils pour
ajouter une ComboBox (suivez la dmarche de votre formateur et prenez des notes car c'est
une fonction importante).
Une fois la ComboBox place ( un endroit qui au niveau de la surface le permet), la fentre
ci-dessous doit apparatre:

MS Office Access

119/564

Vincent ISOZ

Choisissez la troisime option, cliquez sur "Suivant" et choisissez l'lment de votre


formulaire qui va servir de critre de recherche (le champ Dsignation serait un bon choix..).
Et voil ce dont quoi le rsultat devrait ressembler:

Il suffit maintenant de choisir un champ dans la liste pour accder directement au premier
enregistrement correspondant.
Remarques:
R1. Vous pouvez ajouter autant de "listes de recherche" que vous dsirez
R2. Plusieurs listes de recherche ne cumulent pas les critres (ET logique)
R3. Cette fonctionnalit marche galement en mode "tabulaire" sans cacher toutefois les
enregistrements qui ne correspondent pas au critre (MS Access se positionne seulement sur
l'enregistrement intress).

MS Office Access

120/564

Vincent ISOZ
R4. Pour appliquer un filtre plus complexe, prenregistr, il faudra d'abord que nous tudions
comment crer des requtes paramtres simples et ensuite comment crer une macro utilisant
l'option "Appliquer un filtre".
Ce dernier point consiste en un joli exercice de style qui n'est pas vraiment prvu dans la
formation faute de temps. Mais cependant, si une majorit de participants souhaitent voir
comme cela marche, il faudra qu'ils s'accrochent (dans le cadre d'un cours de base) leurs
stylos et qu'ils soient prts sacrifier 20 40 minutes sur le programme prvu. Sinon, si le
participant au cours souhaite y revenir lors d'une formation avance il faudra qu'il prenne
garde rappeler le formateur d'avoir l'obligeance de montrer cette fonctionnalit (eh oui !
j'oublie parfois tellement il y de choses montrer).

6.8 Groupes d'options


Et les boutons d'option ? Qu'en est-il ? Eh bien c'est simple, crons dans la table vendeurs un
nouveau champ nomm IntGenre de type Integer.
Ensuite, dans le formulaire, relatif la saisie de nouveaux vendeurs, passez en mode cration
et slectionnez la bote de regroupement dans la barre d'outils:

Dfinissez une telle zone un endroit voulu du formulaire. Ceci fait, la bote de dialogue
suivant apparat:

Prcisez que vous ne voulez aucune valeur par dfaut:

MS Office Access

121/564

Vincent ISOZ

Ensuite vous arrivez la fentre suivante (o il est inutile dans cet exemple de changer quoi
que ce soit):

Ensuite, il faut bien videmment choisir le champ dans lequel va tre enregistre cette valeur,
en l'occurrence intGenre:

MS Office Access

122/564

Vincent ISOZ
Ensuite, vous avez plein de choix intressants et pertinents pour l'aspect visuel::

Il suffit ensuite de donner une lgende au groupe et vous obtenez finalement un formulaire du
type:

6.9 Champs calculs


Imaginons le scnario suivant: un collgue vous demande de pouvoir visualiser dans la table
articles le prix de 1 MOQ (en d'autres termes: les prix l'unit multipli par la quantit
minimale). Comment allez-vous procder pour afficher cette information dans le formulaire
qui affichera les informations relatives la base MS Access?

6.10 ListBox de recherche


Crez un formulaire pour la saisie de nouveaux articles et insrez une liste de recherche de
manire avoir la chose suivant l'cran (c'est plus courant que la liste droulante):

MS Office Access

123/564

Vincent ISOZ

6.11 Fonction DSum


Considrons le formulaire (pas fini!) des sorties des articles ci-dessous:

Les questions sont les suivantes:


1. Comment afficher toute la quantit du nombre d'units vendue de tous les types
d'articles
2. Comment afficher dans ce formulaire pour un article donn le nombre total d'units
vendues ?
3. Idem que (2) mais le nombre restant ?
Pour les autres, l'ide va consister utiliser la fonction DSum (en anglais) et Sum de la
manire suivant dans des champs que vous aurez cr (vous allez voir que la manire dont
nous avons nomm les champs peut porter confusion d'o l'importance d'une stratgie de
nommage):

MS Office Access

124/564

Vincent ISOZ

et il est bien videmment possible d'utiliser d'autres fonctions que Sum pour faire des
statistiques de la mme table que celle sur laquelle est principalement bas le formulaire.
Remarque: Si pour le critre de la fonction DSum vous avez deux champs qui ont le mme
nom, spcifiez en suffixe la provenance (nom de la table ou de la requte entre crochets).

6.12 Fonction DCount


La fonction DCount a une syntaxe en tout point similaire la fonction DSum. Elle compte
simplement le nombre d'enregistrements au lieu de sommer leur valeur.
Elle peut tre trs pratique dans le cadre des macros. Effectivement, il est relativement ais
dans le formulaire de saisie des nouveaux clients ou vendeurs de faire en sorte que lorsque
l'utilisateur quitte le champ strNom, la macro contrle s'il existe dj un vendeur du mme
nom (bon on peut faire pareil avec les index multiples mais l'ide peut tre dveloppe dans
d'autres cas d'applications).
Un exemple qui peut tre fait avec votre formateur dans le cadre du formulaire de saisie de
nouveaux clients:

MS Office Access

125/564

Vincent ISOZ

6.13 Fonction IIf (formulaire)


Nous allons voir maintenant l'quivalent de la fonction SI connue dans MS Excel mais en
version MS Access. Pour cela, nous allons crer un champ dans le formulaire frmArticles qui
affiche "Trop cher" si le prix l'unit est suprieur 100.- ou "OK" lors que le prix en est
infrieur.
Remarque: la fonction SI dans MS Access est nomme VraiFaux ou IIF en anglais:

6.14 Fonctions d'environnement


Signalons encore deux fonctions trs utiles dans les formulaires, requtes ou rapports (cette
fonction ne marche pas dans les tables!):
=Environ("username")
qui renvoie le nom de l'utilisateur de la session. Ou si elle ne fonctionne pas:
=CurrentUser( )

6.15 Fonction DLookUp


Petit exercice de style et trs demand (ainsi que dcouverte d'une des fonctions les plus
puissantes de MS Access):
Comment afficher (par exemple) sur le formulaire de saisie d'articles, le plus simplement et
esthtiquement possible, pour chaque article le nom du fournisseur (et non pas l'id !)
correspondant un article donn tel que prsent ci-dessous (et pas autrement mis part
l'emplacement du champ quelque chose prt):

Essayez tout d'abord avec l'assistant de formulaire de trouver le rsultat

MS Office Access

126/564

Vincent ISOZ
Remarque: si vous avez dj le nom du fournisseur (car cela dpend de votre choix antrieur
lors du cours de base o nous faisons exprs de crer des erreurs !) faites en sorte d'avoir le
dlai de livraison qui s'affiche sur le formulaire en fonction du nom du fournisseur.
La solution (il faut bien que vous l'ayez quelque part mais ne "trichez" pas en passant tout de
suite celle-ci sinon vous ne verrez pas l'intrt de l'exercice) consiste utiliser la trs
fameuse fonction DLOOKUP (RechDom en franais) de MS Access et dans un nouveau
champ, d'crire la fonction suivante:

Faites de sortes que toutes les "champs calculs" soient verrouilles et inactifs afin que
l'utilisateur ne puisse pas cliquer dedans (c'est une opration qu'il faut aussi savoir faire dans
les formulaires ressortant de requtes comme nous le verrons plus tard).
En tant qu'exercice, refaites de mme que prcdemment mais avec le dlai de livraison (c'est
plus pertinent) ainsi qu'avec le canton de localisation du fournisseur et le pays.
Petite remarque ! Rappelez-vous qu'au cours de base nous avions fait exprs de mettre les cls
primaires au mauvais endroit dans les tables tblPays et tblCantons. Nous vous demandons ds
lors la chose suivante afin de vous exercer nouveau avec les concepts de cls primaires:
1. Pour le canton, ne changez rien
2. Pour le pays, corrigez l'emplacement de la cl primaire
Quelles sont les diffrences ds lors au niveau de l'utilisation de la fonction DLookUp ?

6.16 Onglets
Lorsque vous avez trop de donnes reprsenter dans vos formulaires, vous avez la
possibilit dans les formulaires de MS Access d'ajouter des zones d'onglets pour ranger vos
champs par dfaut ou vos champs supplmentaires.

MS Office Access

127/564

Vincent ISOZ
Crez un formulaire automatique de la table tblClients par exemple (elle contient peu
d'informations mais nous ferons avec):

et passez en mode cration. Sur la bote outils vous avez le bouton suivant:

Dans votre formulaire faites un peu de place (en supprimant les champs que vous voudrez
dans les onglets !) pour les futurs onglets et insrez en un en le dessinant (comme vous le
feriez dans MS Word):

MS Office Access

128/564

Vincent ISOZ

Dans un premier temps, pour renommer, supprimer ou ajouter des onglets, il suffit de faire un
clic droit sur le nom de ceux-ci tel que:

aussi simple que a


Pour mettre les champs par dfaut de la table dans les onglets, il suffit de les y glisser depuis
la fentre des champs (voir page suivante):

MS Office Access

129/564

Vincent ISOZ

6.17 Valeurs par dfaut et filtres


Si cela n'est pas dj fait, faites en sorte que l'employer puisse spcifier pour un vendeur les
langues maitrises ainsi que la liste des comptences tel que:

Comment faire en sorte que dans le formulaire vendeurs, nous puissions saisir
indpendamment les langues et les comptences d'un vendeur donn ?
1. Crer un formulaire en mode tabulaire de la table tblCompetencesV (avec les champs
strCompetences et tblVendeursId) et l'enregistrer sous le nom frmComptencesV

MS Office Access

130/564

Vincent ISOZ
2. Crer un formulaire en mode tabulaire de la table tblLanguesV (avec les champs
strLangues et tblVendeursId) et l'enregistrer sous le nom frmLanguesV
3. Crer un formulaire en mode simple (avec le champ IdVendeurs) de la table
tblVendeurs
Ainsi (pour l'esthtique nous vous laissons faire):

Passez maintenant le formulaire frmVendeurs en mode cration et avec l'assistant de cration


de boutons, crez un bouton pour ouvrir le formulaire de langues frmLanguesV .
Ensuite, dans le formulaire frmLanguesV dans le champ tblVendeurId crivez la formule:
=[Forms]![frmVendeurs]![idVendeurs]
et de mme pour les comptences. Ensuite, il vous suffit de masquer l'utilisateur les champs
inutiles pour lui et voil que le systme fonctionne maintenant parfaitement.

MS Office Access

131/564

Vincent ISOZ

7 Requtes (simples)
Attention! Enregistrez toujours une requte avant de l'excuter et veillez respecter la
nomenclature de L-R.
MS Access dispose d'un des QBE (Query By Example) les plus souples et les plus puissants
du march. Il est aussi facilement abordable par un dbutant capable de crer tous types de
requtes d'actions, d'analyses croises ou d'union.
Il est aussi trs simple de crer des requtes imbriques en enregistrant la premire puis en
l'appelant par son nom, dans la requte parent. Non seulement, cette fonctionnalit permet
d'optimiser des requtes complexes comme on peut le faire en SQL (Structured Query
Language), mais elle clarifie la vue d'ensemble et permet une mise au point par tapes: tester
d'abord le niveau le plus bas, puis remonter
Sans parler des assistants qui font gagner un temps prcieux: recherche de doublons
Ce QBE est tellement rapide et simple que, si j'ai l'obligation, dans un programme VB, C#,
ASP, PHP ou autre de manipuler du code SQL, je n'hsite jamais :
1. Ouvrir une base MS Access
2. Attacher les tables ncessaires
3. Crer une requte afin d'obtenir le rsultat dsir
4. Afficher les donnes pour vrifier que les rsultats correspondant aux attentes
5. Copier le code SQL dans l'application VB, C#, ASP, PHP ou mme SQL Server
6. Remplacer les valeurs paramtres par des noms de variables
Diffrences entre filtres et requtes:
Slection des donnes
Enregistrement

Utilisation

MS Office Access

Filtres
Une table est filtre par ligne
pour une table unique
Le filtre est enregistr dans la
table et ne peut tre consult
qu'en ayant la table l'cran.

Pour la slection rapide et


simple d'enregistrements en
mode cration.

Requtes
Une requte peut tre cre
pour plusieurs tables d'un coup
La requte est lie une tablerequte gnre
automatiquement chaque
excution de la requte et peut
tre visualise dans un
formulaire.
Pour l'affichage et la saisie
d'enregistrements en fonction
de plusieurs critres dans des
formulaires lis la tablerequte.

132/564

Vincent ISOZ
Les requtes sont plutt utilises pour que l'utilisateur puisse modifier une donne ou
visualiser les enregistrements d'une table partir du mode de cration ou d'un formulaire. En
aucun cas, il ne s'agit (communment en tout cas) d'un outil qui doit amener faire de la
saisie.
Il existe plusieurs types de requtes diffrencies sous MS Access (votre formateur va vous
dire de quoi il s'agit et comment utiliser l'aide dans le cadre de MS Office 2003 et du code
SQL):
1. Requtes de slection
2. Requtes d'ajout
3. Requtes de synthse
4. Requtes croises
5. Requtes de cration
6. Requtes de suppression
7. Requtes de mise jour
8. Requte de correspondance
9. Requte de non-correspondance
10. Requtes d'union ( coder en SQL)
11. Requtes de passage (pour excution sur SQL Server sans passer par Jet)
12. Requtes de dfinition ( coder en SQL)

Dans une "requte de synthse" (dans le cas de donnes numriques) on peut calculer des
totaux, moyennes et autres (il y aura un exercice l-dessus).
La case cocher dans le mode cration des requtes permet de se servir d'un champ comme
critre de la requte tout en l'obligeant ne pas s'afficher dans la table rsultant de la
compilation de la requte (et dans le formulaire rattach).

MS Office Access

133/564

Vincent ISOZ
Pour lancer une requte, il suffit de cliquer sur le bouton:

Dans les cellules de la ligne de "Critres" il est possible de dfinir des ingalits qui tabliront
si un champ d'un enregistrement sera affich dans la table compile ou non. Par exemple, si
nous souhaitons afficher un enregistrement uniquement s'il satisfait une certaine ingalit
donne par des oprations mathmatiques en relation d'autres champs du mme
enregistrement. Ainsi dans la ligne de critres on crira quelque chose du genre:
[Nom d'un premier champ]/[Nom d'un deuxime champ]*[Nom d'un troisime champ]>100
Si cette ingalit est satisfaite alors le champ correspondant la colonne de critre o l'on a
saisi cette formule sera affich.
On peut galement crer dans la table compile, une nouvelle colonne avec un "champ
calcul". Ainsi, dans la ligne Champ on crira:
NomNewColumn:[Champ existant]/Nombre voulu
Cela aura pour effet de crer lors de la compilation de la requte, une nouvelle colonne
nomme "NomNewColumn" avec les rsultats du calcul saisi.
Remarques:
R1. Nous n'allons voir ici que les requtes "simples". Les autres seront vues dans le chapitre
nomm "Requte et jointures" (voir page 199).
R2. Le lecteur remarquera lors de l'utilisation des assistants d'Access qu'il est possible
d'utiliser une requte dans une requte et de la mlanger avec des tables pour faire des
analyses pertinentes.

7.1 Optimisation des requtes


Signalons pour la culture gnrale qu'il y a plusieurs manires d'optimiser la rapidit
d'excution des requtes (quand on traite quelques millions de donnes cela devient utile!):
1. Augmenter la puissance des ordinateurs (logique)
2. Effectuer des modifications de la base de registre MS Windows
3. Dsactiver les messages d'avertissement de MS Access (ralentit considrablement)
Nous approfondirons un peu plus le sujet dans le chapitre 35.

MS Office Access

134/564

Vincent ISOZ

7.2 Requte simple (de projection)


Dfinitions:
D1. Une "requte de slection" est une requte qui produit une nouvelle table tant un sousensemble de la table originale selon des critres appliqus sur certains champs (l'oprateur
d'algbre relationnel correspondant est ).
D2. Une "requte de projection" est une requte qui produit une nouvelle table qui est un
sous-ensemble de la table originale selon un ou des champs slectionns (l'oprateur d'algbre
relationnel correspondant est ).
Avec l'assistant requtes crez une "Requte Simple" (voir qu'il existe galement une requte
pour les doublons comme on en avait parl auparavant) pour la table tblArticles ne contenant
que les champs du numro d'article et du prix unitaire. Enregistrez la requte sous le nom
qryPrixArticle et crez-en un formulaire instantan. Fermez le formulaire instantan sans
l'enregistrer.
Question: pouvons-nous rajouter de nouveaux articles partir du formulaire de la requte.
Argumentez votre rponse !
Remarque: Le raccourci clavier pour passer d'une vue de requte l'autre est "Ctrl+Point" et
"Ctrl+Virgule" pour avancer ou reculer dans les vues. Dans la partie Macros du prsent
ouvrage, on verra comment crer un unique raccourci pour excuter les requtes.
Avant de commencer faire une requte quelconque, vitez de cocher l'option Tous les
champs suivante dans la configuration du logiciel:

Effectivement, partir du moment o vous cochez cette case, toutes les nouvelles requtes
que vous crrez vous afficheront TOUS les champs des tables prsents dans la requte lors
de son excuation mme ceux que vous n'auraz pas slectionn comme devant s'afficher...

7.3 Tris dans les requtes


D'abord, il faut savoir que MS Access applique les options de tris dans l'ordre dans lequel se
trouvent les colonnes de la requte.
Ensuite, le but de cette petite section est de parler de deux problmes courants des tris avec les
requtes.
Le premier problme ne ncessite gure de capture d'cran car il se rsume au simple fait de
devoir faire attention ce que vos donnes dans vos tables n'aient pas des espaces vides avant
ou aprs les saisies sinon quoi vous aurez forcment des surprises!
Le deuxime problme est un peut subtil. Considrons la requte de projection suivante:

MS Office Access

135/564

Vincent ISOZ

et excutons-la. Nous avons alors:

la surprise de beaucoup d'utilisateur MS Access, la colonne client n'est pas trie. Au fait
c'est normal car le moteur de requte utilise le numro de la cl primaire des clients
provenant de la table tblClients pour faire le tri et non le nom des clients eux-mmes! Il faut
donc aller chercher la table tblClients pour la rajouter dans la requte et prendre le champ
strNom:

MS Office Access

136/564

Vincent ISOZ

et ds lors le rsultat sera conforme!


Observez ensuite ce qu'il se passe si vous changera le nom d'un champ (attribut) dans l'une
des tables qu'utilise la requte. Est-ce que la requte fonctionnera toujours?

7.4 Requte multitable sans liaisons


Crez la requte suivante qryMultitablesSLiaisons et essayez d'argumenter le nombre de
lignes obtenu dans le rsultat par rapport au nombre de lignes chacune des tables respectives
(est-il juste, est-il faux, pourquoi?, qu'est-ce qui se passe?):

MS Office Access

137/564

Vincent ISOZ

7.5 Requte multitable avec liaisons


Crez la requte suivante qryMultitablesALiaisons et essayez d'argumenter le nombre de
lignes obtenu dans le rsultat par rapport au nombre de lignes chacune des tables respectives
(est-il juste, est-il faux, pourquoi?, qu'est-ce qui se passe?):

MS Office Access

138/564

Vincent ISOZ

7.6 Requte de distinction


Faites en sorte d'avoir une requte nomme qryDistinction qui affiche, sans doublons, la liste
des articles vendus:

Remarque: Il existe une autre possibilit qui consiste utiliser le regroupement comme va
vous le montrer votre formateur (requte enregistrer sous le nom de
qryDistinctionGroupee), mais normalement cette dernire technique devrait plutt tre
rserve pour des calculs arithmtiques.
Vrifiez si en crant un formulaire des deux requtes prcdentes, vous pouvez oui ou non
crer de nouvelles donnes. Argumentez votre observation!

7.7 Cinq premiers


Crez une requte qui affiche le nom des articles et leur prix seulement (sous le nom qryTop)
et faites en sorte que seulement les 5 plus coteux articles apparaissent dans le rsultat de la
requte:

MS Office Access

139/564

Vincent ISOZ

Remarque: le champ en question doit tre au pralable tri si nous voulons les X premiers
(ordre dcroissants) ou X derniers (ordre croissant).

7.8 Requte avec critre


Modifiez manuellement la requte nomme qryPrixArticles afin qu'elle affiche uniquement
les champs du numro d'article et de prix unitaire de tous les articles dont le prix dpasse CHF
10.- (ne pas oublier de cliquer sur le bouton point d'exclamation pour lancer la requte). Crez
un formulaire instantan, observez le rsultat et fermez ce dernier sans l'enregistrer.

Pour le prochain exemple important considrons notre table des vendeurs:

MS Office Access

140/564

Vincent ISOZ

Si on cre la requte suivante:

MS Office Access

141/564

Vincent ISOZ
En excutant:

et en laissant vide on obtient:

Donc tous les clients sauf ceux qui n'ont pas de Nom. Pour contourner cela, nous changeons
notre requte comme suit:

7.9 Requte concatnation dans liste de choix


Lorsque vous crez une liste de choix entre tblSorties et tblClients pour faire du mme coup
une relation, vous avez alors le rsultat suivant:

MS Office Access

142/564

Vincent ISOZ

Le problme est alors lorsque la slection d'un client est effectue, seulement la premire
colonne de la liste de choix, apparat dans la cellule de la table (respectivement dans le champ
du formulaire.. pour les formulaires). Pour rsoudre ceci, il suffit de faire une modification
dans une requte qu'Access aura cre automatiquement pour vous lors de la cration de la
liste de choix
Effectivement, dans les paramtres de la liste, cliquez sur:

Apparat alors:

Changez la requte comme indiqu ci-dessous:

Ensuite, fermez la fentre de la requte (confirmez les changements) et de retour dans les
proprits de la liste choix, changez l'option Nbre Colonnes :

la valeur 2 !

MS Office Access

143/564

Vincent ISOZ
Vous obtenez alors le rsultat suivant:

7.10 Colonne calcule


Crez une autre requte nomme qryArticlesRequeteSpeciale affichant tous les articles dont le
prix dpasse 10.-. En plus des champs de numro d'article et du prix unitaire, la table
compile devra contenir un nouveau champ calcul nomm intTva dans lequel la TVA
(7.5%), applique sur les prix unitaires, sera calcule (mettre la colonne TVA au format
montaire en cliquant sur la formule avec le bouton droit de la souris: Proprits/Format au
besoin excuter la requte avant de dfinir l'option d'affichage de deux dcimales).

7.11 Critres multiples


Crez une requte nomme qryCibleFournisseurs qui doit pouvoir permettre un utilisateur
de visualiser dans un formulaire les noms des fournisseurs qui ont un M.O.Q (Minimal Order
Quantity) infrieur 100 articles dont le prix par unit est suprieur 10.-. Faites galement
en sorte que ces fournisseurs soient tris dans l'ordre croissant du nombre de quantits
commandes. En plus, on doit voir dans le formulaire qui ressortira de cette requte,
uniquement le nom du fournisseur, le prix unitaire de ses articles et leur dsignation.
Pour faire cet exercice il vous faudra insrer les deux tables tblFournisseurs et tblArticles
dans la requte (pour rajouter un table cliquer sur le bouton

MS Office Access

144/564

Vincent ISOZ

Croissant

Comme vous pouvez le voir sur la figure ci-dessus, les deux tables sont relies entre elles.
Avant de voir en quoi cela consiste, excutez votre requte sans la liaison, crez-en un
formulaire instantan que vous enregistrerez sous le nom frmCibleFournisseurs et essayez
d'en tirer une conclusion. Vous verrez que la liaison permet de faire barrire cette absurdit
(nous verrons plus loin, plus en dtail, les diffrentes possibilits).
Si vous essayez de saisir des donnes par l'intermdiaire du formulaire Cible Fournisseurs
vous verrez que l'opration d'ajout d'enregistrements vous sera refuse. Expliquez pourquoi.
Remarque: Attention l'utilisation de la ligne OU, elle implique un doublement des critres
pour fonctionner:

Remarque: Il s'agit du premier exemple utilisant deux tables et il faut savoir que dans le cadre
des requtes que l'on ne doit jamais avoir une table non lie (au cas o il y en aurait plusieurs
bien sr...).
Il existe souvent plusieurs manires d'crire un mme critre. Par exemples les trois requtes
suivantes sont quivalentes:

MS Office Access

145/564

Vincent ISOZ
Il en va de mme pour les trois suivantes:

7.12 Calcul de synthse (d'agrgation)


Nous souhaitons compter le nombre de ventes effectues par l'ensemble des vendeurs l'aide
de la table tblSorties.
Crez pour cela la requte suivante en cliquant lors du mode cration sur le bouton
faire apparatre le champ Total:

pour

7.13 Regroupement et calculs


Le but maintenant est de crer un formulaire (bas sur une requte nomme
qrySommeSorties), qui va permettre l'utilisateur de connatre combien d'articles d'un certain
type ont t vendus et ce en combien de fois.
Pour cela, il vous faut crer une requte base sur la table tblSortie dont on prendra le champ
idSortie, idArticle, intNbUnites
Une fois que vous aurez choisi les champs, il faudra choisir dans l'assistant le bouton radio
intitul "De synthse" et cliquer sur le bouton "Options de synthse". Validez ensuite les
champs Somme et Compter les enregistrements de Sorties.

MS Office Access

146/564

Vincent ISOZ

Si vous terminez l'assistant et excutez la requte, vous y trouverez une "erreur" (introduite
exprs par le formateur dans l'nonc de l'exercice). Quelle en est l'origine? Comment la
corriger?
Le rsultat dfinitif est le suivant:

Si vous excutez la requte, vous devriez obtenir le rsultat suivant:

MS Office Access

147/564

Vincent ISOZ
Si vous comparez avec le contenu de la table tblSorties, vous verrez que la synthse est bien
correcte.
Exportez le contenu de cette requte dans MS Excel et observez ce qui se passe pour le champ
du code d'article (vous verrez que celui-ci apparat normalement puisque le code fait luimme office de cl primaire).
En tant qu'exercice crez une requte que vous nommerez qryPerformance qui affiche pour
un article donn, le vendeur qui en a vendu le plus et la quantit correspondante (si deux
vendeurs sont galit, nous prendrons le premier dans l'ordre de saisie).
Solution:

Soit:

Attention!! N'utilisez jamais les regroupements dans le but d'avoir une table valeurs
uniques dont l'objectif serait d'tre utiliss dans des listes droulantes de formulaires.
Effectivement, ce type de stratgie vous posera des problmes pour crire avec des macros du
type DfinirValeur. Pour faire en ralit proprement une liste d'lments uniques, il vous faut
utiliser l'option Unique que nous verrons comme exemple plus loin.

7.14 Requte et macro d'export


Crez une requte qryPiege base sur la table tblSorties en prenant tous les champs et toutes
les donnes *.
Crez ensuite une macro pour l'export vers MS Excel de cette requte (voir figure ci-dessous)

MS Office Access

148/564

Vincent ISOZ
Exportez d'abord la table tblSorties vers vers MS Excel manuellement et faites ensuite l'export
de la requte qryPiege avec la macro.
Quelle diffrences pouvez-vous observer entre l'export manuel et l'export avec la macro au
niveau du tableau MS Excel obtenu?
Remarque: Si vous avez Access 2007 ou ultrieur, exportez au format *.xlsx sinon quoi il
peut y avoir une mauvais export de donnes (incomplet).

Remarque: En franais l'quivalent de OutputTo est CopierVers


Si le fichier gnr existe dj l'emplacement spcifi, MS Access vous demandera si vous
souhaitez l'craser:

Si vous ne spcifiez pas de format, lors de l'excution de la macro, le systme demandera


l'utilisateur sous quel format il souhaite l'exporter:

MS Office Access

149/564

Vincent ISOZ

Que constatez-vous pour les champs clients et vendeurs ? Que peut-on en conclure ? Quelles
sont les consquences aprs coup ?
Si vous souhaitez pouvoir exporter plusieurs requtes ou tables dans un mme fichier
MS Excel cela ne fonctionnera pas avec Output To, il vous faudra utiliser l'action suivante
TransferSpreadsheet (TransfrerFeuilleCalcul):

et comme TransfertSpreadsheet n'ouvre pas MS Excel automatiquement il suffit de rajouter


l'action RunApp:

MS Office Access

150/564

Vincent ISOZ

ou dans la Command Line (ExcuterApplication) nous avons typiquement:


C:\Program Files\Microsoft Office\OFFICE11\excel.exe c:\toto.xls
Remarque: Depuis MS Access 2007 et 2010, si vous exportez une table ou requte contenant
un champ date dont la colonne n'est pas assez grande pour afficher toute l'information (vous
aurez donc des: ######), vous vous retrouverez avec un fichier MS Excel o il sera
malheureusement crit physiquement ####... ce qui constitue bien videmment un bug. Il
faudra alors au pralable adapter la colonne de votre table ou requte de manire adquate.

7.15 Requte mise--jour


Nous allons maintenant crer une requte de "Mise jour" qui va augmenter le prix de tous
les articles de la table tblArticles de 10%.

MS Office Access

151/564

Vincent ISOZ
Ce qui est dommage, c'est que si l'on laisse la formule comme reprsente ci-dessus,
l'utilisateur lambda ne pourra pas choisir la valeur de l'augmentation. Pour ajouter un peu
d'interactivit, nous allons plutt crire la chose suivante dans le champ "Mise jour":
[Prix unitaire]*(1+[Saisissez l'augmentation en %]/100)
Enregistrez cette requte sous le nom "Requte mise jour".
Remarques:
R1. A chaque fois que vous excutez une requte d'action un message d'avertissement
apparatra l'cran. Pour dsactiver celui-ci sans faire de VBA allez dans le menu
Outils/Options et dans l'onglet Modifier/Rechercher dsactivez la case cocher Requtes
d'action (sinon avec du VBA il suffit d'utiliser la commande docmd.setwarnings false)
R2. Si vous slectionnez l'astrisque (*) dans une requte, cela prsente un avantage par
rapport l'opration qui consiste slectionner tous les champs. Lorsque vous utilisez
l'astrisque, les rsultats de la requte comprennent automatiquement tous les champs qui ont
t rajouts la table (pendant son volution) ou la requte sous-jacente (si la requte est
cre partir d'une requte) aprs la cration de la requte et excluent automatiquement les
champs qui sont supprims. Lorsque vous utilisez l'astrisque, vous ne pouvez pas trier les
enregistrements ou spcifier les critres de champs sauf si vous ajoutez ces champs ensuite
part dans la grille de cration de la requte et que vous dsactivez son affichage lors de
l'excution de la requte.
R3. Si vous avez des calculs avec des champs "null" effectuer (ce qui n'est pas quivalent au
nombre 'nul' = 0) les rsultats ne sortent pas. Il faut ds lors dans le champ contenant la
relation mathmatique ajout l'endroit adquat une des deux formules suivantes:
IIf(isnull([nomchamp]);0;[nomchamp])
nz([nomchamp];0) // convertit la valeur du champ 'nomchamp' en la valeur du second
argument de la fonction

7.16 Requte mise--jour (Rechercher/Remplacer)


Pour cette requte (dont nous avons dj fait mention au dbut de cet e-book), le lecteur devra
ouvrir la base de donnes Access Donnes 95-2003.mdb que mettra le formateur disposition
et ouvrir la seule table disponible:

qui contient donc 1'048'655 lignes:

MS Office Access

152/564

Vincent ISOZ

Si nous souhaitons faire un Rechercher/Remplacer de "Machines/Outils" en "MachinesOutils":

Il fera le remplacement que pour les 10'000 premier environ


Pour pallier ceci il suffit de crer la requte de mise--jour suivante:

et d'excuter vous aurez alors le message d'avertissement (logique) suivant:

MS Office Access

153/564

Vincent ISOZ
qu'il suffira de valider par Yes.

7.17 Requtes de synthse


Crez l'aide de l'assistant requte simple de synthse et de vos connaissances sur les
formulaires, une requte de synthse (et non pas une requte d'analyse croise !!!) qui donnera
(affichera) l'utilisateur depuis la table tblSorties les vendeurs qui dans l'ordre dcroissant ont
fait la plus grande vente (non pas le cumul ! mais la plus grande vente unique) et ce en
indiquant sur combien de ventes tel que les options choisies dans l'assistant soient les
suivantes:

Le tableau gnr par la requte devra ressembler quelque chose comme cela:

L'objectif est de crer un formulaire qui n'affichera que le premier vendeur de la liste (sans
que l'utilisateur puisse voir les deuxime, troisime, vendeurs).
Il est bien sr facile d'indiquer l'utilisateur seulement le premier vendeur. Pour cela, sans
passer par le VBA, il suffit dans les proprits du formulaire et de dsactiver le navigateur
d'enregistrements.
Avec l'assistant de requtes, crez maintenant une requte de synthse de la table tblSorties
(comprenant les champs strNbArticles, intUnites, datDateOut) qui vous indique la somme des
articles vendus par trimestre:

MS Office Access

154/564

Vincent ISOZ

Vous devriez obtenir le rsultat suivant:

7.18 Requte d'union


1. Crez une requte de cration de table qui sauvegarde toutes les sorties comprises entre
deux dates dans une table nomme tblBackUp et exportez ensuite cette sauvegarde dans
MS Excel. Si possible, automatisez le tout avec une requte paramtre (afin que nous
puissions choisir l'anne) et une macro.
2. Importez ou crez dans votre base les tables de sauvegardes des trois premires annes du
magasin (1978, 1979,1980) qui sont dans le fichier BackUpSorites.xls et nommez les
respectivement: tblSorties78, tblSorties79, tblSorties80
Remarque: Comme vous le verrez, les ventes annuelles taient maigres au dbut.
La table de 1978 (en faisant un import et sans oublier de supprimer aprs l'import la main
les lignes vides):

MS Office Access

155/564

Vincent ISOZ

La table 1979 (en faisant un import avec liaison de la table MS Excel):

Qu'observez-vous ? Quelles sont les contraintes


La table 1980 (un import et nettoyage par une macro incluant une requte de suppression:

La macro correspondante:

et la requte de suppression correspondante:

L'objectif maintenant est de faire de ces trois tables importes (qui habituellement ne viennent
pas de MS Excel mais sont crs et conserves dans MS Access) une unique table qui indique

MS Office Access

156/564

Vincent ISOZ
quels sont les produits qui ont t vendus en entre 1978 et 1980 (remarquez bien que certains
articles se rptent !).
Si vous crez une requte normale (c'est celle que les gens choisissent souvent en premier):

Vous n'arriverez rien ! Bien sr, vous pouvez faire une multitude de "Requtes d'ajout" mais
lorsque les donnes sont nombreuses, la mthode est alors catastrophique!!! Bon ceci dit cela
reste un bon exercice et c'est quand mme le cas le plus courant qui vite d'apprendre par
coeur le langage SQL. Vous pouvez donc aussi le faire en tant qu'exercice!
La solution est alors la suivante:
Il faut crer une requte en mode cration et passer directement en affichage SQL et saisir:

et vous obtenez comme symbole pour cette requte dans la fentre de base de donnes:

d'o le nom de "requte d'union".


En excutant cette requte, vous obtenez:

MS Office Access

157/564

Vincent ISOZ

Nous avons obtenu ce que nous voulions mais avec les doublons en plus. Pour les liminer,
il faut enlever les "ALL" de la requte SQL. Il vient alors:

Si nous rajoutons des paramtres pour les rsultats d'affichage, nous voyons que nous passons
alors de 7 enregistrements 9 (pas besoin de mettre les crochets ! c'est juste pour montrer une
autre faon d'crire):

Figure 5 Requte d'union

Ce rsultat est totalement normal car le couple (Article,Vendeurs) devient maintenant unique.
En l'occurrence les GEN-001.
MS Office Access

158/564

Vincent ISOZ
Remarque: Vous pouvez changer le "Union" par un "Intersect" ou un "Minus" sur d'autres
systmes de base de donnes que MS Access dsol
Ensuite, rien ne vous empche d'ajouter des critres en spcifiant la commande "WHERE", tel
que par exemple (nous voulons que le vendeur numro 8 !):

Exercice: Dans la requte prcdente, faites que les articles soient tris dans l'ordre
dcroissant de leurs noms.
Remarque: nous allons voir de suite une autre application trs concrte de ces requtes
d'union.

7.19 Requte d'intersection


La requte d'intersection permet par exemple de sortir que les champs de deux tables qui
existent respectivement dans l'une et dans l'autre.
Pour exemple, nous voulons la liste des articles qui sont entrs et sortis! En d'autres termes:
parmi la liste des articles qui ont t nots dans les entres de stocks, ceux qui ont dj eu une
sortie.
Comme dans MS Access il n'existe pas encore la fonction SQL qui se nomme INTERSECT,
il d'abord faut crer des relations entre les champs qui doivent tre identiques entre les deux
tables (dans le cas prsent il s'agit seulement du nom des articles):

MS Office Access

159/564

Vincent ISOZ
Et il faut rajouter la requte la proprit de distinction que nous avons dj vue plus haut:

7.20 Requte de comptage


Considrons la table suivante:

L'ide est de compter combien de clients (uniques) ont fait une commande
malheureusement la solution n'est pas simple et faire un simple regroupement par nom de
client ne suffit pas. Nous donnons alors la solution (ne connaissant pas plus simple ce jour):

MS Office Access

160/564

Vincent ISOZ
Nommez cette requte qrySQLCount.
Remarque: Certains utilisateurs font usage de MS Access pour tester des commandes SQL
avant de les excuter dans SQL Server. Si c'est votre cas, n'oubliez pas d'aller dans le menu
Outils/Options de MS Access et dans l'onglet Tables/Requtes d'activer l'option Syntaxe
Compatible SQL Server (ANSI 92) comme indiqu ci-dessous:

MS Access utilisant par dfaut le ANSI 89 ce qui date un peu quand mme
Attention bien faire une copie de la base de donnes avant l'activation de cette option
comme vous l'indiquera le systme!

7.21 Requte d'union (bis)


Imaginons que nous souhaiterions une table (qui servira pour la construction d'un graphique)
avec le nombre de clients qui ont achet quelque chose avec le nombre de clients total.
Pour cela il nous faudra d'abord la requte faite prcdemment mais renomme
qrySQLCountOrd:

et une requte similaire (que nous laisserons le soin au participant de crer) qui comptera
simplement le nombre de clients partir de la table tblClients et que le participant nommera
qrySQLCountCust.

MS Office Access

161/564

Vincent ISOZ
Nous allons maintenant crer la requte d'union suivante:

Qui donne le rsultat suivant dans le cadre de notre petite base de donnes:

Essayez comme exercice de compiler les trois requtes en une seule uniquement avec code
SQL.

7.22 Requtes de requtes


Crons plusieurs requtes (en s'interdisant de faire du SQL) nommes respectivement
qryStocksEntrees, qryStocksSorties et qryStocks qui calcule les stocks (diffrence entre
vendus et achets) du magasin et ce pour chaque article:
Nous allons voir qu'il va tre ncessaire de faire une requte de requtes pour arriver au
rsultat.
Nous construisons d'abord une requte qui rsume les entres:

Ensuite la mme requte qui rsume les sorties:

MS Office Access

162/564

Vincent ISOZ

et enfin la requte qui utilise les deux prcdentes:

MS Office Access

163/564

Vincent ISOZ

7.23 Divers (exercices)


Exercice: Dans la mme base, crer une premire requte qryQuiQuoi qui affiche dans une
table, quel vendeur a vendu quoi et qui (client) et une deuxime requte qryQuoiQui qui
affiche quel client a achet quoi avec l'aide de quel vendeur.

MS Office Access

164/564

Vincent ISOZ

8 tats-formulaires (complexes)
On peut imprimer les tables dans MS Access pour consultation et vrification. Cependant, il
est peut tre prfrable avant d'envoyer l'imprimante une table avec 10'000 enregistrements,
de vrifier la faon dont l'impression va tre effectue.
Pour cela, avant d'imprimer quoi que ce soit, comme dans tout autre logiciel, il faut prendre
l'habitude d'activer l'Aperu avant impression et au besoin de dfinir ses propres proprits
d'impression qui sont peu nombreuses...
Par exemple, ouvrez la table Articles et activez l'aperu avant impression et dfinissez une
mise en page "paysage".
Cependant, on utilisera plus frquemment les tats pour effectuer une impression
professionnelle des donnes de la base. On verra plus tard comment personnaliser ses tats
avec tous les soins ncessaires.
Par exemple, slectionnez la requte "Cible Fournisseurs" et crez en un tat l'aide de
l'assistant (du type de celui visible la page suivante). Vous enregistrerez cet tat sous le nom
rptCibleFournisseurs.
Pour crer un tat instantan, ouvrir une table et:

Evidemment, il faut rendre l'tat accessible l'utilisateur de votre base partir d'un bouton se
situant sur un formulaire si l'on veut bien faire les choses.
Maintenant que nous avons parcouru les principaux objets d'Access (Tables, filtres, requtes,
formulaires (sur requtes et sur tables), tats) vous pensez ncessairement qu'il est dommage
que l'on doive passer chaque fois par la fentre de base de donnes pour activer ces
derniers?!
Il n'est est rien! Au cours "avanc" (ou lors de la dernire demi-journe), nous verrons
comment crer une belle interface utilisateur avec tous les boutons (il y a du code VBA
derrire) ncessaire une utilisation optimale de votre base. Il en sera de mme pour le choix
de l'ouverture automatique d'un des formulaires, lors de l'ouverture de la base.

MS Office Access

165/564

Vincent ISOZ
Vous avez ci-dessous un tat cr avec l'assistant qui groupe les articles de la table tblSorties
par ordre alphabtique et qui indique les informations de sortie des articles (Vendeurs, Units
vendues, Type de payement, Date de sortie) et qui pour chaque article fait une synthse des
informations (Somme du nombre d'articles et pourcentage par rapport la totalit).

Il existe galement au besoin une option qui permet d'exporter les donnes reprsentes par
l'tat vers un fichier Word ou Excel. Le systme de marche pas toujours comme on le souhaite
et n'est pas toujours fonctionnel (dpendant de la faon avec laquelle le logiciel a t install
sur la machine et de la complexit de la base de donnes en question).

Comme exercice il vous est maintenant demand de crer un tat que vous nommerez
rptLettreType qui gnre automatique une lettre type de bienvenue chaque nouveau client
inscrit notre systme fidlit du magasin.
La lettre type (outre le logo que vous pouvez choisir) doit contenir les informations standards
du client tel que l'expditeur, l'adresse de son destinataire, les formules de politesses
adquatement conjugues, etc.
MS Office Access

166/564

Vincent ISOZ
Si par mgarde, la numrotation des pages des rapports est supprime, il est toujours possible
de la rinsrer un endroit quelconque en allant dans le menu Insertion/Numros de pages.
Apparat alors l'cran l'option suivante:

Il suffit de choisir et de valider par OK.

8.1 Carnet d'adresse


Nous allons voir ici comment crer, toujours avec l'aide de l'assistant, un petit carnet d'adresse
des vendeurs.
Lancez pour cela l'assistant de cration de rapport en choisissant la table tlbVendeur:

Cliquez sur Suivant et ensuite choisissez de faire un regroupement par nom:

MS Office Access

167/564

Vincent ISOZ

ensuite, cliquez sur Options de regroupement en choisissez:

Validez enfin par Terminer et observez le rsultat (dont l'esthtique est toujours discutable et
demande un peu de travail de la part du dveloppeur):

MS Office Access

168/564

Vincent ISOZ

8.2 Synthse et requte


Crez un tat (rptSorties) bas sur une requte paramtre qui affiche toutes les ventes de tous
les vendeurs (les ventes doivent tres groupes par vendeur et par date croissante) entre deux
dates que l'utilisateur doit pouvoir choisir dans un formulaire.
Remarque: le design du formulaire n'est pas important (ce n'est pas un cours pour pigistes)
Voici grosso modo la requte (nomme qryReport):

Voici le groupement souhait pour le rapport:

et les options de synthse:

MS Office Access

169/564

Vincent ISOZ

Le type de mise en page:

et une ide du rapport correspondant (c'est moche mais bon):

MS Office Access

170/564

Vincent ISOZ
Personnalisez cet tat maintenant avec votre formateur (rajout de formules en pied et tte de
page ainsi qu'en pied de rapport, mise en forme conditionnelle, DLookUp,).

8.3 Sous-tats
Nous allons dans cet exemple crer un tant avec des sous-tats (ou sous-formulaires pour
tre plus exact). L'objectif sera d'avoir un rapport qui nous indique pour chaque article, une
colonne avec les sorties et une colonne avec les entres.
L'esthtique du rsultat ne sera pas prise en compte car seule nous intresse la technique et la
possibilit offerte par MS Access (le formatage tant ce niveau suppos matris).
Pour cet exemple, il va nous falloir dans un premier temps crer deux formulaires
respectivement pour les tables tblEntrees et tblSorties ayant le design et les noms visible dans
les capture d'cran ci-dessous ( ce niveau du cours, crer ce genre de formulaires ne doit plus
tre un problme):

Nous aurons galement besoin d'un rapport bas sur la table tblArticles et nomm rptArticles
affichant simplement la chose suivante:

MS Office Access

171/564

Vincent ISOZ

Maintenant, nous allons passer cet tat en mode cration et largie la zone Dtails:

Ensuite, dans la bote outils contrles, nous cliquons sur le bouton Sous-formulaire/Soustat
et nous traons une zone d'une taille choisie au bolomtre pour commencer que nous
pourrons toujours changer plus tard:

MS Office Access

172/564

Vincent ISOZ

Apparat alors l'assistant suivant dans lequel il vous est demand pour l'exemple de
slectionner un des deux formulaires crs prcdemment:

Cliquez sur Suivant et dans la fentre suivante ne touchez rien. Cliquez simplement sur
Suivant (MS Access s'occupe de faire les liaisons qu'il faut tout seul comme un grand dans un
cas si trivial):

MS Office Access

173/564

Vincent ISOZ

Cliquez sur suivant et saisissez ce qui convient:

Validez par Terminer. Faites de mme avec le deuxime sous-formulaire de manire obtenir
quelque chose du genre (vous pouvez prendre l'incitative d'amliorer l'esthtique si le cur
vous en dit):

MS Office Access

174/564

Vincent ISOZ
Le rapport donne alors (normalement on prendra soin de supprimer l'information double
dans le sous-formulaire affichant une deuxime fois le code de l'article bien videmment):

8.4 Rapports avec groupes (pour lettres ou factures)


Dans de nombreuses entreprises il est demand d'avoir des tats Access avec un en-tte et
pied de page corporate avec zone d'en-tte de document comprenant adresses du destinataire
et de l'expditeur ainsi qu'un numro de rfrence et un texte d'accompagnement standard.
En-dessous de l'en-tte de document il est systmatique que les entreprise souhaitent un
tableau avec un listing venant d'une requte Access reprsentant soit les dtails d'une facture,
soit les dtails de statistiques diverses.
Il n'est pas possible d'utiliser la technique des sous-rapport vue prcdemment pour cela car
les entreprises ont souvent sous le listing un autre texte d'accompagnement de fin de
document ou des statistiques qui doivent se placer automatiquement en-dessous de la table du
milieu du document et ce quel que soit sa taille (qui est donc variable).
Il faut alors utiliser une technique utilisant le concept de Groupes avec des requtes
comprenant absolument toutes les informations pour la lettre.
Pour cela, crons d'abord la requte simplifie suivante:

MS Office Access

175/564

Vincent ISOZ

qui donne:

Nous aimerions maintenant construire un tat qui affiche par client la liste des produits
achets en ayant un client par page. Pour faire vite, et juste pour voir le principe, crez un
rapport automatique de cette requte. Cela vous donnera:

MS Office Access

176/564

Vincent ISOZ

Redisposez les champs de manire avoir:

Ensuite allez dans le menu Affichage/Tris et Groupes et mettez-y les valeurs visibles cidessous:

MS Office Access

177/564

Vincent ISOZ

Validez et redisposez les champs comme indiqus ci-dessous:

Et enfin compltez pour que cela ait l'air d'une petite lettre:

MS Office Access

178/564

Vincent ISOZ

Ensuite, il faut faire un double clic sur la ligne strNom Footer et changer la valeur du champ
Force New Page:

MS Office Access

179/564

Vincent ISOZ
Cela vous donner un tat par client qui aura la forme suivant au final:

Ensuite, on peut rajouter le total de chaque ligne en ajoutant manuellement un contrle de


type Field avec une petite formule:

et enfin le total des totaux:

Remarquez bien comment la formule du grand total est crite:

Il n'est pas possible ce jour dans Access de faire des grands totaux dans des rapports qui
utiliseraient le nom d'un champ intermdiaire. Donc ceci par exemple, ne fonctionnera pas:
Nous allons voir ici un des piges classiques et merveilleux de MS Access....

MS Office Access

180/564

Vincent ISOZ
Crez d'abord l'tat suivant de faon classique avec l'assitant d'tat sur la base de la table
tblVendeurs:

Soit au niveau structurel:

Maintenant, crez l'tat suivant qui affiche les sorties et nommez-le srptSortiesParVendeur:

MS Office Access

181/564

Vincent ISOZ

Soit au niveau structurel:

Nous souhaitons maintenant mettre ce dernier rapport en tant que sous-rapport du rapport
prcdent. C'est--dire que pour chaque vendeur, nous puissions voir la liste des lments
vendus. Pour cela le dbut est simple et classique, nous prparons ce dernier rapport en lui
enlevant l'en-tte d'tat et le pied de page tel que:

MS Office Access

182/564

Vincent ISOZ
Ensuite vient maintenant le pige!!! Effectivement, si vous insrez ce rapport en tant que
sous-rapport, l'en-tte de page avec les intituls de colonnes n'apparatra pas (ce
relativement logique car... ce n'est justement pas un page).
Pour y remdier, il faut crer un groupement. Donc on clique sur le bouton Regrouper et trier:

Il vient alors:

Cliquez sur Ajouter un groupe:

MS Office Access

183/564

Vincent ISOZ

Et cliquez sur expression et crivez la formule suivante (super... il fallait deviner...):

Validez par OK et vous aurez:

MS Office Access

184/564

Vincent ISOZ

Dplacez les libells dans la zone d'en-tte la zone de groupe et rduisez ensuite la zone
d'en-tte car elle vient inutile:

Ensuite, vous pouvez voir que cela fonctionner. Ajouter ce sous-rapport dans le rapport
principal:

MS Office Access

185/564

Vincent ISOZ
Ensuite nous dessinons la zone du sous-rapport l'assistant dmarre:

Nous slectionnons srptSortiesParVendeur et cliquons sur Suivant pour dfinir les cls qui
feront la liaison:

Cliquez sur Terminer, ce qui donnera:

MS Office Access

186/564

Vincent ISOZ

Supprimez la petite lgende bleue dans le coin suprieur droit o est crit le nom du sousrapport:

et lancez l'aperu:

MS Office Access

187/564

Vincent ISOZ

Donc nous retrouvons bien les intituls es colonnes dans le sous-rapport. Donc le problme
est rgl mais il en apparat un autre... Les vendeurs qui n'ont aucune vente occupent une zone
verticale vide innaceptable!
Pour corriger cela, nous ditons le rapport principal et dans les proprits de la section
Dtails:

MS Office Access

188/564

Vincent ISOZ

Nous mettons la proprit Auto rductible la valeur Oui. Ce qui donnera au final:

MS Office Access

189/564

Vincent ISOZ

8.5 Rapport paramtr par formulaire


Crez maintenant un formulaire identique celui ci-dessous que vous nommerez
frmSortiesRpt (veuillez nommer respectivement les deux champs fldDateDebut et
fldDateFin):

Dans la requte, effectuez les modifications suivantes:

et ajoutez sur le formulaire, un bouton qui permet d'excuter la requte (quand vous avez
termin de saisir la dernire date, faites de prfrence un TAB pour valider la date):

Attention! Une curiosit de l'ouverture d'tats en passant par les formulaires c'est que suivant
le type de driver d'imprimante que vous aurez d'install sur votre PC vous aurez
systmatiquement un message d'erreur du type OpenReport Canceled.
Voil une interface bien plus conviviale n'est-ce pas ? Maintenant enlevez le bouton de la
requte et ajoutez-y celui du rapport (pour vrifier que lui aussi se base sur le contenu de ce
formulaire):

MS Office Access

190/564

Vincent ISOZ

Une fois que vous avez test la fonctionnalit de la prcdente requte. Ajoutez maintenant
(seul !) une liste droulante dans le formulaire cr prcdemment permettant de choisir le
vendeur pour lequel vous souhaitez avoir un rapport (temps estim: 5 minutes)

8.6 Objet ActiveX


Mme si c'est mieux qu'avant (un seul formulaire pour les deux questions, pas besoin de
relancer le tout depuis le dbut) il y a toujours les dates qu'il faut saisir (ce qui est fort
dommageable). Remdions cela et ajoutons un bouton ct de chaque champ qui
permette de slectionner la date dans un calendrier:
Procdure:
1. Crer deux nouveaux formulaires vierges que vous enregistrerez sous les noms
respectifs frmCalendrierDateDebut et frmCalendrierDateFin.
2. Passer le formulaire en mode cration
3. Cliquer sur le bouton
4. Insrer un objet du type: Contrle Calendrier X.0 dans chacun des formulaires
(nommez le calendrier: bouton droit Proprits):

Figure 6 Calendrier Access

1. Fermer et enregistrer le formulaire (on vous laisse le choix du nom du formulaire


contenant le calendrier)
2. Aller dans le formulaire o l'utilisateur doit "piquer" les dates

MS Office Access

191/564

Vincent ISOZ
3. Crer deux boutons qui ouvrent les formulaires avec le calendrier

Dans chacun des formulaires contenant le calendrier insrer le code suivant dans l'vnement
OnClose:
Private Sub Form_Close()
Forms!frmNomFormulaireAvecDate!NomChamp = NomCalendrier.Value
End Sub
et voil:

Mais que se passe-t-il s'il n'y aucune donne entre ses deux date ? Eh bien quelque chose de
trs moche et pas professionnel du tout avec des #Erreur un peu partout ! Comment remdier
cela esthtiquement. Et bien, dans les proprits du rapport il existe un vnement appel
On No Data , et associez-y le code VBA suivant:
Private Sub Report_NoData(Cancel As Integer)
MsgBox "Il n'y pas de donnes. Dsol !"
DoCmd.CancelEvent
End Sub

8.7 Graphique statistique insr


Le but de cet exercice est de crer un graphique qui s'adapte automatiquement sur la base de
la requte qrySommeSorties et d'inclure ce formulaire:

MS Office Access

192/564

Vincent ISOZ
1. Dans un autre formulaire (si ! si !)
2. Dans un tat (aussi .)
Pour crer un formulaire contenant un graphique ou un tableau crois dynamique, il faut
passer par le bouton mis en vidence ci-dessous (cela n'est pas propos dans les boutons du
dessous curieusement):

Aprs quoi, choisissez Assistant Graphique (vous remarquerez que certaines des options cidessous ne sont disponibles que sous MS Access 2002 ou 2003):

Dans l'assistant, prenez la requte qrySommeSorties et choisissez les champs tblNbArticles et


Sum of intUnites:

MS Office Access

193/564

Vincent ISOZ

Il faut faire en sorte que le graphique ne soit pas trop gros (5x5 cm au maximum pour notre
exercice). Aprs un peu de travail (le graphique est enregistr sous le nom frmGraph):

Voil comment l'on cre un simple graphique dans MS Access Evidemment, on peut laisser
fonctionner l'imaginaire pour personnaliser le formulaire dans lequel se trouve notre
graphique (nous avons dj vu comment faire cela auparavant) et le graphique lui-mme.
Sinon, le reste tient plutt un cours MS Excel qu' un cours MS Access bien videmment.
Nous allons maintenant voir comment ajouter ce graphique dans un formulaire ou tat
existant. Crez un formulaire (pas trop moche) de la table tblSorties:

MS Office Access

194/564

Vincent ISOZ

Allongez en mode cration un tant soit peu en longueur ce formulaire et cliquez sur le bouton
suivant de la barre d'outils:

Suivez l'assistant aprs avoir cliqu sur le bouton Insrer un sous-formulaire et choisissez le
formulaire contenant le graphique:

MS Office Access

195/564

Vincent ISOZ

Vous voyez comme cela est fort intressant. De plus chaque fois que vous passez d'un
enregistrement l'autre, le graphique reste l'cran. Par contre, si vous ajoutez des sorties, ou
modifiez la valeur des units vendues, le graphique ne change pas. Pour remdier cela, vous
pouvez crer un bouton rattach une macro qui rafrachira le formulaire en le fermant et en
le rouvrant automatiquement.
La macro:

Le formulaire avec le bouton rattach la macro:

8.8 Graphique insr


Crez une copie du formulaire de l'exercice prcdent et effacez-y le graphique.
MS Office Access

196/564

Vincent ISOZ
Objectif: crer un graphique dans le formulaire qui pour chaque vendeur affich montre les
units qu'il a vendu et en quelle quantit.
Conseil: utilisez les assistants en particulier le menu Insertion/Graphique (dure de
l'exercice: heure)
Que peut-on en conclure relativement l'exercice prcdent ?

8.9 Tableaux croiss dynamiques


Vous avez certainement remarqu lors de la cration de formulaires qu'il vous tait propos de
crer un tableau crois dynamique. Gardons bien en tte que ce genre d'outil sert faire des
rapports d'analyse de synthse d'o le fait que nous le traitions dans cette section du support.
Ainsi, seuls (car c'est relativement facile), l'aide de l'assistant de tableau crois dynamique,
crez le TCD suivant (attention nous dbordons presque sur un cours MS Excel ici !)

Figure 7 Tableau crois dynamique

Pour plus de prcisions sur les TCD nous renvoyons le participant un cours MS Excel sur le
sujet.
Remarques:
R1. Cet outil est complmentaire aux requtes croises dynamiques. Il a aussi un dfaut: audel de 3000 4000 donnes il faut parfois attendre 15 30 secondes avant que le tableau
s'affiche. Il vaut mieux ds lors avoir d'autres outils sa disposition (SQL Server, Oracle avec
des Cubes OLAP)
R2. La plupart du temps, les utilisateurs exporteront l'aide du bouton adquat, ce TCD vers
MS Excel.

MS Office Access

197/564

Vincent ISOZ

8.10 Graphiques croiss dynamiques


Nous pouvons faire aussi des graphiques croiss dynamiques avec un avantage par rapport
Excel ceux-ci sont beaucoup plus puissants dans MS Access que dans MS Excel.
En prenant la table tblSorties et en crant un graphique crois dynamique en ayant au
pralable activ le traage multiple en activant le bouton
disposition adquate des champs obtenir:

nous pouvons aprs un

Bien sr, il faut un peu retravailler les couleurs, les lgendes et la mise en page mais au
moins, nous voyons tout de suite que nous dpassons ce que MS Excel sait faire.
Attention!!! Lors de la cration de bouton permettant d'ouvrir un formulaire ou une requte de
type tableau ou graphique crois dynamique, ne pas oublier de forcer le deuxime paramtre
de la commande OpenForm en indiquant acFormPivotChart ou acFormPivotTable. Par
exemple pour un formulaire avec un GCD:
DoCmd.OpenForm stDocName, acFormPivotChart, , stLinkCriteria
ou un pour une requte de type GCD:
DoCmd.OpenQuery qryName, acViewPivotChart

MS Office Access

198/564

Vincent ISOZ

9 Requtes (complexes avec ou sans VBA)


Commenons tout de suite par un sujet important et qui donne souvent la migraine aux
dbutants!
Plutt que de faire un amalgame thorique nous allons de suite faire un exercice afin de voir
trivialement de quoi il retourne dans la pratique.

9.1 Requtes avec jointures


Remarque: la thorie est un peu "floue" ce sujet (dans le sens o il faut tre bien rveill
mais ce n'est pas dur du tout !!!)
Sous MS Access, comme d'ailleurs dans la plupart des SGBDR, il y a plusieurs types de
jointures.
1. La jointure quivalente (dite aussi "interne")
2. La jointure gauche
3. La jointure droite
Ouvrez la table tblSorties et faites en sorte que certains vendeurs n'aient rien vendu (c'est juste
pour l'exemple). Pour cela, crez de nouveaux vendeurs.
Crez ensuite une nouvelle requte nomme qryJointures du type suivant. Pour dfinir le type
de jointure, faites un double clic sur la liaison et la bote de dialogue suivante apparatra:

et slectionnez (2) qui une jointure droite tel que:

MS Office Access

199/564

Vincent ISOZ

1. Quelle est la diffrence avec une jointure quivalente ?


2. Que peut-on en conclure pour l'instant ?
Que faut-il ajouter maintenant dans cette requte pour y avoir maintenant seulement la liste
des vendeurs qui n'ont rien vendu ?

Si vous mettez =0 au lieu de Is Null que se passe-t-il ?


Modifiez maintenant la requte afin d'obtenir la chose suivante:

MS Office Access

200/564

Vincent ISOZ

Quelle en est l'utilit ?


Modifiez maintenant la requte de la manire suivante:

Effectivement, le rsultat est flagrant !!!:

Que peut-on en conclure ?

9.2 Requte regroupement par premiers lments


Toujours dans notre base, considrons la table tblSorties:

MS Office Access

201/564

Vincent ISOZ

Nous souhaiterions de cette liste, crer une requte nomme qryFirst qui nous indique qui est
le client qui a command en premier un certain article.
Pour ce faire, il faut crer une requte de ce type:

Le rsultat sera alors bien:

Ou afficher la dernire commande effectue dans une requte nomme qryLast par Boltzmann
(client n3):

MS Office Access

202/564

Vincent ISOZ

9.3 Requte avec critres


Crez une requte simple avec les proprits de requtes suivantes: les jeux d'enregistrements
avec la datDateIn (Table tblEntrees) comprise entre le 01.01.96 et le 31.12.96. Le numro
d'articles (Table tblArticles) et le nom du Fournisseur (Table tblFournisseurs) doivent y tre
indiqus.
Excutez votre requte et observez si elle marche bien comme on l'attendait (on voit que les
relations maintenant jouent bien leur rle aussi dans le cas des requtes).
Remarque: Il ne peut y avoir d'objets tables et requtes ayant le mme nom dans
MS Access!!!
Supposez maintenant qu'un collgue vous demande maintenant de sauvegarder (backuper...)
toutes les donnes d'une certaine anne (la solution complte n'est pas dans l'image cidessous...) dans un fichier Access contenant uniquement des tables de sauvegarde. Il vous
faudra excuter la requte en sorte qu'elle cre une table physique relle et aussi une requte
qui nettoyer les anciennes donnes de la table active (faites une copie du fichier de cours
avant de tester cela).

MS Office Access

203/564

Vincent ISOZ
Pour cela, dans le bouton menu gauche du bouton d'excution de la requte, il y a une option
nomme Requte Cration de table... Slectionnez cette option et choisissez comme nom de
la nouvelle table: tblEntrees1996. Ceci fait, excutez la requte, contrlez que la nouvelle
table ait bien t cr dans le fichier Access prpar cet effet.
Ce type de manipulation est frquent dans les entreprises car les employs ont souvent besoin
d'analyser les donnes pour leur compte dans un autre fichier Access (on peut faire de mme
avec MS Excel!) Or, on ne peut leur demander d'effectuer les oprations que nous venons de
faire (ils n'ont ni le niveau de connaissance ni les droits).
Il faudrait donc crer un petit programme (nomm "Macro" par Microsoft) qui permet partir
d'un bouton sur un formulaire (le formulaire d'accueil de la base typiquement) d'effectuer
toutes ces oprations automatiquement.
La cration et l'enregistrement d'une Macro est une chose extrmement simple mais encore
faut-il savoir quelles actions utiliser (les combinaisons possibles sont suffisamment grandes
pour passer plusieurs annes les tudier).
Nous allons faire cela en tant qu'exercice (voir ci-dessous une macro similaire celle dont
nous avons besoin, vous de l'adapter!).

Remarque: Quand vous effectuez des requtes simples (et non des requtes d'action), il est
bien sr possible d'imprimer la requte (action: Imprimer) puisqu'elle va s'ouvrir
automatiquement et de la fermer de suite aprs (action: Fermer).

9.4 Requte d'analyse de frquence (contingence)


Souvent les gens souhaitent faire des statistiques de frquence pour savoir quelle quantit de
choses se trouve dans un nombre d'intervalles donns.
Faisons un exemple avec la table tblSorties. Nous souhaiterions savoir combien de ventes il y
a eu (tous produits confondus) entre 0-50 units, 51-100 units, 101-150 units, 151-250
units, 251-500 units, 501-1000 units, 1001-2000 units.

MS Office Access

204/564

Vincent ISOZ
Pour faire cela, crez d'abord une table nomme tblGroupes avec la structure suivante:

Attention choisir correctement l'unit de fin de la valeur minimum: 01 ou .,01


Crez ensuite la requte suivante qryFrequences sans mettre de liaison entre les deux tables:

En excutant la requte, nous obtiendrons alors:

9.5 Requte paramtre


Dans la mme base crez une requte qui tablit la liste de tous les articles avec les dates de
sorties, qui ont t vendu par un vendeur donn. Le nom du collaborateur doit pouvoir tre
fix lors de l'excution de la requte.
Il s'agit d'une requte dite "requte paramtre" sans aucune spcification. Voil comment
procder:
1. Crer une nouvelle requte

MS Office Access

205/564

Vincent ISOZ
2. Glisser les tables dans la requte

3. Dans le champ critres taper: [Entrez le nom] (les termes entre crochets ne doivent pas
contenir le nom d'un champ existant dans la table utilise!!!)
4. Excuter la requte avec le nom Castrini
5. Enregistrez la requte sous le nom qryParametree
Problme: vous voyez que lorsque l'utilisateur ne saisit rien dans le paramtre de la requte,
rien ne s'affiche (ce qui peut tre vu comme fort ennuyeux). Pour remdier cela, il suffit
d'crire la chose suivante:
[Nom du Vendeur:] Or Is Null
Sinon avec un peu d'imagination voici le genre de paramtres (exemples importants et
tester!!!) que vous pouvez dfinir (concepts similaires aux filtres vus au dbut du cours):
Like [tapez ici] & "*"
Like "*" & [tapez ici] & "*"
Year([ChampAvecDate])=[Saisissez une anne]
Month([ChampAvecDate])=[Saisissez un mois entre 1 et 12]
Month([ChampAvecDate])=[Saisir] And Year([ChampAvecDate])=[Saisir]
>Date() [Donnes depuis X jours]
la syntaxe ci-dessus change si vous avez activ l'ANSI 92 dans Access (le Like devient ALike
et le "*" devient "%").

MS Office Access

206/564

Vincent ISOZ

9.6 Requte d'ajout


Dans la mme base crez la table tlbNouveauxVendeurs suivante (si elle ne se trouve pas dj
dans la base de donnes) ayant les mmes proprits de masque de saisie que la table
tblVendeurs:

Peu importe la valeur des


donnes qui se situent ici

Crez une nouvelle requte (en mode cration) et redfinissez la requte comme tant une
qryAjoutVendeurs
Dans le champ Ajouter , slectionnez la table tblVendeurs.
Dfinissez ensuite les champs de requtes ainsi:

Excutez la requte et allez regarder dans la table tblVendeurs


Ce genre de requte d'ajout est trs pratique si vous devez insrer dans votre base les donnes
d'un utilisateur (ou plusieurs) travaillant dans MS Excel (ce qui arrive presque toujours) ou
lorsque vous faites de gros changements dans la structure de votre base et que vous devez
dplacer de grosses quantits de donns d'une ancienne structure de table une nouvelle.
Une bonne ide en ce qui concerne les requtes d'ajout est de mettre dans la table cible une
colonne "datDateAjout" avec une valeur par dfaut du type Now( ). Ainsi, vous avez une
traabilit de quand ont t ajout les donnes afin ventuellement de pouvoir plus facilement
les supprimer.

MS Office Access

207/564

Vincent ISOZ

9.7 Requte de suppression


Crez maintenant deux "Requte de suppression" (en ayant slectionn au pralable la table
Vendeurs).
Cette dernire s'utilise comme une requte classique o l'on doit dfinir les critres qui
dtermineront quels enregistrements seront supprims.
1. Dans le premier exercice, avec votre formateur, supprimez les enregistrements ajouts
prcdemment la table tblVendeurs et enregistrez la requte sous le nom de
qrySuppression.
Ce type de requte est trs utile dans le genre de cas suivant:
Lgalement et suivant l'activit, les entreprises peuvent tous les cinq ou dix ans (en
fonction du type de documents) se dbarrasser de toutes leurs archives ou historique.
Dans le cas d'une base de donnes MS Access, il est possible pour allger la taille
mmoire de la base, de faire une copie de cette dernire tous les cinq ans et d'utiliser
ensuite une nouvelle base o tous les enregistrements antrieurs ces temps sont
supprims.
2. Crez une deuxime requte de suppression nomme qrySupprSort qui supprime
toutes les sorties pour le client Dutron Alain.

9.8 Requte d'analyse croise (avec assistant)


Crez maintenant une requte d'analyse croise avec l'assistant qui:
1. Groupe par vendeur les articles
2. Affiche par vendeur et par article les ventes d'units pour chaque client
Le rsultat devrait ressembler la chose suivante:

MS Office Access

208/564

Vincent ISOZ

Nous remarquons tout de suite le problme inhrent au fait d'avoir fait des relations avec le
idClient au lieu strNom. Il n'est pas possible ici de corriger ce problme sans faire appel aux
jointures.

9.9 Requte d'analyse croise (sans assistant)


Essayez maintenant de crer manuellement (sans l'assistant) une autre requte d'analyse
croise qui (petit truc: pensez MS Excel pour le vocabulaire):
1. Groupe les articles
2. Effectue la somme des units vendues, et par rgion comme ci-dessous:

Remarque: au besoin, si vous avez des difficults, crez une requte en mode cration et
redfinissez-la comme "Requte d'analyse croise" et dfinissez les champs comme cidessous:

MS Office Access

209/564

Vincent ISOZ

1. Excutez la requte
2. Enregistrez la sous le nom qryComplexCrossTab
Si vous allez voir dans la table tblVendeurs, vous verrez que le rsultat est juste.

9.10 Requte d'analyse croise temporelle


Nous souhaitons dans une requte d'analyse croise nomme qryAnalTime afficher la
synthse suivante, de la table tblSorties:

dont le rsultat est:

Maintenant, nous souhaiterions regrouper les donnes par paquets de 1 mois. Pour ce faire,
saisissez la formule suivante dans le champ datDateOut:
MS Office Access

210/564

Vincent ISOZ

Cela donnera alors le rsultat suivant:

Cette syntaxe fonctionne pour (attention pour les codes si vous travaillez sur une version
anglophone):
1. Les regroupements par jours: Format([datDateOut];"aaaa/j")
2. Les regroupements par semaines: Format([datDateOut];"aaaa/ww")
3. Les regroupements par mois: Format([datDateOut];"aaaa/m")
4. Les regroupements par trimestres: Format([datDateOut];"aaaa/t")
5. Les regroupements par annes: Format([datDateOut];"aaaa")

9.11 Requte d'analyse croise paramtre


Copiez la requte faite prcdemment sous le nom qryCompCrossTabPar et dans la colonne
N Article (strCodeArticle) ajoutez les paramtres (requte croise paramtre):
[Article ?] OR is Not Null
Excutez la requte ! Pourquoi ne fonctionne-elle plus ?
Au fait, il s'agit d'un cas particulier des requtes croises. Il faut dfinir les champs paramtrs
dans une zone spciale en allant dans le menu Requte / paramtre et y copier les
paramtres sans crochets (s'il s'agit de paramtres simples) ou avec crochets (s'il s'agit de
paramtres rfrences un formulaire) en spcifiant bien le type de donnes utiliser ET en
laissant toujours la question d'origine dans le champ strCodeArticle:

MS Office Access

211/564

Vincent ISOZ

La requte fonctionne maintenant. N'oubliez jamais cela !!!


Comme exercice, crez une requte qryDiffNordSud de slection base sur la requte
prcdent afin d'avoir le rsultat suivant:

9.12 Requte doublons


Dans la mme base, crer une requte pour trouver les doublons de la table tblEntree.
Mthode:
1. Crer une requte de recherche des doublons avec l'assistant
2. Avec l'assistant choisir la table tblEntree et ensuite le champ strArticleNb
3. Enregistrer la requte sous qryDoublons
Attention!!! Cette requte n'a pas pour but d'effacer les enregistrements (lignes) double mais
seulement de chercher les champs qui sont doubles et d'afficher ceux-ci.
A tort, certaines personnes l'utilisent pour crer des listes uniques en la bricolant en Mode
Cration. C'est totalement faux et ce n'est pas son usage (il est alors prfrable d'utiliser une
requtes faisant un regroupement ou une requte d'unicit).

MS Office Access

212/564

Vincent ISOZ
Ainsi, le rsultant de l'exemple susmentionn sera:

Nous voyons bien que la table de droite, qui n'est d'autre que la requte, n'affiche pas un
lment de la table de droite qui est le seul lment dont le code d'article n'est pas double
dans la table tblEntrees; soit INF-004.

9.13 Requte de suppression des doublons d'enregistrements


C'est le cas le plus frquemment demand par les utilisateurs de MS Access. Pour tester cet
exemple, nous demanderons au lecteur d'insrer exprs des doublons d'enregistrements dans
la table tblSorties (quelques copier-coller suffiront).
Voici la manipulation faire pour crer ce genre de requtes:
1. Faites une copie de la structure de votre table tblSorties

2. Effacez-y le champ de cl primaire idSorties et mettez des cls primaires multiples sur
tous les autres champs

MS Office Access

213/564

Vincent ISOZ

3. Crez ensuite une requte d'ajout qui aura pour objectif de dplacer tous les champs de
la table tblSorties vers la table tblSortiesSDbl

Il suffit ensuite d'excuter la requte pour avoir dans la table tblSortiesSDbl tous les
enregistrements sans doublons.
Attention!!! Cette technique qui suppose l'utilisation de cls primaires multiples implique que
l'ensemble des enregistrements ont des champs non vides et que le nombre de cls primaires
ne dpasse pas 10.
Attention!!! Cette technique ne prendra pas les lignes dont les champs comprenant les cls
primaires dans la table cible sont vierges.

9.14 Requte de non correspondance


Nous allons maintenant crer une "requte de non correspondance" qui correspond en quelque
sorte la commande SQL nomme EXCEPT qui est manquant dans MS Access.
L'ide est "d'ter" visuellement d'une slection les lignes obtenues dans une deuxime
slection.
Remarque: Il s'agit aussi d'une requte trs utile pour vrifier les "trous" entre deux tables qui
font que l'intgrit rfrentielle ne puisse pas tre active. Ce type de problmatique est trs
frquent dans les entreprises.
Pour cela, avant tout, ajoutez dans la table tblArticles, un article de votre choix. Ensuite, dans
la table tblEntrees, ajoutez une entre de ce nouvel article.
But: Dterminer quels sont les produits qui sont en stocks mais qui n'ont jamais t vendus
(non correspondance des noms d'articles strNbArticle entre la table tblSorties et tblEntrees).
Enregistrez la requte sous le nom qryArticlesNV

MS Office Access

214/564

Vincent ISOZ
Rsultat: vous devriez avoir comme seul non correspondant, l'article que vous venez de saisir.

Nous pouvons observer qu'il y a ici une jointure droite tout simplement !
Remarque: Pour supprimer les non-correspondants (suppression des doublons) dans le cas des
problmes d'intgrit, il suffit de supprimer le rsultat montr par la requte (slection des
lignes de la requte et SUPPR).

9.15 Requtes de cration/dfinition (mode SQL)


Veuillez maintenant crer, excuter et comprendre les requtes de cration suivantes (elles
font partie du cours "Modlisation de Base de donnes"):
Cration d'une table simple pour les succursales (qryCreerTable):
CREATE table tblSuccursale (
idSuccursale LONG,
strVille CHAR(80),
sngPerformance CURRENCY,
CONSTRAINT idSuccursalePK PRIMARY KEY (idSuccursale) );
Malheureusement dans Access il faut passer par un CURRENCY ma connaissance pour
crer un champ dcimal... Si on veut pouvoir utiliser du SQL standard il va falloir changer les
options SQL du logiciel pour tre conformes au SQL ANSI92 et alors attention aux
consquences:

MS Office Access

215/564

Vincent ISOZ

Ds lors, nous pourrons par exemple:


ALTER TABLE MyTable
Add COLUMN MyField DECIMAL (9,4) NULL;
Si nous ne voulons pas changer le moteur d'interprtation SQL il nous faudra alors passer par
du VBA avec par exemple:
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
conn.Execute "ALTER TABLE MyTable " _
& "ADD COLUMN MyField DECIMAL (9,4) NULL;"
conn.Close
Ceci tant dit, ajoutez maintenant dans la table tblVendeurs, un champ nomm
tblSuccursaleId de type Integer (qryAltererTable):
ALTER TABLE tblVendeurs ADD tblSuccursaleId LONG;
Cration d'une liaison entre la table tblSuccursale et tblVendeurs (qryCreerLiaison):

MS Office Access

216/564

Vincent ISOZ
ALTER table tblVendeurs
ADD CONSTRAINT VendeursFK FOREIGN KEY (tblSuccursaleId)
REFERENCES tblSuccursale (idSuccursale);
Ajout de donnes dans la table tblSuccursale (qryAjoutData):
INSERT INTO tblSuccursale ( idSuccursale, strVille )
VALUES ('1','Lausanne','0.1');
ma connaissance il n'est pas possible (sans VBA) d'ajouter plusieurs valeurs d'un
coup dans une mme requte Microsoft Access... ce qui limite grandement l'exemple
prcdent!
Remarque: La syntaxe de cette dernire commande SQL est dans le cas gnral INSERT
INTO nomTable (champ1, champ2, ) Values ('valeur champ1', 'valeur champ2', )

9.16 Requte de distribution en % sur comptage


Nous continuons toujours avec notre table tblSorties et ce que nous dsirons maintenant est
connatre combien de clients ont command un certain produit (rien de nouveau) et savoir
combien ils reprsentent en % du nombre total de clients ayant fait un achat.
La solution est loin d'tre vidente (sans toutefois tre extrmement difficile). Nous donnons
donc directement la solution:

La jointure s'expliquant par le fait que nous voulons quand mme dans le listing les articles
qui n'ont jamais t vendu!
Ce qui donnera:

MS Office Access

217/564

Vincent ISOZ

Requte que nous enregistrerons sous le nom qryDistributionPerc.

9.17 Requte de (Pareto) distribution en % sur somme


Nous aimerions connatre la rpartition des ventes par article. Il s'agit alors de faire une
requte qryPareto avec:

en mettant la colonne Pareto au format %:

Ce qui donnera:

MS Office Access

218/564

Vincent ISOZ

Il semblerait qu'en toute gnralit, il ne soit pas possible de faire un vrai Pareto Cumul sans
du VBA dans MS Access.

9.18 Requte de cumul chronologique


L'ide est de crer une requte qui cumula la vente des units mensuelles avec un
recommencement chaque anne. Pour ce faire, la seule possibilit simple est la suivante:

o nous avons dans la premire colonne:

Dans la deuxime:

Dans la troisime:

MS Office Access

219/564

Vincent ISOZ

Enfin dans la dernire:

Attention!!! MS Access ne gre pas bien les fonctions en franais. Il faut donc crire tout en
anglais afin que la requte ci-dessous fonctionne correctement!

9.19 Requte systme


Depuis MS Access 2007, un requte SQL que j'affectionne particulirement est la suivante:
SELECT MSysObjects.Name,IIF([Type]=4,'Linked','Non-Linked') As Status,
DCount("*",[MSysObjects].[Name]) AS[Record Count]
FROM MSysObjects
WHERE (((Left([Name],1))<>"~") AND ((Left([Name],4))<>"MSys") AND
((MSysObjects.Type) In (1,4,6)))
ORDER BY MSysObjects.Name;
Cette requte listera toutes les tables avec le nombre de lignes qu'elles contiennent. C'est
infiniment utile soit des fins de statistiques, soit pour crer un identifiant global (qui manque
cruellement MS Access except sous forme de GUID).
Si jamais, voici dj l'quivalent en VBA (il m'a semble plus judicieux de dj l'indiquer ici
plutt que dans la section consacre au VBA):

9.20 Requtes de statistiques non natives


Contrairement Oracle SQL le SQL de Microsoft Access est trs pauvre en requtes
statistiques (comme son grand frre SQL Server par ailleurs).
Nous allons voir ici comment faire certaines statistiques courantes en utilisant si aussi peu que
possible ou pas du tout de VBA.

MS Office Access

220/564

Vincent ISOZ
Les requtes sont prsentes dans l'ordre croissant de difficult.

9.20.1 Requte de valeur modale


Une statistique lmentaire (outre la moyenne, l'cart-type et l'tendue) rgulirement
demande dans les requtes est l'obtention des valeurs modales.
Voyons comment obtenir dans un premier temps les trois premires valeurs modales d'une
valeur numrique:

Ce qui donne:

MS Office Access

221/564

Vincent ISOZ

Et pour les articles modaux (donc ceux apparaissent le plus de fois):

MS Office Access

222/564

Vincent ISOZ

Ce qui donne:

MS Office Access

223/564

Vincent ISOZ

9.20.2 Requte d'obtention de la mdiane


C'est une analyse souvent demande. Il existe de nombreuses solutions en VBA mais voici
une solution utilisant que des requtes Access mais au nombre de 5... (bon aprs il est
possible de la rduire 1 en imbriquant les requtes bien videmment!):
L'astuce consiste d'abord faire deux requtes qui respectivement extraient le premier 50
centile (les deux premiers quartiles) et le deuxime 50 centile (les troisime et quatrime
quartiles).

Ce qui donne respectivement:

MS Office Access

224/564

Vincent ISOZ

Maintenant il nous faut rcuprer la dernire ligne de la premire requte et aussi la dernire
ligne de la deuxime requte.

Ce qui donne:

MS Office Access

225/564

Vincent ISOZ

Maintenant passons la dernire requte:

Soit en dtails:

Ce qui donne l'xecution.

MS Office Access

226/564

Vincent ISOZ

9.20.3 Requtes d'intervalle de fluctuation


On peut faire de la statistique infrentielle assez facilement avec MS Access en jouant avec
les sous-requtes. Pour cela, imaginons que nous souhaitons voir tous les articles dont les
units vendues supposes suivre une distribution de type gaussienne ont une moyenne connue
( l'aide d'une requte de regroupement) et qui se situent au-del de 3 .

La premire tape consiste crer les simples requtes suivantes et copier leur code SQL
respectif:

SELECT Avg(tblSorties.intUnites) AS MoyenneDeintUnites FROM tblSorties;


SELECT StDev(tblSorties.intUnites) AS cartTypeDeintUnites FROM tblSorties;
Ensuite, nous faisons une sous requte simple du type:

MS Office Access

227/564

Vincent ISOZ

Dont le critre dtaill est (zoom):

Enregistrez cette requte sous le nom qryStatistiques

9.20.4 Requtes moyenne mobile et somme cumule


Nous allons maintenant sortir un peu de notre base de donnes classique (bien que l'exemple
qui va venir puisse quand mme s'y appliquer).
Considrons la table suivante:

Supposons que nous aimerions la valeur cumule et la moyenne mobile par ligne
d'enregistrement afin d'obtenir:

MS Office Access

228/564

Vincent ISOZ

Pour cela (c'est scandaleux mon avis mais c'est ainsi) il vous faudra d'abord crer un
module VBA (peu importe son nom) avec le code ci-dessous:

Une fois ceci fait, voici la requte crer:

avec les dtails de la fonction Cumul:

et les dtails de la fonction Moyenne Mobile:

MS Office Access

229/564

Vincent ISOZ

9.20.5 Requtes de data mining/machine learning


Dans le Data Mining certaines mthodes (comme les rseaux de neurones) se basent sur le
principe que l'on a une srie de donnes pour entraner les neurones et dterminer les
meilleurs perceptrons qui permettront par la suite de faire de l'analyse.
Souvent ces donnes sont soit choisies manuellement, soit au hasard. Voyons alors comment
dans notre table tblSorties tirer 5 sorties au hasard.

Une fois que nous avons les donnes d'entranement, nous devons test le modle thorique sur
les donnes restantes. Voyons comment maintenant ne slectionner que les donnes restantes:
ToDo: faire...

9.21 Analyse simple de portefeuilles


Pour cet exemple, prcieux aux banquiers dbutants, considrons que notre petit magasin joue
sur le march des actifs financiers et possde trois titres en proportions gales (pour
simplifier), soit 1/3, dans un portefeuille et n observations de leur rendement Ri , j .
Donc soit la table tblPortfolio suivante:

Premire tche que nous allons effectuer: Afficher dans une petite bote de dialogue
l'esprance de chaque titre i selon la relation triviale:
n

E Ri i

Ri, j
j 1

et l'cart-type au carr (variance) de chaque titre i selon la relation tout aussi triviale:
n

i2

Ri, j i

j 1

n 1

et le rendement moyen par:

MS Office Access

230/564

Vincent ISOZ
n

E R p X i Ri X11 X 2 1 X 3 1
i 1

et l'cart-type du portefeuille au carr du portefeuille (variance) par la relation un peu moins


triviale:

V R p 2 R p X i2V Ri 2 X i X j cov R j , Ri
i 1

X i2 i2 2 X i X j cov R j , Ri
i 1

Ceci est fort amusant programmer et donne:

MS Office Access

231/564

Vincent ISOZ

et le rsultat donne pour la dernire bote de message:

MS Office Access

232/564

Vincent ISOZ

9.22 Transactions
Les systmes de bases de donnes professionnels comme Oracle, SQL Server, mySQL etc.
ont un concept que l'on appelle les "transactions" (voir mon e-book sur le SQL pour plus de
dtails). L'ide est simple: si la requte n'est pas parfaitement excute, tous les changements
effectus par celle-ci sont annuls et l'utilisateur en est averti (dans de nombreux cas pratique
un tel contrle est primordial pour ne pas se retrouver dans certaines situations suicidaires...).
C'est donc quelque chose d'extrmement important lorsque l'on manipule des donnes
sensibles et que l'on veut garantir l'intgrit de la base de donnes dans son ensemble.
Le problme (parmi d'autres...) avec MS Access c'est que les transactions ne peuvent tre
faites ce jour qu'en VBA... c'est aussi une des raisons (parmi de nombreuses autres) pour
lesquelles certains dveloppeurs de mtier crent tout en VBA dans MS Access.
Donc voici un exemple complet par rapport notre magasin:
Sub ListReferences()
Public Sub TransferFunds()
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Set wrk = DBEngine(0)
Set db = CurrentDb
On Error GoTo trans_Err
wrk.BeginTrans
'Attention les transactions respectent les cls/primaires et trangres
ainsi que les champs requis mais pas les masques!
db.Execute "INSERT INTO
tblArticles(strNbArticle,strDesignation,tblFournisseurNom,intMoq,intUnitPri
ce) VALUES ('GEN-010','<div>Test insertion 1</div>','1',25,30)",
dbFailOnError
db.Execute "INSERT INTO
tblArticles(strNbArticle,strDesignation,tblFournisseurNom,intMoq,intUnitPri
ce) VALUES ('GEN-011','<div>Test insertion 2</div>','1',25,30)",
dbFailOnError

MS Office Access

233/564

Vincent ISOZ
'ici on provoque l'erreur
db.Execute "INSERT INTO
tblArticles(strNbArticle,strDesignation,tblFournisseurNom,intMoq,intUnitPri
ce) VALUES ('','<div>Test insertion 3</div>','1',25,30)", dbFailOnError
'on reprend avec une requte normale
db.Execute "INSERT INTO
tblArticles(strNbArticle,strDesignation,tblFournisseurNom,intMoq,intUnitPri
ce) VALUES ('GEN-013','<div>Test insertion 4</div>','1',25,30)",
dbFailOnError
wrk.CommitTrans dbForceOSFlush
trans_Exit:
wrk.Close
Set db = Nothing
Set wrk = Nothing
Exit Sub
trans_Err:
wrk.Rollback
If DBEngine.Errors.Count > 0 Then
For Each errLoop In DBEngine.Errors
MsgBox "Error number: " & errLoop.Number & vbCr & _
errLoop.Description
Next errLoop
End If
MsgBox "Opration annule. Il y a eu une erreur parmi les requtes
excutes", vbCritical + vbOKOnly
Resume trans_Exit
End Sub

Ainsi, si une des requtes, et une seule seulement (!) venait chouer, l'ensemble est annul!
Ce qui est fort heureux mais qui devrait tre intgr par dfaut dans le logiciel.

MS Office Access

234/564

Vincent ISOZ

10 Fonctions
Nous avons rencontr jusqu' maintenant plusieurs fonctions de calcul bien utiles dans les
requtes, formulaires et dans les tables (pour les valeurs par dfaut).
Le but de ce chapitre, tant donn l'importance relative du sujet, est de recompiler les
fonctions dj vue et d'en montrer de nouvelles qui sont aussi utilises dans les entreprises.

10.1 Relation d'ordre comme validation d'un record (table)


Dans l'option de validation de champ d'une table il n'est pas possible de faire rfrence un
autre champ de la mme table (ou mme d'une autre table).
Cependant dans des cas simples il est possible d'aller dans les proprits de la table pour
dfinir une rgle de validation globale.
Par exemple pour une table comprenant des tches comme ci-dessous:

nous souhaiterions que la date d'chance ne puisse pas tre antrieur la date de dbut. Pour
cela nous allons cliquer sur le bouton
de dialogue suivante:

MS Office Access

dans la barre d'outils pour faire apparatre la bote

235/564

Vincent ISOZ

10.2 Fonctions Date comme valeur par dfaut (tables)


Dans la table tblSorties nous souhaiterions qu' chaque nouvelle saisie soit automatiquement
mis dans le champ datDateOut la date du jour et qu'il ne soit pas possible de saisir une
commande future ou ayant plus de 15 jours:

Remarque: Il n'est pas possible d'utiliser toute les formules disponibles dans MS Access dans
les tables. Seulement les plus simples y sont autorises (soit une trs faible minorit)!

MS Office Access

236/564

Vincent ISOZ

10.3 Fonctions Now comme valeur par dfaut (tables)


Dans la table tblSorties nous souhaiterions qu' chaque nouvelle saisie soit automatiquement
mis dans un champ datSaisie la date et l'heure du jour de la saisie et que celle-ci soit valide
que pendant les 5 jours ouvrs classiques de la semaine.
Pour cela, il suffit de mettre:

o la formule dans Validation Rule est (sur un PC avec les paramtres amricains):
Weekday([datSaisie])>=2 And Weekday([datSaisie])<=6
Remarque: Il est impossible avec les formules traditionnelles ( ce jour) dans un champ de
faire rfrence un autre champ de la table!

10.4 Fonctions d'environnement (tables)


Signalons pour commencer deux fonctions trs utiles dans les formulaires, requtes, rapports
ou tables:
=Environ("username")
qui renvoie le nom de l'utilisateur de la session. Ou si elle ne fonctionne pas:
=CurrentUser( )
Permet par exemple dans un formulaire de saisie de capter le nom d'utilisateur de la personne
ayant fait la saisie, ou dans une requte de ne pas afficher les en fonction du nom de
l'utilisateur (en mixant avec une fonction IIF).

MS Office Access

237/564

Vincent ISOZ
Voici un exemple qui met automatiquement le nom de l'utilisateur lors de la saisie d'un
nouveau champ et qui s'assure que celui-ci une longueur d'au moins 5 caractres:

10.5 Fonction textes Left, Right, Instr (requte)


Nous souhaiterions arriver une requte affichant dans une colonne le type et la catgorie de
produit en se basant sur une dcomposition du nom des articles de type GEN* vendus se
trouvant dans la table tblSorties. Nous avons alors:

Ce qui donne:
MS Office Access

238/564

Vincent ISOZ

Malheureusement il se peut que la longueur des codes articles ne soit pas toujours la mme. Il
faut alors utiliser une fonction trs courante dans MS Access qui est capable de dterminer la
position du symbole de sparation. Nous aurons alors:

10.6 Fonctions textes UCase, LCase, &, TRIM, StrConv (requte)


Si nous souhaitons prendre plusieurs champs de texte, transformer tous les caractres en
majuscules et ensuite les concatner il suffit d'utiliser UCase et & comme dans MS Excel:

ce qui donnera:

MS Office Access

239/564

Vincent ISOZ

et respectivement si nous voulons tout en minuscules:

ce qui donnera:

Il arrive malheureusement (environ 2 3% des donnes) que les utilisateurs saisissent des
espaces doubles dans des noms divers. Ce qui donne alors des catastrophes du genre:

Il faut alors souvent nettoyer la sortie des requtes en utilisant la fonction TRIM:

MS Office Access

240/564

Vincent ISOZ

Si on souhaite mettre uniquement la premire lettre de chaque mot en majuscule il faudra


utiliser la fonction StrConv:

o le paramtre 3 signifie que l'on souhaite que la premire lettre de chaque mot en majuscule
(la valeur 1 correspond UCase et la valeur 2 LCase).

10.7 Fonctions replace et MID (requte)


Considrons la requte retournant les lments suivants:

MS Office Access

241/564

Vincent ISOZ
Nous souhaiterions remplacer tous les double zro (00) par rien. Nettoyer des textes dans
MS Access arrive souvent ds que l'on travaille avec SAP ou le Web. La fonction Replace est
alors trs utile dans ce contexte:

De mme que la fonction Replace, la fonction Mid est elle aussi souvent utilise pour nettoyer
des chanes de caractres ou prendre qu'une partie de ceux-ci. Voyons un exemple avec la
table tblArticles dont le champ de Description contient des caractres parasites provenant d'un
import du web:

Mme s'il existe plusieurs manire d'arriver au mme rsultat, en utilisation la fonction Mid et
la requte suivante:

ce qui donnera:

MS Office Access

242/564

Vincent ISOZ

10.8 Fonctions de dates Year, Day, Month (requte)


Si nous souhaitons dcomposer les annes, mois et jour d'un champ de date dans une requte
pour faire des analyses particulires il suffit d'utiliser les trois fonctions mentionnes dans le
titre:

ce qui donne immdiatement:

MS Office Access

243/564

Vincent ISOZ

10.9 Fonction de formatage de dates et DatePart (requte)


Dans le mme genre:

ce qui donne:

MS Office Access

244/564

Vincent ISOZ

ou avec la fonction DatePart on peut avoir les numros de semaines en commenant par la
premire semaine complte de l'anne (paramtre 3):

Ce qui donne:

MS Office Access

245/564

Vincent ISOZ

10.10 Fonction de date DateDiff (requte)


Lorsque l'on a une base de donnes permettant de grer des tches ou projets il est trs
frquent de devoir calculer le nombre de jours entre deux dates. Nous avons alors avec la
table tblTaches:

et il est possible bien videmment de changer le "d" par un "m" pour mois et un "y" pour les
annes.
Remarque: Malheureusement il n'existe pas ce jour de fonction ne prenant pas en compte le
Week-End. Il faut passer par du VBA.

10.11 Calculs de jours avec DateAdd (Formulaire)


Si vous avez une table de tches et un formulaire de saisie pour celle du type suivant:

MS Office Access

246/564

Vincent ISOZ

Vous souhaiteriez pouvoir ajouter un champ avec une formule qui indique la date de fin
calcule week-end compris. Il suffit alors de crer un champ du type:

mais si vous souhaitez que les week-end ne soient pas pris en compte il faudra passer par du
VBA.
On peut arriver au mme rsultat avec la fonction DateAdd:

MS Office Access

247/564

Vincent ISOZ
avec par contre l'avantage que cette fonction DateAdd est capable de prendre plusieurs types
d'units diffrentes dans ses calculs:
Valeur Correspondance
yyyy

Annes

Trimestres

Mois

Jours

Heures

Minutes

Secondes

10.12 Fonction Logique IIf (formulaire)


Nous allons voir maintenant l'quivalent de la fonction SI connue dans MS Excel mais en
version MS Access. Pour cela, nous allons crer un champ dans le formulaire frmArticles:

qui affiche "Trop cher" si le prix l'unit est suprieur 100.- ou "OK" lors que le prix en est
infrieur.

Remarque: La fonction SI dans MS Access est nomme VraiFaux en franais ou IIF en


anglais.
Nous souhaitons cependant afficher "Trop cher" que si le prix est suprieur 100.- et que la
M.O.Q. aussi. Dans ce cas, nouveau nous nous retrouvons avec une syntaxe presque
identique celle de MS Excel:

MS Office Access

248/564

Vincent ISOZ

10.13 Fonctions d'arrondi Round (requte)


MS Access ne comporte pas les possibilits d'arrondis de MS Excel si on veut arrondir aux 5
centimes les plus proches il faudra alors utiliser la veille formule suivante:

10.14 Fonction conditionnelle Switch (requte)


Lorsque le dveloppeur d'une base de donnes MS Access a besoin de faire une multitude de
IIF imbriques les uns dans les autres il se retrouve vitre confront une fonction illisible
l'cran. Il vaut alors mieux dans les cas simples utiliser la fonction Switch.
Considrons la requte suivante sortant le rsultat suivant:

MS Office Access

249/564

Vincent ISOZ

Nous souhaiterions y remplacer Clerc par Weidman, Butty par Hoffmann, Barbier par Massa
et Mettrez par Mettraux et les autres devront rester tels qu'ils sont. Cela donne ds lors dans la
requte avec la fonction Switch:

Soit avec un zoom sur la fonction:

MS Office Access

250/564

Vincent ISOZ

ce qui donne au final:

10.15 Fonctions IsNull et NZ (requte)


Lorsque vous effectuez une requte avec jointure vous aurez des champs avec des valeurs
nulles comme la montre la requte ci-dessous:

MS Office Access

251/564

Vincent ISOZ

qui donne lorsqu'un client de la table tblClients n'a jamais fait d'achats (voir les deux dernires
lignes):

Or si nous souhaitons une moyenne des units vendues comprenant TOUS les clients et une
moyenne comprenant SEULEMENT les clients ayant fait des achats il nous faudra utiliser la
fonction IsNull, NZ ou Null:

MS Office Access

252/564

Vincent ISOZ

o la deuxime colonne permet donc de faire une moyenne sur TOUS les clients!
Une deuxime solution qui donne exactement le mme rsultat:

10.16 Fonction DSum (formulaire)


Considrons le formulaire (pas fini!) des sorties des articles ci-dessous:

MS Office Access

253/564

Vincent ISOZ

Les questions sont les suivantes:


1. Comment afficher toute la quantit du nombre d'units vendue de tous les types
d'articles
2. Comment afficher dans ce formulaire pour un article donn le nombre total d'units
vendues ?
3. Idem que (2) mais le nombre restant ?
Pour les autres, l'ide va consister utiliser la fonction DSum (en anglais) et Sum de la
manire suivante dans des champs que vous aurez cr (vous allez voir que la manire dont
nous avons nomm les champs peut porter confusion d'o l'importance d'une stratgie de
nommage):

MS Office Access

254/564

Vincent ISOZ

et il est bien videmment possible d'utiliser d'autres fonctions que Sum pour faire des
statistiques de la mme table que celle sur laquelle est principalement bas le formulaire.

10.17 Fonction DCount (formulaire)


La fonction DCount a une syntaxe en tout point similaire la fonction DSum. Elle compte
simplement le nombre d'enregistrements au lieu de sommer leur valeur.
Elle peut tre trs pratique dans le cadre des macros. Effectivement, il est relativement ais
dans le formulaire de saisie des nouveaux clients ou vendeurs de faire en sorte que lorsque
l'utilisateur quitte le champ strNom, la macro contrle s'il existe dj un vendeur du mme
nom (bon on peut faire pareil avec les index multiples mais l'ide peut tre dveloppe dans
d'autres cas d'applications).
Un exemple qui peut tre fait avec votre formateur dans le cadre du formulaire de saisie de
nouveaux clients:

MS Office Access

255/564

Vincent ISOZ

10.18 Fonction DLookUp (formulaire)


Petit exercice de style et trs demand (ainsi que dcouverte d'une des fonctions les plus
puissantes de MS Access):
Comment afficher (par exemple) sur le formulaire de saisie d'articles, le plus simplement et
esthtiquement possible, pour chaque article le nom du fournisseur (et non pas l'id !)
correspondant un article donn tel que prsent ci-dessous (et pas autrement mis part
l'emplacement du champ quelque chose prt):

Essayez tout d'abord avec l'assistant de formulaire de trouver le rsultat


Remarque: Si vous avez dj le nom du fournisseur (car cela dpend de votre choix antrieur
lors du cours de base o nous faisons exprs de crer des erreurs !) faites en sorte d'avoir le
dlai de livraison qui s'affiche sur le formulaire en fonction du nom du fournisseur.
La solution (il faut bien que vous l'ayez quelque part mais ne "trichez" pas en passant tout de
suite celle-ci sinon vous ne verrez pas l'intrt de l'exercice) consiste utiliser la trs
fameuse fonction DLOOKUP (RechDom en franais) de MS Access et dans un nouveau
champ, d'crire la fonction suivante:

MS Office Access

256/564

Vincent ISOZ

Faites de sortes que toutes les "champs calculs" soient verrouilles et inactifs afin que
l'utilisateur ne puisse pas cliquer dedans (c'est une opration qu'il faut aussi savoir faire dans
les formulaires ressortant de requtes comme nous le verrons plus tard).
En tant qu'exercice, refaites de mme que prcdemment mais avec le dlai de livraison (c'est
plus pertinent) ainsi qu'avec le canton de localisation du fournisseur et le pays.
Petite remarque ! Rappelez-vous qu'au cours de base nous avions fait exprs de mettre les cls
primaires au mauvais endroit dans les tables tblPays et tblCantons. Nous vous demandons ds
lors la chose suivante afin de vous exercer nouveau avec les concepts de cls primaires:
1. Pour le canton, ne changez rien
2. Pour le pays, corrigez l'emplacement de la cl primaire
Quelles sont les diffrences ds lors au niveau de l'utilisation de la fonction DLookUp ?

10.19 Fonctions Count et DCount (requte)


Nous continuons toujours avec notre table tblSorties et ce que nous dsirons maintenant est
connatre combien de clients ont command un certain produit (rien de nouveau) et savoir
combien ils reprsentent en % du nombre total de clients ayant fait un achat.
La solution est loin d'tre vidente (sans toutefois tre extrmement difficile). Nous donnons
donc directement la solution:

MS Office Access

257/564

Vincent ISOZ

La jointure s'expliquant par le fait que nous voulons quand mme dans le listing les articles
qui n'ont jamais t vendu!
Ce qui donnera:

Requte que nous enregistrerons sous le nom qryDistributionPerc.

10.20 Fonction Dsum (requte)


Nous aimerions connatre la rpartition des ventes par article. Il s'agit alors de faire une
requte qryPareto avec:

MS Office Access

258/564

Vincent ISOZ

en mettant la colonne Pareto au format %:

Ce qui donnera:

Il semblerait qu'en toute gnralit, il ne soit pas possible de faire un vrai Pareto Cumul sans
du VBA dans MS Access.

10.21 Fonction Dsum et Dates (requte)


L'ide est de crer une requte qui cumula la vente des units mensuelles avec un
recommencement chaque anne. Pour ce faire, la seule possibilit simple est la suivante:

MS Office Access

259/564

Vincent ISOZ

o nous avons dans la premire colonne:

Dans la deuxime:

Dans la troisime:

Enfin dans la dernire:

Attention!!! MS Access ne gre pas bien les fonctions en franais. Il faut donc crire tout en
anglais afin que la requte ci-dessous fonctionne correctement!

MS Office Access

260/564

Vincent ISOZ

11 Interfacage de l'application
Les lments principaux de la base de donnes ayant t vus, il convient maintenant de
s'occuper de l'interfaage global de l'application. Ce que nous entendons par l ? C'est
l'interaction entre les formulaires, les requtes, les sous-formulaires, les tats, les vnements,
etc et leurs proprits avances.
Avant de passer des cas concrets il faudra se rappeler que pour chaque formulaire, vous le
verrez (ou le savez dj), qu'il y une petite case (voir figure ci-dessous) en mode cration qui
permet de paramtrer certaines options importantes du formulaire que vous tes entrain de
crer:

Parmi ces options, beaucoup ne sont utiles que pour la partie VBA ou macros du cours (dans
l'onglet Evenements") donc nous ne nous y attarderons pas pour l'instant. Mais faisons un
rsum de celles qui sont absolument indispensables avec un petit texte explicatif pour
chacune d'entre elles.

11.1 Proprits des formulaires

MS Office Access

261/564

Vincent ISOZ
1. Lgende: il faut toujours la saisir. C'est ce qui va apparatre l'cran de vos
utilisateurs. Souvent on y retrouve le nom de la socit ou du logiciel c'est suivant
2. Barre de dfilement: c'est une option trs importante. Beaucoup de formulaires n'en
ont pas besoin donc inutile de perturber vos utilisateurs avec cela. De plus, quand c'est
inutile ce n'est pas joli l'cran et cela prend de la place.
3. Afficher slecteur: cette option est inutile si votre base de donnes n'est pas en mode
multiutilisateur sur un rseau. Effectivement, quoi cela peut-il bien servir de voir un
petit crayon gauche du formulaire pendant que nous faisons de la saisie ( part de
nous prendre pour des idiots).
4. Boutons de dplacement: cette option vous permet de choisir si vous voulez les
boutons de navigation (prcdent, suivant, nouveau) en bas de vos formulaires. La
plupart du temps il faut avouer que cette option est dsactive au profit de boutons qui
seront plus esthtique et plus parlant pour les utilisateurs de votre application.
5. Diviseur d'enregistrement: vous pouvez la dsactiver systmatique mis part (!) dans
les sous-formulaires en mode tabulaire.
6. Auto centrer: toujours activer l'auto-centrage !! Cela vous vitera vous nerver avec
vos utilisateurs qui perdent le formulaire dans un coin de leur cran.
7. Style bordure: la plupart du temps, le dveloppeur cherchera mettre l'option fine
correspondant l'impossibilit pour l'utilisateur de changer la taille (par accident) de
votre formulaire ce qui vitera des coups de tlphone au Help Desk pour rien
8. Bote de contrle: permet simplement de masquer l'affichage l'cran sur le
formulaire les trois boutons standards: rduire, restaurer, fermer ( vous de rajouter
des boutons par la suite pour faire que l'utilisateur puisse quand mme travailler)
9. Boutons min max: permet simplement de masquer l'affichage l'cran sur le
formulaire les deux boutons standards: rduire, restaurer, fermer
10. Bouton fermer: dsactive la possibilit d'utiliser le bouton fermer sans toutefois le
masquer l'cran.
11. Dplacable: empche l'utilisateur de dplacer le formulaire l'cran (ce qui est une
trs bonne chance)
Toujours pour les formulaires voyons prsent ce qu'il y a d'intressant dans l'onglet
Donnes:

MS Office Access

262/564

Vincent ISOZ

1. Filtre: vous pouvez saisir le nom d'un filtre que vous auriez enregistr l'aide des
filtres par formulaire (voir plus haut dans le prsent support pour savoir faire cela)
2. Tri par: important mais pas dur comprendre
3. Filtrage autoris: vous de voir si vous autorisez l'utilisation du filtrage
4. Modif autorise: trs utile ! (ne ncessite probablement pas d'explications)
5. Suppr autorise: trs utile aussi ! (ne ncessite probablement pas d'explications)
6. Ajout autoris: trs utile aussi ! (ne ncessite probablement pas d'explications)
7. Verrouillage: trs utile pour appliquer l'impossibilit de cliquer sur certains champs du
formulaire actif.

11.2 Proprits des champs de formulaires


Les proprits des champs de formulaires sont trs nombreuses et beaucoup d'entre elles sont
un peu inutiles techniquement parlant (mais pas graphiquement !!):

MS Office Access

263/564

Vincent ISOZ

1. Dcimales: nous avons dj vu cela lors de notre travail dans les tables donc inutile de
s'y attarder c'est trivial.
2. Visible: option trs important permettant de masquer un champ l'utiliser
(typiquement pour faire des calculs intermdiaires indivisibles l'utilisateur).
3. Style fond: il est parfois mis en mode transparent si nous souhaitons faire croire
l'utilisateur que l'information qui y est indique n'est pas dans un champ.

1. Source contrle: permet de dfinir d'o viennent les donnes (si elles viennent de
quelque part) pour le champ slectionn

MS Office Access

264/564

Vincent ISOZ
2. Masque de saisie: option trs important car il ne faut pas oublier que les masques de
saisie ne sont pas stocks dans les tables. Ainsi, dans un formulaire il peut arriver que
vous ayez besoin de redfinir un masque.
3. Activ: le champ devient gris et l'utilisateur ne peut plus cliquer dessus mais
seulement lire le contenu.
4. Verrouill: l'utilisateur ne peut plus modifier le contenu mais peut cependant toujours
cliquer dans le champ (contrairement l'option Activ)

1. Nom: cette option est cruciale quand vous faites des calculs avec les champs. Nous
l'avons dj utilise de nombreuses fois dans des exercices antrieurs.
2. Texte barre d'tat: petit truc sympa mais encore faudrait-il que les gens regardent en
bas de leur cran.
3. Texte d'infobulle: souvent utilis et important. les info-bulles sont connues par toutes
et par tous.

11.3 Sous-formulaires (Assistant)


Dans la base, crez l'aide de l'assistant un formulaire contenant un sous-formulaire qui
comporte les champs d'enregistrements des tables tblArticles et tblVendeurs sans redondance
de champs.
Le but tant de crer un formulaire qui indique pour chaque article, qui l'a vendu, o et en
quelle quantit.

MS Office Access

265/564

Vincent ISOZ

Ensuite avec la table tblVendeurs:

Valider 'Suivant >', choisir d'afficher les donnes par codes d'articles. Valider encore
'Suivant>' jusqu' arriver la bote de dialogue ci-dessous et d'avoir les valeurs de champs
correspondantes:

MS Office Access

266/564

Vincent ISOZ

Parcourez ensuite les donnes en utilisant les flches de navigation:

Il est possible de combiner plus qu'une table et ce qu'elle soit connexe ou non la table
principale du formulaire!

11.4 Champs calculs


Dans le formulaire ci-dessus, crez en mode cration un nouveau champ de donnes intitul
Total.
Affichez les proprits de ce champ et dans l'onglet Donnes sur la ligne Source de contrle,
tapez le signe gal (=) puis prcisez l'expression qui doit permettre Access de calculer la
valeur totale de la commande:
=[Quantit par unit de commande]*[Prix unitaire]
N'oubliez pas le format du champ insr qui doit tre dans notre cas du type montaire.

MS Office Access

267/564

Vincent ISOZ
En plus, dans le mme formulaire, crez un champ qui indique, lorsque le total est suprieur
200.- francs, le fait que le vendeur ait eu le droit de faire une ristourne ou pas:
=IIF([Quantit par unit de commande]*[Prix unitaire]>200;"Ristourne";"Pas de
Ristourne"]
Un petit rappel sur les fonctions disponibles:
IIf(expression;rsultat si vrai; rsultat si faux): calcule l'expression en fonction de une ou
plusieurs conditions.
Par exemple avec plusieurs conditions:
IIf([Date commande]>#01/02/97# ET [MONTANT]>=10000;[Montant]*0.9;[Montant])
Date() afficher la date du jour
DateDiff() calcule le nombre de jours entre deux dates
Month() extrait le mois d'une date donne
Year() extrait l'anne d'une date donne
Sum() calcule la somme des valeurs d'un champ (ex. Sum([Prix unitaire]))
Avg() calcule la moyenne des valeurs
Log, sin
Pour concatner deux champs, on utilisera la syntaxe:
[Titre] & " " & ![Nom]

11.5 Sous-formulaires (Bote outils contrle)


Ouvrez le formulaire article et agrandissez-le afin d'avoir une surface de travail disponible
suffisamment grande pour y insrer un sous-formulaire.
Voici une autre mthode de cration de sous-formulaires (et de sous-tats !) qui est plus
puissante que celle de l'assistant lorsque l'on a des formulaires qui ont des champs venant de
tables multiples dont un de ceux-ci (ou plusieurs de ceux-ci) doivent contrler le contenu du
sous-formulaire (c'est un peu compliqu) ! Cette mthode permet galement de crer autant de
sous-formulaires que l'on dsire !!
En mode cration du formulaire articles cliquez sur le bouton "sous-formulaire" comme cidessous:

MS Office Access

268/564

Vincent ISOZ

Ensuite apparat un assistant l'cran qui vous demande quelles donnes doit contenir le sousformulaire. Slectionnez la source depuis la table tblSorties (ou une formulaire de la table
sorites que vous aurez cr au pralable) et ensuite prenez les champs de cette table except
N Article pour qu'il n'y ait pas redondance de l'information.
La question suivante de l'assistant qui vous demande de dfinir vous-mme les champs lier
est particulirement utile si vous avez un formulaire utilisant des champs de tables multiples
dont un seul (ou plusieurs) doit contrler le contenu du sous-formulaire (cela fonctionne un
peu comme un filtre au fait). En ce qui nous concerne ce n'est pas le cas et nous allons
simplement cliquer sur le bouton "Suivant".
Vous pouvez dfinir des proprits pour le sous-formulaire et les contrles du formulaire.
Ainsi en allant dans le mode cration et en affichant l'onglet Toutes de la page de proprits
du sous-formulaire (clique gauche et Proprits):

MS Office Access

269/564

Vincent ISOZ

Vous avez ici de nombreuses options dont certaines sont forts intressantes autant pour leur
utilit que pour leur esthtique.
Sinon pour les lments de formulaire:
L'option Activ (oui/non) pour l'accs un champ et Verrouille (oui/non) pour la
modification d'un champ sont peu prs quivalentes (validez et testez!).

11.6 Formatage
Ouvrez cette dernire base et le formulaire frmComposeArticles en mode cration et changez
le formulaire afin d'obtenir le rsultat suivant ci-dessous:
L'image de fond a t dfinie dans les proprits du formulaire dans l'option Images.
Le logo quant lui se place avec les options disponibles dans la barre d'outils.

Crez dans le formulaire ci-dessus, un "contrle calcul" nomm clcTVA et dont la formule
sera =[Prix unitaire]*(1+0.075) tel que:

MS Office Access

270/564

Vincent ISOZ

Si vous regardez la taille de la base maintenant vous verrez que sa taille tourne autour des 10
MB !!! Au fait, MS Access convertit l'image que l'on a utilise en arrire-plan en image
bitmap On verra plus tard comment l'on peut rduire la taille de la base de faon
relativement satisfaisante.
Maintenant, ajoutez un bouton "Fermer le formulaire" qui permette l'utilisateur de fermer le
formulaire de faon conviviale et ergonomique.
Sachez que vous pouvez galement formater le contenu d'un contrle avec la barre d'outils
mis en forme:

Vous avez galement une option trs intressante qui comme dans Excel permet de dfinir
une mise en forme conditionnelle pour un champ de donnes:

MS Office Access

271/564

Vincent ISOZ
Ces diffrentes options tant extrmement simple d'utilisation, je n'ai pas souhait crer
d'exercices crit les utilisant. Amusons-nous un peu avec les formulaires que nous avons
actuellement disposition dans note base.
Remarque: attention on ne peut pas dsactiver un champ de formulaire (clic
droit/proprits/donnes/activer) qui a un format conditionnel !!

11.7 Champs OLE


Il est frquent que dans certains cas particuliers de bases de donnes, on ait besoin d'intgrer
une recherche d'archives de documents. Or, pour arriver intgrer des objets dans une base
Access (opration fonctionnelle mais sensible du point de vue de la stabilit de la base) il est
bien videmment ncessaire de dfinir un champ de table bien spcifique.
Pour essayer cette fonctionnalit, je vous propose de rouvrir la base Magasin de d'ouvrir la
table nomme Articles en mode cration et d'y insrer un champ nomm Illustration de type
Objet OLE.
Fermez et enregistrez ensuite la table et crez partir de cette dernire un formulaire
instantan. Vous devriez ds lors obtenir un formulaire comme celui reprsent sur la capture
d'cran visible la page suivante.
Nous ne reviendrons pas sur la mthode de personnalisation de formulaire, chose qui devrait
tre bien matrise ce niveau du cours.

Que faire de cette grosse zone blanche dans le formulaire ? En fait, elle reprsentera une
image (sous forme d'icne si on le dsire) de l'objet li l'enregistrement en cours d'affichage.
Exemple:
Pour lier une image l'article GEN-001, il faut aller dans le menu Insertion/Objet. Ensuite,
apparat la bote de dialogue ci-dessous qui devrait (au niveau d'un crateur de bases de
donnes Access dj connue):

MS Office Access

272/564

Vincent ISOZ

Dj on se voit confront un problme au niveau de l'utilisation des champs OLE. Leur


utilisation n'est pas triviale et l'utilisateur lambda n'aura probablement jamais l'ide d'aller
intuitivement dans le menu Insertion. Nous verrons plus tard, si nous pourrons rendre cette
action un peu plus "user-friendly".
La premire option nomm "Crer nouveau" est quasiment jamais utilise. Nous ne nous y
attarderons donc pas.
Slection donc l'option "A partir d'un fichier" et cliquer ensuite sur le bouton "Parcourir" qui
devrait tre accessible ds lors l'cran (comme reprsent la page suivante).

MS Office Access

273/564

Vincent ISOZ

Il est de premire importance de remarquer l'option nomme "Liaison" qui vous est propose.
Son but, rappelons-le quand mme au cas o, est de permettre de modifier le fichier OLE
(Object Linked and Embedded) sans l'ouvrir depuis MSAccess et que celui-ci fasse
automatiquement une mise jour de la liaison (au fait, c'est bien plus compliqu que cela
mais nous n'avons pas le temps d'aller plus dans les dtails).
Ce type d'option est certainement fort intressant mais demande, lors d'une distribution en
rseau de la base, d'avoir une bande passant non ngligeable, lorsque ce genre d'oprations
(ouverture de fichiers lis) sont frquemment effectues par les utilisateurs. De plus, les
documents lis devraient viter d'avoir trop la "bougeotte" sur l'arborescence du rseau de
l'entreprise. En plus, bien que le fichier ne soit que li, celui-ci est quand mme intgr au
fichier *.mdb dont je vous laisse imaginer le poids mmoire lors d'une utilisation accrue de ce
genre d'options.
Allez chercher le fichier nomme "crayons.jpg" (attention la valeur du champ "Nom" de la
bote de dialogue "Parcourir" qui peut parfois vous causer des surprises). Aprs avoir trouv
ce fichier image et valid la chose, vous devriez avoir un formulaire ressemblant la capture
d'cran ci-dessous:

MS Office Access

274/564

Vincent ISOZ
Rptez l'opration avec tous les autres articles et testez si le systme fonctionne bien (de plus
c'est un trs bon exercice). Enregistrez les modifications de votre formulaire une fois termin
(en prvision de la suite).
Remarque: si vous souhaitez que l'image s'adapte automatiquement la taille du champ, faites
un clic droit sur celui-ci et choisissez l'option Proprits. Ensuite allez dans l'onglet Tous et
dans la proprit Mode d'affichage slectionnez Echelle:

Si l'objet OLE insr est un document de la suite Office ditable, l'utilisateur de la base de
donnes n'a (thoriquement) qu' double cliquer sur l'icne du document pour pouvoir l'diter.
Malheureusement, cela ne fonctionne pas toujours. Il faut alors que l'utilisateur clique avec le
bouton droit de la souris dessus de faon avoir accs aux options suivantes qui elles sont
quasiment toujours fonctionnelles:

Je vous laisse le temps d'essayer cette option avec un fichier texte quelconque que vous
prendrez le soin de prparer et d'insrer par vos propres moyens et connaissances.
Prenez galement le temps de tester l'option "Liaison" !
Remarque: il est possible que MS Access rencontre parfois un problme avec le serveur OLE.
Au fait, c'est MS Windows qui a le problme et non MS Access pour palier ceci, vous
pouvez ds lors insrer les objet par copier/coller ou aller corriger l'erreur dans la base de
registres de MS Windows mais alors l nous sortons du cadre de cette formation.

MS Office Access

275/564

Vincent ISOZ

MS Office Access

276/564

Vincent ISOZ

11.8 Esthtique rapports


Slectionnez la table tblArticles et crez-en un tat instantan (comme celui ci-dessous) avec une image personnalise (logo de votre entreprise
enregistre depuis l'Internet par exemple):

MS Office Access

277/564

Vincent ISOZ

11.9 Formulaire de dmarrage (switchboard)


Crez une nouveau formulaire vierge en mode cration (thoriquement il est dj termin) en
insrez des boutons ( partir le barre d'outils de contrles) permettant d'effectuer toutes les
oprations ncessaires une bonne utilisation de notre base de donnes (le formulaire devrait
quand mme tre bien mieux que celui prsent sur la figure ci-dessous):

Il existe dans MS Access une sorte d'assistant pour faire un formulaire de dmarrage (mais
faut aimer), appel "Switchboard" en anglais.
Pour lancer cet utilitaire il faut aller l'emplacement indique ci-dessous:

Apparat ensuite une bote de dialogue vous disant qu'il n'existe pour ce moment pas de
formulaire de dmarrage dans votre base. Cliquez sur Yes pour confirmer que vous souhaitez
en crer un.

MS Office Access

278/564

Vincent ISOZ

Quand l'assistant Switchboard Manager apparat, cliquez sur le bouton Edit:

Ensuite, vous allez devoir ajouter des boutons votre formulaire de dmarrage. Pour faire
ceci, cliquez sur le bouton New

Entrez le texte qui va apparatre ct du bouton. Dans cet exemple, nous cration un lment
de switchboard pour ouvrir un formulaire nomm frmFeedback. Cliquez sur le bouton OK.

Maintenant, quand vous ouvrez votre base de donnes, le switchboard devrait s'ouvrir
automatique et afficher les boutons que vous avez configur:
MS Office Access

279/564

Vincent ISOZ

11.10 Options de dmarrage


Dfinissez les paramtres ncessaires afin que le formulaire de Bienvenue dmarre
automatiquement (touche Shift pour annuler l'AutoExec4) selon:

Cette bote de dialogue a beaucoup chang et propose une nouvelle option mis en vidence
sur la capture suivante depuis la version 2007:

Il faudra passer par le systme de gestion de scurit de MS Access ou par une MDE ou par un code VBA pour
bloquer la touche Shift (tous ces sujets sont traits plus loin)

MS Office Access

280/564

Vincent ISOZ

Activez ou dsactivez la case cocher Utiliser les touches spciales d'accs pour activer ou
dsactiver les touches suivantes:
Touches

Effet

F11 ou ALT+F1

Place la fentre Base de donnes au premier plan

CTRL+G

Appelle la fentre d'excution

CTRL+F11

Bascule entre la barre de menus personnalise et la


barre de menus intgrs

CTRL+PAUSE

Dans un projet Microsoft Access, empche Access de


rcuprer des enregistrements sur le serveur.
Tableau 5 Raccourcis clavier dmarrage

Donc videmment, si nous dsactivons toutes les possibilits de l'utilisateur il y a un


problme.... Il connatra trs probablement la technique pour passer outre le blocage en
appuyant sur la touche Shift du clavier pendant l'ouverture de la base et pourra accder toute
sa structure. Il existe alors deux faons de faire...

MS Office Access

281/564

Vincent ISOZ
1. Utiliser le systme de gestion de la scurit avacane disponible dans les vieux fichiers
*.mdb (systme de scurit qui n'est donc plus disponible lorsque l'on travaille avec
les nouveaux formats de base de donnes Access 2007 et ultrieur)
2. Bricoler des codes VBA comme nous allons le voir ci-aprs car c'est le cas le plus
demand par les utilisateurs.
Microsoft propose alors le script assez simple suivant qu'il suffit dans un premier temps de
mettre dans un module quelconque du projet VBA de votre base de donnes (projet qui sera
videmment protg par un mot de passe!!!):
Function ap_DisableShift()
'This function disable the shift at startup. This action causes
'the Autoexec macro and Startup properties to always be executed.
On Error GoTo errDisableShift
Dim db As DAO.Database
Dim prop As DAO.Property
Const conPropNotFound = 3270
Set db = CurrentDb()
'This next line disables the shift key on startup.
db.Properties("AllowByPassKey") = False
'The function is successful.
Exit Function
errDisableShift:
'The first part of this error routine creates the "AllowByPassKey
'property if it does not exist.
If Err = conPropNotFound Then
Set prop = db.CreateProperty("AllowByPassKey", dbBoolean, False)
db.Properties.Append prop
Resume Next
Else
MsgBox "Function 'ap_DisableShift' did not complete successfully."
Exit Function
End If
End Function
Function ap_EnableShift()
'This function enables the SHIFT key at startup. This action causes
'the Autoexec macro and the Startup properties to be bypassed
'if the user holds down the SHIFT key when the user opens the database.
On Error GoTo errEnableShift
Dim db As DAO.Database
MS Office Access

282/564

Vincent ISOZ
Dim prop As DAO.Property
Const conPropNotFound = 3270
Set db = CurrentDb()
'This next line of code disables the SHIFT key on startup.
db.Properties("AllowByPassKey") = True
'function successful
Exit Function
errEnableShift:
'The first part of this error routine creates the "AllowByPassKey
'property if it does not exist.
If Err = conPropNotFound Then
Set prop = db.CreateProperty("AllowByPassKey", dbBoolean, True)
db.Properties.Append prop
Resume Next
Else
MsgBox "Function 'ap_DisableShift' did not complete successfully."
Exit Function
End If
End Function
Et ensuite dans la fentre d'excution il suffira de taper respectivement pour activer le
blocage:

et pour ractiver son utilisation:

MS Office Access

283/564

Vincent ISOZ

Cependant, mme si maintenant l'utilisateur ne peut plus faire Shift pour dsactiver
l'Autoexec, il lui reste la possibilit de faire F11 pour ractiver la fentre de base de donnes
sous l'hypothse que nous n'avons pas dsactiv (il ne faut pas!!!) l'option:

Remarque: Le Alt+F11 pour accder au VBA n'est pas un problme puisque celui-ci est
normalement protg par un mot de passe et puis pour le problme du Ctrl+G qui permet
d'accder la fentre d'xecution... eh bien il suffit simplement de nommer les deux fonctions
de Microsoft autrement qu'avec leur nom par dfaut sinon bien videmment tous les petits
curieux pourront dsactiver votre pseudo-scurit.
L'ide est alors (outre le fait de renommer les deux fonctions proposes par Microsoft) de
mettre dans le formulaire de dmarrage et en toute gnralit dans tous vos formulaires (pas
d'autre choix! car cela ne fonctionne pas si vous le mettez dans une routine centralise) un
appel une routine via l'vnement:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF11 Then KeyCode = 0
MsgBox "Bien essay!!!...."
End Sub
partir de l votre base est relativement bien protge. Cependant le malin qui personnalisera
sa barre d'accs rapide comme il convient (c'est--dire avec le bouton Mode cration ou
diteur Visual Basic):

pourra passer outre ce niveau de scurit. La dernire possibilit est alors de contrler les
rubans et barres d'accs rapides comme nous le verrons beaucoup beaucoup plus loin dans le
prsent document. Mais ds lors il faudra faire attention ne pas se bloquer soi-mme (en
MS Office Access

284/564

Vincent ISOZ
laissant au moins dans le nouveau ruban cr sur mesure le boutond d'accs VBA qui de
toute faon est normalement protg par un mot de passe connu par l'administrateur seul!).

11.11 Barre d'outils personnalise


11.11.1 MS Access 2003 et antrieur
Vous avez galement la possibilit d'affecter une barre de menus spcifique destine aux
utilisateurs de votre application.
Pour ce faire, il faut comme pour tout logiciel de la suite MS Office crer une barre d'outils
personnalise avec les composants que l'on souhaite (boutons ou/et menus) tel que par
exemple ():

Remarque: la barre d'outils est cre dans le fichier MDB courant (ce qui veut dire que cette
barre apparat seulement l'ouverture de la base courante) !
Si vous souhaitez excuter une macro spcifique lors du clic d'un des boutons insrs dans la
nouvelle barre d'outils, vous devez effectuer un clic droit sur le bouton en question et
slectionner Proprits. Vous aurez l'cran:

L'option importante ici est Sur Action. Il s'agit de slectionner la macro qui devra tre
excute lors du clic sur votre bouton.
Dans la fentre Personnaliser/Barre d'outils cliquez sur le bouton Proprits et ensuite
choisissez les options comme ci-dessous (nom de la barre d'outils mis part):

MS Office Access

285/564

Vincent ISOZ

Validez ces modifications et retournez dans Outils/Dmarrage et dans la liste droulante


"Barre de menus" slectionnez votre nouvelle barre de menus.
Fermez et rouvrez votre base de donnes. Observez le rsultat
Vous pouvez galement pour chaque formulaire de votre base de donnes spcifier une barre
d'outils particulire qui doit s'afficher lorsque le formulaire intress est ouvert (voir dans les
proprits du formulaire).

11.11.2 MS Access 2007 et ultrieur


Dans MS Access 2007 et ultrieur tout ce qui est relatif aux barres d'outils s'est
considrablement compliqu. La raison du respect des standards XML expliquant cet tat de
fait, Microsoft aurait pu faire l'effort de mettre un outil simple de personnalisation
disposition des dveloppeurs de base de donns.
Le sujet est devenu suffisamment vaste pour qu'un chapitre peu prs exhaustif prenne entre
60 et 90 pages A4. Nous renvoyons ds lors le lecteur pour l'instant sur les PDFs
tlchargeable disponibles sur www.developpez.com et nous allons montrer dans la prsent
document uniquement les points trs trs frquemment demands par les employs en
entreprise.
Je me refuse par contre de traiter des rubans associs aux formulaires car selon c'est une
nerie car ne fonctionnant pas sur toutes les plates-formes ne comportant pas la version
cliente complte de MS Office Access.

11.11.2.1 Masquer le ruban au dmarrage de MS Access 2007


Commenons par la mthode pour masquer compltement les rubans au dmarrage de
MS Access 2007.
Pour cela il faut crer une table nomme USysRibbons avec une colonne nomme
RibbonName de type Texte et une autre colonne nomme RibbonXML de type Memo.
Il suffit ensuite de mettre dans cette table les valeurs suivantes:
MS Office Access

286/564

Vincent ISOZ
Nom colonne

Contenu

RibbonName

HideTheRibbon

RibbonXML

<CustomUI xmlns="http://schemas.microsoft.com/office/2006/01/CustomUI"> <ribbon


startFromScratch="true"/></CustomUI>

et ensuite il suffit dans les options de la base de donnes active d'associer le ruban
HideTheRibbon comme ruban de dmarrage.
videmment, il est possible de nommer le ruban autrement que HideTheRibbon et d'y mettre
un autre code XML.
Par exemple le code XML suivant:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<tabs>
<tab id="tabTest" label="Test"visible="true">
<group id="grpTest" label="Test">
<button id="idTest" label="Test sans icone standard" size="large"/>
<button idMso="Paste" label="Test avec icone standard" size="large"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

11.11.2.2 Masquer le ruban au dmarrage de MS Access 2010


Dans MS Access 2010 la mthode pour compltement masquer tout ruban consiste excuter
la commande VBA suivant lors du chargement du formulaire d'accueil:
DoCmd.ShowToolbar "Ribbon", acToolbarNo

MS Office Access

287/564

Vincent ISOZ

12 Finitions lmentaires
Le but ici est de prsenter les finitions lmentaires au niveau scurit de votre base de
donnes ainsi que les interactions lmentaires entre cette dernire est quelques logiciels de la
suite MS Office.

12.1 Compactage
Souvent, les fichiers MS Access ont des tailles non ngligeables. Sachez que l'on peut
compacter (compresser) la base de donnes en allant dans:
Outils/Utilitaire de base de donnes/Compacter une base donne
Pour info le record de ce que j'ai vu de pire jusqu' aujourd'hui est le passage d'une base de 76
Mo 1.3 Mo
Au fait, il faudrait comprimer la base de donnes systmatiquement aprs chaque
modification Mais ne vous inquitez pas, Microsoft a pens tout ! Allez dans:
Outils/Options/Gnral/Compacter la fermeture

12.2 Protection par mot de passe


Pour dfinir (ou supprimer) un mot de passe d'accs la base vous devez aller dans:
Outils/Scurit/Dfinir le mot de passe de la base de donne
mais pour faire cela vous devez d'abord avoir ouvert la base de donnes en mode Exclusif:
Fichier/Ouvrir en mode exclusif (option cache sur le bouton Ouvrir)

MS Office Access

288/564

Vincent ISOZ

Vous pourrez ensuite dfinir le mot de passer comme indiqu prcdemment. Apparatra la
bote e dialogue suivante:

et quand vous fermez et rouvrez votre base de donnes, MS Access vous demandera chaque
fois de saisir le mot de passe.

12.3 MS Query
Le but de cet exercice consiste importer des donnes de la dernire version de notre base
dans MS Excel. Pour ceci, nous utiliserons dans MS Excel MS Query. Vous pouvez alors
dans ce logiciel aller dans Donnes/Donnes externes/Crer une requte puis apparat:

quand vous cliquez sur OK vous pouvez aller chercher la base intresse:

MS Office Access

289/564

Vincent ISOZ

Veuillez aprs avoir cliqu sur OK choisir les champs qui vous intressent:

Le reste fait l'objet d'un cours MS Excel !

12.4 Publipostage
Le but ici, est de vous introduire la technique de publipostage dans MS Word depuis une
base MS Access. Personnellement je considre cela cependant plus comme un cours
MS Word que comme un cours MS Access mais bon cela peut toujours tre utile
La raison s'explique par le fait, que bien que la mise en place des "champs de fusion" soit
simple, toutes les options qu'il existe dans MS Word autour de ces dernires sont assez
consquentes et pourraient faire l'objet d'un cours de 3 heures pour des non-initis ce
logiciel.
Vous voil avertis. Cependant si vous tenez voir du MS Word et laisser de ct MS Access
pendant un moment, votre formateur se tient votre disposition pour vous montrer le
fonctionnement du publipostage (et ses fonctions avances).
Remarque: Malheureusement, MS Access doit tre ferm pour faire du publipostage depuis
MS Word.

MS Office Access

290/564

Vincent ISOZ

13 Macros
Une macro est compose d'actions, chaque action correspond une tche: lorsque vous
excutez la macro, MS Access excute automatiquement les actions qu'elle contient.
Certaines de ces actions, plus complexes, permettent d'afficher des botes de dialogue, de
tester la rponse fournie par l'utilisateur, d'afficher une barre de menus personnalise et de
dvelopper ainsi une application autonome sans que vous ayez besoin de programmer (bien
que les actions fassent rfrence des instructions du langage VBA).
Disons tout de mme que les macros ont l'norme mrite d'ouvrir la porte aux non
programmeurs, en leur permettant de commencer sans trop de difficults. Elles sont donc
rserves aux nouveaux venus tout en tant interdites tout dveloppeur professionnel
confirm ! Profitez-en donc !
Enumrons quelques limites des macros:
1. Pas de dbogueur: test de variables, arrt sur changement de valeur
2. Pas de contrle d'erreur: s'il y un problme la macro plante sans espoir
3. Pas d'instruction de boucles (Do While, For Next, etc.)
4. Expression conditionnelle permettant de sauter une groupe d'instructions sans rapport
avec un If Then Else ou mieux encore, un Select Case
5. Pas de programmation structure: procdures Sub(), Function()
6. Pas de paramtres dans l'appel d'une macro
7. Pas de variables globales non plus, pour passer une valeur.
8. Encore moins de programmation Objet
9. Aucun accs aux rfrences extrieures: pas d'automation OLE pour piloter Word,
Excel, Outlook et les autres
10. De nombreuses limitations: string SQL de 256 caractres (au lieu de 32'000 en VBA)
11. etc.
Il faut savoir enfin que MS Access comporte une command Outils/Macro/Convertir les
macros en Visual Basic. A Consommer sans modration. C'est un des meilleurs moyens
d'apprendre le VBA.
Remarque: les macros sont la trs frquemment affectes des boutons poss dans des
formulaires et pris de la barre d'outils "contrles".

MS Office Access

291/564

Vincent ISOZ

13.1 Macros simples


Pour crer une macro il suffit d'aller dans l'explorateur d'objets de cliquer sur la catgorie
Macros et de cliquer ensuite le bouton Nouveau. Le type d'actions les plus usites sont, dans
l'ordre, les suivantes:
Sablier, Bip, Boitemsg, OuvrirFormulaire, OuvrirEtat, Imprimer, OuvrirRequete, Fermer
(tat, formulaire ou requte et autres), AppliquerFiltre, AfficherTousEnreg (contraire de
AppliquerFiltre), DplacerDimmensionner, ExcuterCode, ArrtMacro, Quitter

Chaque action comporte des arguments qui seront passs en paramtres la macro VBA. Un
descriptif des effets de l'action est donn par Microsoft. Vous pouvez ajouter et supprimer des
lignes dans la Macro comme vous le feriez pour une table normale (bouton droit de la souris).
Avant de s'attaquer des macros complexes il faut avoir fait !
1. Les exercices des requtes (voir plus haut) avec les macros d'export et import de MS
Excel
2. Les macros de messages (MsgBox)

13.1.1 Excution de requtes en mode cration


Lors de la cration ou modification de requtes en mode cration, de nombreux utilisateurs
m'aiment pas utiliser Ctrl+Point ou Ctrl+Virgule pour passer d'un affichage l'autre (deux
boutons c'est pas gnial...).

MS Office Access

292/564

Vincent ISOZ
Il existe une mthode cependant pour crer un raccourci (pouvant tre utilis d'autres fins!)
avec une seul touche pour excuter une requte en mode cration.
Cette mthode consiste dans MS Access 2003 et antrieur crer la macro suivante et de bien
la nommer AutoKeys (il faudra fermer et rouvrir la base pour qu'elle soit prise en compte!):

Dans MS Access 2007 et ultrieur voil quoi elle ressemble:

13.1.2 Contrle de saisie simple


Dans cet exercice nous allons dj introduire les macros de groupe. L'ide est de vrifier la
saisie de notre collgue dans le formulaire frmClient au niveau du code postal intCP afin de
vrifier que celui-ci aura bien 4 caractres.
Pour cela nous allons crer une macro nomme Macro de ce type:

Pour avoir fait apparatre les colonnes Macro Name et Condition nous avons cliqu sur les
boutons

de la barre d'outils (c'est pas utile de faire une macro groupe si jamais)

MS Office Access

293/564

Vincent ISOZ
Ensuite dans les proprits du champ intCP du formulaire frmClients nous dfinissons:

et le tour est jou!

13.1.3 Import de donnes


Comme exercice de rappel, et pour voir si vous avez tout compris jusque-l, vous allez faire
un petit exercice (dure d'une heure environ).
Crez un fichier *.xls l'aide de MS Excel dans lequel vous saisirez quelques donnes (et
seulement quelques colonnes aussi) qui correspondent une des tables de notre base magasin.
Ensuite, l'objectif est:
1. D'importer la table XL dans MS Access
2. D'liminer les ventuelles lignes vides dans la table importe l'aide d'une requte de
suppression
3. De vrifier et liminer les doublons dans la table importe l'aide de l'assistant de
requte de recherche des doublons
4. De vrifier si dans la table importe il n'y a pas des informations qui se trouveraient
dj l'identique dans la table cible (avec l'assistant requte de non-correspondance).
5. En ayant limin les donnes redondantes du point (4), importez les nouvelles donnes
dans la table cible l'aide d'une requte d'ajout
6. Videz la table importe prcdemment ( l'aide d'une requte de suppression)
7. Exportez la table vide en crasant l'ancien fichier XL existant (avec une action de la
macro bien sr !)
8. Ouvrez la table cible utilise plus haute avec l'aide de la macro et imprimez la
automatiquement (toujours avec la macro)
A la fin, rien ne doit transparaitre l'cran pour notre utilisateur, seulement quelques
messages d'avertissement et une feuille imprime.

MS Office Access

294/564

Vincent ISOZ
Bonne chance !

13.1.4 Contrles sur formulaires


Considrons le formulaire suivant (l'esthtique n'est pas le sujet ici!):

Nous souhaitons l'aide d'une macro l'ouverture de ce formulaire, dsactiver (ou cacher) le
bouton de calcul du CA tant que les champs de dbut de priode ou de fin de priode ne
contiennent pas une information.
Les donnes disponibles sont les suivantes:
1. Le formulaire se nomme frmCAPeriode
2. Les deux champs de dates se nomment respectivement txtDebutPeriode et
txtFinPeriode
3. Le bouton se nomme cmdCA
Nous allons faire en sorte que le bouton cmdCA soit cach par dfaut l'ouverture du
formulaire:

Nous voulons lors de la perte du focus du champ txtFinPeriode, excuter une macro nomme
mcrAffCmd qui nous activera l'affichage du bouton si et seulement si les deux champs de date
ont un contenu non nul!

MS Office Access

295/564

Vincent ISOZ

La macro satisfaisant l'exemple est de la forme suivante:

Nous voyons que dans un premier temps (sous-macro TestPeriodes), celle-ci effectue un
contrle du contenu du champ de dbut de priode. Si celui-ci est vide, l'action GoToControl
donne le focus au champ au Control Name: txtDebutPeriode. Aprs quoi la macro s'arrte.
Idem pour le cham de fin de priode.
Si les deux champs de dates ont un contenu, alors squentiellement, MS Access excutera la
sous-macro AfficheBouton dont l'action SetValue a pour Item:
[Forms]![frmCAPeriode]![cmdCA].[Visible]
et pour valeur: True
Ainsi le bouton d'excution de notre requte, ne sera visible que si la date de dbut ET la date
de fin ne sont pas vides de contenu.
Attention!!! Pensez toujours lcher le focus sur un lment que vous allez masquer en
utilisant l'action GoToControl (sur un autre contrle choix).

MS Office Access

296/564

Vincent ISOZ

13.2 Groupe de macros


Vous avez la possibilit de crer une suite de groupe de macros comme on l'a reprsent dans
la capture d'cran ci-dessous. Pour faire apparatre cette fentre, cliquez sur le bouton
aprs avoir cr une nouvelle macro.

Vous pouvez bien videmment enregistrer le groupe de macros comme on enregistre un tat,
formulaire, table en cliquant simplement sur la petite disquette habituelle.
Pour faire appel une des macros du groupe partir d'un objet quelconque, vous devrez alors
la dnommer sous la forme: NomduGroupe.NomDeLaMacro.
Pour cette raison, donnez vos groupes et macros des noms suffisamment explicites mais pas
trop longs.
Pour excuter un macro appartenant autonome, utilisez la commande:
Outils-Macro-Excuter une Macro
ou sinon partir d'une fentre macro en mode cration cliquez sur le petit point
d'exclamation:
Access excute alors chaque action de la fentre Macro, les unes la suite des autres. Il
s'arrte lorsqu'il rencontre une ligne vierge, l'instruction ArretMacro (ou ArretMacro) ou si la
macro affiche une boite de message.
Pour excuter une macro l'ouverture d'une base, appelez-la AutoExec (pour viter d'excuter
cette macro l'ouverture de la base, maintenez la touche Shift enfonce pendant l'ouverture de
la base).
Afin d'analyser le droulement d'une macro, vous pouvez l'excuter pas pas. Pour ce faire,
affichez la macro en mode cration et cliquez sur l'outil

MS Office Access

puis excutez la macro.

297/564

Vincent ISOZ

13.3 Groupe conditionnel de macros


Actions en fonction de conditions:
Si vous cliquez sur ce bouton vous faites apparatre la fois le mode Groupe des macros et
une nouvelle colonne de conditions comme reprsent sur la figure de la page suivante:

(1) Prcisez l'expression logique permettant Access de tester la condition.


(2) Prcisez la ou les actions raliser si la condition est vraie. S'il y a plusieurs actions, tapez
des points de suspension sur chaque ligne de la colonne "Condition"; sur la ligne suivante,
insrez l'action ArrtMacro pour interrompre la macro une fois les premires actions
effectues.
(3) Prcisez ensuite les actions raliser si la condition est fausse.
Remarques:
Si la condition n'est pas vrifie, Access excute l'action situe sur la premire ligne qui ne
contient pas de points de suspension!
Pour faire rfrence un champ ou un contrle ne se trouvant pas sur l'objet actif, faites
prcder le nom du champ du type et du nom de l'objet en les sparant par un point
d'exclamation (appel "oprateur d'identification).
Exemples:
Formulaires![Clients]![Code]
se rfre au champ "Code" du formulaire "Clients".

MS Office Access

298/564

Vincent ISOZ
Etats![Adresses]![Nom]
se rfre au champ "Nom" de l'tat "Adresses"
Pour faire rfrence la proprit d'un champ ou d'un objet, faites suivre son identification
d'un point et du nom de la proprit. Exemples:
[Code].Visible
se rfre la proprit "Visible" du champ "Code" du formulaire actif
Formulaires![Clients].Visible
se rfre la proprit "Visible" du formulaire "Clients"
Formulaires![Clients]![Code].Visible
se rfre la proprit du champ "Code" du formulaire "Clients"
Si la base de donnes comporte du code Visual Basic Application, en l'enregistrant comme
fichier MDE on permet de compiler tous les modules, de supprimer tout le code source
modifiable et de compacter la base de donnes de destination.
Le code Visual Basic sera toujours excut, mais il ne pourra plus tre visualis ni modifi ;
de plus, la base de donnes prendra moins de place car le code source est supprim et
l'utilisation de la mmoire est optimise, ce qui augmente les performances.
La conversion en MDE ncessite cependant un zro faute dans votre code sinon la conversion
ne russira pas !
L'enregistrement de la base de donnes comme fichier MDE, empche les oprations
suivantes:
Afficher, modifier ou crer des formulaires, des tats ou des modules en mode
Cration.
Ajouter, supprimer ou modifier des rfrences aux bases de donnes.
Modifier le code Visual Basic , car le fichier MDE ne contient aucun code source.
Changer le nom du projet VBA de la base de donnes l'aide de la bote de dialogue
Options.
Importer ou exporter des formulaires, des tats ou des modules. Par contre, il est
toujours possible d'importer ou d'exporter des tables, des requtes ou des macros
partir ou vers des bases de donnes non MDE.
Attention:
Il faut absolument effectuer une copie de la base de donnes d'origine. Si l'on dsire modifier
ultrieurement la structure d'un formulaire, d'un tat ou d'un module d'une base de donnes

MS Office Access

299/564

Vincent ISOZ
enregistre au format MDE, on doit effectuer ces modifications dans la base de donnes
d'origine, puis l'enregistrer nouveau comme fichier MDE.
C'est pour cette raison qu'il faut viter d'enregistrer comme fichier MDE une base de donnes
comportant des tables On ne pourra pas simplement modifier la structure d'un formulaire,
d'un tat ou d'un module dans la version d'origine, car les donnes des tables qu'elle contient
ne sont plus jour ! Il est plutt conseill de choisir la base de donnes frontale qui contient
toute la structure de gestion (requtes, formules, tats, modules) pour l'enregistrer comme
fichier MDE, alors que la base qui contient les tables se contentera d'tre lie.
Marche suivre:
1. Fermer la base de donnes. Dans un environnement multi-utilisateur, tous les
utilisateurs doivent fermer la base de donnes.
2. Menu "Outils" "Utilitaires de base de donnes" "Crer fichier MDE".
3. Dans la bote de dialogue "Base de donnes enregistrer comme MDE", indiquer la
base de donnes que l'on dsire enregistrer comme fichier MDE et cliquer sur "Crer
MDE".
4. Dans la bote de dialogue "Enregistrer MDE comme", indiquer le nom, l'unit et le
dossier de la base de donnes.

13.4 Macro AutoExec


Vous pouvez utiliser une macro spciale appele "AutoExec" pour excuter une action ou une
srie d'actions lorsque votre base de donnes est ouverte pour la premire fois. Quand vous
ouvrez une base de donnes, Microsoft Access recherche une macro de ce nom et, s'il en
trouve une, l'excute automatiquement.
Procdure suivre:
Cre une macro qui ouvrira votre formulaire principal, enregistrer la macro sous le nom
"AutoExec". Aucun autre nom, comme "Mon AutoExec" ou "autoexec" par exemple n'est
autoris. Alors attention la casse!!
Votre macro ressemblera la figure suivante:

MS Office Access

300/564

Vincent ISOZ

Cette macro AutoExec est de la plus haute importance car nous la retrouverons lors de l'tude
des options avances du travail en mode multi-utilisateurs.

13.5 Macros Run Code


Une action important pour beaucoup d'employs reprenant des bases de donnes d'anciens
collgues qui matrisaient le code VBA ou utilisant des base de donnes dveloppes par des
entreprises externes souhaitent parfois utiliser des codes VBA via des macros simples.
La commande rserve cette action est RunCode. Elle a une limitation non ngligeable dont
il faut se souvenir: elle ne peut pas excuter des routines (sub) mais uniquement des fonctions
(function) VBA.
Ainsi, si vous avez crit une routine (sub), il faudra soit la transformer en fonction, soit crer
une fonction qui fait appel la routine.
Nous avons alors:

MS Office Access

301/564

Vincent ISOZ
Et dans function name nous cliquons sur le bouton d'assistance:

o Message est une simple fonction VBA Access utilise pour l'exemple:

Nous avons alors:

Ce qui donnera l'excution de la macro:

MS Office Access

302/564

Vincent ISOZ

13.6 Macros Import/Export


Nous avons dj fait antrieurement dans ce document lors de notre tude des requtes des
macros qui avaient pour but d'exporter ou d'importer des donnes de ou vers MS Excel. Afin
de nous assurer que ces concepts soient matriss, nous vous demandons de crer une macro
mcr Export capable d'exporter la table tblSorties dans un fichier MS Excel qui devra tre
enregistr sur la racine de votre disque C:\ et s'ouvrir automatiquement.
Nous vous demandons galement de crer une macro mcrImport qui aura pour rle d'importer
des donnes du fichier MS Excel NouveauxVendeurs.xls dans la table des vendeurs (attention
de vrifier que tous les champs soient compatibles n'oubliez pas que nous aimons bien
insrer des piges dans ce support de cours !)

13.7 Macro ReQuery


Nous allons maintenant crer dans notre formulaire frmClients une macro qui remplit
automatiquement le champ des cantons en fonction de ce qui aura t choisi dans le champ
des pays avec la macro ReQuery qui est trs importante dans le monde MS Access!
Vous devez d'abord vous arranger retravailler votre base de manire avoir au niveau des
tables (particulirement les tables tblPays et tblCantons) le schma suivant (veillez remplir
un peu les deux tables prcites):

MS Office Access

303/564

Vincent ISOZ
Et ensuite crez d'abord une requte (qryCantonsPays) telle que prsente ci-dessous:

avec comme critre le champ strPays du formulaire frmClients:

Dans le formulaire frmClients (ci-dessus), veillez avoir la proprit suivante pour le champ
strCantons (il va chercher les donnes dans la requte que nous venons de crer):

Crez aussi une macro nomme mcrCantonsPays avec l'vnement Requery (en franais:
Actualiser):

MS Office Access

304/564

Vincent ISOZ

et ensuite veillez avoir pour la combo box strPays la proprit suivant:

et voil qui est fait.


La macro requery est galement trs utile lorsque l'on souhaite que les listes droulantes
affichent leur contenu uniquement au fur et mesure de la saisie clavier de l'utilisateur. Le
problme cependant c'est qu'il faut alors faire appel uniquement du VBA et du SQL en dure.
Raison pour laquelle nous traiterons de ce sujet dans le chapitre sur le VBA

13.8 Groupe de macros simple


Cet exercice est la suite de celui que nous avions fait sur le formulaire interagissant avec une
requte et un tat (voir exercice 44). Copiez le formulaire et nommez-le frmSortiesRptAvance.
1. Ajoutez-y une liste droulante (nomme lstNomVendeurs) contenant le nom des
vendeurs (liez-y une requte qui va chercher la liste des vendeurs. ceci vous vitera
des problmes possibles avec la cl primaire numrote)
2. Un groupe d'options (nomm grpChoixSynthese) deux valeurs Oui/Non
Voici le rsultat obtenir:

MS Office Access

305/564

Vincent ISOZ

Modifiez la requte qui est rattache ce formulaire comme ci-dessous (attention, veuillez
remplacer dans la capture d'cran ci-dessous la variable ChoixVendeur par lstNomVendeurs) :

L'exemple ci-dessous marche parfaitement (au niveau de la liste des vendeurs pour l'instant) si
vous avez fait tout juste jusque-l:

MS Office Access

306/564

Vincent ISOZ

Il faut maintenant nous occuper des boutons d'option qui ont pour rle, d'activer ou de
dsactiver le choix des vendeurs. Crez une nouvelle macro conditionnelle vide nomme
mcrRapportVendeurs:

Cette premire tape permet d'activer/dsactiver la liste droulante du choix des vendeurs
(Expression vaut Yes pour le premier et No pour le second):

et rattachez l'vnement AfterUpdate du groupe d'options:

Une fois ceci fait, votre formulaire devrait fonctionner. Ainsi lorsque l'utilisateur clique sur
Oui la liste des vendeurs s'active et inversement.
Mais si nous ouvrons la requte, celle-ci va quand mme prendre le nom du vendeur dans la
liste mme si celle-ci est dsactive. Il nous faut donc vider cette liste en rajoutant quelques
actions comme ci-dessous (attention les noms des champs diffrent !!!).

MS Office Access

307/564

Vincent ISOZ
Remarque: prenez garde ne pas copier ce qui est crit sur les captures d'cran ci-dessous
sans rflchir ce que vous faites !

Il nous faut donc maintenant modifier en consquence le critre de la requte relativement aux
champs du nom de vendeur. Ainsi, comme nous l'avons dj vu, si le paramtre est vide, il
convient d'crire (c'est une possibilit parmi celles que nous avons vu jusqu'ici dans le cours
et pas ncessairement la plus simple !):
[Forms]![frmSortiesRptAvance]![lstNomVendeurs] OR
[Forms]![frmSortiesRptAvance]![lstNomVendeurs] is Null
Maintenant il nous faut dans ce groupe, une dernire macro qui va s'excuter lorsque
l'utilisateur voudra visualiser le rapport. Cette macro devra vrifier si les champs des dates ne
sont pas vides et le cas chant si un nom de vendeur aurait t choisi.
Voici quoi doit ressembler la macro (vous la faites avec le formateur):

Avec l'assistant cration de bouton, crez aprs un bouton li la macro:


mcrRapportVendeurs.OuvreRapport

13.9 Groupe de macros complexe


Refaites de mme mais avec la table tblEntres en faisant en sorte que l'utilisateur puisse:
1. Choisir un intervalle de dates pour les entres
2. Choisir les articles et/ou les fournisseurs

MS Office Access

308/564

Vincent ISOZ
3. Lorsqu'un fournisseur est activ que la liste des articles n'affiche que ceux du
fournisseur slectionne (requery)
4. Activer ou dsactiver le filtre
Remarque: il faudra crer plusieurs requtes ainsi que plusieurs macros ainsi qu'un
formulaire. Nous vous laissons le choix des noms.
Le rsultat peut ressembler quelque chose comme cela (modulo vos gots esthtiques
personnels) outre les requtes qui sont considres comme triviales:
1. Le formulaire:

2. La macro principale:

MS Office Access

309/564

Vincent ISOZ

14 Thorie internet / intranet


Si vous souhaitez que le personnel de votre entreprise ait accs au contenu de la base (ou des
tables) sans utiliser la notion de "partage" incluse dans MS Access, vous pouvez alors publier
des tats-web sur l'Intranet ou Internet de votre entreprise.
Ouvrez l'objet (table ou requte uniquement) contenant les donnes insrer dans la page
Web puis utilisez la commande Fichier Exporter.
1. Modifiez si besoin est, le nom du fichier
2. Slectionnez le type de fichier *.htm
3. Slectionnez le dossier d'enregistrement
4. Cliquez sur enregistrer et publiez ensuite les pages de faon adquate en utilisant
Windows (dossier Web (li FTP)).
Ce type de page ne permettra que la visualisation des donnes sous forme HTML simple sans
interaction possible !!!
Si la page d'accs aux donnes doit tre accessible chaque utilisateur du rseau, placez la
base de donnes dans un dossier partag. Si elle doit tre accessible sur un rseau Internet ou
Intranet, placez-l dans un dossier sous le rpertoire racine du serveur Web
(\Webshare\wwwroot ou \Inetpub\wwwroot dans le IIS) qu'il faut savoir videmment
configurer et installer...

14.1 Formulaire web


Dans la fentre de base de donnes, il faut cliquer sur le bouton Pages dans la barre des objets
puis lancez l'assistant de pages web pour crer un formulaire web simple de la table
tblFournisseurs. Vous devez la fin obtenir le rsultat suivant:

MS Office Access

310/564

Vincent ISOZ

Si la fentre Liste des champs n'apparat pas, allez dans le menu Affichage.
Une fois la page d'accs aux donnes formate selon vos besoins et prfrences cliquez sur
l'habituelle disquette pour enregistrer la page au format HTML sur un disque rseau ou
serveur IIS de votre entreprise.
Remarque: Evitez d'inclure des espaces et des accents dans le nom d'une page Web ou d'une
page d'accs aux donnes.
Pour visualiser la liaison existante entre la page d'accs aux donnes et la base de donnes
source, accdez l'onglet Base de Donnes de la Liste des champs, cliquez avec le bouton
droit sur le nom de la base puis cliquez sur l'option Connexion:

MS Office Access

311/564

Vincent ISOZ

Attention! Si vous dplacez la base de donnes associe la page, vous devez modifier le
chemin d'accs la base dans l'onglet Connexion de la bote de dialogues Proprits des
liaisons de donnes.
Vous pouvez regrouper la page d'accs aux donnes en mode cration. Pour cela, ajoutez si
besoin est, le champ sur lequel le regroupement doit tre effectu puis slectionnez-le.
Affichez la barre d'outils nomm "Web".
Cliquez sur le bouton
puis vous verrez le champ se dplacer vers la gauche avec un
nouveau bouton reprsentant une croix. Enregistrez les modifications, lancez l'aperu et
observez le fonctionnement.
Evidemment, pour annuler le regroupement il vous faudra cliquer sur le bouton
Si une bote de dialogue apparat vous indiquant que des paramtres de scurit empchent
l'accs une source de donnes situe sur un autre domaine, activez l'option Accs aux
sources de donnes sur plusieurs domaines dans Internet Explorer 5 ( peu prs le mme
principe sur la version 6).
Les composants Microsoft Office Web Component doivent tre installs sur les postes clients
et serveur.
Attention!!! Des donnes ne peuvent tre saisies dans une page pour laquelle vous avez
effectu des regroupements.

MS Office Access

312/564

Vincent ISOZ
Voici quoi ressemblera finalement la page web dans Internet Explorer 6.0:

14.2 Application Web avec SharePoint 2010/Access 2010


Bon tant donn que c'est une nouveaut c'est hyper limit tant donn que c'est la version
1.0... il ne faut pas en esprer des miracles...
Bone premire chose, nous ouvons Access 2010 et allons dans le menu File/New et nous
prendront le traditionnel exemple de la base web Contacts:

et vous cliquez sur Create Vous aurez alors:

MS Office Access

313/564

Vincent ISOZ

Ensuite, vous allez dans le menu Save & Publish o vous pourrez cliquer sur Run
Compatibility Checker:

MS Office Access

314/564

Vincent ISOZ
S'il n'y a pas d'erreurs, vous mettez l'adresse cible de votre site SharePoint. Attention faire le
bon choix car aprs pour dplacer la base c'est la joie...:

Vous validez en cliquant sur le bouton Publish to Access Services et vous devrez attendre un
peu de temps:

Une fois la conversion termine sans erreurs vous aurez le message avec le lien direct vers le
site SharePoint comme visible ci-dessous:

MS Office Access

315/564

Vincent ISOZ

Quand vous cliquez sur le lien vous voyez votre base Access en mode web avec les requtes,
formulaires et macros fonctionnelles:

MS Office Access

316/564

Vincent ISOZ
Efin remarquez les choix disponible dans le menu Options:

Si nous cliquons sur Settings nous voyons tout le contenu de la base avec la possibilit
d'ouvrir dans SharePoint chaque lment (mais pour modifier il faut passer pour l'instant
obligatoirement par le client lourd):

14.3 Application Web avec SharePoint 2013/Access 2013)


Bon cela reste limit mais il y a de nouvelles choses intressantes par rapport SharePoint
2010/Access 2010 avec cette version 2.0... Cependant, il ne faut toujours pas en esprer des
miracles....
Nous repartons comme pour l'exemple SharePoint 2010/Access 2010 avec l'application web
Contacts:

MS Office Access

317/564

Vincent ISOZ

et que vous saisissez les informations adquates:

vous pouvez saisir l'URL de destination du site SharePoint de votre entreprise. Le lien sera
cr dans la liste Applications du site cible.
Une fois la gnration termine, nous arrivons sur la vue suivante (remarquez le lien Ajouter
une table vide mis en vidence ci-dessous):

MS Office Access

318/564

Vincent ISOZ

L'interface d'Access change du tout au tout avec uniquement (du moins pour Access 2013)
deux onglets:

et le but n'est pas d'y faire de la saisie mais de modifier les formulaires (ce qui pour les
modifications de base est trivial et similiare ce que nous avons dj vu)!
Remarquez le contenu du bouton Avanc:

MS Office Access

319/564

Vincent ISOZ

avec pour les requtes les mmes possibilit que les bases locales!!! (simplement les requtes
paramtres ne peuvent pas tre appeles depuis l'interface web...!)
Si maintenant nous souhaitons voir ce que verront les utilisateurs, nous cliquerons sur:

Nous arriverons alors sur la page SharePoint (remarquez la possibilit de re-modifier dans
Access tout moment via l'engrenage):

Maintenant, remarquez en mode modification le lien mis en vidence en rouge Modifier la


table:

MS Office Access

320/564

Vincent ISOZ

Nous nous retrouvons alors en terrain connu:

avec uniquement certaiens proprits par rapport aux bases locales (remarquez l'absence des
masques de saisie!! ce qui enlve presque tout intrt professionnel la l'outil):

MS Office Access

321/564

Vincent ISOZ
et le lecteur aura trs probablement remarqu que l'on peut ajouter des boutons (et aussi
supprimer les existants!):

On choisira alors le nom du contrle et l'info-bulle et lorsque l'on clique sur Sur clic, il vient
l'assistant de gnration de macros:

Donc rien de nouveau mais c'est quand mme assez puissant lorsque l'on sait que cela va tre
transform en script web.
Il en va de mme pour afficher des vues (d'autres tables ou requtes non paramtres):

MS Office Access

322/564

Vincent ISOZ

MS Office Access

323/564

Vincent ISOZ

15 Optimisation et analyse
Une fois votre base termine, il existe dans MS Access, une srie d'assistants qui vont
effectuer une analyse de votre base et qui vont tenter de vous aider corriger les ventuelles
erreurs ou manque de rigueur de votre part.
Nous aurions pu voir ce outil ds le dbut du cours mais il fallait au pralable certaines
connaissances. Par ailleurs, lors de la discussion sur la normalisation des base de donnes
dans le chapitre de modlisation, nous avons fait rfrence au prsent chapitre.

15.1 Table
L'outil Table me dans le menu Outils/Analyse est assez (voir trs) mdiocre. Il s'agit en fait
d'un outil d'aide la normalisation de deuxime et troisime forme mais qui ne peut deviner
ce que vous avez en tte comme stratgie de dveloppement.
Pour exemple, prenons la table tblSorties dans une version compltement errone (en 1re
forme normal) sans qu'elle soit lie quoi que ce soit donc:

15.2 Performances
Dans Outils/Analyse lancez l'option Performances:

L'idal, serait de ne plus avoir aucun message dans les diffrentes analyses. Ainsi, si vous
slectionnez l'onglet "Tous types d'objets" et cliquez ensuite sur le bouton "Slectionner tout"
et enfin sur le bouton "OK", vous pourriez tre amen avoir un rsultat du genre:

MS Office Access

324/564

Vincent ISOZ

Autre point important: Microsoft Access ne recouvre pas automatiquement l'espace libre
aprs avoir effacer des enregistrement ou des objets. Pour recouvrir cet espace, vous devez
compacter la base de donnes. Pour ce faire, allez dans le menu Outils/Utilitaire de base de
donnes et slectionnez l'options Compacter la base de donnes. Pour viter avoir faire ceci
systmatique, vous pouvez aller dans Outils/Options:

Vous remarquerez l'option Compacter la fermeture dans l'onglet General qui vous vitera
d'oublier cette procdure.

MS Office Access

325/564

Vincent ISOZ

15.3 Documenter

MS Office Access

326/564

Vincent ISOZ

16 Distribution
Votre application est termine, et vous souhaitez maintenant la partager avec vos collgues ou
autres utilisateurs (si vous tes dveloppeur). Dans le cas le plus simple une solution consiste
placer la base sur le disque rseau commun de l'entreprise afin que chaque utilisateur puisse
l'excuter sans complications. Cependant, avant de faire ceci, il est bon de penser la manire
dont vous allez la distribuer et faire de la maintenance.
Si votre ordinateur est connect un rseau, vous pouvez travailler dans une base de donnes
Microsoft Access en mme temps que d'autres utilisateurs. Vous pouvez partager des donnes
dans un environnement multi-utilisateur de plusieurs manires.
1. Partager une base de donnes MS Access tout entire
Placez la base de donnes MS Access entire sur un serveur de rseau ou dans un
dossier partag. Cette mthode est la plus facile mettre en uvre. Chaque utilisateur
partage les donnes et utilise les mmes formulaires, tats, requtes, macros et
modules. Utilisez cette stratgie si vous souhaitez mettre en place une utilisation
uniforme de la base de donnes ou si vous ne voulez pas que les utilisateurs puissent
crer leurs propres objets.
2. Ne partager que les tables de la base de donnes MS Access
Placez uniquement les tables (la base "Jet") sur le serveur du rseau et conservez les
objets de la base de donnes dans les ordinateurs des utilisateurs. Ainsi, les
performances de la base de donnes sont accrues, car seules les donnes sont
transfres sur le rseau. De plus, les utilisateurs peuvent personnaliser leurs
formulaires, tats et autres objets en fonction de leurs prfrences et besoins
individuels, sans affecter les autres utilisateurs.
Vous pouvez sparer les tables des autres objets de base de donnes l'aide de l'outil
Fractionner la base de donnes (Outils/Utilitaire de base de donnes).
Au besoin, on pourra remplacer la base Jet par une base MSDE (Microsoft SQL
Server Desktop Edition) ou client/serveur.
Jet et MSE sont limits en taille: 2Go maximum. Au-del, il faudra utiliser une base
client/serveur proprement dite.
Jet, avec une limite thorique de 255 connexions simultanes, marque une baisse de
performances partir de 5 connexions, et n'est pas recommand au-del de 10. MSDE
est optimis pour 5 requtes concomitantes, y compris les procdures stockes. Audel, les performances se dgradent rapidement.
3. Partager la base de donnes MS Access sur Internet
Vous pouvez convertir un ou plusieurs objets de base de donnes au format HTML
statique ou HTML gnr par serveur, ou crer des pages d'accs aux donnes, puis les
afficher dans un navigateur tel que Internet Explorer, sur le Web

MS Office Access

327/564

Vincent ISOZ
4. Rpliquer la base de donnes MS Access
Si vous utilisez deux ordinateurs, un ordinateur de bureau et un portable par exemple,
vous pouvez utiliser le Porte-documents de Microsoft Windows pour effectuer des
rplicas de votre base de donnes Access et les maintenir synchroniss. En outre,
plusieurs utilisateurs situs divers endroits peuvent travailler simultanment avec
leurs propres copies et les synchroniser travers le rseau, par l'intermdiaire d'une
connexion par numrotation tlphonique ou via Internet.
5. Crer une application client-serveur
Si vous travaillez dans un environnement client-serveur, vous pouvez tirer profit de la
puissance et de la scurit supplmentaires qui vous sont offertes en crant une
application client-serveur. Pour plus d'informations, il faudrait suivre un cours Visual
Basic et MS SQL Server ou ASP/PHP.
Voici toutes fins utiles un tableau rcapitulatif:
Tableau 6 Stratgies de dploiement

Rseau
Rseau local peu
encombr

Application

Type de Base

Mono Poste

Jet (.mdb)

Base partage 5 10
utilisateur maxi.

Jet

MSDE
Rseau local avec
serveurs (de domaine, de
fichiers, de mail)

Internet

Distribue, de un
plusieurs dizaines
d'utilisateurs, mise jour
priodique

Plusieurs centaines, voire


milliers d'utilisateurs,
mise jour immdiate de
la base centrale
Base en lecture seule
Base moyenne en
lecture/criture

Bases lourdes, plusieurs


milliers d'utilisateurs.

Jet en tampon: une copie


(ou un extrait) de la base
sur chaque pose,
synchronise avec la base
client/serveur ou Jet
rplique
Client/serveur

Jet zippe, en
tlchargement
Jet rplique

Client/serveur, avec ou
sans rplication

Contraintes
Convivialit maximale.
Performances maximale
Si pas trop de conflits sur
les blocages convivialit
maximale. Performances
acceptables
Perte de souplesse.
Bonnes performances
Convivialit maximale.
Performances maximales.
Flexibilit de la base
tampon.

Convivialit maximale.
Bonnes performances.

Convivialit maximale.
Performances maximales.
Convivialit maximale.
Performances maximales.
Rplication mettre en
place.
Convivialit Internet.
Performances Internet.

16.1 Fractionnement d'une base


Objectif: Ne partager que les tables de la base de donnes MS Access
Allez dans le menu: Outils/Utilitaire de base de donnes/Fractionner la base de donnes.
Suivez l'assistant et renommez le fichier contenant les tables ainsi: Tables.mdb

MS Office Access

328/564

Vincent ISOZ

Vous verrez dans la fentre base de donnes que chaque table comporte maintenant une flche
ce qui signifie qu'il y a une liaisons externe.

Au cas o la liaison serait perdue ou modifie, il faut aller dans le menu Outils/Utilitaire de
base de donnes/Gestionnaire de tables lies:

Il suffit alors de cliquer sur Select All et ensuite sur OK et de dfinir le nouveau chemin du
fichier mdb contenant les tables.
Nous allons placer les tables de la base "la plus propre" de la classe sur le serveur (ou de
chaque participant respectif)
MS Office Access

329/564

Vincent ISOZ
Distribuons le fichier contenant les formulaires, requtes et tats sur chaque poste et
effectuons-y la liaison.
Vrifiez le fonctionnement.
Remarque: dans une entreprise il est malheureusement frquent que groupe de travail ait
dvelopp sa propre base. Quand vient le temps pour des raisons de cohrence et de
productivit de runir toutes les bases il existe une possibilits qui revient lier une table
d'une base donne une autre base. Pour ce faire, la manipulation est trivialement simple, il
suffit d'aller dans le menu Fichier/Donnes externes/Lier une table (nous avons dj pratiqu
cela au dbut du cours).
Nous verrons dans la partie VBA du cours comment lorsque nous sommes en possession d'un
fichier MDE, automatiser la mise--jour des liaisons.

16.2 Rseau
Lorsque vous travaillez en rseau avec plusieurs personnes:
1. Microsoft Access a besoin de beaucoup de bande passante sur le rseau. moins de
100 Mb/s, ne faites pas d'applications partages!
2. Privilgiez le runtime plutt que le client lourd du dveloppeur
3. Privilgiez l'utilisation des *.mde plutt que des *.mdb ou *.accdb
4. vitez de mettre l'application comme le fichier des donnes dans des sous-sous-sous
rpertoires et vitez les noms longs pour les rpertoires et le fichier de donnes. Plus
vous tes proche de la racine et moins vos noms de rpertoire sont courts
(convention 8.3), plus les performances seront accrues.
5. Au moins une fois par demi-journe demandez tout le monde de fermer
compltement la base de donnes (sans la faire planter par le gestionnaire de tches ce
qui n'quivaut pas la fermer!)
6. Si votre fichier de donnes est hberg sur un serveur Windows (sauf Windows 2003
Server):
a. Dsactivez le dlai de notification de violation de partage.
b. Dsactivez la gnration automatique de nom de fichier court.
c. Activez la mise en cache des noms longs (sauf si vous utilisez des noms
courts).
7. Certains Anti-virus trop agressifs nuisent la bonne marche de nos machines, les
applications en font les frais. N'hsitez pas exclure de la vrification les applications
Microsoft Access.
8. Placez vos bases partages sur des volumes NTFS plutt que FAT ou FAT32.

MS Office Access

330/564

Vincent ISOZ
9. Enfin dans le dernier des cas en allant dans Fichier/Options/Paramtres du client
(versions 2007/2010/2013) vous pouvez jouer par tatonnement avec les paramtres
suivants:

10. Ou encore en allant dans la section Base de donnes active vous pouvez dcocher les
lments mis en vidence ci-dessous:

MS Office Access

331/564

Vincent ISOZ

17 Securit avance
Microsoft Office Access offre trois mthodes de protection d'une base de donnes:
1. Dfinir un mot de passe pour ouvrir une base de donnes
2. Enregistrer la base de donnes dans un fichier au format MDE (dj vu dans la
thorie des macros), ce qui supprime le code Visual Basic modifiable et empche la
modification de la structure des formulaires, des tats et des modules.
3. Utiliser une scurit au niveau utilisateur, ce qui permet de dlimiter les parties
auxquelles l'utilisateur peut accder ou celles qu'il peut modifier.
Remarque: Dsol si ce chapitre n'est pas trs clair mais force que Microsoft change les
versions un rythme endiabl il y a un mlange de plus en plus grand dans le prsent
document. videmment tout ce qui est crit ci-dessous est dcant en formation de manire
correcte et propre (du moins j'essaie).

17.1 Dfinition d'un mot de passe


La mthode la plus simple pour la (pseudo-)scurit est de dfinir un mot de passe pour ouvrir
la base de donnes. Ds qu'un mot de passe est dfini, une bote de dialogue qui exige un mot
de passe s'affiche lors de chaque ouverture de la base de donnes. Seuls les utilisateurs qui
tapent le mot de passe correct pourront ouvrir la base de donnes.
Cette mthode est relativement sre (Microsoft Access code le mot de passe pour qu'il ne soit
pas accessible en lisant directement le fichier de base de donnes), mais elle ne s'applique qu'
l'ouverture d'une base de donnes. Ds qu'une base de donnes est ouverte, tous ses objets
sont la disposition de l'utilisateur. Pour une base de donnes qui est partage entre un petit
groupe d'utilisateurs, ou sur un ordinateur isol, dfinir un mot de passe est souvent suffisant.
Marche suivre:
1.

Fermer la base de donnes. Si la base de donnes est partage sur un rseau,


demander aux autres utilisateurs de fermer la base de donnes.

2.

Faire une copie de sauvegarde de la base de donnes et la stocker dans un endroit


o elle sera en scurit !

3.

Dans le menu Fichier, cliquer sur Ouvrir Activer ensuite la case cocher Mode
exclusif dans le bouton Ouvrir en bas droite de la bote de dialogue. Ce qui aura
pour effet d'ouvrir la base de donnes mais pas en mode exclusif:

MS Office Access

332/564

Vincent ISOZ

4.

Refermez la base de donnes et fait un simple Fichier/Ouvrir pour rechoisir la


mme base de donnes.

5.

Ensuite, allez dans le menu Outils/Scurit/Dfinir le mot de passe de base de


donnes:

6.

Dans la zone Mot de passe, taper le mot de passe et le confirmer:

7.

Valider.

MS Office Access

333/564

Vincent ISOZ
Le mot de passe est prsent dfini. La prochaine fois que tout utilisateur ouvrira la base de
donnes, une bote de dialogue demandant le mot de passe s'affichera.
Attention:

Un mot de passe respecte la casse on doit le taper exactement comme il a t dfini


(maximum 20 caractres).

Si on perd ou si on oublie le mot de passe, il ne peut pas tre rcupr (sans logiciels
spcialiss gratuitement disponibles sur le web) et plus personne ne pourra ouvrir la
base de donnes !

Remarque: le danger avec cette mthode, c'est que chaque utilisateur a quand mme accs
toute l'architecture de la base de donnes s'il connat comment passer outre l'cran d'accueil
(shift). De plus, n'importe quel utilisateur pourrait l'ouvrir en "Mode exclusif"
(Fichier/Ouvrir Bouton Ouvrir Ouvrir en mode exclusif) et ds lors empcher chacun
de ses collgues d'y crire ou lire la moindre information !

17.2 Scurit au niveau utilisateur


17.2.1 Protocole
Attention, si vous ne suivez pas le protocole suivant SCRUPULEUSEMENT en ce qui
concerne une base scurise, vous allez rencontrer des complications!!!
1. Il faut crer les fichiers de scurit *.mdw avant de crer sa base de donnes car le
moteur JET l'utilise ds le dbut pour coder les droits (si malheureusement la base
existe dj, il faudra en crer une nouvelle au pralable en ayant respect ce point
et importer tous les objets dedans).
2. Fermer et rouvrir MS Access
3. Ensuite, dans Outils/Scurit/Gestion des utilisateurs et des groupes, dfinir tous
les Users et Groups (minimum 1 User: MoiMeme, 1 Group: MonGroup
4. Faire toutes les associations Users-Groups (dont MoiMeme-MonGroupe)
5. Mettre un des nouveaux Users (MoiMeme) dans le groupe des Administrateurs
6. Enlever le User Administrateur du Groupe Administrateurs
7. Donner un mot de passe l'Administrateur
8. Quitter Access
9. Ouvrir Access (pour mettre en place ces nouveaux paramtres)
10. S'annoncer avec le nom du nouveau user (MoiMeme) et aucun mot de passe en
passant par Outils/Scurit/Comptes utilisateurs et groupes
11. Crer une base de donnes (ainsi ce sera MoiMeme qui sera le propritaire de la
base)

MS Office Access

334/564

Vincent ISOZ
12. Faire Outils/Scurit/Autorisations d'accs pour paramtrer les droits:
13. Retirer tous les droits du groupe des Utilisateurs (s'il est l)
14. Retirer tous les droits du groupe des Administrateurs
15. Mettre tous les droits au groupe des Dveloppeurs (si vous cr un tel groupe)
16. Et faire cela sur chacun des types d'objets de la base de donnes. Ainsi, la base de
donnes ne pourra pas tre ouverte pas l'utilisateur par dfaut (utilisateur:
Administrateur)
17. Construire sa base de donnes
18. Crer tous les utilisateurs, groupes avec droits ad hoc
19. Mettre la base disposition des utilisateurs en tant que raccourci dans lequel il y
aura une liaison avec le *.mdw (voir plus loin) se trouvant le rseau pour l'ouvrir
de manire scurise quel que soit l'ordinateur
20. Enfin faire un back up rgulirement du fichier *.mdw cr au point 1
Si vous ne suivez pas ces tapes, n'importe qui pourra ouvrir votre base de donnes sans
aucune scurit sur un autre ordinateur.

17.2.2 Mthodes
La mthode la plus flexible et la plus tendue pour protger une base de donnes s'appelle la
"scurit au niveau utilisateur". Ce type de scurit est similaire aux mthodes utilises
dans la plupart des systmes de rseau. Les utilisateurs doivent s'identifier et taper un mot de
passe lorsqu'ils dmarrent MS Access (et non pas ncessairement une base de donne
spcifique !!!).
Au sein du fichier d'informations de groupe de travail, ils sont identifis comme tant les
membres d'un groupe. MS Access fournit deux groupes par dfaut: les administrateurs
(appels le "groupe Administrateurs") et les utilisateurs (appels le "groupe Utilisateurs"),
mais des groupes supplmentaires peuvent tre dfinis (heureusement).
Les autorisations d'accs sont accordes aux groupes et aux utilisateurs pour dterminer de
quelle manire ils sont autoriss travailler avec chaque objet dans une base de donnes. Par
exemple, les membres du groupe utilisateurs pourraient tre autoriss visualiser, introduire
ou modifier des donnes dans une table, mais ils ne pourraient pas changer la prsentation de
cette table. Le groupe Utilisateurs pourrait tre autoris visionner les donnes de certaines
tables et se voir refuser l'accs total une table contenant des donnes sensibles. Les membres
du groupe Administrateurs ont toutes les autorisations d'accs sur tous les objets d'une base de
donnes.
Les trois raisons principales d'utilisation de la scurit au niveau utilisateur sont:

Protger la proprit intellectuelle du code.

MS Office Access

335/564

Vincent ISOZ

Eviter que les utilisateurs ne dtriorent par inadvertance une application en changeant
le code ou les objets dont l'application dpend.

Protger des donnes essentielles dans la base de donnes.

Les groupes, les utilisateurs, les bases de donnes et toutes les autorisations d'accs font partie
d'un environnement commun qu'on appelle un espace de travail (Workspace).
La scurit au niveau utilisateur s'applique donc au niveau du logiciel MS Access et non
uniquement sur une unique base prdfinie !!!
Remarque: Bien qu'un utilisateur appartienne toujours un groupe, s'il a des droits diffrents
du groupe, ce seront ses droits individuels actifs qui prendront le dessus sur ceux inactifs du
groupe (et si le groupe a donc des lments actifs qui sont inactifs chez l'utilisateur, alors il
hritera automatiquement des droits actifs du groupe).
Dans MS Access, le systme de scurit est toujours en activit:

on appartient toujours un espace de travail !

on fait toujours partie d'un groupe !

on est toujours un utilisateur !

Ces diverses informations sont stockes dans un fichier discret, mais trs important, que l'on
trouve au premier niveau de l'environnement d'installation de MS Access, soit dans
MSOFFICE (ou directement dans le moteur JET de votre base si le protocole
prcdemment prsent a t suivi) pour les machines en rseau, soit dans:
C:\Documents and Settings\<Utilisateur>\Application Data\Microsoft\Access
pour les machines autonomes: le fichier system.mdw.

MDW = Microsoft Data Workspace


C'est le "fichier d'informations du groupe de travail" comme l'appelle Microsoft. Ce fichier est
cr au moment de l'installation du logiciel sur la machine. Les paramtres ncessaires la
gnration de ce fichier sont pris dans les deux informations que l'on doit fournir lors de
l'installation: le nom de l'utilisateur de la machine et le nom de l'organisation dans laquelle il
travaille.
Par dfaut, toute personne qui lance MS Access va se trouver englobe dans l'espace de
travail dfini par ce fichier System.mdw:
1. Cet espace contient deux groupes par dfaut:
1.

les Administrateurs (Admins)

2.

les Utilisateurs (Users)

MS Office Access

336/564

Vincent ISOZ

2. Cet espace abrite deux utilisateurs:


1.

Un Administrateur (Admin)

2.

Un Utilisateur standard (Guest)

Remarques:

Dans la version franaise, les termes anglais ont t traduits, mais il faut utiliser les
termes anglais en Visual Basic Application (V.B.A.).

Il arrive que l'utilisateur standard (Guest) ne soit pas cr dans l'espace de travail. On
n'aura donc que l'Administrateur (Admin) disposition

Le(s) utilisateur(s) par dfaut susmentionn(s) n'ont pas de mot de passe comme nous l'avons
dj implicitement mentionn dans le protocole de dbut !

17.2.3 Modlisation des droits


Pour dfinir les groupes d'utilisateurs il faut d'abord dfinir une stratgie d'utilisation de
l'application. Le mieux est d'organiser tout cela sous forme de tableau.
Voici l'exemple d'un tableau ralis. Notez que n'importe quel tableur ou logiciel permettant
de faire des tableaux fait l'affaire.

MS Office Access

337/564

Vincent ISOZ

17.2.4 Dangers de l'espace de travail "par dfaut":


Principe: Quand on lance MS Access sans indication particulire:

on utilise toujours l'espace de travail par dfaut dcrit pas System.mdw

on est toujours considr comme l'Administrateur de cet espace de travail !!

Consquence:
En tant qu'Administrateur, on a tous les pouvoirs sur l'espace de travail en cours, ainsi que
sur toutes les bases de donnes cres partir de cet espace et, bien entendu, sur tous les
objets que peuvent contenir ces bases !
Risque (qui concernant les O.S. avant Windows XP ma connaissance):
Le premier utilisateur un peu fut et mal intentionn (ou maladroit) attribue un mot de
passe l'Administrateur il devient le propritaire de l'espace de travail et, partir de cet
instant, il empche tous les autres utilisateurs d'utiliser toutes les bases de donnes dj
cres partir de cet espace de travail (de son ordinateur au fait)!

MS Office Access

338/564

Vincent ISOZ

Changer le mot de passe ne permet de le faire que pour l'utilisateur connect


Prcautions prendre:
1.

Suivre le protocole donn en dbut de chapitre!

2.

Interdire la modification du fichier System.mdw aux utilisateurs simples (dossier


sur disque rseau avec droits dfinis via Active Directory).

3.

Garder une copie du fichier System.mdw en lieu sr pour remplacer la version qui
serait modifie par un utilisateur malveillant (donc in extenso toute personne qui
sait o se trouve le fichier mdw d'une base pour le rinitialiser en l'crasant par
System.mdw aprs avoir chang le nom du fichier. d'o le fait que beaucoup
cherchent mettre ce fichier sur un disque rseau en lecture seule)

4.

Organiser et administrer un ou plusieurs espaces de travail bien protgs.

Cration d'un nouvel espace de travail:


Il faut excuter le programme WRKGADM.EXE (WoRK Group ADMinistrator) qui se
trouve, soit dans Windows\System, ou en passant par l'environnement MS Access par
Tools/Security/Workgroup Administrator:

pour pouvoir crer un nouveau fichier System.mdw.

MS Office Access

339/564

Vincent ISOZ

Comme on le voit, ce fichier n'est pas tir du nant, mais est "copi" partir d'un fichier
existant: cela peut tre l'original ou dj une version prpare par nos soins conformment au
protocole susmentionn.
Remarque: La dnomination "groupe de travail" n'est pas trs heureuse: il vaudrait mieux
parler d'un "espace de travail", terme utilis dans Visual Basic. Le mot groupe peut prter
confusion, car on va dfinir des groupes d'utilisateurs l'intrieur du "groupe de travail"
Trois informations sont ncessaires pour gnrer le nouveau fichier:
1.

Le nom

2.

L'organisation

3.

L'identificateur de groupe de travail.

L'Identificateur de groupe de travail doit assurer que l'espace de travail que l'on cre est
rellement unique, car la mme personne (Nom), dans la mme entreprise (Organisation),
peut crer plusieurs "groupes de travail". Ce code est donc le seul moyen de les distinguer !
Ensuite, le logiciel va nous demander o le sauvegarder et sous quel nom:

MS Office Access

340/564

Vincent ISOZ

On peut donner un nouveau nom au fichier cr et le stocker dans le mme rpertoire que le
fichier System.mdw d'origine, ou enregistrer le nouveau System.mdw dans un rpertoire
particulier qui sera partag par les diffrents utilisateurs de ce "groupe de travail" (cas le plus
communment utilis).

Il est vital de conserver les paramtres utiliss, par crit et dans un endroit sr.
En effet, si le fichier "d'informations du groupe de travail" venait tre dtruit ou corrompu,
la seule faon de pouvoir accder aux bases de donnes partageant cet espace de travail - si la
scurit est correctement mise en place (avec l'assistant de scurit par exemple) - est de
reconstruire un fichier identique !
Attention: Il faut ds lors absolument respecter les majuscules et les minuscules d'origine.
Remarque: Si le fichier *.mdw est cr de manire classique (c'est--dire sans l'assistant), une
simple suppression de celui-ci permettra tout le monde d'accder la base de donnes avec
tous les droits.
Nous avons maintenant plusieurs espaces (groupes) de travail. Comment faire pour indiquer
celui avec lequel on veut travailler ? Dans sa version franaise, Microsoft parle de "rejoindre
un groupe de travail Microsoft Access".
Deux mthodes sont possibles:
Premire mthode: Utiliser le programme "Administrateur de groupe de travail"
1.

Dmarrer Wrkgadm.exe (l'Administrateur de groupe de travail) qui doit se trouver


dans le sous-dossier Systme du dossier Windows de la machine intresse par les
contraintes de scurit ou passer par le menu Outils/Scurit/Administrateur de
groupe de travail.

MS Office Access

341/564

Vincent ISOZ
2.

Dans la bote de dialogue, cliquer sur Joindre.

3.

Taper le chemin d'accs et le nom du fichier d'informations de groupe de travail


qui dfinit le groupe de travail MS Access que l'on veut rejoindre ou utiliser
"Parcourir" pour localiser et slectionner le fichier d'informations du groupe de
travail dsir.

Ce chemin a t sauvegard dans la base de registres sous la cl:


Hkey_Local_Machine\Software\Microsoft\Office\<Version actuelle
d'Office>\Access\Jet\<Version actuelle du Jet>\Engines

Au dmarrage suivant, Microsoft Access utilisera automatiquement les informations stockes


dans le fichier .MDW du groupe de travail que l'on vient de rejoindre.
Deuxime mthode: Dmarrer MS Access avec une option sur la ligne de commande (niveau
expert en connaissances de MS Windows).
Il suffit d'ajouter l'option /wrkgrp la ligne de commande.
Exemple: F:\MsOffice\Office\Msaccess.exe /wrkgrp E:\Erguel\Erguel.mdw
On peut taper cette ligne dans la fentre "CMD".
Attention: Avec des machines en rseau qui sont utilises par des personnes diffrentes, la
deuxime mthode est nettement prfrable. En effet, la base de registres
Hkey_Local_Machine n'est pas enregistre avec les paramtres de l'utilisateur, si bien
que l'information va demeurer dans la machine quel que soit l'utilisateur!!! Le prochain
utilisateur qui va lancer Access sera d'emble connect au dernier groupe de travail utilis et
non pas au groupe de travail par dfaut !
Remarque: Dans MS Access 97 et ultrieur, les prfrences utilisateur sont stockes dans la
base de registres Windows sous la cl:
Hkey_Current_User\Software\Microsoft\Office\<Version actuelle d'Office>\Access\Settings.
Maintenant que l'espace de travail est cr, il faut s'occuper de l'organiser:
1.

Dfinir les diffrents groupes d'utilisateurs

2.

Identifier les diffrents "comptes" utilisateurs

3.

Attribuer les utilisateurs un ou plusieurs groupes.

Ces diffrentes oprations s'effectuent dans MS Access, une fois que l'on est "connect" au
groupe de travail dsir !

MS Office Access

342/564

Vincent ISOZ
C'est le Menu Outils qui donne accs aux options Scurit.

Rappel: Lorsque l'on cre pour la premire fois un fichier d'information de groupe de travail,
on est considr par le systme comme tant le fameux "Administrateur" qui dispose de tous
les droits. Il faut user de ces droits avec discernement et agir avec mthode pour ne pas se
trouver coinc par une mauvaise manipulation.
1re opration (dj mentionn au dbut de ce chapitre):
Crer un nouvel Administrateur, diffrent de l'administrateur par dfaut (pige classique)!
Choisir un nom symbolique du genre: BigBoss, Patron, Chef, etc. ou utiliser le nom du
vritable administrateur du groupe de travail
Le N personnel permet de distinguer des utilisateurs qui auraient le mme nom. Comme on
l'a dj vu, Il faut conserver cette information dans un endroit sr, pour le cas o il faudrait
recrer le fichier d'information du groupe de travail ainsi que les utilisateurs qui le
composent !

2me opration:
Inscrire absolument cet utilisateur dans le groupe des Administrateurs !

MS Office Access

343/564

Vincent ISOZ

En prvision de la 3me opration, il est indispensable bien videmment qu'une personne au


moins soit membre du groupe "Administrateurs" pour disposer des pouvoirs ncessaires la
poursuite des oprations !
3me opration:
Il faut maintenant retirer l'ancien Administrateur du groupe "Administrateurs" (sinon vous
faites un travail pour rien). De cette manire, les ventuels "Administrateurs" d'autres groupes
de travail ne pourront plus jamais prendre possession des bases de donnes qui vont tre
cres par le nouveau groupe de travail.
Il faut pour cela donner un mot de passe cet ancien "Administrateur", car il n'est pas
possible de dtruire ce compte ( ? !) qui va demeurer maintenant en tant qu'utilisateur. Il faut
donc empcher que n'importe qui puisse accder, sans contrle, ce groupe de travail en
utilisant le nom "Administrateur".
4me opration:
Quitter et relancer MS Access. Cette fois, une bote de dialogue "Connexion" doit apparatre
l'cran Il faut saisir ou slectionner le nouvel "Administrateur". Il n'a pas encore de mot de
passe

5me opration:
Attribuer un mot de passe l'Administrateur, puisque l'on est connect sous son nom.

MS Office Access

344/564

Vincent ISOZ

6me opration: crer les groupes d'utilisateurs.


Par exemple: Membres, Comit, etc. selon la structure et les besoins de l'entreprise

7me opration: crer les comptes d'utilisateurs.


Le terme "compte d'utilisateur" provient du dbut de l'informatique, lorsque l'on tenait le
compte du temps que chaque utilisateur passait sur son terminal connect sur l'ordinateur
central en "time sharing".

8me opration: attribuer les utilisateurs aux diffrents groupes.


L'avantage des groupes, c'est qu'en attribuant un utilisateur l'un d'entre eux, cet utilisateur
acquire d'un seul coup tous les droits et toutes les autorisations que l'on a accords ce
groupe au pralable.

MS Office Access

345/564

Vincent ISOZ

Il n'y a donc pas besoin de dfinir individuellement le dtail des droits de chaque utilisateur: il
suffit de le prvoir pour son groupe et de lui faire rejoindre ce groupe !
Remarque: Droits et autorisations seront traites plus loin.
Maintenant que l'espace de travail est dlimit, il faut encore y incorporer les bases de
donnes que les utilisateurs vont utiliser ! Deux cas de figure non exclusifs peuvent se
prsenter:

On veut crer de nouvelles bases de donnes partir de l'espace de travail choisi.

On veut utiliser, en les scurisant dans cet espace de travail, des bases de donnes
existantes.

Dans les deux cas pourtant la procdure est la mme: il faut faire une copie de la base de
donnes existante en la passant par le protocole vu plus haut ou par une moulinette
particulire: un "Assistant scurit" qui a t apparu avec Access 2002.
Donc pour scuriser une base de donnes existante une autre possibilit plus simple que le
protocole consiste utiliser ce fameux assistant (qui cependant n'efface pas les groupes et
utilisateurs dont tout le monde connat les noms l'avance ce qui n'est pas vraiment trs
trs astucieux en termes de scurit):
1.

Se connecter l'espace de travail en tant qu'Administrateur .

2.

Ouvrir la base de donnes (pleine ou vide).

3.

Menu Outils/Scurit/Assistant scurit au niveau utilisateur

MS Office Access

346/564

Vincent ISOZ

On clique sur Next:

On clique sur Next:

MS Office Access

347/564

Vincent ISOZ

on choisit ce qui pourra tre scuris ou non. On clique sur Next:

On choisir les groupes types d'utilisateurs que l'on voudra pouvoir utilisateur par la suite (voir
la description plus bas). Et on clique sur Next:

MS Office Access

348/564

Vincent ISOZ

Il nous demande si on veut faire quelque chose de particulier avec le Groupe Utilisateurs qui
a un statut un peu spcial dans Access puisqu'il existe sur tous les PCs. Il vaut mieux ne rien
changer afin que ce groupe n'ait aucun droit. On clique sur Next:

On cre des utilisateurs et on clique sur Next:

MS Office Access

349/564

Vincent ISOZ

On assigne chaque utilisateur des groupes spcifiques de scurit. On clique sur Next:

Il propose de faire une copie non scurise de la base de donnes (heureusement car certains
oublient). On clique sur Finish et on aura dans notre dossier de travail, la base Access avec
son espace de travail (*.mdw) + un raccourci spcial pour l'ouvrir:

MS Office Access

350/564

Vincent ISOZ
La base ainsi cre est la proprit de l'Administrateur: tant qu'il n'aura pas dtermin les
droits d'accs, nul autre ne sera autoris pntrer et, plus forte raison, utiliser cette base
de donnes:

Donc l'assistant redfinit directement la scurit dans la structure JET de la base de donnes !
Si l'on veut grer correctement une base de donnes scurise, il faut dterminer pour chaque
utilisateur et pour chaque groupe quels sont leurs droits prcis sur chaque objet de la base!
La meilleure mthode est de dfinir les droits et les autorisations pour un groupe, d'assigner
un utilisateur ce groupe et de tester si les manipulations des donnes ncessaires sont toutes
possibles pour cet utilisateur. En cas de problmes, modifier les autorisations du groupe.
Quand tout fonctionne, tous les autres utilisateurs assigns ce groupe pourront travailler sans
soucis.
1.

Menu Outils/Scurit/Autorisation d'accs

2.

Dans l'onglet Autorisations d'accs, choisir Groupes (ou Utilisateurs), puis le


groupe (ou l'utilisateur) auquel on souhaite accorder les autorisations d'accs.

3.

Cliquer sur le type d'objet dans la bote Type de l'objet, puis sur le nom de l'objet
auquel les autorisations d'accs se rapporteront dans la bote Nom de l'objet.

Conseil: On peut slectionner plusieurs objets dans la bote Nom de l'objet en faisant glisser le
pointeur de la souris sur les objets que l'on veut slectionner ou en maintenant la touche
CTRL enfonce et en cliquant sur les objets souhaits.
Dans Autorisations d'accs, slectionner les autorisations d'accs que l'on veut accorder, ou
effacer les autorisations d'accs que l'on veut retirer au groupe ou l'utilisateur, puis cliquer
sur Appliquer.

MS Office Access

351/564

Vincent ISOZ

Rpter les tapes 4 et 5 pour accorder ou retirer au groupe (ou l'utilisateur) en cours
d'autres autorisations d'accs portant sur d'autres objets.
Remarques:

Certaines autorisations d'accs s'accompagnent automatiquement de la slection


d'autres autorisations d'accs. Par exemple, l'autorisation d'accs Modifier les donnes
d'une table s'accompagne automatiquement des autorisations d'accs Lire les donnes
et Lire la structure, car on en a besoin pour modifier les donnes d'une table
(logique)

Lire les donnes s'accompagne automatiquement de Lire la structure. Dans le cas des
macros, Lire la structure s'accompagne automatiquement de Ouvrir/Excuter.

Lorsque l'on modifie un objet et qu'on l'enregistre, il conserve les autorisations d'accs
qui lui sont accordes (heureusement)

Toutefois, si un objet est enregistr sous un nouveau nom l'aide de la commande


Enregistrer sous dans le menu Fichier, ou en coupant et en collant, en important ou en
exportant l'objet, les autorisations d'accs associes sont perdues ! Il faut les accorder
nouveau.

Types d'autorisations d'accs:


Autorisation
Ouvrir/excuter

MS Office Access

Permet un utilisateur de

S'applique

Ouvrir une base de donnes, un Bases de donnes, formulaires, tats


formulaire ou un tat, ou
et macros

352/564

Vincent ISOZ
Autorisation

Permet un utilisateur de
excuter une macro.

S'applique

Ouvrir en mode
exclusif

Ouvrir une base de donnes avec Bases de donnes


accs exclusif.

Lire la structure

Afficher des objets en mode


Cration.

Tables, requtes, formulaires, tats,


macros et modules

Modifier la structure

Afficher et modifier les objets,


ou les effacer.

Tables, requtes, formulaires, tats,


macros et modules

Lire les donnes

Afficher des donnes.

Tables et requtes

Modifier les donnes

Afficher et modifier des


Tables et requtes
donnes, sans pouvoir en ajouter
ou en supprimer.

Ajouter des donnes

Afficher et ajouter des donnes, Tables et requtes


sans pouvoir en modifier ou en
supprimer.

Supprimer des
donnes

Afficher et supprimer des


donnes, sans pouvoir en
modifier ou en ajouter.

Administrer

Dfinir un mot de passe pour une base de donnes, copier une base de
donnes et modifier les proprits de dmarrage

Tables et requtes

Tableau 7 Autorisations d'accs une base

Ne pas oublier

D'enlever systmatiquement toute autorisation de chaque objet de la base de


donnes (tables, requtes, formulaires, macros, etc.) pour le groupe Utilisateurs si on
ne l'utilise pas en tant qu'Administrateur et seul utilisateur !

D'accorder l'autorisation "Ouvrir/Excuter" l'objet "Nouvelle base de donnes"


chaque groupe, de telle manire que ses membres puissent ouvrir la base dans laquelle
ils vont travailler !

MS Office Access

353/564

Vincent ISOZ

Une fois ceci fait, reste l'aspect utilisateur. La connexion rclame plusieurs conditions:
1.

Faire partie de l'espace de travail

2.

Fournir son nom d'utilisateur

3.

Eventuellement, fournir le nom de la base de donnes que l'on veut utiliser.

Il est possible d'automatiser cette procdure pour un utilisateur particulier au moyen d'un
raccourci sur le bureau ou dans la barre des tches.
Exemple 1:

Choix de l'espace de travail et indication du nom de l'utilisateur

F:\MsOffice\Office\Msaccess.exe /wrkgrp G:\Erguel\Erguel.mdw /user Chef


Programme Access

Groupe de travail

Utilisateur

Le raccourci n'est pas oblig de contenir la partie avec /user Chef !


Exemple 2:

Idem + indication de la base de donnes

F:\MsOffice\Office\Msaccess.exe G:\Ecole\Ecole.mdb /wrkgrp G:\Ecole\System.mdw /user


Bigboss
Programme Access

Base

Groupe de travail

Utilisateur

ou le mme avec le Runtime:


F:\MsOffice\Office\Msaccess.exe G:\Ecole\Ecole.mdb /runtime /wrkgrp
G:\Ecole\System.mdw /user Bigboss
ou le mme mais qui dtecte automatiquement le nom de l'utilisateur Windows avec les
commandes batch:

MS Office Access

354/564

Vincent ISOZ
F:\MsOffice\Office\Msaccess.exe G:\Ecole\Ecole.mdb /runtime /wrkgrp
G:\Ecole\System.mdw /user %username%
Lorsqu'un utilisateur tente d'ouvrir, de modifier ou de dtruire un objet auquel il n'a pas accs,
il reoit un message lui signifiant son viction:

Attention!!! Si vous crez un raccourci entre une base de donnes et un espace de travail
scuris comme montr prcdemment et que aprs ouverture vous allez ensuite dans le menu
Outils/Scurit/Administrateur du groupe de travail vous verrez qu'il peut arriver qu'il est
encore connect peut-tre un autre fichier *.mdw (qui n'est pas celui spcifi dans le
raccourci). Ds lors, n'ayez aucune inquitude, le bon fichier *.mdw a quand mme t
charg correctement en mmoire!

17.2.5 Un peu de VBA avec la scurit


Cependant, lorsque un utilisateur clique sur un bouton qui le conduit dans un domaine auquel
il n'a pas accs, le rsultat n'est pas trs heureux si l'action est mise en uvre par une macro:
Le message apparat et la macro se plante !

En consquence, il vaut mieux tre mthodique et respecter cette consigne: dans une base de
donnes scurise, les actions des boutons doivent tre gnres par une procdure
vnementielle qui comporte un traitement des erreurs !

MS Office Access

355/564

Vincent ISOZ

L'environnement ACCESS est structur en "Objets" et en "Collections d'objets".


L'objet originel et unique est DBEngine , le moteur du systme de
gestion de base de donnes, c'est dire l'ensemble des programmes qui
contrle tout le processus.
Ce moteur contrle deux collections (ou ensembles) d'objets: les "Espaces
de travail" et la liste des erreurs.
On voit donc que le terme "Espace de travail" est le mot gnrique et
que la traduction en "Groupe de travail" est un peu confondante.
Le moteur permet de grer les diffrents "Espaces de travail".
Chaque espace de travail peut contenir un certain nombre de groupes
d'objets:

Databases: une ou plusieurs Bases de donnes

Groups: un ou plusieurs Groupes

Users: un ou plusieurs Utilisateurs.

Groups et Users sont complmentaires:


Chaque groupe peut compter un ou plusieurs utilisateurs, chaque
utilisateur peut faire partie de plusieurs groupes.
Pour complter cette information, on voit qu'une Base de donnes est
compose de collections d'objets trs bien organiss:

TableDefs: les descriptions de toutes les tables et de toutes les


proprits de tous leurs champs.

Recordsets: tous les enregistrements de toutes les tables

MS Office Access

356/564

Vincent ISOZ

Relations: les descriptions de toutes les relations existant entre toutes les tables

QueryDefs: les descriptions de toutes les requtes

Containers: les descriptions de tous les formulaires et tats.

Visual Basic pour Access permet de traiter tous les objets de toutes les manires possibles:
cration, modification, suppression !
VBA offre une systmatique remarquable pour:

Dsigner chaque objet

Modifier ses proprits

Excuter ses mthodes.

Avant de passer en revue les proprits et les mthodes de tous ces objets, il faut tout d'abord
s'occuper de deux besoins lmentaires pour la gestion des droits d'accs:

Obtenir le nom de l'utilisateur courant

Obtenir le groupe auquel appartient cet utilisateur.

Obtenir le nom de l'utilisateur courant:


Function QuelUser()
Dim Espace As Workspace
Set Espace = DBEngine.Workspaces(0)
QuelUser = Espace.UserName
Set Espace = Nothing
End Function
Obtenir le groupe de l'utilisateur courant ( part Admins et Users)
Function QuelGroupe()
Dim Espace As Workspace
Dim Branch As USER
Dim LeGroupe As Group
Set Espace = DBEngine.Workspaces(0)
Set Branch = Espace.USERS(Espace.UserName)
For Each LeGroupe In Branch.Groups
If LeGroupe.Name = "Admins" Or LeGroupe.Name = "Users" Then
Else
QuelGroupe = LeGroupe.Name
End If
Next LeGroupe
Set Espace = Nothing
End Function

MS Office Access

357/564

Vincent ISOZ

17.2.6 A propos du fichier ldb


Un fichier est cr dans le rpertoire chaque accs l'un des fichiers d'une application, ce
comportement est valable pour toute application quel que soit l'architecture et le nombre
d'utilisateurs. Les fichiers crs portent le nom du fichier Access qui est ouvert (mdb, mde)
suivi de l'extension ldb (Lock file for Access DataBase).
Par exemple: Pour le fichier Magasin.mdb le fichier portera le nom de Magasing.ldb.
Ce fichier contient des informations importantes: l'identification unique de l'utilisateur
connect et non du poste accdant la base.
Le tableau suivant dresse les actions simplifies opres sur les fichiers ldb dans le cadre de
l'utilisation d'une application de type "fichier serveur" par plusieurs utilisateurs.
Les fichiers applicatifs portent les noms respectifs de application.mdb (ou mde) pour la partie
applicative (frontale) et donnes.mdb pour la partie contenant les donnes (dorsale).
fichier ldb frontal:
fichier ldb dorsal:
application.ldb
donnes.ldb
Le premier utilisateur
cration du fichier, l'utilisateur est
aucun effet
ouvre l'application
inscrit dans le fichier ldb.
Le premier utilisateur
table attache: cration du
table rsidente: aucun effet
accde une table
fichier ldb sur le fichier frontal
Un deuxime utilisateur se modification du fichier ldb
aucun effet
connecte
(l'utilisateur est inscrit)
Le premier utilisateur
dsinscription de l'utilisateur dans
suppression du fichier ldb
ferme l'application
le fichier ldb
Le deuxime utilisateur
table attache: cration du
table rsidente: aucun effet
accde une table
fichier ldb sur le fichier frontal
Le deuxime utilisateur
table rsidente: aucun effet
suppression du fichier ldb
n'accde plus la table
Le deuxime utilisateur se
suppression du fichier ldb
aucun effet
dconnecte
Action

Dans de rares cas il arrive que le fichier ldb ne soit pas supprim automatiquement par
MS Access la sortie du dernier utilisateur, dans ce cas vous pouvez le supprimer
manuellement.

17.2.7 Problmes de scurit avec les requtes


Lorsque la scurit est en place, les requtes dpendent des droits sur les tables. Pourtant
certaines requtes doivent pouvoir s'excuter par un utilisateur ayant des droits restreints sur
la ou les tables concernes. Microsoft Access permet de faire cela.
Ouvrez ou crez une requte avec le compte superutilisateur. Faites un clic droit dans la zone
des tables et dans le menu contextuel choisissez Proprits...
Dans Excuter Autorisations choisissez Celles du propritaire.

MS Office Access

358/564

Vincent ISOZ

Fermez la fentre Proprits... et sauvegardez la requte.


Il est vident que le propritaire de la requte doit avoir les droits sur les tables concernes.
Si vous regardez le rsultat de cette manipulation vous pourrez constater que la chane SQL
comporte une option supplmentaire: WITH OWNERACCESS OPTION
Vous pouvez utiliser cette option pour tous les types de requtes.

17.3 Dploiement
Installez un dossier partag sur le serveur du rseau. Peut-tre aurez-vous besoin de
l'administrateur de votre rseau (il peut dfinir des droits d'accs sur NT ce qui peut s'avrer
tre une couche de scurit supplmentaire) ?
Copiez la base de donnes sur le serveur du rseau ou un des disques rseaux qui y sont
disponibles.
Vrifiez que la base de donnes est dfinie pour une ouverture en mode partag, qui est le
paramtre par dfaut (Outils/Options/Avanc/Mode partag):

Pour accder la base de donnes MS Access partage depuis un autre ordinateur, vous devez
disposer sur cet ordinateur de l'une des configurations suivantes:
1. une installation locale de MS Access

MS Office Access

359/564

Vincent ISOZ
2. une installation rseau de MS Access (avec licence pour chaque utilisateur) ou une
application d'excution
Vous pouvez obtenir une licence libre de droits pour installer votre application d'excution sur
tous les ordinateurs en achetant Microsoft Office 2000 Developer (MOD).
Maintenant, pour chaque participant de la salle de formation, crez un scnario d'utilisation
avec droits, rles et mots de passe respectifs. Soyez rigoureux et mthodique dans votre
travail. Une fois le dploiement termin, faites des essais et vrifiez que tout marche
correctement.
Par exemple: insrez des donnes dans la table articles (faites jouer votre imaginaire mais tout
en restant srieux) et vrifiez que les articles de vos collgues s'y trouvent aussi.
Attention ! Vous aurez remarqu la partie suivante de la capture d'cran:

Elle est trs importante en mode multi-utilisateurs et surtout en mode serveur....

MS Office Access

360/564

Vincent ISOZ

18 Synchronisation (rplication)
Nous avons vu pas mal de choses jusqu'ici mais avec la multiplication des ordinateurs
portables, la mobilit croissante des employs et leur manque de connaissance des outils de
l'informatique, il devient indispensable de trouver un moyen de poser la base de donnes sur
plusieurs ordinateurs et d'avoir la possibilit de faire tout moment une "rplication".
La rplication est une technique qui consiste dupliquer une base de donnes sur plusieurs
postes. Ainsi, plusieurs personnes sur le rseau peuvent chacun avoir leur copie de la base de
donne sans avoir ouvrir le mme fichier, et rcuprer ou envoyer les donnes supprimes,
ajoute ou modifies l'aide d'une synchronisation avec une base commune que l'on place sur
le rseau commun aux utilisateurs.

18.1 Types de rplicas


Dans le cadre du domaine de la synchronisation il convient des considrer les possibilits
(fichier MDB suivants):
- Design Master: Rplica matre qui contrle les autres rplicas. Une synchronisation depuis
le Design Master permet de convertir un rplica comme tant le nouveau Design Master
(l'ancien devenant alors un rplica automatiquement). Le Design Master peut crer plusieurs
rplicas ou rplicas partiels (voir ci-dessous).
- Rplica: Peut se synchroniser uniquement avec son Design Master et (comme dit ci-dessus)
devenir le nouveau Design Master. Le rplica peut crer aussi des sous rplicas ou rplicas
partiels mais qui pourront se synchroniser qu'avec leur rplica pre.
- Rplica partiel global: Peut se synchroniser avec le Design Master ou tout rplica non
partiel. Un rplica partiel global ne pourra jamais devenir un Design Master. Il ne pourra
galement jamais crer un rplica ou un rplica partiel.
- Rplica partiel local: Peut se synchroniser seulement avec la base de donnes partir de
laquelle il a t cr. Un rplica partiel local ne pourra jamais devenir un Design Master. Il ne
pourra galement jamais crer un rplica ou un rplica partiel.
- Rplica partiel anonyme: Peut se synchroniser seulement avec la base de donnes partir de
laquelle il a t cr. Un rplica partiel anonyme ne pourra jamais devenir un Design Master.
Il ne pourra galement jamais crer un rplica ou un rplica partiel. Le rplica partiel
anonyme est optimis afin que la synchronisation utilise le minimum de flux de donnes
possibles pour des synchronisations via des connexions web.

18.2 Cration d'un rplica matre


Attention! Comme il n'est pas possible ce jour d'annuler le Rplica d'une base de donnes
sans fournir un norme effort en termes d'heures de travail, faites toujours une copie de la
base de donnes originale avant!
Pour utiliser cette fonctionnalit, il suffit de faire un "rplica" de la base en cours. A cette fin,
allez dans le menu Outils/Replication/Crer Replica:
MS Office Access

361/564

Vincent ISOZ

Vient alors:

Validez pas Oui.


Ensuite, apparat une recommandation de cration d'une copie de sauvegarde (fichier *.bak)
de la base initiale va apparatre. Faites-le ! Le conseil est bon !

Une fois que MS Access a avanc, la boite de dialogue ci-dessous apparat:

MS Office Access

362/564

Vincent ISOZ

Les deux options mises en vidence sont importantes:


R1. Priorit: est une valeur de 0 100 qui permet de rgler les conflits en cas de
synchronisation simultane d'enregistrements similaires.
R2. Prvenir les suppressions: empche l'utilisateur de supprimer un enregistrement
(cochez-le toujours!)
Une fois la procdure termine vient alors:

Alors, aussi bien dans le Design Master que dans le Replica il y a alors partout le symbole de
la rplication:

MS Office Access

363/564

Vincent ISOZ

Nous voyons galement dans la capture ci-dessous, que si nous activons l'affichage des tables
cachs, apparat alors une certaine quantit de nouvelles tables permettant MS Access de
grer la synchronisation.
Dans le rplica que ce soit dans le cadre de tentative de modification de la structure d'un
formulaire ou d'une table ou autre chose:

d'o le nom de Design Master pour la base de donnes d'origine!!!


Pour vrifier que le systme de rplication fonctionne convenablement, vous pouvez apporter
une modification une donne de votre choix (suppression, addition ou modification) dans le
replica.

MS Office Access

364/564

Vincent ISOZ
Si vous essayez de supprimer vous aurez (si la case cocher de Prvention de la suppression
a bien t active) le message suivant:

Une fois les modifications effectues, pour synchroniser le rplica, vous retournez dans le
menu Outil tel que:

Il y a pas mal de choix et elles sont toutes triviales utiliser. Nous allons cependant cliquer
sur Synchroniser maintenant.
Apparat alors la bote de dialogue suivante vous demandant de chercher ou valider le chemin
d'accs vers la base de donnes d'origine. Suite quoi tout ce fait seul !

Comme une lettre la poste.

Par ailleurs, nous pouvons constater qu'une nouvelle table cre dans le rplica ne sera pas
rplique dans le Design Master:

MS Office Access

365/564

Vincent ISOZ

Idem si nous en crons une dans le Design Master:

mais dans le Master on peut rendre la table rplicable en allant dans ses proprits et en
cochant l'option ad hoc:

et ensuite si depuis le rplica on synchronise, cette nouvelle table sera disponible. A l'inverse
si on dcoche la table disparatra du rplica.

MS Office Access

366/564

Vincent ISOZ

18.3 Cration d'un rplica partiel


Pour crer un rplica partiel, il suffit toujours d'aller dans le mme menu
Outils/Replication/Crer Replica partiel. Vient alors:

et en cliquant sur Suivant:

MS Office Access

367/564

Vincent ISOZ

18.4 Modifications sur les objets de la base de donnes


Lorsque vous rpliquez une base de donnes Microsoft Access, un certain nombre de
modifications sont effectues automatiquement dans votre base de donnes.
Champs ajouts vos tables lorsque vous rpliquez une base de donnes
s_GUID: Identificateur global alatoire unique de chaque enregistrement pour assurer avec
une trs grand probabilit l'unicit d'un enregistrement (normalement le GUID est construit en
partie sur la base de la date et l'heure de l'ordinateur).
s_Lineage: Champ binaire contenant des informations sur l'historique des modifications
apportes chaque enregistrement.
s_Generation: Champ qui stocke les informations relatives aux groupes de modifications.
Tables ajoutes votre base de donnes lorsque vous rpliquez celle-ci:
MSysSidetables: Cette table existe uniquement en cas de conflit entre le rplica de l'utilisateur
et un autre rplica du jeu. Elle n'est pas rplique. Elle est fournie titre d'information
seulement et son contenu ne peut tre ni modifi, ni supprim par des routines de rsolution
de conflit personnalises ou par l'utilisateur. Toutes les tables latrales sont nommes
table_conflit, o table est le nom d'origine de la table.
MSysSchemaProb: Cette table existe uniquement en cas d'erreur lors de la mise jour de la
structure d'un rplica. Elle offre des informations supplmentaires sur l'origine de l'erreur. Il
s'agit d'une table locale, qui n'est pas rplique.
MSysReplicas: Cette table stocke des dtails, tels que le chemin et l'ID de rplica, relatifs
tous les rplicas connus contenus dans le jeu. Elle apparat dans chaque membre du jeu de
rplicas mais n'est pas rplique.
MSysTransAddress: Cette table stocke les informations d'adressage du Synchronisateur et
dfinit le jeu des synchronisateurs connus dans ce jeu de rplicas. Cette table rplique
apparat dans chaque membre du jeu de rplicas.
MSysTombstone: Cette table stocke les informations relatives aux enregistrements supprims
et autorise la dispersion des suppressions dans les autres rplicas lors de la synchronisation.
Elle apparat dans chaque membre du jeu de rplicas, mais elle n'est pas rplique.
MSysRepInfo: Cette table stocke les informations relatives l'ensemble du jeu de rplicas,
notamment l'identit (GUID) du rplica-matre. Elle contient un seul enregistrement. Cette
table rplique apparat dans chaque membre du jeu de rplicas.
MSysExchangeLog: Cette table stocke les informations relatives aux synchronisations de
rplicas qui ont t excutes. Il s'agit d'une table locale, qui n'est pas rplique.
Proprits ajoutes votre base de donnes lorsque vous la rpliquez:
Replicable ou ReplicableBool: Proprit de base de donnes ou d'objet. Lorsque la proprit
est renseigne par V (ou Vrai pour ReplicableBool), elle indique que la base de donnes, la

MS Office Access

368/564

Vincent ISOZ
table ou la requte est prsent rplicable. Les proprits Replicable et ReplicableBool sont
interchangeables.
KeepLocal: Proprit ajoute dans une table ou une requte. Si la proprit est renseigne par
V, elle indique que l'objet ne doit pas tre rpliqu lorsque la base de donnes est rplique.
La proprit KeepLocal d'un objet dj rpliqu ne peut pas tre renseigne par T.
ReplicaID: Proprit qui attribue une identification unique chaque membre du jeu de
rplicas. Cette proprit est en lecture seule et est stocke dans la table systme
MSysReplicas.
DesignMasterID: ID de rplica (ReplicaID) du rplica-matre. Cette proprit est stocke dans
la table systme MSysRepInfo comme SchemaMaster.
ColumnLevelTracking: Proprit de base de donnes ou de table. Lorsque cette proprit est
renseigne par Vrai (valeur par dfaut), elle indique que les conflits sont suivis au niveau des
colonnes d'une table.
Replication ConflictFunction: Proprit qui permet de remplacer l'observateur de conflits de
Microsoft Access par une procdure personnalise qui assiste les utilisateurs dans la
rsolution des conflits de synchronisation.
Modifications du comportement des champs NumroAuto en cas de rplication d'une base de
donnes:
Lorsque vous rpliquez une base de donnes, tous les champs NumroAuto incrmentiels de
vos tables deviennent des champs de numrotation alatoire. Tous les champs NumroAuto
des enregistrements existants conservent leurs valeurs, mais les valeurs NumroAuto des
enregistrements ajouts sont alatoires. En d'autres termes, les numros des enregistrements
ne refltent pas l'ordre dans lequel les enregistrements ont t ajouts et, par consquent, le
dernier enregistrement ajout ne prsente pas forcment la valeur la plus leve:

MS Office Access

369/564

Vincent ISOZ

MS Office Access

370/564

Vincent ISOZ

18.5 Comparatif Maitre-Rplica lors de la synchronisation

MS Office Access

371/564

Vincent ISOZ

18.6 3 Conflits rencontrs lors de la synchronisation des bases


Un conflit entre rplicas est gnr lorsque deux personnes changent un mme enregistrement
sur la base de donnes chacune de leur ct et synchronisent.
Pour remdier ces conflits, Microsoft a introduit un outil de rsolution de conflits qui se
lancera automatiquement lors de l'ouverture de la base de donnes et qui vous demandera
quelle version de la ligne de donne ou se trouve le conflit vous dsirez garder. Le conflit est
alors rsolu lorsque vous aurez choisi et valid.
Mais, lors de l'tablissement de compteurs sur une table en cl primaire et que l'on rplique et
synchronise, il peut arriver que deux tables se trouvent avec le mme NumroAuto mais un
enregistrement diffrent.
Pour viter ce problme, il vous est possible de mettre un champ numrique sur votre table en
numro de rplication. C'est un numro unique se prsentant sous la forme {00000000-00000000-0000-000000000000}. Il est alors impossible que 2 enregistrements prsentent le mme
numro.
Il existe une autre solution pour rparer les conflits de donnes, elle se base sur la notion de
priorits de chaque rplica:
Chaque rplica se voit attribuer un numro de priorit compris entre 0 et 100, 100 tant la
priorit la plus leve. Quand une base de donnes est rendue rplicable, la priorit par dfaut
du rplica est dfinie 90. Les rplicas suivants ont une priorit par dfaut gale 90 pour
cent de la priorit du concentrateur. Les priorits des rplicas locaux et anonymes sont
toujours 0. Les rplicas locaux et anonymes perdent automatiquement si leurs modifications
sont en conflit avec leur rplica concentrateur global. Si un rplica local ou anonyme envoie
une modification qui n'est pas en conflit au concentrateur, celui-ci prend la proprit de la
modification.

18.6.1 Subtilits de prdominance du matre


Si je suis dans le Matre, et que je remplace Dupon par DuponA, et que je vais dans le rplica,
et que je remplace Dupon par DuponB, et que je reviens dans le matre, et que je synchronise,
je ne vois pas de conflit, le matre impose sa modification au rplica, et point. Par contre, si,
ensuite, je vais dans le rplica, et que je demande la synchronisation avec le matre, alors, ce
moment-l, alors qu'il paraissait gentiment s'craser devant les modification du matre, voil
que surgit le conflit, et le rplica a donc la possibilit de revenir son DuponB, s'il veut, et il
restera ainsi diffrent du matre.
En conclusion, le rplica ne peut jamais avoir de prdominance sur le matre. Il doit toujours
tre soumis. Le matre qui effectue des modifications, et qui se synchronise avec ses rplicas
n'engendre jamais de conflits, c'est toujours lui qui gagne. Mais lorsque ses modifications
peuvent altrer les donnes des rplicas, ceux-ci se voient alors crer une table des conflits,
rsumant les modifications du matre. Ainsi donc, lorsque le rplica, son tour, essaie de se
synchroniser avec le matre, l'assistant des conflits dmarre et propose l'utilisateur du rplica
de soit garder les donnes du matre, auquel cas le conflit disparait, soit de retrouver ses
propres donnes, auquel cas la table des conflits reste en place, et le rplica n'est alors pas la
copie exacte du matre.

MS Office Access

372/564

Vincent ISOZ
En ralit, le seul moment o le rplica peut modifier un enregistrement avec le matre est
quand il est le seul modifier ou supprimer une donne.

MS Office Access

373/564

Vincent ISOZ

19 Visual Basic Application


Ce chapitre s'adresse des personnes n'ayant peu ou pas d'exprience de la programmation et
dsireuses de dvelopper par la suite des documents interactifs en intgrant dans les
applications MS Office du code en VBA.
Remarque: La premire partie de cette partie du cours est identique celle du cours VBA MS
Excel, MS Word.
Seront particulirement concernes par ce cours:
- Les personnes avec un esprit logique et mathmatique qui dsirent avoir un premier
contact avec le monde de la programmation.
- Les personnes ayant automatiser des tches sous MS Access.
- Les personnes ayant cr quelques macros et qui veulent pouvoir en comprendre le
contenu et en assimiler les subtilits et voir les possibilits.
De bonnes connaissances d'un ou plusieurs des outils de la suite MS Office est souhaitable.
Une approche rigoureuse de l'informatique est essentielle (gnie logiciel, algorithmique,
analyse numrique,).
Pour plus d'informations sur l'algorithmique, l'histoire des langages de programmation ou la
norme syntaxique habituelles de codage, veuillez-vous rfrer aux documents tlchargeables
sur Internet ou demander votre formateur.
Le VBA est un langage de programmation (non rellement orient objet) utilis par et pour
les applications MS Office listes ci-dessous:
- MS Word
- MS Excel
- MS Access (voir le cours MS Access tlchargeable sur Sciences.ch)
- MS Visio
- MS Publisher
- MS Project
- MS Outlook ( partir de la version 2002 du moins facilement)
- MS FrontPage
- MS PowerPoint
Ce langage est simple d'utilisation et n'a absolument aucun commun rapport avec le langage
Visual Basic .Net (nous considrons le langage Visual Basic 6 comme mort dans ce cours).
La plus grosse diffrence tant que le VBA ne permet pas de faire ce que nous nommons des
applications en "Standalone". Nous utilisons normalement les macros ou le VBA ds que les
outils WYSIWYG des logiciels de la suite MS Office ne satisfont plus nos besoins.
Enfin, rappelons qu'avant d'crire un programme quelconque, la premire des choses faire
est d'teindre son ordinateur et de rflchir. On peut notamment se poser les questions
suivantes:

MS Office Access

374/564

Vincent ISOZ
Quel est l'objectif de mon code?
N'est-il pas plus rapide de raliser cet objectif manuellement? (calcul du ROI)
Cet objectif a-t-il rellement un intrt?
Ce programme n'existe-il pas dj sous une autre forme?
Ce programme est-il ralisable?
La ralisation de ce programme n'est-elle pas trop coteuse?
Bien videmment, il existe de nombreux cas o vous pourrez crire un programme sans vous
poser toutes ces questions. Ainsi, quand vous voudrez rdiger un code trs simple pour
automatiser une tche prcise qui n'est pas complexe, vous pourrez foncer bille en tte. En
revanche, ds que le projet de code devient un peu plus amitieux, il vaut vraiment mieux se
poser des questions avant de commencer crire du code.
Ils auront travaill avec des formulaires et manipul des composants utilisateurs simples
comme des boutons et des champs texte.
Le VBA est un langage de programmation (non objet) utilis par et pour les applications MS
Office: MS Word, MS Excel, MS Access, MS Visio, MS Publisher, MS Project, MS Outlook
( partir de la version 2002 du moins facilement), MS FrontPage, MS PowerPoint
D'autres applications ne faisant pas parties de la suite MS Office acceptent aussi le VBA et
son environnement de dveloppement (exemple: Business Objects).
Le langage est simple d'utilisation et n'a absolument aucun rapport avec le langage Visual
Basic .Net (nous considrons le langage Visual Basic 6 comme mort dans ce cours). La plus
grosse diffrence tant que le VBA ne permet pas de faire ce que l'on nomme des applications
en "Standalone".
Remarques pralables:
1. Avant de commencer ce cours, il est suppos connu, les macros automatiques (pour
toute la gamme de la suite MS Office), les XLA (pour MS Excel), les groupes de
Macros (pour MS Access).
2. la partie dbogage et la conception "objet" (je sais, je sais, VBA n'est pas un
langage POO) ainsi que la protection des projets n'est traite qu'oralement par le
formateur en classe.
3. Nous utiliserons le VBA ds que les outils WYSIWYG des logiciels de la suite MS
Office ne satisfont plus nos besoins (le problme c'est que souvent les gens ne
connaissant mme pas parfaitement le logiciel incrimin avant de prendre un cours
VBA). L'inconvnient d'une formation VBA, c'est que autant vous pouvez effectuer
une formation de niveau moyen sur MS Access, Excel ou Word sur 7 jours 8 heures
par jour et avoir vu 90% des fonctionnalits WYSIWYG, autant en ce mme laps de
temps, vous verrez 10% (et encore!!!) des possibilits du VBA dans chacun de ces
logiciels.

MS Office Access

375/564

Vincent ISOZ

19.1 Objectifs
A la fin de ce chapitre, les participants sauront parfaitement utiliser les macros automatiques
et macro complmentaires et connatront les notions et structures standards de la
programmation VBA, telles que les variables, les boucles, les conditions et les fonctions.
Ils sauront ce que sont la programmation objet et la programmation vnementielle et auront
raliss quelques exercices utilisant ces notions.
Ils auront travaill avec des formulaires et manipul des composants utilisateurs simples
comme des boutons et des champs texte.
Remarque: On sait que le nombre de mots d'une langue est limit. Le vocabulaire d'un enfant
de 10 ans tourne autour de 5'000 mots, celui d'un adulte cultiv de 10'000-15'000, et les
dictionnaires en plusieurs volumes peuvent monter de 130 000 200 000. Le VBA d'aprs de
rumeurs contiendrait environ 800'000 mots ( vrifier quand mme!).

19.2 Historique
En programmation, BASIC est un acronyme pour Beginner's All-purpose Symbolic
Instruction Code qui dsigne une famille de langages de programmations de haut niveau.
Le BASIC a t conu la base en 1963 par John George Kemeny (1926-1993) et Thomas
Eugene Kurtz (1928-) au Dartmouth College pour permettre aux tudiants qui ne travaillaient
pas dans des filires scientifiques d'utiliser les ordinateurs et apprendre les techniques de
programmation. En effet, l'poque, l'utilisation des ordinateurs ncessitait l'emploi d'un
langage de programmation rput rserv aux seuls les spcialistes, en gnral un langage
d'assemblage ou Fortran.
L'acronyme BASIC est li au titre d'un article de Thomas Kurtz qui n'a pas t publi et n'a
aucun rapport avec les sries intitules Anglais basic de C. K. Ogden. Les concepteurs du
langage souhaitaient qu'il soit du domaine public, ce qui favorisa sa diffusion.
Le BASIC est indissociable de l'apparition, dans les annes 1980, de la micro-informatique
grand public. En effet, la plupart des micro-ordinateurs vendus durant cette priode taient
fournis avec un Interprte BASIC, et quelques calculatrices programmables en furent mme
dotes.
Ce n'tait jamais l'intention des crateurs du langage qu'il s'agit d'un langage professionnel.
Pourtant il s'est propag rapidement et est disponible dans les centaines de dialectes sur de
nombreux types d'ordinateurs. La BASIC a volu et s'est amlior au cours des annes.
l'origine, c'tait un langage interprt (chaque ligne tait interprte avant son excution ce
qui est le cas du VBA par exemple) qui impliquait une excution lente. La plupart des
dialectes modernes de BASIC permettent au code d'tre compil. Par consquent, l'excution
est beaucoup plus rapide et la portabilit des programmes amliore.
Les huit principes de conception du BASIC taient:
1. tre facile d'utilisation pour les dbutant(e)s (Beginner)
2. tre un langage gnraliste (All-purpose)

MS Office Access

376/564

Vincent ISOZ
3. Autoriser l'ajout de fonctionnalits pour les expert(e)s (tout en gardant le langage
simple pour les dbutant(e)s)
4. tre interactif
5. Fournir des messages d'erreur clairs et conviviaux
6. Avoir un dlai de raction faible pour les petits programmes
7. Ne pas ncessiter la comprhension du matriel de l'ordinateur
8. Isoler (shield) l'utilisateur du systme d'exploitation
Le BASIC a gagn sa respectabilit en 1991 lorsque Microsoft a lanc VISUAL BASIC pour
MS Windows. Ce produit a t trs populaire parmi les dveloppeurs d'applications
autonomes. Si VBA ressemble peu ces langages, le BASIC reste la base sur laquelle VBA a
t labor.
EXCEL 5 a t la premire application sur le march proposer VBA et il est maintenant
inclus dans presque toutes les applications de la suite bureautique depuis MS Office 97 et
mme chez d'autres fournisseurs. Par consquent, si vous matrisez l'utilisation de VBA, vous
pouvez crire des macros avec toutes sortes d'applications (Microsoft et autres).
Il est important de noter l'information suivante (capture d'cran du site web de Microsoft):

19.3 Types de donnes


Voici les types de donnes communes aux logiciels de la suite MS Office:
Le tableau suivant prsente les types de donnes reconnus en prcisant la taille des
enregistrements et la plage des valeurs.
Tableau 8 Type de donnes VBA

Type de donnes

MS Office Access

Taille d'enregistrement

Plage

377/564

Vincent ISOZ
Type de donnes

Taille d'enregistrement

Plage

Byte

1 octet

0 255

Boolean

2 octets

True ou False

Integer

2 octets

-32 768 32 767

Long
(entier long)

4 octets

-2 147 483 648 2 147 483 647

Single
( virgule flottante
en simple
prcision)

4 octets

-3,402823E38 -1,401298E-45 pour les


valeurs ngatives ; 1,401298E-45
3,402823E38 pour les valeurs positives

Double
( virgule flottante
en double
prcision)

8 octets

-1,79769313486231E308
-4,94065645841247E-324 pour les
valeurs ngatives ; 4,94065645841247E324 1,79769313486232E308 pour les
valeurs positives

Currency
(entier dcalage)

8 octets

-922 337 203 685 477,5808


922 337 203 685 477,5807

Decimal

14 octets

+/79 228 162 514 264 337 593 543 950 335
sans sparateur dcimal ;
+/-7,9228162514264337593543950335
avec 28 chiffres droite du sparateur
dcimal ; le plus petit nombre diffrent
de zro est +/0.0000000000000000000000000001.

Date

8 octets

1er janvier 100 au 31 dcembre 9999

Object

4 octets

Toute rfrence des donnes de type


Object

String
10 octets + longueur de la
(longueur variable) chane

0 environ 2 milliards

String
(longueur fixe)

Longueur de la chane

1 environ 65 400

Variant
(nombres)

16 octets

Toute valeur numrique, avec la mme


plage de valeurs qu'une donne de type
Double

Variant
(caractres)

22 octets + longueur de la
chane

Mme plage de valeurs qu'une donne de


type String de longueur variable

Type dfini par


l'utilisateur
(avec Type)

En fonction des lments

La plage de valeurs de chaque lment


correspond celle de son type de
donnes.

MS Office Access

378/564

Vincent ISOZ
Remarque: Quel que soit le type de donnes, les tableaux ncessitent 20 octets de mmoire,
auxquels viennent s'ajouter quatre octets pour chaque dimension et le nombre d'octets occups
par les donnes. L'espace occup en mmoire par les donnes peut tre calcul en multipliant
le nombre d'lments par la taille de chacun d'eux. Par exemple, les donnes stockes dans un
tableau unidimensionnel constitu de quatre lments de type Integer de deux octets chacun
occupent huit octets. Ajouts aux 24 octets d'espace mmoire de base, ces huit octets de
donnes portent la mmoire totale ncessaire pour le tableau 32 octets.
Une variable de type Variant contenant un tableau ncessite 12 octets de plus qu'un tableau
seul.
Remarque: Utilisez la fonction StrConv pour convertir un type de donnes de chane en un
autre
L'existence d'une variable peut se drouler sur trois niveaux:
1. Niveau Procdure: cela veut dire que la variable est locale. Ds que l'on quitte la
procdure en question, la variable disparat, et son contenu avec elle. Pour dclarer
une variable au niveau procdure, on tape l'intrieur de la procdure:
Dim NomVariable as Type
2. Niveau Module: la variable est disponible pour toutes les procdures d'un Module,
mais pas pour les procdures se situant sur un autre Module. Pour dclarer une
variable au niveau Module, on tape tout en haut du Module, dans la partie (General):
Private NomVariable as Type
3. Niveau Projet: la variable est disponible, et sa valeur est conserve pour toutes les
procdures de l'application, quel que soit leur emplacement. Pour dclarer une variable
globale, il faut d'abord crer un module. Sur ce module, donc, on crit:
Public NomVariable as Type
Naturellement, il ne faut pas raisonner en termes de facilit, et dclarer toutes les variables au
niveau projet: car l'excs de place mmoire, ralentira votre application, au besoin
considrablement. Il faut donc pour chaque variable se demander quel niveau on en a
besoin, et faire les bonnes dclarations en fonction.
L'existence d'une procdure peut se drouler quant elle que sur deux niveaux:
1. Niveau Module: une procdure prive ne pourra tre invoque que dans le module
dans lequel elle est dclare:
Private Sub NomProcdure()

End Sub
2. Niveau Projet: une procdure publique peut tre invoque de n'importe quel endroit
du projet.
Public Sub NomProcdure()
MS Office Access

379/564

Vincent ISOZ

End Sub

19.4 Nomenclature de Lezsynski-Reddick


Pour le dveloppement (base de donnes et autres), il y a certaines rgles et traditions qu'il
vous faut respecter dans un premier temps pour votre confort et dans un deuxime temps pour
tre compatible avec vos collgues et les possibles futures migrations.
Les rgles Lezsynski/Reddick pour le dveloppement de base de donnes sont les suivantes
(elles ont t galement adoptes pour d'autres langages de programmation):
Majuscule au dbut de chaque mot d'une variable, pas d'accents, pas de caractres spciaux,
pas d'espaces, nom des champs en anglais, viter de dpasser les 8 caractres, ne jamais
commencer avec des chiffres:
- Nom des tables: tbl.
- Nom des requtes: qry
- Nom des vues: vue
- Nom des tats: rep
- Nom des formulaires: frm
- Nom des champs cls primaire avec numro automatique: idNomTable
- Nom des champs cls trangres: tblNomTableNomChamp
- Nom de tous les autres champs:
strNom, intNom, datNom, oleNom, hypNom, bolNom
- Nom des champs de formulaire:
lstNomListe., optGroupeOptions., chkChoixCase., tglToggleButton,
fldNomChamp
Exemple d'une variable: intStreetNb. Ce qui est beaucoup mieux que Numro de la rue qui ne
nous donne pas d'un premier coup d'il, le type de donnes dont il s'agit, qui n'est pas
compatible avec la quasi-totalit des langages de programmation, et qui peut tre compris par
un maximum de personne de par l'usage de la langue anglaise.
Il est aussi possible d'utiliser une version condense de la norme ci-dessous connue sous le
nom "syntaxe Camel" utilise par la majorit des dveloppeurs (seniors).
Prfixes de variables:
Prfixe Emploi de la variable Exemple de variable

MS Office Access

b ou bln Boolen

bSuccess

c ou cur Monnaie

cAmount

380/564

Vincent ISOZ
d ou dbl Double

dblQuantity

dt ou dat Date et heure

dtDate

f ou flt

fRatio

Flottant

l ou lng Long

lMilliseconds

i ou int

Entier

iCounter

s ou str

Chane

sName

a ou arr Tableau

aUsers()

o ou obj Objet COM

oPipeline

Prfixes de variables pour les objets de base de donnes:


Prfixe Emploi de la variable Exemple de variable
cnn

Connexion

cnnPubs

rst

Jeu d'enregistrements

rstAuthors

cmd

Commande

cmdEmployee

fld

Champ

fldLastName

Prfixes d'tendue et d'usage:


Prfixe

Description

g_

Usage Public

m_

Usage Local

(pas de prfixe) Variable non statique, prfixe local la procdure

Les six rgles d'or d'usage:


R1. Toujours en anglais
R2. Entre 8 et 11 caractres
R3. Pas de caractres spciaux
R4. Pas d'espace
R5. Toujours les 3 premires lettres du type de donnes
R6. Une majuscule chaque premier lettre des mots des variables

19.5 Commentaires
Les commentaires du code est un point trs important du dveloppement que l'on comprend
seulement avec l'exprience. Effectivement, les dveloppeurs dbutants n'ont dans un premier
temps pas l'habitude de travailler trs rigoureusement et trs proprement et ce d'autant plus sur
des codes rarement suprieur 1000 lignes et ne voient donc pas quelle est l'intrt futur de
bien commenter leur code. Cet tat des faits a lieu chez la grand majorit des dveloppeurs.

MS Office Access

381/564

Vincent ISOZ
Ne pas commenter est une norme erreur pour le dveloppeur lui-mme et tous ceux qui
seraient amens intervenir ou poursuivre son travail.
Certaines rgles sont mettre en place il convient immdiatement de mettre en pratique ds
que l'on commence rdiger un code. Voici ces rgles:
Tout procdure, fonction, classe, doit tre accompagne d'une cartouche de description telle
que dans l'exemple ci-dessous
Chaque ligne de code doit tre commente avec indication en initiales du commentateur et de
la date de cration du commentaire tel que dans l'exemple ci-dessous
Au besoin, un schma procdural doit tre fait dans un logiciel adapt (MS Visio pour VBA
suffit) pendant le travail afin de savoir qui appelle quoi en faisant usage de quelles variables
Exemple de code:
'*******************************
'Crateur(s): Vincent Isoz
'Dernire modification: 18.09.2004
'Nom fonction: TestDeVariable()
'Appele par: 'Commentaires: exemple de danger de conversion de donnes
'*******************************
Dim sng As Single 'Nombre rel simple prcision
Dim dbl As Double 'Nombre rel double prcision
Sub SigngleToDouble()
'on affecte 1.9 a la variable sng
sng = 1.9
'on affecte la valeur de sng a dbl
dbl = sng
'on Affiche dbl
MsgBox dbl
'ou encore pour les sceptique
dbl=Cdbl(sng)
MsgBox dbl
End Sub
'*******************************
'Crateur(s): Vincent Isoz
'Dernire modification: 28.10.2003
'Nom fonction: factitfor()
'Appele par: mettre ici les nom de procdures (avec les modules) qui appellent la fonction
'Appelle: mettre ici le nom des de procdures (avec les modules) qui sont appel par la
fonction
'Commentaires: Calcul de la factorielle d'un nombre n par la mthode itrative "for"
'Objectif de cours: apprendre a crer des fonction itratives
'*******************************
Function factitfor(n)
'V.I.(28.10.03): On ne dclare pas la variable factit qui a le mme nom que la fonction!!
Dim i As Integer
factitfor = 1

MS Office Access

382/564

Vincent ISOZ
'V.I.(28.10.03): On utilise la mthode itrative classique vue l'cole primaire
'Attention, n et i doivent tre des variables du mme type !
For i = 1 To n
factitfor = factitfor * i
Next i
End Function

19.6 Table des objets VBA et table ASCII


Outre les variables et les procdures, nous allons retrouver quantit d'autres objets traver
l'explorateur d'objets de VBAE (pour plus de dtails voir le cours VBA MS Excel disponible
en PDF lui aussi):
Tableau 9 Objets VBA

Les icnes de l'Explorateur d'objets


Icne

Signification

Icne

Signification

Type personnalis

Proprit standard

On retrouve le mme icne


dans l'intellisense: quivaut
un type utilisateur: (User
Defined): TYPE END
TYPE

Proprit par dfaut: ex.: Label =


"texte" quivaut
Label.caption="texte"
N'existe plus en VB .NET

Projet
Mthode
Icne Projet
Mthode standard
Classe
Mthode par dfaut
Module
Icone Module

Enumration
Ensemble de constants numre
(voir dessous)
Constante

Globale
Membre appartenant tous les
sous membres en principe les
constantes
Evnement

Valeur nomme:
Ex: vbBlack = 0
Avantage si la valeur est modifie le
code continue fonctionner
Proprit

Table ASCII standard (codes de caractres de 0 127):

MS Office Access

383/564

Vincent ISOZ
Tableau 10 Tableau ASCII Standard
000

(nul)

016

(dle)

032

(sp)

048

064

080

096

112

001

(soh)

017

(dc1)

033

049

065

081

097

113

002

(stx)

018

(dc2)

034

"

050

066

082

098

114

003

(etx)

019

(dc3)

035

051

067

083

099

115

004

(eot)

020

(dc4)

036

052

068

084

100

116

005

(enq)

021

(nak)

037

053

069

085

101

117

006

(ack)

022

(syn)

038

&

054

070

086

102

118

007

(bel)

023

(etb)

039

'

055

071

087

103

119

008

(bs)

024

(can)

040

056

072

088

104

120

009

(tab)

025

(em)

041

057

073

089

105

121

010

(lf)

026

(eof)

042

058

074

090

106

122

011

(vt)

027

(esc)

043

059

075

091

107

123

012

(np)

028

(fs)

044

060

<

076

092

108

124

013

(cr)

029

(gs)

045

061

077

093

109

125

014

(so)

030

(rs)

046

062

>

078

094

110

126

015

(si)

031

(us)

047

063

079

095

111

127

(127)

Table ASCII tendue (codes de caractres de 128 255):


Tableau 11 Tableau ASCII tendu
128

144

160

129

145

'

161

130

146

'

131

147

132

133

176

192

208

224

240

177

193

209

225

241

162

178

194

210

226

242

"

163

179

195

211

227

243

148

"

164

180

196

212

228

244

149

165

181

197

213

229

245

134

150

166

182

198

214

230

246

135

151

167

183

199

215

231

247

136

152

168

184

200

216

232

248

137

153

169

185

201

217

233

249

138

154

170

186

202

218

234

250

139

155

171

"

187

"

203

219

235

251

140

156

172

188

204

220

236

252

141

157

173

189

205

221

237

253

142

158

174

190

206

222

238

254

143

159

175

191

207

223

239

255

Objets MS Access:
Tableau 12 Objets MS Access

Constante

MS Office Access

Valeur entire

384/564

Vincent ISOZ
acTable

acQuery

acForm

acReport

acMacro

acModule

acDataAccessPage 6
acServerView

acDiagram

acStoredProcedure 9
Objet MS Access en mode ouverture:
Tableau 13 Objets MS Access en mode ouverture

Constante
acCurViewDesign

Valeur entire

Support

Formulaires, tats, pages, macros et modules

acCurViewFormBrowse 1

Formulaires ouverts en mode Formulaire

acCurViewDatasheet

Formulaires ouverts en mode Feuille de donnes

acCurViewPivotTable

Formulaires ouverts en mode Tableau crois


dynamique

acCurViewPivotChart

Formulaires ouverts en mode Graphique crois


dynamique

acCurViewPreview

tats ouverts en mode Aperu avant impression

Comme vous avez pu vous en apercevoir jusqu' maintenant, MS Access est un outil fort
complet dont la combinaison de l'ensemble des possibilits fait de son utilisation un outil de
mtier.
Cependant mme si nous avons vu quantits de choses jusqu' maintenant, il est possible que
vous trouviez que MS Access manque d'outils spcifiques vos besoins (qui sont comme c'est
trs souvent le cas: particuliers!).
Nous utilise ds lors le VBA (Visual Basic Application) qui est un langage de programmation
volu dit abusivement oriente objet (a y ressemble et cela en a presque les possibilits).
Cependant, l'inconvnient, c'est que autant vous pouvez effectuer une formation en MS
Access sur 7 jours 8 heures par jour et avoir vu 90% des fonctions, autant en ce mme laps
de temps, vous verrez 10% (et encore!!!) des possibilits du VBA d'Access.

MS Office Access

385/564

Vincent ISOZ
Remarque: prcisons que MS Access VBA utilise aussi un autre langage pour fonctionner qui
est le langage SQL (Stuctured Query Language) qui en lui-mme fait l'objet d'un cours d'au
moins 5 jours.
Avant de commencer passer des exercices pratiques, il est ncessaire de voir les bases
lmentaires de l'algorithmique afin de savoir ce qu'est une structure conditionnelle, une
itration, la rcursivit, les boolens et autres points importants du domaine de la
programmation
Nous allonsa galement crer des modules VBA afin de se faire la main pour voir la structure
du langage et la faon dont on crit des routines et fonctions simples (appeles avec
arguments passs en paramtres et les fonctions rcursives et plein d'autres choses).
Nous allons dfinir les notions de mthodes, proprits, vnements et les botes de dialogue.
Nous allons galement apprendre utiliser l'explorateur d'objets, l'aide, le dbuguer (la
fentre d'excution, la fentre des variables locales, les espions, les points d'arrt, l'excution
pas pas, la mise en commentaires), la gestion des erreurs (la commande GoTo).
Le lecteur se reportera ici au cours PDF MS Excel VBA disponible gratuitement au format
PDF au mme endroit qu'il a trouv le prsent document
Donc Maintenant avec votre formateur voyons:
-

L'interface Visual Basic Application Editor (abrg VBAE par la suite)

Explorateur de projets, proprits, protection du code

19.7 Prise en main du V.B.A


Avant de commencer coder, il est ncessaire de passer par des exemples gnriques du VBA
qui permettront au participant d'acqurir les bases du vocabulaire et de la grammaire du
langage ainsi que les notions d'algorithme, de procdure, fonction, itration, test logique,
gestion des erreurs etc.
C'est un passage oblig pour quiconque veut se prtendre faire un code un minimum
acceptable
Quelques rappels avant de voir ces exemples gnriques:
R1. Le terme Option Explicit au dbut d'un module permet d'obliger la dclaration des
variables dans le VBA (et VB). Ceci permet d'avoir une rigueur suprieure dans votre travail
et peut viter des problmes de dclaration.
R2. Le terme Option Compare Database au dbut d'un module permet de traiter les caractres
contenus dans les tables.
R3. L'instruction Option Compare dfinit la mthode de comparaison de chanes (Binary,
Text ou Database) pour un module. Si le module ne contient pas d'instruction Option
Compare, la mthode de comparaison de texte par dfaut est Binary.
R4. L'instruction Option Compare Binary fournit des comparaisons de chanes bases sur un
ordre de tri driv de la reprsentation binaire interne des caractres. Dans MS Windows,

MS Office Access

386/564

Vincent ISOZ
l'ordre de tri est dtermin par la page de code. L'exemple suivant dcrit un ordre de tri binaire
typique:
A<B<E<Z<a<b<e<z<<<<<<
R5. L'instruction Option Compare Text fournit des comparaisons de chanes bases sur un
ordre de tri qui ne distingue pas les majuscules des minuscules et qui est dtermin par les
paramtres rgionaux de votre systme. Si les caractres ci-dessus sont tris l'aide de
l'instruction Option Compare Text, l'ordre de tri de texte suivant est utilis:
(A=a) < ( =) < (B=b) < (E=e) < (=) < (Z=z) < (=)
Activer la bonne option est trs utile lorsque vous dveloppez un systme de gestion des mots
de passe et que vous souhaitez comparer un mot de passe saisi un mot de passe stock. Par
exemple, le code ci-dessous ne fera pas la diffrence entre les deux chanes de caractres (peu
importe quelle soit leur provenance) si l'on crit toto comme mot de passe:
Option Compare Database
Option Explicit
Sub ComparaisonMotDePasse()
Dim strPassReference, strPasseSaisi As String
strPassReference = "Toto"
strPasseSaisi = InputBox("Merci de saisir votre mot de passe")
If strPasseSaisi = strPassReference Then
MsgBox "Mot de Passe OK", vbInformation
Else
MsgBox "Mot de passe pas OK", vbCritical
End If
End Sub
Alors que le code suivane fera la diffrence des majuscules et minuscules entre toto et Toto:
Option Compare Binary
Option Explicit
Sub ComparaisonMotDePasse()
Dim strPassReference, strPasseSaisi As String
strPassReference = "Toto"
strPasseSaisi = InputBox("Merci de saisir votre mot de passe")
If strPasseSaisi = strPassReference Then
MsgBox "Mot de Passe OK", vbInformation
Else

MS Office Access

387/564

Vincent ISOZ
MsgBox "Mot de passe pas OK", vbCritical
End If
End Sub
Faisons maintenant quelques exemples de codes pures et "inutiles" dans MS Access mais
utiles pour l'apprentissage de la saisie de code et pour se "faire la main" (il faut toujours
commencer par la base):

19.7.1 Exemples gnriques Office


Option Compare Database
Option Explicit
Sub factorielle()
Dim n As Integer
Dim cible As Integer
Dim resp As Byte
2 n = InputBox("Valeur de n?")
On Error GoTo 1
init = n
If n = 0 Then
MsgBox "Factorielle 0!=1"
Else
result = factrec(n)
MsgBox "Factorielle " & init & "!=" & result
End If
Exit Sub
1 resp = MsgBox("Impossible d'excuter la procdure", vbRetryCancel +
vbCritical)
If resp = vbCancel Then
Exit Sub
ElseIf resp = vbRetry Then
GoTo 2 'Attention cela est trs dangereux (ne gre pas le conlit des variables: y prfrer
le "call")
End If
End Sub
Function factrec(n As Integer)
'On utiliSe la mthode rcursive
If n <= 1 Then
factrec = 1
Else
factrec = factrec(n - 1) * n
debug.print factrec
End If
End Function
'Avec un boucle "For"
Function factitfor(n)
Dim I As Integer
factitfor = 1
MS Office Access

388/564

Vincent ISOZ
For I = 1 To n
factitfor = factitfor * I
Next I
End Function
'--------------------------------------------------------------------------'ou encore avec un boucle "Do"
Function factitdo(n)
Dim I As Integer
factitdo = 1
I=0
Do
I=I+1
factitdo = factitdo * I
Loop While I <> n
End Function
'--------------------------------------------------------------------------Sub SelectCase()
Select Case Hour(Time)
Case 0 To 6
Message = "Bonne nuit..."
Case 7
Message = "Bonjour..."
Case 8 To 11
Message = "Bonne matine..."
Case 12, 13
Message = "Bon apptit..."
Case 14 To 19
Message = "Bon aprs-midi..."
Case Else
Message = "Bonne soire..."
End Select
MsgBox Message
End Sub
'--------------------------------------------------------------------------Sub id()
Dim reponse as String
reponse = InputBox("Identifiez vous:", "ID Box", "Nom Utilisateur",
100, 100)
If reponse = "Maud" Or reponse = "maud" Or reponse = "MAUD" Then
idok
ElseIf reponse Like "*soz" Then
idok
Else
idnul
End If
End Sub
MS Office Access

389/564

Vincent ISOZ
Sub idok()
msgbox "C'est ok vous avez t reconnu"
End Sub
Sub idnul()
msgbox "Access va tre ferm", vbcritical
Quit
End Sub
'--------------------------------------------------------------------------Sub utilisateur()
Dim textlen, renverse, id As String
Dim I As Integer
id = InputBox("Identifiez-vous")
'On met en majuscules le UserName
id = UCase(id)
'On affiche le tout dans une message box (voi l'aide!! pour le retour
chariot par exemple)
'On compte combien de lettres il y a dans le nom de l'utilisateur
textlen = Len(id)
'Premire structure de boucle de type For
'Par pas de 1 on analyse en reculant les lettres du nom de l'utilisateur
For I = textlen To 1 Step -1
'Vous n'tes pas obligs de choisir i comme variable d'itration
'On parcour 1 par 1 les caractres et on les concatne avec le
caractre prcdent
renverse = renverse & Mid(id, I, 1)
MsgBox renverse
Next I
MsgBox renverse
End Sub
-------------------------------------------------------------------'Ce programme renvoie le nombre de voyelles comprises dans un texte
'Objectif: apprendre la command "Mid" + "Like" + "Debug.Print"
'Commandes que l'on retrouve dans les autres logiciels de la suite office
Sub comptevoyelles()
Dim compte As Integer
Dim ch, texte, result As String
texte = InputBox("Tapez le texte duquel vous voulez enlever les
voyelles")
'On initialise une variable (ce qui n'est pas tjrs) obligatoire
compte = 0
'On va compter les voyelles
For I = 1 To Len(texte) ' comparer avec l'exercice prcdent...
ch = Mid(texte, I, 1)
'on test la caractre pour voir si c'est une variable
If ch Like "[aeiou]" Then
compte = compte + 1
'on affiche le rsultat intermdiaire dans la fentre d'excution
Debug.Print ch, I

MS Office Access

390/564

Vincent ISOZ
Else
result = result & ch
End If
Next I
'Ecrivez la fonction dans une feuille et appelez dans l'argument une cellule contenant un
texte
MsgBox "il y avait " & compte & " voyelles"
MsgBox result
End Sub
'-------------------------------------------------------------------Sub afficheascii()
Dim I As Integer
Dim debutascii, finascii As Integer
debutascii = 33
finascii = 126
For I = debutascii To finascii
Debug.Print I, Chr(I)
Next I
End Function
'-------------------------------------------------------------------'Ce programme supprime les espaces contenu dans un texte
'Objectif: apprendre utiliser les valeurs ascii (de 33 126)
'Commandes que l'on retrouve dans les autres logiciels de la suite office
Sub suprespaces()
Dim Temp, ch, texte As String
texte = InputBox("Tapez une phrase avec des espaces")
For I = 1 To Len(texte)
ch = Mid(texte, I, 1)
'32 est la valeur ascii du l'espace vide
If ch <> Chr(32) Then
Temp = Temp & ch
End If
Next I
MsgBox Temp
'Si vous connaissiez bien les instuctions VB le contenu ci-dessus aurait pu s'abrger
MsgBox Replace(texte, " ", "")
End Sub
'--------------------------------------------------------------------------Sub divisedeux()
'Essayez aprs en changeant "double" en "integer"
Dim nb1, nb2, resultat As Double
On Error GoTo GestionErreurs
nb1 = InputBox("Saisissez le dividende")
nb2 = InputBox("Saisissez le diviseur")
If IsNumeric(nb1) = False Or IsNumeric(nb2) = False Then
MsgBox "Une des deux entres n'est pas un nombre", vbCritical + vbRetryCancel,
"Attention!"
End If
MS Office Access

391/564

Vincent ISOZ
resultat = nb1 / nb2
MsgBox "Le rsultat de la division est " & resultat
'N'oubliez pas de quitter la fonction sinon quoi la gestion des erreurs va tre execute
Exit Sub
GestionErreurs:
MsgBox Str(Err.Number) & ": " & Err.Description, , "Erreur"
'Testez la fonction avec une division par zro, et des saisies de caractres
End Sub
Voyons maintenant une srie de codes propres MS Access que l'on me demande trs
frquemment.

19.8 Appliquer le filtre par formulaire automatiquement


Un certain nombre de clients crent des formulaires pour le filtrage uniquement. Or, ces
mmes formulaires sont souvent connects directement sur les tables. Ils souhaiteraient ds
lors que ds qu'un employ commence crire dans un champ (alors qu'il ne devrait pas!), sa
saisie soit annule et que le filtre par formulaire soit activ.
Pour faire cela il suffit sur chaque champ associer l'vnement suivant dans le code VBA du
formulaire:
Private Sub Nom_Champ_KeyDown(KeyCode As Integer, Shift As Integer)
RunCommand acCmdFilterByForm
End Sub

19.9 Appliquer un filtre avec critres sur un formulaire


C'est une technique puissant mais qui ncessite dans la ralit un code relativement long pour
grer les combinaisons des champs et le choix d'oprateurs par les employs.
L'ide est que les employs peuvent saisir des critres dans des champs et un clic sur un
bouton va filtrer les donnes du formulaire (qu'il soit tabulaire ou en feuille).
La commande VBA utilise la partie WHERE du SQL (on peut donc y mettre des LIKE, AND
ou OR) il faut donc tre l'aise avec ce langage aussi!
DoCmd.ApplyFilter "", "[Nom du champ filtrer]='" & Me.NomChampAvecCritere & "'"
ou par exemple:

DoCmd.ApplyFilter "", "[Nom du champ filtrer] LIKE '*' & '" &
Me.NomChampAvecCritere & "' '& '*'"
etc.

MS Office Access

392/564

Vincent ISOZ

19.10 Dtection formulaire ouvert


'Voici une fonction qui s'avre souvent utile dans MS Acccess: comment dtecter si un
formulaire est ouvert (pour les constantes voir les tableaux page 384)
Function IsLoaded(ByVal strFormName as String) As Integer
Const conObjStateClosed=0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End function
'il vous est demand de faire fonctionner cette function avec un formulaire de votre choix

19.11 Dtection de la version et compactage


'Nous allons dtecter ici la version de MS Access sur laquelle nous travaillons, vrifier si la
base est compacte et si ce n'est pas le cas, activer le compactage
Sub Compactage()
Dim strVersion as String
Dim blnCompact as Boolean
strVersion = Application.Version
msgbox strVersion
blnCompact = Application.GetOption("Auto Compact")
If Not blnCompact Then
Application.SetOption "Auto Compact", True
End If
'Cherchez maintenant le code ncessaire qui demande l'utilisateur s'il veut quitter MS
Access et ce de manire esthtique si possible
End sub

19.12 Cration d'un bouton ouvrant une page web


Private Sub btnPageWeb_Click()
Application.FollowHyperlink "http://www.google.fr"
End Sub

19.13 Excution de code SQL


Nous avons vu plus tt dans le prsent support des commandes SQL courantes pour crer,
dtruire, lier des tables ou des attributs. Mais comment procder pour faire de mme en VBA?
La rponse est fort simple et tient en quelques lignes que voici:
Public Sub DoSQL()
Dim SQL As String

MS Office Access

393/564

Vincent ISOZ
SQL = "CREATE table tblSuccursale (idSuccursale LONG, strVille CHAR(80),
CONSTRAINT idSuccursalePK PRIMARY KEY (idSuccursale) );"
DoCmd.RunSQL SQL
End Sub

19.14 Cration d'une table


'Cration d'une table et dfinition des champs en utilisant le mot cl New
Sub CreationTable()
Dim tdfClient As DAO.tabledef
'Il faut ajouter la rfrence Microsoft DAO 3.6 Object Library au projet (Outils/Rfrences)
Dim fl as DAO.Field
'Cre la dfinition de la table
Set tdfClient = New DAO.tabledef
tdfClient.Name = "tblEffClients"
'Cre le 1er champ
Set fld = New DAO.Field
With fld
.Name = "strNomClient"
.Type = dbText
.Size = 40
End With
tdfClient.Fields.Append fld
'Cre le 2me champ
Set fld = New DAO.Field
With fld
.Name = "intEffectif"
.Type = dbInteger
End With
tdfClient.Fields.Append fld
'Ajoute une cl primaire
tdfClient.Fields.Append tdfClient.CreateField("ID", dbInteger)
Set idKey = tdfClient.CreateIndex("IDKey")
idKey.Primary = True
idKey.Unique = True
idKey.Required = True
idKey.Fields.Append tdfClient.CreateField("ID", dbInteger)
tdfClient.Indexes.Append idKey
'Ajoute la table la base de donne courant
Application.CurrentDb.TableDefs.Append tdfClient
'Rinitialise les variables Objet
Set tdfClient = Nothing
Set fld = Nothing
End Sub
---------------------------------------------------------------------'A peu prs la mme chose qu'avant mais en utilisant des mthodes
Sub CreationTable()
Dim tdfClient As DAO.tabledef
MS Office Access

394/564

Vincent ISOZ
'Il faut ajouter la rfrence Microsoft DAO 3.6 Object Library au projet (Outils/Rfrences)
Dim fl as DAO.Field
'Cre la dfinition de la table
Set tdfClient = CurrentDb.CreateTableDef("tblEffClients")
'Cre le 1er champ
With tdfClient
'Cre le premier champ
Set fld = .CreateField("strNomClient", dbText, 40)
.Fields.Append fld
'Cre le deuxime champ en utilisant une deuxime mthode
.Fields.Append .CreateField("intEffectif",dbInteger)
End With
CurrentDb.TableDefs.Append tdfClient
Set fld = Nothing
Set tdfClient = Nothing
End Sub

19.15 Imports/Exports
19.15.1 Import de donnes de MS Excel
'Vous vous rappelez de la table tblSorties80 que nous devions importer manuellement dans
MS Access ? Si oui, essayez de suite le code suivant:
Sub btnImport_Click()
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel10,
"tblNouveuxVendeurs", _
"C:\TableNouveauxVendeurs.xls", True, "tblNouveuxVendeurs!A1:D4"
End Sub
'Si des lignes vides persistent vous pouvez faire lors de la requte d'ajout un nettoyage
pralable l'aide d'une requte de suppression.

19.15.2 Export paramtr d'un fichier MS Excel


'Il est frquent que l'on souhaite que l'utilisateur puisse choisir o enregistrer un export.
'Voici un exemple de code:
Sub mcrExportNewsletter()
On Error Resume Next
'Ne pas oublier d'ajouter la rfrence Microsoft Office 11.0 Object Library
Dim dlgSaveAs As FileDialog
Dim strFilePath As String
Set dlgSaveAs = Application.FileDialog(msoFileDialogSaveAs)
dlgSaveAs.Title = "Select File Location to Export XLSX:"
dlgSaveAs.InitialFileName = "Data.xlsx"

MS Office Access

395/564

Vincent ISOZ
dlgSaveAs.Show
strFilePath = dlgSaveAs.SelectedItems(1)
' Export de la liste des e-mails de la newsletter
DoCmd.OutputTo acOutputQuery, "qrData", "ExcelWorkbook(*.xlsx)", strFilePath, True,
"", 0, acExportQualityPrint
End Sub

19.15.3 Import d'un fichier CSV


La majorit des fichiers CSV en Suisse sont spars par des ";" au lieu d'tre spars par des
",". Leur import pose donc problme et ncessite d'enregistrer les tapes de l'assistant manuel
d'import de donnes en tantq que schma interne au fichier Microsoft Access.
Comme je trouve cette mthode trs peu lgante en voici une autre base sur l'ide que l'on
souhaite importer le fichier *.csv suivant:

dont nous ne connaissons pas obligatoire l'emplacement mais dont le nom est suppos fixe et
le nombre de colonnes aussi et fourni avec la ligne d'en-tte de donnes dans une table
existante dans notre base appele tblTable dont les champs sont dj existants et dont le
contenu doit tre vid avant chaque import.
Voici le code qui peut tre gnralise relativement facilement:
MS Office Access

396/564

Vincent ISOZ
Sub ImportFile()
On Error Resume Next
Dim strFilePath As String, strFileName As String, strFullPath As String, strTableName As
String, strSeparator As String
Dim intFieldsNumber As Byte, i As Byte
Dim valSelect As Variant, MyDB As DAO.Database, MyRS As DAO.Recordset
'Target table name
strTableName = "tblTable"
'Separator for the csv file
strSeparator = ";"
Set MyDB = CurrentDb()
Set MyRS = MyDB.OpenRecordset(strTableName, dbOpenDynaset)
'The *.csv file must have the same number of columns as the target table and the columns
must be in the same order!
'The *.csv file is supposed to have column headers
strFilePath = ""
strFileName = "CSVANSIDonnees.csv"
intFieldsNumber = MyDB.TableDefs(strTableName).Fields.Count
If strFilePath = "" Then
strFilePath = GetDirectory
End If
strFullPath = strFilePath & "\" & strFileName
'First we clean the content of the existing target table (main practical situation)
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM " & strTableName
DoCmd.SetWarnings True
Open strFullPath For Input As #1
row_number = 0
Do Until EOF(1)
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, strSeparator)
If row_number <> 0 Then
MyRS.AddNew
For i = 0 To intFieldsNumber - 1
MyRS(i) = LineItems(i)
Next i
MyRS.Update
End If
row_number = row_number + 1
Loop
End Sub

MS Office Access

397/564

Vincent ISOZ
Public Function GetDirectory(Optional OpenAt As Variant) As Variant
'Function purpose: To Browser for a user selected folder.
'If the "OpenAt" path is provided, open the browser at that directory
'NOTE: If invalid, it will open at the Desktop level
Dim ShellApp As Object
'Create a file browser window at the default folder
Set ShellApp = CreateObject("Shell.Application"). _
BrowseForFolder(0, "Merci de pointer le dossier contenant le fichier de donnes", 0,
OpenAt)
'Set the folder to that selected. (On error in case cancelled)
On Error Resume Next
GetDirectory = ShellApp.self.Path
On Error GoTo 0
'Destroy the Shell Application
Set ShellApp = Nothing
'Check for invalid or non-entries and send to the Invalid error
'handler if found
'Valid selections can begin L: (where L is a letter) or
'\\ (as in \\servername\sharename. All others are invalid
Select Case Mid(GetDirectory, 2, 1)
Case Is = ":"
If Left(GetDirectory, 1) = ":" Then GoTo Invalid
Case Is = "\"
If Not Left(GetDirectory, 1) = "\" Then GoTo Invalid
Case Else
GoTo Invalid
End Select
Exit Function
Invalid:
'If it was determined that the selection was invalid, set to False
GetDirectory = False
End Function

19.16 Automatiser la mise jour des tables de type BDD lies


Voici un cas classique trs utile pour ceux qui dplacent souvent les fichiers de rfrence des
tables lies. D'abord le code qui permet d'afficher une bote de dialogue et qui demande le
fichier o se trouvent dornavant les tables:
Sub cmdFileDialog()
Dim objDialog As Object

MS Office Access

398/564

Vincent ISOZ
Dim strPath As String
On Error GoTo ManageErrors
Set objDialog = Application.FileDialog(3)
With objDialog
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Access Databases", "*.mdb"
.Show
If .SelectedItems.Count = 0 Then
MsgBox "No file selected."
Else
strPath=Dir(.SelectedItems(1))
Call Attach_Tables(strPath)
End If
End With
Set objDialog = Nothing
Exit Sub
ManageErrors:
MsgBox "Failure with this version of MS Access! Contact administrator to update the
application", vbCritical + vbOKOnly, "Demo"
End Sub
Ce qui donne l'excution:

MS Office Access

399/564

Vincent ISOZ

Ensuite, nous rcuperons le fichier slectionn par l'utilisateur et le passons en paramtre dans
une autre routine qui va mettre jour le lien de toutes les tables et qui l'aide d'une fonction
va aussi nous permettre d'afficher si besoin est dans la fentre de dbuggage les chemins de
liaisons prcdents:
Function GetLinkedDBName(TableName As String)
'Ne pas oublier la Bibliothque d'objets Microsoft DAO 3.6
Dim db As DAO.Database, Ret As Variant, strLength As Integer
Set db = CurrentDb()
strLength = VBA.Strings.Len(CStr(db.TableDefs(TableName).Connect))
If strLength <> 0 Then
GetLinkedDBName = VBA.Strings.Right(db.TableDefs(TableName).Connect, strLength
- 10)
Debug.Print GetLinkedDBName
End If
End Function
Sub Attach_Tables(strPath As Variant)
Dim db As Database
Dim TD As TableDef
Dim i As Integer, Reponse As Variant, Ret As Variant
Set db = DBEngine.Workspaces(0).Databases(0)
Reponse = SysCmd(acSysCmdInitMeter, "Attache les tables", db.TableDefs.Count - 1)

MS Office Access

400/564

Vincent ISOZ
'boucle sur toutes les tables, rattachant celles dont chane
'de connection est non vide, les autres tant des tables locales
For i = 0 To db.TableDefs.Count - 1
Set TD = db.TableDefs(i)
GetLinkedDBName (db.TableDefs(i).Name)
If TD.Connect <> "" Then
TD.Connect = ";DATABASE=" & strPath
TD.RefreshLink
If Err <> 0 Then
MsgBox TD.Name
End If
End If
Reponse = SysCmd(acSysCmdUpdateMeter, i + 1)
Next i
DoCmd.Hourglass False
Reponse = SysCmd(acSysCmdClearStatus)
End Sub

19.17 Champ de Recherche sur formulaire


Dans MS Access 2007 l'assistant de liste droulante de recherche a disparu. Heureusement il
reste le VBA:
Private Sub ListeReference_AfterUpdate()
Dim rs As Object
Set rs = NomFormulaireAvecDonneesRecherchees.Recordset
'Si les valeur cherche est un chiffre, enlever les apostrophes
rs.FindFirst "NomChampSurFormulaireRs = '" &
NomFormulaireAvecListeReference.ListeReference & "'"
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

19.18 Evnement sur sortie de formulaire (validation des champs de


saisie)
Soit considrer le formulaire frmFournisseurs de la table tblFournisseurs. Crez comme
exercice un code VBA qui la sortie du champ Nom Socit:
1. Change la premire lettre de chaque mot du champ en une majuscule
2. Affiche le rsultat dans une bote de dialogue en utilisant les commandes:
MsgBox Forms("frmFournisseurs").Controls("strNom").Value
ou
MsgBox Forms!frmFournisseurs.Controls![strNom].Value
MS Office Access

401/564

Vincent ISOZ
En considrant le formulaire frmFournisseurs et le sous-formulaire frmArticlesEntrees (si
vous les avez pas faites-les, l'esthtique ne nous intresse d'ailleurs pas dans cet exemple):

Nous souhaiterions que tant que le Pays (strPays) n'est pas renseign, les contrles du sousformulaire (tblArticleNb, intNbUnites, datDateIn) soient bloqus. Pour ceci, sur l'vnement
Enter du champ tblArticleNb du sous-formulaire saisissez le code suivant:

19.19 Evnement sur fermeture de formulaire (validation des champs


de saisie)
En utilisant la commande Select Case de VBA et l'instruction With, crez une procdure qui
lors de la fermeture d'un des formulaires de votre choix par l'action d'un bouton prvu a cet
effet contrle les champs non remplis et:
1. Met en rouge les champs non remplis
2. Afficher un message si un des champs n'est pas rempli
3. Change le Caption du formulaire en Correction

MS Office Access

402/564

Vincent ISOZ
Aidez-vous de l'exemple suivant:
Dim ctl As Control
Dim frm As form
Set frm = Screen.ActiveForm
For Each ctl In frm
With ctl
Select Case.ControlType
'Etiquettes
Case acLabel
.ForeColor = vbBlue
'Zones de texte
Case acTextBox
.ForeColor = vbYellow
'Listes droulantes
Case acListBox, acComboBox
.ForeColor = vbRed
End Select
End With
frm.Caption = "Ceci est un exemple"
Next ctl

19.20 Focus sur formulaire


Crez un bouton sur le formulaire d'ajout de clients de type Enregistrement suivant en lui
donnant le nom btnSuivant:

Remarque: si vous dsirez mettre un raccourci sur le "r" de Enregistrement il vous faudra dans
les proprits du bouton dans l'onglet Format et la proprit lgende, mettre un & devant la
lettre dsire comme on le fait dans Word, Excel, Outlook, etc.
Maintenant effacez ce bouton (il fonctionne videmment!) et crez un bouton de type Ajouter
enregistrement
Une fois ce bouton cr avec l'assistant, lorsque l'utilisateur cliquera dessus, le focus sera
toujours sur le bouton et malheureusement pas sur le champ strPrenom. Ce qui peut s'avrer
tre une source de perte de temps phnomnale et irritante de plus. Changeons cela! Allez
dans le code VBA vous y trouverez:

MS Office Access

403/564

Vincent ISOZ

A la diffrence que l'on y a dj ajout la nouvelle ligne de code (instruction lmentaire)


dans le bloc d'instruction a l'endroit adquat:
strePrenom.SetFocus
Question subsidiare pour les participant: Comment peut on savoir qu'il fallait utiliser
SetFocus??
Maintenant revenons au code de nos boutons et observons les procdures vnementielles
disponibles. Ces dernires se trouvent toujours au mme endroit et l'utilit de certaines d'entre
elles peut tre conteste mais ne vaut-il pas mieux en avoir trop que pas assez parfois ?

Ces procdures vnementielles sont principalement intressantes lorsque l'on cre un code
vnementiel sur un nouveau bouton vierge de toute action.
Par exemple, en crant un nouveau bouton avec le code suivant:
Sub EditRecord_Click()
'Active l'dition des enregistrements du formulaire actif
Me.AllowEdits = True
Prnom.SetFocus
End Sub
MS Office Access

404/564

Vincent ISOZ
Nous avons vu l, un exemple d'vnement d'un bouton, mais il en existe galement pour le
formulaire dans son ensemble. Ds lors gauche slectionnez:

Les vnements relatifs "Form" (le formulaire en cours slectionn dans le projet) sont
visibles dans le menu de droite de la feuille de code. Vous comprenez donc que ces
vnements sont trs importants car ils vous ouvrent nombre de possibilits.
Par exemple, nous pourrions ajouter le code suivant (attention!!! prenez l'habitude d'insrer
des commentaires dans votre code!!):
Sub Form_AfterUpdate()
Me.AllowEdits = False
'voir les options de msgbox !!!
msgbox "L'enregistrement a bien t valid", vbok, "Confirmation"
End Sub
Ce code a pour effet de bloquer l'ajout de nouveaux enregistrements l'utilisateur une fois que
ce dernier en a entr un.

19.21 Filtres
Maintenant regardons ce que nous pouvons faire avec les filtres.

19.21.1 Filtre paramtr par bouton


Crez un joli bouton avec l'image du filtre par formulaire comme ci-dessous sur le formulaire
frmClients (ce dernier a t cre avec l'assistant de boutons).

MS Office Access

405/564

Vincent ISOZ

Remarque: Affichez les proprits de ce bouton et effacez la procdure vnementielle


laquelle il est rattach.
Maintenant crez une nouvelle requte qryFiltreMacro utilisant la table tblClients utilisant le
champ strPays comme ci-dessous:

Maintenant nous allons crer une macro avec l'assistant de macro: choisissez Appliquer un
filtre et informez le nom de la requte qui sera utilis comme filtre pour le formulaire.
Enregistrez ensuite la macro sous le nom mcrFiltre:

MS Office Access

406/564

Vincent ISOZ

Revenons maintenant notre bouton. Affichez les proprits de ce dernier et dans l'vnement
Sur clic cliquez sur la flche qui pointe sur le bas et slectionnez la macro mcrFiltre.

Testez maintenant votre bouton (si vous avez tout fait correctement, ce dernier doit
parfaitement fonctionner).
Revenons maintenant au VBA.
Affichez les proprits vnementielles du bouton filtre et sur l'vnement Sur clic cliquez sur
les trois petits points pour y saisir le code suivant:
Sub applicfiltr_Click()
Beep
MsgBox "Attention, vous allez activer un filtre par pays", _ vbOKOnly + vbInformation,
"Information"
DoCmd.RunMacro "mcrFiltre"
End Sub
Enregistrez le tout et testez votre bouton.
Maintenant crez comme vous le souhaitez un bouton sur le formulaire qui doit pouvoir
dsactiver le filtre!
Voici quand mme le code:
Forms!Contacts.FilterOn = False

MS Office Access

407/564

Vincent ISOZ
Vous pouvez travailler en groupe pour trouver la solution. Le premier qui trouve explique aux
autres comment il l'a fait. Je validerai la mthode si elle est bonne.

19.21.2 Filtre paramtr par une zone d'options


Maintenant toujours avec les filtres, toujours sur le mme formulaire, nous allons crer une
zone d'options avec l'outil

telle que ci-dessous:

Lors de la cration de la zone, n'oubliez simplement pas de donner l'assistant une valeur
chaque option. Dans cet exemple, nous avons donn la valeur 1 l'option Tous les pays et la
valeur 2 l'option France.
Ce groupe d'option ne fait rien si on ne lui ajoute pas du code VBA vnementiel. Attachons
nous la tche. Mais d'abord nommez-le (proprits de l'ensemble) filteroptions
Affichez VBAE l'cran allez au sommet de la page de code et choisissez dans la liste
droulante des objets filteroptions et dans la liste droulante des vnements AfterUpdate et
saisissez le code suivant:
Sub filteroptions_AfterUpdate()
If filteroptions = 2 Then
resp = MsgBox("Vous avez activ le filtre par pays:" & Chr(13) & "France" & Chr(13)
& "Etes vous sr de vouloir continuer?", vbOKCancel + vbInformation, "Activation Filtre")
If resp = vbOK Then
Me.Filter = "[strPays]=France"
Me.FilterOn = True
Else
Exit Sub
End If
Else
Me.FilterOn = ""
MsgBox "Le filtre est dsactiv"
End If
End Sub

19.21.3 Adaptation au filtre par formulaire


Maintenant ce qui fait souci c'est que l'utilisateur active lui-mme un filtre dit "par
formulaire" (cens tre connu). Alors ce moment, il faudrait que l'on puisse dtecter ce que
fait l'utilisateur et choisir ce que l'on fait avec nos boutons radios, qui doivent avoir une
correspondance logique avec l'activation manuelle du filtre par formulaire.
Arbitrairement on choisit de dsactiver tous les boutons radios quand le filtre par formulaire
sera activ. Pour ce, vous allez dans la page de code du formulaire frmClients et tapez le code
suivant:

MS Office Access

408/564

Vincent ISOZ
Sub Form_ApplyFilter(Cancel As Integer, ApplyType as Integer)
If ApplyType = acShowAllRecord Then
'Active le bouton radio "Tous les pays"
filteroptions = 1
Else
'Tous les boutons radios sont dsactivs
filteroptions = Null
End If
End Sub
Nous avons maintenant un systme cohrent!

19.21.4 Filtres avec boutons a bascule


Maintenant, avec l'outil Zones de la bote outils contrles des formulaires crez le systme
de boutons bascule suivant pour le formulaire automatique de la table tblSorties:

Lors de la cration de la zone, n'oubliez simplement pas de donner l'assistant une valeur
chaque bouton. Dans cet exemple, nous avons donn la valeur 1 au bouton Avec garantie et la
valeur 2 au bouton Sans garantie.
Nommez cette zone filteroptions galement et allez dans le VBA du formulaire pour activer
l'vnement After_Update et saisissez:
Private Sub filteroptions_AfterUpdate()
If filteroptions = 2 Then
Me.Filter = ""
Me.Filter = "[bolGarantie]=True"
Me.FilterOn = True
Else
Me.Filter = ""
Me.Filter = "[bolGarantie]=False"
Me.FilterOn = True
End If
End Sub

19.21.5 Listes droulantes


Nous allons prsenter ici quelques codes courants relativement aux listes droulantes:

MS Office Access

409/564

Vincent ISOZ

19.21.5.1 Ouvrir une liste droulante lors du survol avec la souris


Pour faire gagner du temps vos utilisateurs il peut tre pratique d'ouvrir une liste droulante
lors du survol de la souris sur une liste droulante.
Pour cela, nous allons afficher les proprits de la liste droulante qui nous intresse et
cliquons sur la proprit Sur souris dplace (On mouse move en anglais):

et nous gnrons un code VBA:

et nous crivons:

MS Office Access

410/564

Vincent ISOZ
Private Sub strPays_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
With Me.strPays
.SetFocus
.Dropdown
End With
End Sub

19.21.5.2 Filtrage d'une liste droulante sur la base d'un champ


Le code de l'exemple ci-aprs permet d'aficher dans une liste droulante le nom des clients
dont le nom commence par une lettre donne dans un champ part.
Pour teste cet exemple vous devez:
1. Crer un formulaire
2. Ajouter les contrles suivants fldNom, lstNom, btnListe1
Private Sub btnListe1_Click()
Dim strSQL As String
'Contrle du nom saisi
If fldNom = "" Then
MsgBox "Vous devez saisir au moins une lettre", vbExclamation
fldNom.SetFocus
End If
'Proprits de la liste droulante
Me.lstNom.RowSourceType = "Table/Requte"
strSQL = "SELECT tblClients.strNom FROM tblClients " & "WHERE (tblClients.strNom
Like '" & Me.fldNom & "*')"
Me.lstSoc.RowSource=strSQL
'Ractualisation des donnes de la liste
Me.lstNom.Requery
End Sub

19.21.5.3 Filtrage d'une liste droulante sur la de la saisie dans la liste droulante
L'ide est la mme qu'avant mais cette fois-ci nous allons filtrer la liste droulante des cantons
strCantons par rapport ce qui est tap dans cette mme liste car il y a des petites subtilits
prendre en compte pour ce type de scnario trs important et trs demand par les crateurs de
bases de donnes ds que le contenu des listes devient non ngligeable.
D'abord, il faut aller dans les proprits de la liste droulante strCantons du formulaire
frmClients pour mettre sa proprit Limit to list (Limiter la liste) No et enlever aussi le
code SQL se trouvant dans la proprit Row Source:

MS Office Access

411/564

Vincent ISOZ

Ensuite, sur l'vnement On Key Down:

Nous allons donc dfinir la procdure vnementielle suivante en y ajoutant par la mme
occasion l'vnement Form_Load la main:
Option Compare Database
Dim strChaine As String
Private Sub fkCanton_KeyDown(KeyCode As Integer, Shift As Integer)
strChaine = strChaine & Chr(KeyCode)
'Si l'utilisateur fait un "Home" (code ASCII 36) sur le clavier on considre
'qu'il veut recommencer et on lui expliquera au pralable que cela fonctionne ainsi
If KeyCode = 36 Then
strChaine = ""
Me.fkCanton = Null
End If
sqlCantons = "SELECT tblCantons.strCanton FROM tblCantons WHERE
tblCantons.strCanton like '" & strChaine & "*'"
Me.fkCanton.RowSource = sqlCantons
End Sub
Private Sub Form_Load()
sqlCantons = "SELECT tblCantons.strCanton FROM tblCantons"

MS Office Access

412/564

Vincent ISOZ
Me.fkCanton.RowSource = sqlCantons
End Sub

19.21.5.4 Ajout directe d'une donnes dans une liste droulante


Toujours avec les listes droulantes lorsque nous saisissons un nouveau client, il peut
manquer un pays dans la liste des pays. Or, comme nous l'avons vu en dbut de ce support de
cours, il est un peu ridicule de crer un formulaire que pour l'insertion de nouveaux pays.
Le mieux ds lors c'est de grer en VBA l'insertion sur champ de nouveaux lments dans la
table tblPays.
Remarque: Ce code n'est pas utile pour les listes droulantes de type "statiques" (comprendre:
non lis des tables conformment la deuxime forme normale). Effectivement pour ce
type de liste il suffit de changer la proprit Autoriser les modifications Oui dans les
proprits de la liste de Choix comme nous pouvons le voir ci-dessus:

Considrons donc notre bon, vieux et simple formulaire frmClients:

MS Office Access

413/564

Vincent ISOZ

et en particuliers les vnements du champ strPays (attention!!! prenez garde ce que le


champ strPays dans la table tblClients ait l'option Limit la liste sur Oui):

et celui qui se nomme Sur absence dans liste. Si vous activez l'dition VBA de cet vnement,
saisissez-y le code suivant:
Private Sub strPays_NotInList(NewData As String, Response As Integer)
On Error GoTo cboJobTitle_NotInList_Err
Dim intAnswer As Integer
Dim strSQL As String
intAnswer = MsgBox("La rgion " & Chr(34) & NewData & _
Chr(34) & " n'existe actuellement pas dans la liste." & vbCrLf & _
"Souhaiteriez vous l'y ajouter?", vbQuestion + vbYesNo)
If intAnswer = vbYes Then
strSQL = "INSERT INTO tblRegions([strRegions]) " & "VALUES ('" & NewData &
"');"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
'La commande RunSQL ne fonctionne que pour des requtes d'action pour info
DoCmd.SetWarnings True
MsgBox "La rgion a bien t ajoute la liste", vbInformation
Response = acDataErrAdded
Else

MS Office Access

414/564

Vincent ISOZ
MsgBox "Veuillez choisir un lment existant dans la liste.", vbInformation, Response =
acDataErrContinue
End If
cboJobTitle_NotInList_Exit:
Exit Sub
cboJobTitle_NotInList_Err:
MsgBox Err.Description, vbCritical, "Error"
Resume cboJobTitle_NotInList_Exit
intReponse = MsgBox(NewData & " ne figure pas dans la liste, souhaitez-vous l'ajouter ?",
vbYesNo)
End Sub
Ds lors, si vous saisissez quelque chose qui n'est pas dans la liste:

Remarque: Il est possible maintenant que vous souhaitiez empcher tout utilisateur de changer
votre code VBA. Pour ce faire, cliquez avec le bouton droit de la souris dans le VBAE sur un
des modules et slectionnez Proprits de.. Vous y verrez un onglet nomm Protection:

MS Office Access

415/564

Vincent ISOZ

Attention n'oubliez pas d'activer la case cocher et d'y mettre un mot de passe convenable (12
caractres minimum, mlange de majuscule, minuscules et de chiffres).
On rappelle galement que lorsque l'on utilise du VBA, il est prfrable lors du dmarrage de
l'application MS Access de restreindre au maximum la libert de l'utilisateur (cela vite les
problmes).
Pour cela (cela est cens tre un rappel) allez dans:
Outils/Dmarrage
1. Dfinissez un titre pour l'application
2. Choisissez une icne (vous pouvez en tlcharger sur www.sciences.ch)
3. Choisissez le formulaire afficher au dmarrage de l'application
4. Dcochez absolument tout
Au besoin, il est possible de crer un fichier MDE de votre base MS Access (mais faites en
une copie de sauvegarde au pralable) ce qui pour avantage (entre autres) de crypter le code
VBA:

MS Office Access

416/564

Vincent ISOZ

19.22 Liste droulante choix multiples


Dans cet exemple nous allons voir comment utiliser les listes choix multiples. L'ide pour
faire simple, est de construire un formulaire avec une telle liste qui permet d'excuter une
requte sur plusieurs lments.
Ainsi, nous allons faire une requte sur la table tblSorties qui permet partir d'un formulaire
de choisir le ou les articles que nous souhaitons visualier.
Crez donc un formulaire frmReqMultiple avec une liste choix (dont il faudra dans les
poprits activer la slection multiple) que nous nommerons lstArticles base sur la liste des
articles de la table tblArticles.

Crez aussi une requte qryMultiple depuis la table tblSorties. Vous n'avez pas besoin de
spcifier de paramtres ils seront automatiques supprims avec le code VBA.
Crez enfin un bouton nomm btnQuery sur le formulaire frmReqMultiple qui ouvre la
requte:
Dans l'vnement After_Update (Aprs MAJ) de la liste choix multiple, crivez le code
suivant:
Private Sub btnQuery_Click()

MS Office Access

417/564

Vincent ISOZ
Dim MyDB As DAO.Database
Dim qdef As DAO.QueryDef
Dim i As Integer
Dim strSQL, strWhere, strIn As String
Dim varItem As Variant
Set MyDB = CurrentDb()
strSQL = "SELECT * FROM tblSorties"
For i = 0 To lstArticles.ListCount - 1
If lstArticles.Selected(i) Then
strIN = strIN & "'" & lstArticles.ItemData(i) & "',"
End If
Next i
strWhere = " WHERE [tblArticleNb] in (" & Left(strIN, Len(strIN) - 1) & ")"
MyDB.QueryDefs.Delete "qryMultiple"
Set qdef = MyDB.CreateQueryDef("qryMultiple", strSQL)
DoCmd.OpenQuery "qryMultiple", acViewNormal
For Each varItem In Me.lstArticles.ItemsSelected
Me.lstArticles.Selected(varItem) = False
Next varItem
End Sub

19.23 Autres vnements


Nous pouvons chaque lment de formulaire (ou au formulaire lui-mme) dfinir des
vnements. Ainsi, si vous affichez les proprits d'un champ de formulaire ou du formulaire
lui-mme vous avez comme vnements:

MS Office Access

418/564

Vincent ISOZ

Evnements d'un Formulaire

Evnements d'un champ de formulaire

Comme vous pouvez le voir, les vnements existants sont nombreux et il faudrait plusieurs
heures de cours pour faire un exemple intressant et concret de chaque vnement. On vous
demandera donc de vous rfrer l'abondante littrature disponible dans MS Access.
Dfinissons un vnement Sur Entre de la liste des pays du formulaire frmClients de telle
faon ce qu'il redevienne blanc lorsque l'utilisateur ouvre la liste.
Il vous suffit de taper le code suivant l'endroit o vous savez:
Sub strPays_Enter()
strPays.BackColor=1677215
End Sub
Lorsque l'utilisateur sort de la liste droulante on met cette dernire en gris clair (pourquoi
pas?):
Sub strPays _Exit()
strPays.BackColor=12632256
End Sub

MS Office Access

419/564

Vincent ISOZ
L'vnement qui a lieu lorsque l'utilisateur sort d'un champ de formulaire aprs avoir chang
sa valeur est l'vnement: APRES MAJ (Mise A Jour)
Voyons maintenant les vnements du clavier. Nous allons faire en sorte que lorsque
l'utilisateur fait la combinaison de touches CTRL+1 dans les champs strCanton et strPays se
remplissent automatiquement en fonction de notre choix.
Voici le code saisir dans l'vnement du champ ville:
Sub strCanton_KeyDown(KeyCode as Integer, Shift as Integer)
If KeyCode = 49 and Shift=2 then
strCanton = "Vaud"
strPays = "Suisse"
End If
End Sub
Evidemment, par choix cette combinaison de touches ne fonctionne que dans le champ
strCanton et non pas dans le formulaire en entier. Pour ce faire, nous pouvons taper le code
suivant:
Sub Form_KeyDown(KeyCode as Integer, Shift )
If KeyCode = 49 and Shift=2 then
strCanton = "Vaud"
strPays = "Suisse"
End If
End Sub
Simple non ?
Quand l'utilisateur essaie de sauver un enregistrement, l'vnement Aprs MAJ s'excute.
Ecrivez le code suivant:
Sub Form_BeforeUpdate(Cancel as Integer)
'Si l'utilisateur entre un adresse on fait un check sur le CP
Dim bytchoice as Byte
If IsNull(strRue) Xor IsNull(strNPA) Then
bytchoice = msgbox("Vous avez oubli le NPA. Sauvegarder quand
mme?", vbquestion+vbokcancel, "Message")
If bytchoice = vbcancel Then
'On pointe le focus sur le NPA
strNPA.SetFocus
'On annule l'enregistrement
Cancel = True
End If
End If
End Sub

MS Office Access

420/564

Vincent ISOZ

19.24 Fonctions
Maintenant intressons nous un petit peu aux fonctions et voyons leur utilit. Si vous ouvrez
le notre formulaire frmClients et passez en mode cration. Si vous descendez l'aide de la
barre dfilement vous verrez la chose suivante:

On va s'intresser au code contenu dans le champ Nom Contact et le remplacer par un appel
de fonction de notre cr.
Basculez en mode VBAE et tapez le code suivant:
Function Fullname() As String
Fullname = Prnom & " " & Nom
End Function
Rappel: Le "private" force la fonction tre reconnue uniquement dans ce formulaire.
Maintenant en lieu et place du code barbare et peu esthtique du champ de formulaire, tapezy:
=FullName()
Avouez que c'est plus esthtique quand mme!
Si vous souhaitez utiliser une fonction (qui peut faire plusieurs milliers de lignes de code car
il n'y a pas de limite l'imagination) dans plusieurs formulaires il faudra remplacer le
"Private" par "Public".

19.25 Gestion des erreurs


Nous avons dj tudi la gestion des erreurs lors de l'tude de la structure du code VBA
(rappelez-vous du code On Error GoTo GestionErreurs). Il y a cependant d'autres gestions
d'erreurs dans Access. Rappelons le message qui apparat si notre utilisateur essaie de valider
un nouvel enregistrement sans spcifier le nom du client:

MS Office Access

421/564

Vincent ISOZ
Ce qui il faut le dire, est trs clair pour un non-initi
Changeons un peu cela. Passez le formulaire en mode cration et affichez les proprits
vnementielles du formulaire. Il y a un champ qui se nomme Sur erreurs (il est presque en
dernier dans la liste). On va y taper du code VBA de faon avoir la chose suivante:
Sub Form_Error(DataErr As Integer, Response As Integer)
MsgBox "Erreur de saisie! Veuillez contacter votre responsable informatique",
vbRetryCancel + vbCritical, "Message"
Debug.Print "DataErr= "; DataErr
End Sub
Evidemment, nous pouvons faire beaucoup mieux mais partir de l il suffit d'utiliser son
imagination et de la faire correspondre au cahier des charges.
Mais il reste un problme c'est que l'on a un seul et unique message pour toutes les erreurs?
Eh bien, maintenant le code du debug.print va nous permettre d'identifier le numro de
l'exception (ou erreur) engendre pas Access. Comme vous pouvez le voir il s'agit de l'erreur
3314 qui est l'erreur gnre par dfaut lorsqu'un champ obligatoire n'a pas t rentr. Ds
lors, avec cette mthode on peut faire quelque chose de beaucoup mieux comme:
Sub Form_Error(DataErr As Integer, Response As Integer)
Const ErrFielrequired = 3314
If DataErr = ErrFielrequired Then
MsgBox "Erreur de saisie! Veuillez contacter votre responsable informatique",
vbRetryCancel + vbCritical, "Message"
Response=acDataErrContinue
Else
'Force les messages d'erreurs standards d'Access
Response = acDataErrDisplay
End If
End Sub

19.26 Calendriers
Rappelez-vous de la requte que nous avions cre avec le formulaire:

Le systme tait bon mais avec un formulaire de type calendrier par fomulaire partir d'un
certain moment cela devient indigeste non ?
MS Office Access

422/564

Vincent ISOZ
Avec nos connaissances actuelles nous allons pouvoir considrablement allger le systme
afin d'avoir qu'un seul formulaire.
La procdure est la suivante:
Dans un module nomm modCalendar crivez le code suivant:
'Varaible globale
Public global_value As Integer
Public Sub RmpFormulaire(insert_value As Integer)
global_value = insert_value
End Sub
Dans le code du bouton d'ouverture du premier calendrier du premier champ rajoutez au dbut
(il faut changer la valeur passe en paramtre chaque fois entre paranthses):
Public Sub btnNomBouton_Click()
modCalendar.RmpFormulaire(1)
End Sub
et faites de mme avec le deuxime bouton du deuxime champ mais cette fois avec la valeur
(2) par exemple. Enfin, dans l'vnement OnClose du calendrier saisissez cette fois le code:
Private Sub Form_Close()
If global_value = 1 Then
Forms!frmNomFormulaireAvecDate!NomChampDateDbut = NomCalendrier.Value
Else
Forms!frmNomFormulaireAvecDate!NomChampDateFin = NomCalendrier.Value
End If
End Sub
Pour ceux qui n'aiment pas le VBA, il est toujours possible d'utiliser une petite macro simple
(alternative). Effectivement, sur le formulaire frmRapport contenant les deux boutons pour
ouvrir le calendrier nous avons un champ texte masqu l'utilisateur et nomm txtCalendrier.
Considrons le formulaire frmCalendrier avec le calendrier objCal ci-dessous avec une macro
macCalendrier execute la fermeture du formulaire:

MS Office Access

423/564

Vincent ISOZ

La macro macCalendrier contient:

La procdure est la suivante:


1. Lorsque l'utilisateur clique sur le bouton qui ouvre le formulaire contenant le
calendrier, la macro macCalendrier.OuvreFormtxtDebutPeriode est execut et fait un
OpenForm du formulaire contenant le calendrier.
2. Le formulaire avec le calendrier s'ouvre ensuite l'cran et l'utilisateur clique sur une
des dates. Lorsqu'il ferme le calendrier, la macro FermeFormCalendrier est execute
et l'action SetValue effectue l'opration suivante:
Item: [Forms]![frmRapport]![txtCalendrier]
Expression: [Forms]![frmCalendrier]![objCal].[Value]
Cette action a pour effet de prendre la date slectionn dans le calendrier et de l'crire
dans notre champ masqu du formulaire d'origine.

MS Office Access

424/564

Vincent ISOZ
3. Quand le calendrier est ferm, la macro macCalendrier.OuvreFormtxtDebutPeriode
continue a s'executer. Elle va ensuite copier la valeur qui se trouve dans notre champ
masqu, dans le champ qui correspond au date de dbut de priode tel que:
Item: [Forms]![frmRapport]![txtDebutPeriode]
Expression: [Forms]![frmRapport]![txtCalendrier]
4. Ensuite la macro s'arrte et c'est termin

19.27 Identification
L'ide est de construire un formulaire d'identification (demandant un mot de passe), pour
limiter l'accs d'autres formulaires ou tats. Par exemple:
-

L'utilisateur ouvre un formulaire frmClients ou un tat rptClients

Au pralable, un formulaire Identification s'affiche. Tant que l'utilisateur n'a pas fourni
un mot de passe correct, il n'accde pas frmClients ou rptClients.

L'autre objectif est que ce formulaire soit rutilisable: pas question d'en crer un pour chaque
formulaire ou tat "protger" !
La procdure dveloppe dans les lignes qui suivent doit tre vue comme une protection
lmentaire. Si vous souhaitez vraiment scuriser votre base de donnes, consultez plutt le
chapitre consacr la scurit.
Pour des raisons de programmation vnementielle, nous simplifierons la gestion du mot de
passe en passant par une variable globale, laquelle indiquera si le mot de passe a t trouv ou
non par l'utilisateur:
Dans la fentre de Base de donnes, cliquez sur l'onglet Modules, puis sur le bouton Nouveau.
Tapez le code suivant dans le module:
Public blnPasswordOK As Boolean
Enregistrez le module sous le nom modPassword, par exemple.
On dclare ici une variable globale (donc visible depuis tout endroit de la base de donnes).
Cette variable est boolenne: elle vaudra False (Faux) tant que le mot de passe n'est pas
trouv, et True (Vrai) si le mot de passe a t tap correctement.

MS Office Access

425/564

Vincent ISOZ
Construisez maintenant le formulaire d'identification. Le formulaire comporte 3 objets
principaux, dtaills ci-dessous.
Il sera enregistr sous le nom frmPassword.
Nom de l'objet

Type d'objet

Icne

Remarques

txtMotDePasse

Zone de texte

C'est dans cette zone que sera tap le


mot de passe.
Faites apparatre les proprits de cet
objet et faites en sorte que la proprit
Masque de saisie soit rgle sur "Mot
de passe" (ceci a pour effet d'afficher
uniquement des astrisques lors de la
saisie).

btnOK

Bouton de
commande

Le bouton de validation. C'est ce


bouton qui doit vrifier que le mot de
passe saisi est correct.

btnAnnuler

Bouton de
commande

Un bouton pour fermer le formulaire


si on ne connat pas le mot de passe.

Si le formulaire frmPassword s'ouvre, c'est qu'un mot de passe va tre demand puis vrifi.
On suppose donc qu' l'ouverture, le mot de passe n'est pas encore connu.
1. Ouvrez le formulaire frmPassword en mode Cration.
2. Faites apparatre les proprits du formulaire, et cliquez sur l'onglet Evnement.
3. "Entrez" dans l'vnement Sur ouverture, et faites en sorte qu'il reprenne le code
suivant:
Sub Form_Open(Cancel As Integer)
'Rinitialiser l'tat du mot de passe
' (blnPasswordOK est une variable globale)
blnPasswordOK = False
End Sub
Le code du bouton OK:
1. Faites apparatre les proprits du bouton btnOK, et cliquez sur l'onglet Evnement.
2. "Entrez" dans l'vnement Sur clic, et tapez ce qui suit:
Sub btnOK_Click()
If IsNull(Me.txtMotDePasse) Then
MsgBox "Tapez un mot de passe !", vbInformation
Me.txtMotDePasse.SetFocus
Exit Sub
End If
If Me.txtMotDePasse = "TopSecret" Then
MS Office Access

426/564

Vincent ISOZ
' Fermer la bote de dialogue "Identification"
DoCmd.Close
blnPasswordOK = True
Else
MsgBox "Mot de passe incorrect.", vbExclamation
Me.txtMotDePasse.SetFocus
End If
End Sub
Attention!!! Grer les utilisateurs et les mots de passe directement dans VBA est un
dgueulasse comme mthode. Il vaut mieux avoir une table aloue ce travail l.
Comme vous le voyez, 2 conditions sont appliques:
1. La premire vrifie qu'un mot de passe a bien t tap, et ramne sinon sur la zone de
saisie.
2. La seconde vrifie que le mot de passe est exact, et ferme le formulaire si c'est le cas.
Sinon, un message est affich, et l'utilisateur est nouveau ramen sur la zone de
saisie.
Comme il a t dit plus haut, il ne s'agit pas d'une scurit ultime ! Vous notez que le mot de
passe est simplement tap en clair dans le code VBA.
Vous pouvez amliorer le tout en crant une table de mots de passe, et en la lisant par ADO,
DAO, SQL ou une fonction de domaine (ce que vous voulez, quoi !), mais dans ce cas,
n'oubliez pas que l'utilisateur peut y accder encore plus facilement.
Le code du bouton Annuler:
Ce code sert juste fermer le formulaire. Il suffit donc d'crire:
DoCmd.Close
Rappelez-vous que la variable blnPasswordOK a t rgle False lors de l'ouverture du
formulaire. Par consquent, un appui sur le bouton Annuler suppose galement que
l'utilisateur n'a pas trouv le mot de passe.
Maintenant que la gestion du mot de passe est en place, il suffit d'y faire appel lorsqu'on ouvre
un formulaire ou un tat quelconque.
1. Ouvrez un formulaire ou un tat.
2. Faites apparatre les proprits (notamment les vnements) de ce formulaire ou de cet
tat.
3. Programmez l'vnement Sur ouverture comme suit:
Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm "frm Password", acNormal, , , , acDialog
Cancel = Not blnPasswordOK

MS Office Access

427/564

Vincent ISOZ
End Sub
Le paramtre acDialog est important:

acDialog ouvre un formulaire en mode "Bote de dialogue" (formulaire dit "modal").


Le premier effet est qu'il est impossible de faire quoi que ce soit tant que frmPassword
n'est pas ferm.

Le second effet se produit dans le code VB ci-dessus. La ligne Cancel = Not


blnPasswordOK ne sera excute qu' la fermeture de frmPassword. De cette faon,
on est sr que le rsultat de la variable blnPasswordOK a t dfini par frmPassword.

Essayez d'enlever acDialog pour voir !


Par ailleurs, c'est la ligne Cancel = Not blnPasswordOK qui annule l'ouverture du formulaire
ou de l'tat. Cancel est une variable analyse par Access la sortie de l'vnement
Form_Open(). Si Cancel = True, l'vnement est annul (ou plutt, l'ouverture est annule). Si
Cancel = False, les vnements s'enchanent comme d'habitude. Dans notre cas, il faut annuler
si le mot de passe n'a pas t trouv.
Double-cliquez maintenant sur le formulaire ou l'tat "scuris": la bote d'identification
s'affiche au pralable, et vous devez taper le mot de passe correct. Ceci fonctionne galement
si le formulaire ou l'tat sont ouverts via Visual Basic Application.
Bien sr, ceci n'empche pas d'ouvrir vos formulaires en mode Cration, ni d'accder aux
tables ou aux requtes. Pour amliorer le tout, vous pouvez enregistrer votre base au format
.mde (menu Outils / Utilitaires de base de donnes ; ceci bloquera l'accs aux formulaires,
tats et modules ; conservez surtout votre original .MDB !) comme nous l'avons dj spcifi
plus d'une fois.
Encore une fois, tout ceci n'est qu'une protection lmentaire, mais il est vrai que a peut
suffire dans certains cas de figure...
Si nous avions choisi l'option de grer les mots de passe et utilisateurs via une table, la
mthode est tout aussi simple avec juste une petite variante. Il faut d'abord crer une table du
tblUsers du type suivant:

et dans le code VBA de l'vnement btnOK_Click de changer le vrification du mot de passe


par la commande suivante qui va compter s'il l'entre correspond au moins un
enregistrement de la table tblUsers:
intNombre = DCount("[strUser]", "tblUsers", "[strUser] = '" & fldLogin.Value & "' AND
[strPass]='" & fldPassword.Value & "'")
Aprs, il suffit d'utilisr intNombre comme il convient.

MS Office Access

428/564

Vincent ISOZ

19.28 Utilisation de la scurit avec VBA


Voici un inventaire non-exhaustif de quelques procdures VBA trs utiles lies la scurit:
'***********************
'Changement du mot de passe de la base de donnes courante
'***********************
Sub ChangementPass()
CurrentDb.NewPassword "Ancien_pass", "Nouveau_pass"
End Sub
'***********************
'Changement du mot de passe Changement du mot de passe de l'utilisateur courant
'***********************
Sub ChangementPassUser()
With DBEngine.Workspaces(0)
.Users(.UserName).NewPassword "ancienmotdepasse", "nouveaumotdepasse"
End With
End Sub
'***********************
'Rcuperer le nom de l'utilisant courant dans Access
'***********************
Sub RecupUserAccess()
MsgBox Application.CurrentUser
End Sub
'***********************
'Rcuperer le nom de l'utilisant courant dans Windows
'***********************
Sub RecupUserWindows()
MsgBox Environ("USERNAME")
End Sub
'***********************
'Crer un groupe utilisateur
'***********************
Sub CreerGroupe()

MS Office Access

429/564

Vincent ISOZ
'ncessite librairie DAO
Dim wrk As Workspace
Dim grp As DAO.Group
Set wrk = DBEngine.Workspaces(0)
With wrk
Set grp = .CreateGroup("Mongroupe", "AZERty12456")
Groups.Append grp
End With
End Sub
'***********************
'Crer un utilisateur
'***********************
Sub CreerUtilisateur()
'ncessite librairie DAO
Dim wrk As Workspace
Dim usr As DAO.User
Set wrk = DBEngine.Workspaces(0)
With wrk
Set usr = .CreateUser("Jacques", "567AzeRTY89", "mon_motdepasse")
.Users.Append usr
End With
End Sub
'***********************
'Supprimer un groupe utilisateur
'***********************
Sub SupprGroupe()
'ncessite librairie DAO
Dim wrk As Workspace
Set wrk = DBEngine.Workspaces(0)
With wrk
.Groups.Delete "Mongroupe"
End With
End Sub
'***********************
'Supprimer un utilisateur
'***********************
Sub SupprUtilisateur()

MS Office Access

430/564

Vincent ISOZ
'ncessite librairie DAO
Dim wrk As Workspace
Set wrk = DBEngine.Workspaces(0)
With wrk
.Users.Delete "Jacques"
End With
End Sub
'***********************
'Affecter un utilisateur un groupe
'***********************
Sub AffectUserGroupe()
'ncessite librairie DAO
Dim Wrk As Workspace
Dim Usr As DAO.User
Dim Grp As DAO.Group
Dim grpAffect As DAO.Group
Set Wrk = DBEngine.Workspaces(0)
With Wrk
Set Usr = .Users("Jacques")
Set Grp = .Groups("Mongroupe")
Set grpAffect = Usr.CreateGroup("Mongroupe")
Usr.Groups.Append grpAffect
End With
End Sub
'***********************
'Lister des groupes et des utilsateurs
'***********************
Sub ListeGrpUsr()
Dim Wrk As Workspace
Dim Grp As DAO.Group
Dim Usr As DAO.User
Set Wrk = DBEngine.Workspaces(0)
With Wrk
Debug.Print "Groupes:"
For Each Grp In .Groups
Debug.Print " " & Grp.Name
Debug.Print " Contient les membres suivants:"
If Grp.Users.Count <> 0 Then
For Each Usr In Grp.Users
Debug.Print " " & Usr.Name
Next Usr
MS Office Access

431/564

Vincent ISOZ
Else
Debug.Print " Aucun Membre"
End If
Next Grp
End With
End Sub
'***********************
'Bloquer l'utilisation de la touche Shift au dmarrage (code activer qu'une seule fois)
'Pour ractiver la fonctionnalit, il faudra crer un bouton qui sera visible que par certains
utilisateurs
'***********************
Sub DisableShiftKey()
Dim db As DAO.Database
Dim prp As DAO.Property
Set db = CurrentDb
db.Properties.Delete "AllowBypassKey"
Set prp = db.CreateProperty("AllowBypassKey", dbBoolean, False, True)
db.Properties.Append prp
db.Properties.Refresh
Set prp = Nothing
Set db = Nothing
End Sub

19.29 Automation
19.29.1 Ouvrir MS Excel et y faire des tratements
Sub OuvreFichierExcel1()
Dim strPath, strFileName As string
Dim objExpWorkb As Workbook
strPath="C:\"
strFileName="FichierExcelOuEcrire.xls"
Set objExpWorkb = Excel.Workbooks.Open(strPath & strFileName)
objExpWorkb.Worksheets("sheet1").Range("A1").Value="a marche ! O_o"
objExpWorkb.Save
objExpWorkb.Close
Set objExpWorkb = Nothing
'Et on ouvre le fichier...
Call Shell("C:\Program Files\Microsoft Office\OFFICE11\excel.exe c:\test.xls", 1)
MS Office Access

432/564

Vincent ISOZ
End Sub

19.30 D.A.O. et ADO (avec MS Word ou MS Excel)


19.30.1 D.A.O
Les objets d'accs aux donnes sont trs utiles: ils permettent via VBA de manipuler les
donnes (recherches, mises jour, ajouts d'enregistrement) de base de donnes locales ou
distantes.
Dans les versions antrieures MS Access 2000, le seul modle d'accs aux donnes tait le
modle D.A.O.: Data Access Objects
Avec MS Access 2000 est apparu le modle A.D.O.: ActiveX Data Objects (pour plus de
dtails sur les technologies OLE se rfrer au cours VBA MS Excel du mme auteur).
Microsoft recommande d'utiliser le modle ADO pour les raisons suivantes:

Meilleure prise en charge de SQL Server

Meilleures performances en environnement client/serveur

Code VBA plus court et plus simple

Si vous dveloppez une nouvelle application, vous pouvez utiliser le modle ADO mme si
votre application accde une base de donnes locale de type MS Access. Si vous souhaitez
par la suite migrer vos donnes sous MSDE (Microsoft Data Engine) ou SQL Server, votre
code fonctionnera de faon optimale.
La bibliothque d'objets D.A.O. prend en charge deux environnements de bases de donnes
diffrentes, appeles "espaces de travail":
1. Les espace de travail "Microsoft Jet": ils permettent d'accder des bases de donnes
de type MS Access, des serveurs de bases de donnes ODBC (Open Database
Connectivity) et des bases de donnes externes telles que dBase, MS Excel et
Paradox accessibles via un pilote ISAM (Indexed Sequential Access Method)
2. Les espaces de travail ODBCDirect: ils permettent d'accder des serveurs de base de
donnes ODBC de faon "directe", c'est--dire sans charger le moteur de base de
donnes Microsoft Jet. 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.
Frquemment en VBA, on peut avoir besoin de lire ou de parcourir le contenu d'une table afin
d'y extraire ou d'y crire une donne et de manipuler cette dernire afin de l'afficher l'cran
ou de la remplacer par une autre.
Pour cela, le code devient un petit peu plus complexe. Prenons le morceau de code suivant:

19.30.1.1 Mthodes de lecture et criture de tables et requtes en DAO


Sub LireTable()
MS Office Access

433/564

Vincent ISOZ
'N'oubliez pas d'ajouter si ce code ne fonctionne pas la rfrence Microsoft D.A.O 3.6 (et
non pas la Access Object Library!)
'Variable qui contient ce que l'on veut insrer dans la table (string arbitrairement)
Dim NewData As String
'le dbs est ici pour signifier DataBaSe (cela simplifie la relecture)
Dim dbs As DataBase
'le rst est ici pour signifier RecordSeT (cela simplifie la relecture)
Dim rstNomLigne As DAO.Recordset
Dim tdfNomTable As TableDef
Dim fldNomTable As Field
T = Timer 'juste pour le plaisir de compter le temps que cela prend!
'Pour ouvrir virtuellement la table utilise par le formulaire en cours, il faut d'abord dfinir
la base de donne que l'on souhaite ouvrir (le 99% du temps il s'agit de la courante)
Set dbs = CurrentDb' 'Evidemment si ce sont des tables externes lies il faudra mettre le
chemin du fichier *.mdb
'On peut afficher dans la fentre d'excution chaque champ de la table
Set tdfNomTable = dbs.TableDefs!NomTable
For Each fldNomTable In tdfNomTable.Fields
Debug.Print fldNomTable.Name
Next fldNomTable
'Maintenant on souhaite ajouter une valeur dans un des champs
de la table donc on ouvre virtuellement cette dernire
Set rstNomLigne = dbs.OpenRecordset("NomTable")
rstNomLigne.AddNew
'Attention ici il faut faire attention selon la table remplir chacun des champs du recordset
rstNomLigne!NomChamp = NouvelleDonnee
rstNomLigne.Update
'Si la table se trouve dans un sous-formulaire il faut alors faire un refresh du formulaire
'principal en utilisant NomDuFormulaire.Refresh
msgbox "Routine excute en: " & Timer - T & " s"
'Maintenant on souhaite lire un des champs de la table ligne par ligne
Set Rs = dbs.OpenRecordset("tblLangues", dbOpenTable)
Rs.MoveFirst
Do Until Rs.EOF
MsgBox Rs![NomDuChamp]
'ou msgbox Rs.Fields(NomDuChamp)
Rs.MoveNext
Loop
End Sub
Si vous souhaitez faire des importations dans MS Word ou tout autre programme MS Office,
vous pouvez galement utiliser les proprits, objets et mthodes DAO de la mme faon que
vous utilisez les proprits, objets et mthodes Microsoft Word et que vous leur faites
rfrence. Une fois que vous avez cr une rfrence la bibliothque d'objets DAO, vous
pouvez ouvrir des bases de donnes, crer et excuter des requtes pour extraire un ensemble
d'enregistrements et renvoyer les rsultats Word.
Avant de pouvoir utiliser DAO, vous devez crer une rfrence la bibliothque d'objets
DAO. Pour ce faire, effectuez la procdure suivante.
MS Office Access

434/564

Vincent ISOZ
Activez Visual Basic Editor dans MS Word par exemple. Ensuite, dans le menu Outils,
cliquez sur Rfrences. Dans la zone Rfrences disponibles, cliquez sur Microsoft DAO 3.6
Object Library.
Si Microsoft DAO 3.6 Object Library n'est pas affich dans la zone Rfrences disponibles,
excutez le programme d'installation d'Office Professional pour installer Data Access Objects
pour Visual Basic. La bibliothque d'objets Microsoft DAO 3.6 Object Library n'est pas
incluse dans la version autonome de Word ou dans l'dition Microsoft Office 2000 Standard.
Cet exemple montre comment ouvrir la base de donnes depuis MS Word et insrer les
lments de la table tblArticles dans le document actif.
Sub EcrireAccess()
'N'oubliez pas d'ajouter la Microsoft D.A.O 3.6 (et non pas la Access Object Library!)
Set Db = DBEngine.OpenDatabase(Name:="C:\" & "base.mdb")
Set Rs = Db.OpenRecordset(Name:="tblPays")
'Attention Microsoft recommande lorsqu'on utilise RecordCount de faire un move last
avant (rs.MoveLast) et de refaire un MoveFirst juste aprs
For I = 0 To Rs.RecordCount - 1
Selection.InsertAfter Text:=Rs.Fields(1).Value
Rs.MoveNext
Selection.Collapse Direction:=wdCollapseEnd
Selection.InsertParagraphAfter
Next I
Rs.Close
Db.Close
Set Rs. = Nothing
Set Db = Nothing
End Sub
Utilisez la mthode OpenDatabase pour tablir une connexion une base de donnes et
l'ouvrir. Une fois la base de donnes ouverte, utilisez la mthode OpenRecordset pour accder
un tableau ou excuter une requte. Pour vous dplacer dans l'ensemble d'enregistrements,
utilisez la mthode Move. Pour rechercher un enregistrement donn, utilisez la mthode Seek
(cette mthode ne fonctionne pas sur une table lie). Si vous n'avez besoin que d'un sousensemble d'enregistrements et non de la totalit de l'ensemble d'enregistrements, utilisez la
mthode CreateQueryDef pour crer une requte personnalise afin de slectionner les
enregistrements rpondant vos critres. Lorsque vous avez fini d'utiliser une base de
donnes, nous vous conseillons de la fermer en utilisant la mthode Close, afin d'conomiser
de la mmoire.
Autre exemple qui consiste transformer en majuscules les caractres d'un champ de donne
nomme "Catgories" d'une table nomme "Employs":
Sub Majuscules()
Dim bd As Database
Dim rs As DAO.Recordset
Set bd = CurrentDB 'Evidemment si ce sont des tables externes lies il faudra mettre le
chemin du fichier *.mdb
Set rs=bd.OpenRecordset("Employs", dbOpenTable)
Rs.MoveFirst

MS Office Access

435/564

Vincent ISOZ
Do Until rs.EOF
Rs.edit
Rs![catgorie]=Ucase(rs![catgorie])
Rs.update
Rs.MoveNext
Loop
Rs.Close
End Sub
Autre exemple consistant mettre jour certains enregistrements en utilisant une requte
pour les slectionner. Le code est affecter un bouton de commande. Il permet d'augmenter
le salaire d'une catgorie d'employs d'un certain pourcentage. La catgorie et le pourcentage
d'augmentation sont slectionns dans deux zones de liste modifiable du formulaire (ce
dernier est bien entendu rfrenc par le mot-cl Me). Une requte paramtre "Employs
d'une catgorie" permet de slectionner les enregistrements mettre jour.
Sub MiseAJourAvecQuery()
Dim bd As Database
Dim rs As Recordset
Dim Q As QueryDef
Set bd = CurrentDb
If IsNull (Me![lstCatgorieAugmentation]) Or IsNull(Me![lstPourcentage]) Then
MsgBox "Vous devez slectionner une catgorie et un pourcentage", , "Attention erreur"
Else
Set q = bd.QueryDefs("Employs d'une catgorie")
q.Parameters(0)=Me![lstCatgorieAugmentation]
Set rs = q.OpenRecordset()
Rs.MoveFirst
'La structure For I=0 To ne fonctionne pour les requtes priori donc on passe par un
Do Until pour lire la requte ligne par ligne
Do Until rs.EOF
Rs.Edit
Rs![Salaire] = rs![Salaire].*(1+Me![lstPourcentage])
Rs.update
Rs.MoveNext
Loop
Rs.close
End if
End Sub

19.30.1.2 Mise jour de tables DAO


Crez le code V.B.A suivant qui met tous les noms des clients de la table tblClients en
majuscules:
Sub TransformMinMaj()
'Ce programme transforme les noms des clients de la table clients en majuscule
Dim dbs As Database
Dim rstCli As DAO.Recordset
Set dbs = CurrentDb
Set rstCli = dbs.OpenRecordset("tblClients", dbOpenTable)
MS Office Access

436/564

Vincent ISOZ
rstCli.MoveFirst
With rstCli
Do Until .EOF
.Edit
rstCli("strNom") = UCase(rstCli("strNom"))
.Update
.MoveNext
Loop
End With
End Sub

19.30.1.3 Recherche VBA DAO


Encore plus puissant l'exemple suivant va vous faire comprendre la troisime utilit des Index
que nous avions vus dans le cours avanc. Soit la table tblClients, nous aimerions crer un
moteur de recherche qui retourne le prnom du client (c'est un exemple simple mais
extensible quelque chose de beaucoup plus puissant assez facilement).
D'abord, la fonction .Seek de VBA utilise les index sur les cls de recherche pour fonctionner.
Ainsi, si nous souhaitons partir du Nom d'un client de la table tblClients renvoyer le Prnom
(strPrenom). Ainsi, il nous faut crer un index sur le champ nom que nous nommerons pour
l'occasion indNom:

Et voici le code:
Sub RechercheInfo1()
'Ce programme recherche une info
Dim dbs As Database
Dim rstCli As DAO.Recordset
Dim strCodeCli As String
Set dbs = CurrentDb
Set rstCli = dbs.OpenRecordset("tblClients", dbOpenTable)
With rstCli
strNomClient = InputBox("Saisissez le nom du client")
.Index = "indNom"
.Seek "=", strNomClient
If .NoMatch Then
MS Office Access

437/564

Vincent ISOZ
MsgBox "Client non trouv"
Else
MsgBox "Prnom: " & rstCli("strPrenom")
End If
End With
rstCli.Close
End Sub
Nous pouvons faire galement un autre moteur de recherche en utilisant la mthode Find:
Sub RechercheInfo2()
Dim dbs As DAO.Database
Dim rstCli As DAO.Recordset
Dim strsoc As String
Dim strCrit As String
Set dbs = CurrentDb
Set rstCli = dbs.OpenRecordset("tblClients", dbOpenSnapshot)
With rstCli
'saisi du nom client
strsoc = InputBox("Saisissez les 1re lettres de du nom du client")
.MoveLast
'Recherche
strCrit = "strNom 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("strNom")
.FindNext strCrit
If .NoMatch Then Exit Do
Loop
End If
End With
End Sub

19.30.1.4 Excution requte d'action VBA DAO


Il arrive parfois qu'on doive excuter une requte d'action de types mise--jour, suppression
ou cration depuis MS Word (typiquement pour le publipostage puisque Word ne peut se lier
une requte) ou MS Excel. Ds lors le code implment est au minimum le suivant (ici il
s'agit de requte d'action de cration de table dont il faut supprimer l'ancienne verions au
pralable):
Sub updatequery()
Dim db As Database
Dim query1 As QueryDef
Set db = OpenDatabase("c:\test.mdb")
db.Execute "DROP TABLE BackUp"
MS Office Access

438/564

Vincent ISOZ
Set query1 = db.QueryDefs("qryCreateBackUp")
'Sets reference to query name specified
query1.Execute 'runs query
Set db = Nothing
Set query1 = Nothing
End Sub

19.30.2 A.D.O
La bibliothque d'objets A.D.O. vous permet d'crire une application qui accde des
donnes situes sur un serveur de bases de donnes et de manipuler celles-ci par les biais d'un
fournisseur OLE DB.
ADO a l'avantage d'tre facile d'emploi, performant et d'utiliser peu de mmoire et d'espace
disque. ADO offre les fonctionnalits de base permettant de crer des applications
client/serveur et des applications Web.
Pour pouvoir utiliser la bibliothque d'objets ADO, il est ncessaire de cocher la rfrence
Microsoft ActiveX Data Objects 2.x Library:

dans la liste des rfrences aux bibliothques d'objets. Si cette rfrence n'est pas disponible,
vous devez slectionner le fichier MSA-DO15.dll parti du bouton de commande Parcourir.
OLE DB est une technologie permettant un accs uniforme aux donnes stockes dans
diverses sources d'informations: bases de donnes relationnelles ou non, messageries,
systmes de fichiers Quasiment toutes les donnes de l'entreprise sont accessibles par OLE
DB.
ADO est l'interface de rfrence de programmation utilis pour accder aux donnes de tous
les fournisseurs de donnes OLE DB:

MS Office Access

439/564

Vincent ISOZ

Exemples:
Voici le morceau de code ncessaire la cration d'une rfrence sur la base de donnes
courante en ADO:
Dim cncMagasin as ADODB.Connection
Set cncMagasin = CurrentProject.Connection
une base de donnes MS Access:
Dim cncMagasin as ADODB.Connection
Set cncMagasin = New ADODB.Connection
cncMagasin.Open Provider=Microsoft.Jet.OLEDB.4.0.; Data Source = C:\Magasin.mdb
une base de donnes SQL Server
Dim cnn as ADODB.Connection
cnn.Open Provider=SQLOLEDB.1;Data Source=SRV; Initial Catalog=NomBase;
Integrated Security=SSPI; Persist Security Info=False
Voici un exemple plus tendu o nous allons dans notre base de donnes Magasin changer le
champ strPays de la table tblClients pour mettre tous les "France" la valeur "Suisse":
Sub MiseAJour()
Dim cnc as ADODB.Connection
Dim strSQL as String
Set strMessage As String
Set cnc = CurrentProject.Connection
StrSQL = "UPDATE tblClients SET strPays = 'Suisse' WHERE strPays='France' "
cnc.Execute strSQL
'Demande l'utilisateur s'il veut confirmer la mise jour

MS Office Access

440/564

Vincent ISOZ
If MsgBox("Confirmez-vous la mise jour des pays ?", vbYesNo) = vbYes Then
'Enregistre les modifications
cnc.CommitTrans
Else
'Annule les modification
cnc.RollbackTrans
End If
End Sub
Le but des exercices qui vont suivre sera de faire communiquer MS Excel et MS Access dans
un sens unique et ensuite par complexit croissante, dans les deux sens.

19.30.2.1 MS Excel - lecture ADO


Crez un bouton dans MS Excel excutant le code suivant (qui se trouvera donc dans un
module de MS Excel), qui va chercher les noms et prnoms de la table clients, qui les
concatne et les crits dans la colonne A de la feuille en cours:
Sub LireDonnees()
Dim ADOCnn As ADODB.Connection, ADOTab As ADODB.Recordset
Dim Index As Long
Set ADOCnn = New ADODB.Connection
ADOCnn.Provider = "Microsoft.Jet.OLEDB.4.0"
'On ouvre la base de donnes clients
ADOCnn.Open ("c:/Magasin.mdb")
Set ADOTab = New ADODB.Recordset
'On ouvre la base table tblClients de la base de donnes Magasin.mbd
'Si on a des besoins basiques, on peut omettre les pointeurs adOpenDynamic et
adLockOptimistic
ADOTab.Open "tblClients", ADOCnn, adOpenDynamic, adLockOptimistic
Do While ADOTab.EOF = False
Index = Index + 1
Cells(Index, 1) = ADOTab!strPrenom & " " & ADOTab!strNom
ADOTab.MoveNext
Loop
ADOCnn.Close
Set ADOCnn = Nothing
End Sub

19.30.2.2 Curseurs adLockReadOnly, adLockPessimistic, adLockOptimistic,


adLockBatchOptimistic
Intressons nous aux curseurs mentionns dans le titre que vous avez rencontr dans le code
prcdent et donnons en une dfinition.
Sub LireDonnees()
Dim ADOCnn As ADODB.Connection, ADOTab As ADODB.Recordset
Dim Index As Long
Set ADOCnn = New ADODB.Connection
ADOCnn.Provider = "Microsoft.Jet.OLEDB.4.0"

MS Office Access

441/564

Vincent ISOZ
'On ouvre la base de donnes clients
ADOCnn.Open ("c:/Magasin.mdb")
Set ADOTab = New ADODB.Recordset
'On ouvre la base table tblClients de la base de donnes Magasin.mbd
ADOTab.Open "tblClients", ADOCnn, adOpenDynamic, adLockOptimistic
msgbox
Do While ADOTab.EOF = False
Index = Index + 1
ADOTab!strPrenom = Vincent
ADOTab.MoveNext
Loop
ADOCnn.Close
Set ADOCnn = Nothing
End Sub
Et mettez un point d'arrt sur la ligne suivante:

Avec adLockOptimistic lorsque le code est arrt un certain enregistrement (correspondant


un certaine ligne dans la table tblClients) l'aide du point d'arrt (simulant un long
traitement/calcul), les utilisateur peuvent quand mme modifier aussi le champ prnom et
valider la ligne. Mais le code plantera car il y aura conflit (il faudra donc faire de la gestion
d'erreurs) et ce mme si un autre champ le prnom est modifi! Il s'agit galement du type de
curseur pris par dfaut par Access quand aucun n'est spcifi.
Avec adLockPessimistic lorsque le code est arrt un certain enregistrement (correspondant
un certaine ligne dans la table tblClients) l'aide du point d'arrt (simulant un long
traitement/calcul), les utilisateur peuvent quand mme modifier aussi le champ prnom mais
pas valider la ligne. Le message suivant leur apparatra l'cran:

Donc l'utilisateur devra annuler ses modifications (avecla touche ESCdu clavier) sur la ligne
que le code est entraint de traiter. adLockPessimistic est donc un mode exclusif pour le code
VBA
Avec adLockReadOnly le code VBA ne marchera simplement pas car ce curseur ne permet
que la lecture d'informations par le code et non pas la modification. Les utilisateurs peuvent
bien videmment faire n'importe quelle modification et la valider lorsque le code ne fait que
de lire des informations.

MS Office Access

442/564

Vincent ISOZ
Avec adLockBatch les mises jour et blockages des lignes ne sont font qu'une fois le code
totalement termin avec une commande spciale.

19.30.2.3 MS Excel - Recherche ADO


L'objectif de cet exercice est de voir comment chercher des donnes dans la mme base
Magasin.mdb. Pour ce faire, nous demandons dans une cellule d'une feuille MS Excel (la
cellule C2), le nom que nous recherchons, pour en ressortir le prnom:
Sub ChercherDonnees()
Dim ADOCnn As New ADODB.Connection, ADOTab As New ADODB.Recordset
ADOCnn.Provider = "Microsoft.Jet.OLEDB.4.0"
ADOCnn.Open ("c:/Magasin.mdb")
'Si on a des besoins basiques, on peut omettre les pointeurs adOpenDynamic et
adLockOptimistic
ADOTab.Open "tblClient", ADOCnn, adOpenDynamic, adLockOptimistic
With ADOTab
.Find "Name Like '*" & Range("C2") & "*'"
If .EOF Then
MsgBox "Aucune donne trouve", vbInformation
Else
Range("C2") = !strNom & " " & !strPrenom
End If
End With
ADOCnn.Close
Set ADOCnn = Nothing
End Sub

19.30.2.4 MS Excel - criture ADO


Le but ici est similaire (toujours avec la mme base, toujours avec la mme table) mais
d'insrer des donnes (Nom dans la cellule C6, Prnom dans la cellule C7) dans la table MS
Access depuis MS Excel:
Sub InsererDonnes()
Dim ADOCnn As New ADODB.Connection, ADOTab As New ADODB.Recordset
ADOCnn.Provider = "Microsoft.Jet.OLEDB.4.0"
ADOCnn.Open ("c:/Magasin.mdb")
'Si on a des besoins basiques, on peut omettre les pointeurs adOpenDynamic et
adLockOptimistic
ADOTab.Open "tblClients", ADOCnn, adOpenDynamic, adLockOptimistic
If (Range("C6") = "" Or Range("C7") = "") Then
MsgBox "Veuillez saisir un nom ou un prnom S.V.P.", vbInformation
Else
ADOTab.AddNew
ADOTab!strNom = Range("C7")
ADOTab!strPrenom = Range("C6")
ADOTab.Update
End If
ADOCnn.Close

MS Office Access

443/564

Vincent ISOZ
Set ADOCnn = Nothing
End Sub

19.30.2.5 MS Word - Recherche ADO


Voici un exemple trs important d'utilisation d'ADO dans les entreprises!:
Il est donc possible d'aller chercher des donnes dans MS Access depuis MS Word et de les
insrer l'emplacement de signets placs dans MS Word. Cette possibilit tant souvent
utilise pour gnrer des documents complexes et beaucoup plus labors que les pauvres
rapports de MS Access
Voici le code permettant de se connecter notre base Magasin.mdb et qui peut aller chercher
le nom, prnom et adresse de la table tblClients partir d'une inputbox et les insrer dans trois
signets Word nomms respectivement Adresse, Anrede, Salutations:
Sub RechercheAdresses()
Dim ADOCnn As ADODB.Connection, ADOTab As ADODB.Recordset
Dim Name As String
Set ADOCnn = New ADODB.Connection
Name = InputBox("Avec quel nom souhaitez vous remplir le document?", "Recherche
d'Adresse", "Boltzmann")
If Name > "" Then
ADOCnn.Provider = "Microsoft.Jet.OLEDB.4.0"
ADOCnn.Open ("c:\Magasin.mdb")
Set ADOTab = New ADODB.Recordset
With ADOTab
'Si on a des besoins basiques, on peut omettre les pointeurs adOpenDynamic et
adLockOptimistic
.Open "tblClients", ADOCnn, adOpenDynamic, adLockOptimistic
.Find "strNom='" & Name & "'"
If Not .EOF Then
ActiveDocument.GoTo(What:=wdGoToBookmark, Name:="Adresse").Select
Selection.InsertAfter .Fields("strNom") & " " & .Fields("strPrenom") & vbCr
Selection.InsertAfter .Fields("strRue") & vbCrLf
Selection.InsertAfter .Fields("strPays") & "-" & .Fields("strNPA") & " " &
.Fields("strCanton")
ActiveDocument.GoTo(What:=wdGoToBookmark, Name:="Titre").Select
Selection.InsertAfter "Madame, Monsieur" & ","
ActiveDocument.GoTo(What:=wdGoToBookmark, Name:="Salutations").Select
Selection.InsertAfter "Madame, Monsieur" & ","
Else
MsgBox "Aucune donne trouve!", vbCritical
End If
.Close
End With
ADOCnn.Close
Set ADOCnn = Nothing
End If
End Sub

MS Office Access

444/564

Vincent ISOZ
videmement il est possible de faire beaucoup mieux avec des connaissances de VBA
supplmentaires (suivre un cours MS Word ou VBA pour cela).

19.31 DLookup syntaxe


La fonction RechDom (DLookup) est une fonction trs frquemment utilise en VBA pour
rechercher la valeur d'un champ particulier qui fait partie d'un jeu dfini d'enregistrements.
Par exemple, supposez que vous disposez d'un formulaire DtailsCommandes fond sur une
table Dtails Commandes et dont la zone de texte Rfrence produit affiche le champ
Rfproduit. Pour rechercher Nom du produit dans une table Produits partir de la valeur de la
zone de texte Rfproduit, vous pouvez crer une autre zone de texte et affecter l'expression
suivante sa proprit (regardez bien ou sont les guillemets et les apostrophes!):
1er exemple:
Dim Result as variant
Result = DLookup("NomProduit", "Produits", "Rfproduit ='" &
Forms!DtailsCommandes!Rfproduit & "'")
2me exemple:
Dim Result as variant
intSearch = 1
Result = DLookup("[CompanyName]", "Shippers", "[ShipperID] = " & intSearch)
3me exemple:
Dim Result as variant
Result = DLookup("FieldName","TableName","Criteria=4124")
4me exemple:
Dim Result as variant
Result = DLookup("FieldName","TableName", "Criteria='salut'")
5me exemple:
Dim Result as variant
Result = DLookup("FieldName","TableName", "Criteria= #31-12-2001 17:55:32#")
6me exemple:
Dim Result as variant
Result = DLookup("FieldName","TableName", "Criteria=" &
Forms!FormName!ControlName)
7me exemple:
Dim Result as variant
Result = DLookup("FieldName","TableName","Criteria= '" &
Forms!FormName!ControlName & "'")

MS Office Access

445/564

Vincent ISOZ
8me exemple:
Dim Result as variant
Result = DLookup("FieldName","TableName","Criteria= " &
Format(Forms!FormName!ControlName, "\#mm-dd-yyyy hh:mm:ss\#"))
9me exemple:
Dim Result as variant
Result = DLookup("FieldName","TableName","Criteria1= " &
Forms!FormName!Control1 & " AND Criteria2 = '"& Forms!FormName!Control2 & "'" & "
AND Criteria3 = #" & Forms!FormName!Control3 & "#")
Les syntaxes ci-dessus ont t prises sur le site web www.mvps.org (heureusement qu'il y en a
qui ont cherch avant nous)
Crez maintenant dans la base Magasin.mdb une table tblCrediteurs qui sera une copie de la
table clients au niveau de la structure des champs mais videz-y les enregistrements existants.
Crez une fomulaire frmCrediteurs permettant de remplir cette table de deux manires:
1. Dans une liste droulant la possibilit de choisir comme crditeur un individu qui est
client du magasin ou de saisir dans cette liste mme un individu qu'un n'est pas client
2. Si le crditeur est un client, tous les champs correspondants doivent se remplier
respectivement ce qui est indiqu dans la table tblClients sinon quoi l'utilisateur doit
pouvoir saisir les informations du crditeur.

19.32 tats
Si vous ouvrez la base Magasin.mdb il y a un tat normalement qui ressemble grosso modo
la figure reprsente ci-dessous:

MS Office Access

446/564

Vincent ISOZ

Ce qui est regrettable dans cet tat c'est que les enregistrements (un par ligne) ne sont pas
distinctivement spars par des couleurs par exemple (c'est le cas le plus frquent).
Si vous passez en mode cration vous avez une ligne de section nomme Dtail. Double
cliquez sur cette barre pour en afficher les proprits. Dans l'onglet des vnements activez
Sur impression et slectionnez l'option Gnrateur de code.
Saisissez-y le code suivant (attention il arrive parfois dans Access que si l'on ne passe pas par
la mthode indique dans le paragraphe suivante le code ne marche pas):
Sub Dtail_Print(Cancel As Integer, PrintCount As Integer)
Const conltGray = 13816530
If Dtail.BackColor = conltGray Then
Dtail.BackColor = vbWhite
Else
Dtail.BackColor = conltGray
End If
End Sub
A ma grande stupfaction et sans pouvoir donner d'explication, Microsoft dcider de
diffrencier le franais et l'anglais lors de la manipulation d'tats. Comme vous pouvez le voir
"Dtail" comporte un accent aigu !!!

19.33 Requtes
Voyons quelques exemples VBA de ce qu'il est possible de faire avec les requtes:

MS Office Access

447/564

Vincent ISOZ

19.33.1 Lecture du contenu d'une Query DAO


Le code ci-dessous va compter combien d'enregistrements il y a dans une query et lire un des
champs de la query un par un:
Sub majuscules()
nb = DCount("*", "qrySommeSorties")
MsgBox nb
Dim qdf As DAO.QueryDef
Dim rcs As DAO.Recordset
'rfrence la requte
Set qdf = CurrentDb.QueryDefs("qrySommeSorties")
Set rcs = qdf.OpenRecordset
rcs.MoveFirst
Do Until rcs.EOF
MsgBox rcs![tblArticleNb]
rcs.MoveNext
Loop
'libration de la rfrence
Set qdf = Nothing
End Sub

19.33.2 ReQuery
Nous allons ici limiter le contenu d'une liste (combo ou zone de liste) partir du contenu
d'une autre liste (utilisation du SQL et du VBA) sans utiliser les macros requery (dont nous
avions fait usage lors de notre tude des requtes).
Soit les tables lies selon le schma:

o: ID=AutoNum, pays=texte, idVille=nombre, strVille=texte


Considrons maintenant le formulaire suivant (le champ de type "combo" nomm "Pays" est
un "LookUp" simple):

L'objectif est d'adapter le contenu du combo Ville en fonction du choix du pays.


Pour ce faire, il suffit de crer un liste combo simple depuis la barre d'outils contrle (reli
aucune table, aucune requte ou autre).
MS Office Access

448/564

Vincent ISOZ
Supposons que:
1. le champ de liste combo "Pays" se nomme "strPays"
2. le champ de liste combo "Ville" se nomme "strVille"
Dans le procdure vnementielle "Sortie" du champ de liste combo "Pays", insrez le code
suivant (pour la procdure SQL on peut s'aider d'une requte qui affiche les villes en fonction
du paramtre "id_ville" puisque c'est ce que retourne le champ de liste modifiable pays):
Sub strPays_Exit(Cancel As Integer)
Dim strSQL As String
strSQL = "SELECT tbl_ville.strVille FROM tblPays INNER JOIN tblVille ON tblPays.ID
= tblVille.idVille WHERE (((tblVille.idVille)=" & Me!strPays
strSQL = strSQL & "))"
Me!strVille.RowSourceType = "Table/Query"
Me!strVille.RowSource = strSQL
strSQL = "SELECT strPays FROM tblPays"
Me!strPays.RowSourceType = "Table/Query"
Me!strPays.RowSource = strSQL
MsgBox "L'ajout a bien t effectu. Veuillez maintenant le saisir dans la liste"
End Sub
Ce systme est gnralisable n'importe quoi mais ne fonctionne pas avec les champs de type
texte !!! Pour sortir une information unique dans un champ de formulaire partir du script
prcdent, il faut utiliser une zone de liste et utiliser la procdure vnementielle "Sur
changement".
Maintenant que nous avons une petite ide de comment faire du VBA et du SQL poussons un
petit peu plus loin le sujet pour crer des formulaires de recherche multi-critres (concept trs
important dans Access et non disponible par assistant ce jour).

19.34 Choix multiple


Le but de l'exercice est le suivant: selon l'exemple gnrique ci-dessous, crez un rapport qui
affiche la liste des sorties dans un tat simple mais en rajoutant le fait que dans un formulaire,
l'utilisateur doit pouvoir dans une liste choix multiple slectionner les articles qu'il dsire
visualiser dans l'tat (dure: 1 heure).
.
Dim frm as Form, ctl As Control
Dim varItem as Variant
Dim strSQL as string
Set frm = Form!frmMyForm
Set ctl= frm!lbMultiSelectListbox
strSQL="Select * from Employees where [EmpID]="
'On suppose que la valeur de type long, [EmpID], est le champ contre lequel on se
'compare aux valeurs choisies dans la liste choix multiple
For Each varItem In ctl.ItemsSelected
strsSQL=srtSQL & ctl.ItemData(varItem) & " OR [EmpID]="
Next varItem

MS Office Access

449/564

Vincent ISOZ
'on enlve le dernier segment
strSQL=left$(strSQL,len(strSQL)-12))
.

19.35 Calendrier
MS Access ne contient toujours pas d'tat ou de formulaire adapt gnrer un calendrier
quel qu'ilsoit. Voici le code pour en gnrer un la vole dans votre base:
Public Function Getdate() As Variant
' edit to get what ever return you want
Dim stFRmName As String
stFRmName = CreateCalForm
Do Until IsDate(Forms(stFRmName).Tag) ' check to see if date selected
DoEvents
Loop
Getdate = Forms(stFRmName).Tag
DoCmd.Close acForm, stFRmName, acSaveNo
End Function
Public Function CreateCalForm() As String
Dim frm As Form
'creates form
Set frm = CreateForm
With frm 'set any additional form properties you need here
.Caption = "POP UP Calender"
.RecordSelectors = False
.NavigationButtons = False
.Width = 2.5
.Section(acDetail).Height = 3
CreateCalForm = .Name
End With
Call LoadControls(frm)
End Function
Public Function LoadControls(ByVal frm As Form)
Dim txt(42) As Control, ctlMonth As Control
Dim ctlYear As Control
Dim txtLeft As Integer, TxtTop As Integer
Dim xPos As Integer, yPos As Integer, X As Integer
Dim TxtHeight As Integer, TxtWidth As Integer
Dim stFRmNam As String
stFRmNam = frm.Name
'Adjust to size boxes. Could base on size of form
TxtHeight = 1000
TxtWidth = 1000
TxtTop = 1000
txtLeft = 5
'creates 6x7 grid of text boxes
For yPos = 1 To 6
For xPos = 1 To 7
MS Office Access

450/564

Vincent ISOZ
Set txt(X) = CreateControl(stFRmNam, acTextBox, , "", "", txtLeft, TxtTop, TxtWidth,
TxtHeight)
txtLeft = txtLeft + TxtWidth 'sets with of text boxes
'set any additional properties or events here
txt(X).OnClick = "=Clicked()" 'add on click event to each box
txt(X).Name = "d" & X + 1 'name boxes like an array
X=X+1
Next xPos 'next box
txtLeft = 5 'go back to left start position
TxtTop = TxtTop + TxtHeight 'drop down height
Next yPos 'next row
'create additional txtboxes to hold Month & year
Set ctlMonth = CreateControl(stFRmNam, acTextBox, , "", "", 100, 10, 1000, 300)
ctlMonth.Name = "txMonth"
Set ctlYear = CreateControl(stFRmNam, acTextBox, , "", "", 1100, 10, 1000, 300)
ctlYear.Name = "txYear"
'load module to load dates and open form
Call LoadModule(frm)
DoCmd.OpenForm stFRmNam
End Function
Public Function LoadModule(ByVal frm As Form)
Dim Mdl As Module
Dim stBld As String
'creates module
Set Mdl = frm.Module
'creates eventprocedures This is ugly to save space. You can see it better
'Once form is created click on design view
stBld = stBld & "Private Function LoadCal(dtMonth as integer, dtyear as integer)" &
vbCrLf
stBld = stBld & "Dim Curday as Variant, dtFirst as variant" & vbCrLf
stBld = stBld & "curday = DateSerial(dtyear, dtmonth, 1)" & vbCrLf
stBld = stBld & "dtFirst = curday" & vbCrLf
stBld = stBld & "me![txMonth] = Format(dtFirst, ""m"")" & vbCrLf
stBld = stBld & "me![txYear] = Format(dtFirst, ""YYYY"")" & vbCrLf
stBld = stBld & "Do Until curday = DateSerial(dtyear, dtmonth + 1, 1)" & vbCrLf
stBld = stBld & "'Paramtrer ici -1 pour systme amricain ou -2 pour europen" & vbCrLf
stBld = stBld & "me(""D"" & Day(curday) + WeekDay(dtFirst) - 2) = Day(curday) & "" ""
& Left(Format(Curday, ""DDDD"", vbMonday), 3)" & vbCrLf
stBld = stBld & "If Weekday(Curday, vbMonday) = 6 Or Weekday(Curday, vbMonday) = 7
Then" & vbCrLf & "me(""D"" & Day(Curday) + Weekday(dtFirst) - 2).BackColor =
RGB(255, 255, 0)" & vbCrLf & "Else" & vbCrLf & "Me(""D"" & Day(Curday) +
Weekday(dtFirst) - 2).BackColor = RGB(255, 255, 255)" & vbCrLf & "End If" & vbCrLf
stBld = stBld & vbCrLf & "curday = DateAdd(""d"", 1, curday)" & vbCrLf & "Loop" &
vbCrLf
stBld = stBld & "End Function" & vbCrLf
stBld = stBld & "Private Sub Form_Load()" & vbCrLf
stBld = stBld & "DoCmd.RunCommand (acCmdSizeToFitForm)" & vbCrLf
stBld = stBld & "Call LoadCal(Month(date),Year(date))" & vbCrLf & " End Sub" &
vbCrLf

MS Office Access

451/564

Vincent ISOZ
stBld = stBld & "Public Function Clicked()" & vbCrLf
stBld = stBld & "me.tag = txmonth & ""/"" & me.activecontrol.value & ""/"" & txYear" &
vbCrLf & "End Function"
stBld = stBld & vbCrLf & "Private Sub txMonth_AfterUpdate()" & vbCrLf
stBld = stBld & "call ClearCal()" & vbCrLf & "call LoadCal(me!txmonth, me!txYear)" &
vbCrLf
stBld = stBld & "End Sub" & vbCrLf
stBld = stBld & "Private Sub txYear_AfterUpdate()" & vbCrLf
stBld = stBld & "call ClearCal()" & vbCrLf & "call LoadCal(me!txmonth, me!txYear)" &
vbCrLf
stBld = stBld & "End Sub" & vbCrLf
stBld = stBld & "Private Sub ClearCal()" & vbCrLf
stBld = stBld & "Dim X as integer" & vbCrLf & "for x = 1 to 42" & vbCrLf
stBld = stBld & "me(""D"" & x) = """ & vbCrLf
stBld = stBld & "next x" & vbCrLf & "End Sub"
'can also use ( insertlines addfromfile addfromstring) in place of inserttext
Mdl.InsertText stBld
End Function

19.36 Connexion
Nous avons vu page 328 comment fractionner une base entre vue logique et utilisateur (tables
et interface). Cependant lorsqu'un fichier MDE est envoy un client et que l'ensemble des
menus et barre d'outils sont bloqus il faut pouvoir par le VBA redfinir le chemin de
connexion des tables chaque fois au dmarrage de la base en fonction du choix du client en
ce qui concerne la localisation du fichier contenant les tables.
Si nous supposons que vous ne pouvez intervenir physiquement chez le client ou distance
par prise de contrle du serveur et que vous ne pouvez laisser faire celui-ci le travail votre
place, la seule manire d'y remdier en connaissant l'avance le chemin du disque rseau vers
le fichier des tables est de lancer le code suivant au dmarrage de la base:
Sub Attache_Tables()
Dim db As Database
Dim TD As TableDef
Dim i As Integer, Rponse As Variant
Set db = DBEngine.Workspaces(0).Databases(0)
On Error GoTo ErrAT
Reponse = SysCmd(acSysCmdInitMeter, "Attache les tables", db.TableDefs.Count - 1)
'boucle sur toutes les tables, rattachant celles dont la chane de connection est non vide, les
autres tant des tables locales
For i = 0 To db.TableDefs.Count - 1
Set TD = db.TableDefs(i)
' si c'est une table attache, on essaie de la rattacher
If TD.Connect <> "" Then
MS Office Access

452/564

Vincent ISOZ
TD.Connect = ";DATABASE=" & ("k:\tables.mdb")
TD.RefreshLink
If Err <> 0 Then
MsgBox TD.Name
End If
End If
Reponse = SysCmd(acSysCmdUpdateMeter, i + 1)
Next i
DoCmd.Hourglass False
Reponse = SysCmd(acSysCmdClearStatus)
Exit Sub
ErrAT:
MsgBox "L'application n'a pas pu trouver le fichier tables.mdb sur le serveur K:\." &
Chr(13) & "Veuillez contacter le responsable de la base.", vbCritical + vbOKOnly
End Sub

19.37 Nouveauts VBA Access 2007-2010


Nous souhaitons ici donner des indications relativement des changements de comportement
de MS Access 2007 et 2010.
D'abord en ce qui concerne ADODB on ne peut plus coder une connexion comme nous le
voulons. Maintenant il est oblig de le faire proprement et d'utiliser le nouveau pilote
ACE.OLEDB (qui est le mme pour Access 2007 et 2010).
Par exemple:

19.37.1 Connecteur ADODB


Sub ConnectionBD()
Set ADOCnn = CurrentProject.Connection
Dim ADOTab As ADODB.Recordset
Set ADOTab = New ADODB.Recordset
'Si on a des besoins basiques, on peut omettre les pointeurs adOpenDynamic et
adLockOptimistic
ADOTab.Open "tblLastUpdate", ADOCnn, adOpenDynamic, adLockOptimistic
Do While ADOTab.EOF = False
ADOTab.Fields("datLastUpdate").Value = Now
ADOTab.MoveNext
Loop
ADOCnn.Close
Set ADOCnn = Nothing
'Nous mettons ensuite la meme information dans le lable apres avoir clique sur le bouton
End Sub

MS Office Access

453/564

Vincent ISOZ

19.37.2 Export flat-file (schema.ini)


Avant Access 2007/2010, le logiciel se rfrait aux paramtres de MS Windows pour les
paramtres d'export des fichiers flats files du type *.txt ou *.csv. Ceci n'est donc plus le cas
avec les nouvelles versions.
Le dveloppeur doit maintenant obligatoirement (avant c'tait conseill afin d'viter de
mauvais suprises mais pas obligatoire) crer un fichier schema.ini dans le mme dossier
que l o s'effectuera l'export et contenant les spcifications d'export (il en va de mme pour
l'import)!
Voici un exemple:
Sub SchemaIniExport()
filSchemaIni = FreeFile
Open CurrentProject.Path & "\schema.ini" For Output As filSchemaIni
Print #filSchemaIni, "[" & "MonFichier" & ".csv]"
Print #filSchemaIni, "ColNameHeader = False"
Print #filSchemaIni, "CharacterSet = 1252"
Print #filSchemaIni, "Format=Delimited(;)"
Close filSchemaIni
DoCmd.TransferText acExportDelim, "", "NomTableouRequeteAExporter",
CurrentProject.Path & "\MonFichier.csv"
End Sub

19.37.3 Mode Hors-Ligne/En-Ligne SharePoint


Une nouveaut majeure depuis Access 2007 est de pouvoir prendre le contenu d'une base de
donnes entirement base sur du SharePoint hors-ligne. Seul petit hic, le bouton n'est pas
facilement accessible pour un utilisateur non averti. Le mieux est donc de crer un bouton sur
le formulaire d'accueil de votre base de donnes. Ceci est alors facilement faisable en utilisant
l'uniquement commande VBA suivante:
Access.RunCommand (Access.AcCommand.acCmdToggleOffline)

MS Office Access

454/564

Vincent ISOZ

20 Confusions courantes
Dans MS Access suivant le niveau d'utilisation que nous faisons du logiciel, certaines
fonctionnalits peuvent paratre faire doublon avec d'autres.
Une analogie de se problme peut tre faire avec le tableaur MS Excel o finalement la
fonctionne MOYENNE ne sert objectivement pas grand chose puisqu'il s'agit d'une somme
divise par un comptage. Mais dans certaines situations particulires cela ne convient plus
et alors il faut opter pour d'autres solutions. Il en va de mme pour MS Access.
J'ai souhait dans le prsent chapitre faire un petit listing avec des captures d'cran des outils
que les utilisateurs trouvent trs souvent comme faisant doublons avec d'autres existants tout
en expliquant le pourquoi du comment.

20.1 Masques VS Valide Si, VBA & Null interdit


Souvent les crateurs de base de donnes dbutants considrent que dans les tables ou
formulaires, les masques des saisies, les contrles de validation, le null interdit, la chane vide
autorise ou le VBA font un peu doublon. Ils ont raison dans certaines situations!
Si nous prenons la situation suivante:

Donc par exemple notre masque de saisie des codes articles est le suivant:
>LLL-000;0;
Il est clair que jamais un utilisateur ne pourra crer d'articles sans mettre au moins 3 lettres et
3 chiffres. Ds lors vaut-il la peine de mettre un Valide Si du type suivant dans le champ de la
table:
NBCAR([strNbArticle])=7
La rponse est: Non. Quelque soit la situation (macros, VBA, SQL) les deux feront doublon.
Evidemment, les utilisateurs experts en VBA savent que ce langage permet de faire des
masques de saisie dans les formulaires beaucoup plus complexes et pertinents que le masque
de saisie par dfaut intgr dans les tables (ou celui intgr par dfaut dans les formulaires).
Pour ces utilisateurs, l'utilisation du masque de saisie standard de MS Access est donc un
doublon et de plus un outil inutile tant donn le peu de flexibilit dont il dispose.

MS Office Access

455/564

Vincent ISOZ
Enfin, si nous avons le masque de saisie standard ci-dessus ou gr avec du VBA est-il utile
de mettre l'option Null Interdit dans le champ concern de la table?
La rponse est: Cela dpend.
Effectivement, si vous savez que votre base de donnes ne sera jamais migre dans une autre
technologie, c'est inutile. Par contre si vous migrez votre base de donnes MS Access dans
Oracle ou SQL Server, tout ce qui est relatif aux masques de saisies ou critires de validations
sera supprim. A l'oppos, les proprits Null Interdit et Chane vide autorise sont
normalement un standard international dans le monde des bases de donnes relationnelles.
Enfin, tant donn le masque, il parat clair que mettre la proprit Chane vide autorise
Non fait doublon. Qu'en-est-il?
La rponse est: Cela dpend et ce pour exactement les mmes raisons que la proprit
Null Interdit.

20.2 Valide Si VS VBA & Null interdit


Prenons un exemple classique de validation Valide Si qui ne peut pas cette fois faire doublon
avec un masque de saisie standard (non VBA):
>=SrieDate(Anne(Maintenant());Mois(Maintenant())-2;Jour(Maintenant()))
comme nous pouvons le voir sur la capture d'cran ci-dessous:

La question tant de savoir si cela ferait doublon avec un code VBA qui ferait la mme type
de contrle mais dans un formulaire.
La rponse est: Oui. Mais le problme des Valide Si c'est qu'on ne peut pas le paramtrer
dynamiquement partir de variables qui seraient contenues dans des tables diffrentes (par
exemple ci-dessus le dlai de 2 mois devrait pas tre crit en dur!) et que les messages
d'erreurs sont catastrophiques en termes de plus value. Donc le VBA reste toutefois
indispensable et beaucoup plus flexible et puissant.
Maintenant une autre question se pose. Cette condition de validation semble imposer qu'une
date existe. Au fait, il n'en est rien. Donc la question de savoir si cette validation ferait
doublon avec un Null Interdit Oui la rponse est Non.
MS Office Access

456/564

Vincent ISOZ
Par contre, ceux qui choisiraient de mettre un masque de saisie standard (non VBA)
obligatoire pour la date du type:
00.00.0000;0;
et qui auraient activ le Null Interdit Oui se trouveraient alors dans une situation de doublon
puisque le masque de saisie ne laisserait pas l'utilisateur valider l'enregistrement sans aucune
date. Ceci dit, il est quand mme ncessaire de mettre le Null Interdit Oui si nous savons
qu'un jour la base de donnes MS Access sera migre sur une autre technologie car les
masques n'existent pas dans la majorit des progiciels de type SGBDR.

20.3 Null interdit VS VBA


La question ici est donc de savoir s'il vaut mieux mettre un champ en Null Interdit dans une
table ou de contrler avec du VBA qu'un champ ne soit jamais laiss vide dans un formulaire
ou de faire les deux.
La rponse est: cela dpend!
Effectivement dans certaines situations o des formulaires utilisent des macros de type
Actualiser sur des listes droulantes, l'option Null Interdit peut poser parfois des problmes
normes qu'il faut pouvoir contourner de manire trs astucieuse avec du VBA.
Dans des cas simples, le VBA sera prfr car le message d'erreur du Null Interdit est une
catastrophe et n'apporte aucune information comprhensible un utilisateur de base.
Le mieux est donc d'y associer les deux et d'empcher un utilisateur en faisant usage du VBA
de sortir d'un champ de saisie tant que ce dernier n'est pas inform et avant que le message
d'erreur du Null Interdit s'active (ou toute autre technique similaire).

20.4 Intgrit VS Limit la liste & VBA


Comme nous l'avons vu, l'intgrit rfrentielle permet de s'assurer de la cohrence des
donnes entre deux tables lies (fonction bijective). Cependant de nombreux participants
trouvent que l'activation de l'intgrit rfrentielle fait doublon avec l'option Limiter liste
disponble lorsque la relation est base sur une liste choix. D'autres encore trouvent l'un et
l'autre inutile puisque l'on peut mettre en place un contrle de l'intgrit avec le VBA.
La question est de savoir s'il vaut mieux mettre l'option Limiter la liste ou seulement
l'intgrit rfrentielle, ou les deux en mme temps, ou s'il vaut mieux tout contrler en VBA.
La rponse est: il vaut mieux avoir trop de contrle que pas assez
Ainsi, nous conseillons vivement d'activer l'option Limiter la liste et l'option Intgrit
rfrentielle afin d'viter des surprises dans l'volution future de la base de donnes au cas o
un utilisateur non confirm reprendrait le flambeau de son dveloppement (il arrive
frquemment qu'ils suppriment les proprits des listes droulantes mais trs rarement qu'ils
dsactivent l'option d'intgrit rfrentielle car ils n'en comprennent pas le sens).
En ce qui concerne le VBA il faut avouer que ce n'est que dans des cas particuliers et
complexes qu'on va traiter l'intgrit rfrentielle avec. Cependant le contrle d'intgrit sera
souvent beaucoup plus lent qu'avec le moteur de base de donnes d'Access.
MS Office Access

457/564

Vincent ISOZ

20.5 Cls primaires combines VS Macro Requery & VBA


Nous avons vu plus haut dans le prsent ouvrage le concept de cls primaires combines (ou
index combins) qui permet de s'assurerde l'unicit d'un couple de champ dans une table seule
ou dans une table de transition.
D'abord, il est vident encore une fois que les cls primaires combines (ou index combines)
peuvent tre substitus par du code VBA dans le cadre des contrles de saisie via les
formulaires et rduit ds lors la taille de l'index de la base de donnes. Mais le problme est la
complxit de mise en uvre du VBA qui ncessite beaucoup plus de temps et de
connaissance et aussi le fait que cette approche par le VBA ne fonctionnerait que pour des
saisies faites via des formulaires (alors que beacoup d'entreprises n'utilisent pas du tout les
formulaires).
Ensuite, en ce qui concerne l'usage d'une macro requery dans le cas des tables de transition en
lieu et place des cls primaires combines (ou index combines) et du VBA le problme est
au fait exactement le mme outre la complexit de mise en uvre.
Le mieux est au fait d'utiliser les trois comme cela se fait dans les bases de donnes
MS Access cres par des professionnels: les cls primaires et index combines sont dans le
modle physique de la base de donnes comme premire couche de scurit, ensuite dans les
formulaires il y a des macros requery pour les tables de transition cls primaires ou index
multiples et il y a aussi du VBA pour amliorer l'aide et le contrle et la gestion de l'erreur
lors de la saisie.

20.6 tat VS Formulaire A4


Dans certaines situations il est possible d'utiliser les formulaires Access en lieu et place des
tats puisque les formualaires peuvent aussi s'imprimer.
L'avantage d'utiliser les formulaires tant que l'on peut y mettre des boutons, des listes
droulantes et autres lments interactifs ce qui n'est pas possible sur un tat (du moins ma
connaissance).
Un exemple typique est le formulaire de notes de facture. Quand une personne cre une
nouvelle facture via le formulaire, elle pourrait aussi l'imprimer en mme temps qu'elle fait la
saisie (ou plus tard).
Les tats (rapports) seront eux plutt utilises pour agrger massivement des donnes sous
forme d'un rapport structur avec des regroupements, une page de garde, des numrotations
de pages, etc.

20.7 Scurit MDW VS Scurit VBA


La scurit MDW ayant disparu dans le nouveau format de fichier MS Access 2007 et
ultrieur la questio ne se pose plus vraiment. D'autant plus que ceux qui souhaitent rester en
*.mdb ou *.mde ne peuvent pas bnficier de certaines nouveauts trs importantes et utiles
de MS Access (tout ce qui est relatif MS SharePoint particulirement!).
Malheureusement le fait de devoir coder en VBA la scurit avec des tables multiples
contenant les noms des utilisateurs, les groupes de scurit, les types de scurit, les objets et

MS Office Access

458/564

Vincent ISOZ
sous-objets est un travail trs trs trs laborieux qui ncessite mme sur une petite base de
donnes un petite centaine d'heures de travail.
Ceci dit, pour ceux qui travaillent avec des fichiers *.mdb/*.mde associe des espaces de
travail de scurit *.mdw, le VBA reste quand mme un complment souvent indispensable.
Donc les deux ne font jamais effet de doublon et ce mme dans les anciens fichiers.
Enfin pour clore cette partie, il faut savoir qu'avant la 2007 il y avait une tendance
privilgier la scurit intgre - quand cela tait possible - car elle permettait d'conomiser
beaucoup de temps pour les dveloppeurs et donc beaucoup d'argent aussi mme si elle tait
moins flexible que le VBA.

MS Office Access

459/564

Vincent ISOZ

21 VBScript
Code pratique en VBScript (cours d'initiation de 2 jours) pour au dmarrage de l'ordinateur
(au fait l'ide est plutt d'utiliser les tches automatiques de Windows pour lancer le script
une heure donne sinon il suffit de mettre le fichier dans le dossier Dmarrage), ouvrir un
fichier MS Excel et excuter une macro spcifique l'intrieur de celui-ci:
Set accDB = CreateObject("Access.Application")
accDB.Application.Visible = True
accDB.OpenCurrentDatabase("c:\db1.mdb")
accDB.DoCmd.RunMacro "Macro1" 'pour lancer une macro
accDB.DoCmd.OpenModule "Module1","test" 'pour lancer une routine VBA
accDB.usercontrol = True 'si on enlve cette ligne Access se ferme
Si on veut faire un script qui se lance toutes les minutes:
Set accDB = CreateObject("Access.Application")
Do
WScript.Sleep (60*1000)
accDB.Application.Visible = False
accDB.OpenCurrentDatabase("c:\db1.mdb")
accDB.DoCmd.RunMacro "Macro1" 'pour lancer une macro
accDB.DoCmd.OpenModule "Module1","test" 'pour lancer une routine VBA
loop
Pour arrter le script dans le gestionnaire des tches il suffit d'arrter le process wscript

MS Office Access

460/564

Vincent ISOZ

22 XML XSL
Le XML fait l'objet d'un cours lui seul (2 jours) o l'on apprend traiter celui-ci dans les
logiciels MS Word 2003 (pour la cration de documents), dans MS Excel 2003 (pour la
gestion des donnes) et dans MS InfoPath 2003 (pour la cration de formulaires). Cependant,
dans le cadre d'un cours MS Access pour dveloppeurs, nous prendrons pour rfrence le
support de cours de "Sup. Info Paris" ou celui de Luc Van Lancker complt par les exercices
et la prsentation de Vincent Isoz.
Le mta-langage XML est absolument incontournable aujourd'hui dans les nouvelles
technologies s'impose comme standard international dans l'change des donnes. Ainsi, MS
Access est-il directement concern. Cette voie vers le XML que prennent tous les logiciels
dans le domaines de l'informatique se fait particulirement ressentir pour les utilisateurs
bureautiques avec la version MS Office 2003 o il est omniprsent mme dans MS Word et
MS Excel. Il convient ds lors d'acqurir des nouvelles mthodes de travail. Malheureuses,
l'inertie d'adaptation des utilisateurs moyens fait que probablement cette technologie sera
omniprsente chez le grand public vers 2010.
Dmonstration de l'utilisation simple XML:
1. Ouvrez une table quelconque dans un base Access (pour l'exemple nous nous sommes
servis d'une table nomme tblArticles)
2. Allez dans le menu Fichier/Exporter et choisissez l'option XML (si MS Access vous
demande de gnrer un fichier XSL et XSD laissez tomber !!! Le code y est
catastrophique et c'est inutilisable):

MS Office Access

461/564

Vincent ISOZ

3. Ouvrez le fichier XML rsultant dans Internet Explorer


Voici quoi ressemblera le rsultat:

Nous voyons que le code est beaucoup plus propre que celui gnr automatique par les
autres logiciels de la suite MS Office (ce qui est logique par ailleurs).
Voici une premire mthode pour exporter en XML:
Sub ExportTable()
'Ce code va crer un fichier XML, XSL et HTML
Application.ExportXML ObjectType:=acExportTable, DataSource:="tblArticles",
DataTarget:="C:\tblArticles.xml", PresentationTarget:="C:\tblArticles.xsl",
Encoding:=acUTF8
End Sub

MS Office Access

462/564

Vincent ISOZ

Pour pouvoir affichier correctement la liste des clients, vous devez soit utiliser le fichier
tblArticles.htm qui fait le lien entre les fichiers xml et xsl, soit modifier le fichier
tblClients.xml afin de lui associer le fichier tblClietns.xsl.
Une autre manire de gnrer un fichier XML de faon trs modulable partir de VBA est la
suivante (exemple gnrique pris sur Internet et facilement gnralisable):
Option Compare Database
Option Explicit
Sub MainXML()
Dim kvl_tabledef As New TableDef
Dim kvl_xml As Integer
Dim kvl_recordset As New ADODB.Recordset
Dim kvl_sql As String
Set kvl_tabledef = CurrentDb.CreateTableDef("stefan_ram_table")
kvl_tabledef.Fields.Append kvl_tabledef.CreateField("name", dbText)
kvl_tabledef.Fields.Append kvl_tabledef.CreateField("phone", dbText)
On Error Resume Next
CurrentDb.TableDefs.Append kvl_tabledef 'ajoute la table la base
kvl_recordset.Open "stefan_ram_table", CurrentProject.Connection, adOpenKeyset,
adLockOptimistic
kvl_recordset.AddNew
kvl_recordset.Fields("name").value = "Peter"
kvl_recordset.Fields("phone").value = "123456"
kvl_recordset.Update
kvl_recordset.AddNew
kvl_recordset.Fields("name").value = "Mary"
kvl_recordset.Fields("phone").value = "987654"
kvl_recordset.Update
kvl_recordset.Close
Set kvl_recordset = Nothing
kvl_xml = FreeFile()
Open "stefan_ram.xml" For Output As kvl_xml
Print #kvl_xml, "<table>"
kvl_recordset.Open "stefan_ram_table", CurrentProject.Connection, adOpenKeyset,
adLockOptimistic
Do While Not kvl_recordset.EOF
Print #kvl_xml, " <record>"
Print #kvl_xml, " <name>" & kvl_recordset.Fields("name") & "</name>"
Print #kvl_xml, " <phone>" & kvl_recordset.Fields("phone") & "</phone>"
Print #kvl_xml, " </record>"
kvl_recordset.MoveNext
Loop
Print #kvl_xml, "</table>"
Close kvl_xml
MS Office Access

463/564

Vincent ISOZ
kvl_recordset.Close
Set kvl_recordset = Nothing
End Sub
Inversement, il est possible d'importer une ficher XML par le code suivant (le nom de la table
sera celui du nom du fichier XML):
Sub ImportTable()
Application.ImportXML "C:\tblArticles.xml"
End Sub
C'est beau non.

22.1 Import XML


Soit le fichier tblFournisseursImport.xml que votre formateur vous met disposition.
Importez en les donnes dans la table tblFournisseurs existante en utilisant l'assistant manuel:

Exportez maintenant toute la table tblFournisseur au format XML sous le nom


tblFournisseurExport.
Si nous ouvrons ce fichier XML sortant dans un logiciel spcialis comme XMLSpy, nous
voyons bien que le fichier est conforme:

MS Office Access

464/564

Vincent ISOZ

Pour crer un validateur (car en XML un fichier conforme et un fichier valide sont deux
choses diffrentes), voici le fichier validateur XSD (obligatoire pour travailler dans MS Excel
et MS Word 2003):

et son schma XMLSpy correspondant:

MS Office Access

465/564

Vincent ISOZ

Il existe maintenant une infinit de possibilit pour mettre en forme notre fichier XML dans
MS Word ou Internet Explorer l'aide d'une feuille de mise en page XSL tel que:

Appliqu au fichier XML, cela devient dans Internet Explorer:

MS Office Access

466/564

Vincent ISOZ

Voil ce sera tout pour notre dcouverte du monde merveilleux de l'XML.


Bien sr, XML+Access+Word+Excel+InfoPath 2003 forment eux 5 dans les outils
classiques de la suite professionnelle MS Office un outil d'une puissance, et d'une compliance
sans gal !

MS Office Access

467/564

Vincent ISOZ

23 Reverse Engineering (rtro-conception)


Le but de cette partie du cours est d'apprendre utiliser MS Visio en tant qu'outil de
modlisation.
Remarque: Avoir suivi un cours MS Visio initiation au pralable est conseill.
Nous avons dj vu, au tout dbut de cet ouvrage, comment envoyer un modle logique de
donnes (MLD) de MS Visio un modle physique de donnes (MPD) MS Access.Quand
une base de donnes a t faite sans modlisation ou qu'il faut refaire cette dernire (comme
c'est souvent le cas cause du manque de connaissance des amateurs ou plus simplement
cause de l'volution des technologies), il est aussi important d'aller savoir importer le MPD
d'une base existante dans un MLD MS Visio.
Dans un premier temps, nous allons importer la base de donnes que nous avons cre
pendant ce cours. Pour ce faire, voici une mthode parmi tant d'autre.
1. Ouvrir le Panneau de configuration et ouvrir l'application permettant de grer les
sources de donnes ODBC (cet outil se trouve habituellement dans les outils
d'administration et ncessite une version "Pro" de MS Windows).

2. Aller dans l'onglet "Source de donnes utilisateur":

3. Cliquer sur ajouter et choisir un pilote ("driver" en anglais) de type MS Access et


cliquer sur suivant.

MS Office Access

468/564

Vincent ISOZ
4. Slectionner la base de donnes qui a t cre lors des cours prcdent et lui dfinir
un nom ("Notre base" par exemple) et en donner un descriptif.

5. Cliquer sur le bouton "OK" et fermer l'application des sources de donnes ODBC et
ouvris MS Visio
6. Dans MS Visio 2000 version Entreprise ou MS Visio 2002/2003 version Architecte
crer un nouveau document vide partir du modle de base de donnes.

7. Aller dans le menu "Database" et slectionner l'option "Reverse Engineer". Doit alors
apparatre la bote de dialogique ci-dessous:

MS Office Access

469/564

Vincent ISOZ

8. Effectuer les mmes choix de drivers et de donnes sources que ce qui est prsent sur
la figure ci-dessus et cliquer sur "Next".
9. MS Visio va vous demander le nom d'utilisateur et le mot de passe d'accs la base de
donnes. S'il n'y en a pas, cliquer simplement sur le bouton "OK".
10. MS Visio vous demande quels sont les types d'lments que vous souhaiteriez pouvoir
importer. Prenez tout dans un premier temps et cliquez nouveau sur "Next".
11. MS Visio vous demande maintenant parmi les types d'lments choisis prcdemment,
quels sont les objets que vous souhaiteriez importer dans MS Visio. Slectionnez tout
(bouton: "Select All") et cliquez sur le bouton "Next".
12. et cliquez sur le bouton "Finish"
13. Voil quoi devrait ressembler MS Visio une fois les oprations d'import effectues:

MS Office Access

470/564

Vincent ISOZ

24 A.S.P. et MDB
Pour se connecter une base de donnes en ASP 3.0 (le langage lui-mme fait l'objet d'un
cours de plusieurs semaines) il faut crer de nouveaux objets:
<%
Dim objConn
Set ObjConn = Server.CreateObject("AdoDB.Connection")
.
La mthode la plus souple pour se connecter une base de donnes quelconque est de crer
un D.S.N. (Data Source Name) en passant galement par l'application:

et par la fentre:

Mais avant de continuer, il faut placer la base MS Access dans un rpertoire donn du
wwwroot du serveur.
Comme il s'agit de crer une nouvelle source de donnes, cliquez sur le bouton Ajouter. Une
liste de pilotes apparat comme pour le chapitre prcdent, la diffrence qu'il faudra nommer
la connexion "magasin.dsn" comme ci-dessous:

MS Office Access

471/564

Vincent ISOZ

Cliquez sur Terminer et ensuite:

et cliquez sur OK. Dans le liste des Sources de donnes utilisateur, il y devra y avoir
magasin.dsn.
Nous disposons maintenant d'une source de donnes systme. L'appel l'objet Connection
s'effectue ainsi:
<%
Dim objConn
Set ObjConn = Server.CreateObject("AdoDB.Connection")
objConn.ConnectionString = "DSN=magasin.dsn"
.

MS Office Access

472/564

Vincent ISOZ
Il existe une alternative la source de donnes systme. Au lieu de placer les informations de
connexion dans cette source, vous pouvez les placer dans une chane de connexion.
<%
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" &
"DBQ=magasin.mdb"

24.1 Affichage de donnes


Voici un exemple de code se connectant la base et affichant le contenu simple de la table
tbl_articles:
<%@LANGUAGE="VBSCRIPT"%>
<html>
<body>
<%
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" &
"DBQ=C:\magasin.mdb"
objConn.Open
'Cre une instance d'objet Recordset et extrait cette information
'de la table tbl_articles.
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open "tbl_articles", objConn, , , adCmdTable
'Affiche le contenu de la table Amis
Do While Not objRS.EOF
Response.Write "<B> Nom de l'article: " & objRS("txt_nbarticle") & "</B><BR>"
Response.Write "Dscription: " & objRS("mem_designation") & "<BR>"
Response.Write "Numro de fournisseur: " & objRS("int_nbfournisseur") & ", " &
objRS("int_moq")
Response.Write "<BR> Prix l'unit: " & objRS("cur_unitprice") & "<BR><hr>"
'Dplacement vers la prochaine range de la table Amis
objRS.MoveNext
Loop
'Elimination des objets ADO
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
</body>
</html>

MS Office Access

473/564

Vincent ISOZ

24.2 Ajout de donnes


Voici un exemple de code se connectant la base, ajoutant un enregistrement et affichant le
contenu de la table tbl_articles dans un tableau HTML:
<% @Language=VBScript %>
<% Option Explicit %>
<%
'Attention l'excution de cet exemple ne marche qu'une unique fois tant donn la cl
primaire
'dans la table access sur txt_nbarticles
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" &
"DBQ=C:\Inetpub\wwwroot\asptraining\magasin.mdb"
objConn.Open
'Cre une instance d'objet Recordset et extrait cette information
'de la table Amis.
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
Const adCmdTable=2
Const adLockOptimistic=3
objRS.Open "tbl_articles", objConn, , adLockOptimistic, adCmdTable
%>
<HTML>
<BODY>
<%
objRS.AddNew
objRS("txt_nbarticle") = "INF-005"
objRS("mem_designation") = "Livre ASP3"
objRS("int_nbfournisseur") = "2"
objRS("int_moq") = "4"
objRS("cur_unitprice") = "70"
objRS.Update
objRS.MoveFirst
%>
<B>Entres dans la table</B>
<P>
<TABLE>
<TR>
<TD>Article</TD>
<TD>Dsignation</TD>
<TD>Numro fournisseur</TD>
<TD>M.O.Q.</TD>
<TD>Prix l'unit</TD>
</TR>
<% Do While Not objRS.EOF %>
<TR>
<TD><%=objRS("txt_nbarticle") %></TD>

MS Office Access

474/564

Vincent ISOZ
<TD><%=objRS("mem_designation") %></TD>
<TD><%=objRS("int_moq") %></TD>
<TD><%=objRS("cur_unitprice") %></TD>
</TR>
<%
objRS.MoveNext
Loop
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
</TABLE>
</BODY>
</HTML>

24.3 Mise jour d'enregistrements


Et pour mettre jour des enregistrements dj existants:
<% @Language=VBScript %>
<% Option Explicit %>
<%
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" &
"DBQ=C:\Inetpub\wwwroot\asptraining\magasin.mdb"
objConn.Open
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
Const adCmdTable=2
Const adLockOptimistic=3
objRS.Open "tbl_articles", objConn, , adLockOptimistic, adCmdTable
%>
<HTML>
<BODY>
<B>Entres dans la table AVANT mise jour</B>
<P>
<TABLE>
<TR>
<TD>Article</TD>
<TD>Dsignation</TD>
<TD>Numro fournisseur</TD>
<TD>M.O.Q.</TD>
<TD>Prix l'unit</TD>
</TR>
<% Do While Not objRS.EOF %>
<TR>
<TD><%=objRS("txt_nbarticle") %></TD>
<TD><%=objRS("mem_designation") %></TD>

MS Office Access

475/564

Vincent ISOZ
<TD><%=objRS("int_nbfournisseur") %></TD>
<TD><%=objRS("int_moq") %></TD>
<TD><%=objRS("cur_unitprice") %></TD>
</TR>
<%
objRS.MoveNext
Loop
objRS.MoveFirst
objRS("txt_nbarticle") = "gen007"
objRS("mem_designation") = "Livre ASP.Net"
objRS("int_nbfournisseur") = "5"
objRS("int_moq") = "5"
objRS("cur_unitprice") = "120"
objRS.Update
objRS.MoveFirst
%>
</TABLE>
<P>
<B>Entres dans la table APRS mise jour</B>
<P>
<TABLE>
<% Do While Not objRS.EOF %>
<TR>
<TD><%=objRS("txt_nbarticle") %></TD>
<TD><%=objRS("mem_designation") %></TD>
<TD><%=objRS("int_nbfournisseur") %></TD>
<TD><%=objRS("int_moq") %></TD>
<TD><%=objRS("cur_unitprice") %></TD>
</TR>
<%
objRS.MoveNext
Loop
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
</TABLE>
</BODY>
</HTML>
Et pour supprimer un enregistrement:
<% @Language=VBScript %>
<% Option Explicit %>
<%
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};" &
"DBQ=C:\Inetpub\wwwroot\asptraining\magasin.mdb"

MS Office Access

476/564

Vincent ISOZ
objConn.Open
Dim objRS
Set objRS = Server.CreateObject("ADODB.Recordset")
Const adCmdTable=2
Const adLockOptimistic=3
objRS.Open "tbl_articles", objConn, , adLockOptimistic, adCmdTable
%>
<HTML>
<BODY>
<B>Entres dans la AVANT LA SUPRESSION:</B>
<P>
<TABLE border="1">
<TR>
<TD>Article</TD>
<TD>Dsignation</TD>
<TD>Numro fournisseur</TD>
<TD>M.O.Q.</TD>
<TD>Prix l'unit</TD>
</TR>
<% Do While Not objRS.EOF %>
<TR>
<TD><%=objRS("txt_nbarticle") %></TD>
<TD><%=objRS("mem_designation") %></TD>
<TD><%=objRS("int_nbfournisseur") %></TD>
<TD><%=objRS("int_moq") %></TD>
<TD><%=objRS("cur_unitprice") %></TD>
</TR>
<%
objRS.MoveNext
Loop
objRS.MoveFirst
objRS.Delete
objRS.MoveFirst
%>
</TABLE>
<P>
<B>Entres dans la APRES LA SUPRESSION:</B>
<P>
<TABLE border="1">
<% Do While Not objRS.EOF %>
<TR>
<TD><%=objRS("txt_nbarticle") %></TD>
<TD><%=objRS("mem_designation") %></TD>
<TD><%=objRS("int_nbfournisseur") %></TD>
<TD><%=objRS("int_moq") %></TD>
<TD><%=objRS("cur_unitprice") %></TD>
</TR>
<%
objRS.MoveNext
Loop

MS Office Access

477/564

Vincent ISOZ
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
</TABLE>
</BODY>
</HTML>

MS Office Access

478/564

Vincent ISOZ

25 P.H.P. et MDB
Considrons toujours la base de donnes Magasin.mdb avec la table suivante:

Contenant les donnes ci-dessous:

Crons ensuite un dossier nomm phpaccess dans notre sur notre serveur Apache (voir la
procdure avec le formateur) dans lequel vous mettrez la base de donnes Magasin et dans
lequel nous vous demandons de crer deux fichiers PHP vides pour l'instant: odbc.php et
query.php.
Avant de continuer installons le pilote ODBC tel que nous l'avons fait pour l'exemple en ASP:

MS Office Access

479/564

Vincent ISOZ

et validez le tout par OK. Ensuite, dans fichier odbc.php saisissez le code suivant (attention
la version du PHP !):
<?
$odbc = odbc_connect ('TestDB', 'root', '') or die( "Could Not Connect to ODBC Database!");
if (function_exists('odbc_fetch_array'))
return;
function odbc_fetch_array($result, $rownumber=-1) {
if (PHP_VERSION > "4.1") {
if ($rownumber < 0) {
odbc_fetch_into($result, $rs);
} else {
odbc_fetch_into($result, $rs, $rownumber);
}
} else {
odbc_fetch_into($result, $rownumber, $rs);
}
$rs_assoc = Array();
foreach ($rs as $key => $value) {
$rs_assoc[odbc_field_name($result, $key+1)] = $value;
}
return $rs_assoc;
}
?>
et dans le fichier query.php:
<?
include 'odbc.php';
$query = odbc_exec($odbc, "SELECT * FROM Customers") or die (odbc_errormsg());
while($row = odbc_fetch_array($query)){
echo "Customer First Name: ".$row['customer_first_name']."<br />";
echo "Customer Last Name: ".$row['customer_last_name']."<br />";
echo "Customer Email: ".$row['email_address']."<br />";
echo "<hr />";
MS Office Access

480/564

Vincent ISOZ
}
odbc_close($odbc);
?>
Tapez ensuite http://localhost dans votre navigateur Internet (exemple effectu avec EasyPHP
1.7):

Cliquez sur le dossier phpaccess et ensuite sur query.php. Le rsultat suivant devrait
apparatre l'cran:

MS Office Access

481/564

Vincent ISOZ

26 MS Infopath
Infopath est un des trois nouveaux lments de la suite MS Office System 2003 (InfoPath,
OneNote, Business Contact Manager). Il met trivialement en vidence la stratgie de
Microsoft de proposer des outils bureautiques performants de gestion et traitement de donnes
au format XML.
MS Infopath est un logiciel de cration de formulaires dont les possibilits sont infiniment
plus grandes que MS Word et mme Adobe Acrobat 6.0.
Nous allons ainsi faire deux exemples. Le premier sera quasi-statique simple ("plat") et
utilisera des connaissances accessibles presque n'importe qui. Le second exemple,
compltement dynamique, demandera des connaissances de MS Access.
Remarque: l'utilisation ayant t grandement simplifie depuis la sortie de son SP1 il est
important de savoir que les exemples donns ci-dessous ont t tirs des captures d'cran de la
version MS InfoPath 2003 SP1.

26.1 Ajout de donnes


Commenons par l'exemple simple. Nous allons crer un formulaire InfoPath qui permet
d'ajouter notre base Access manuellement de nouveaux fournisseurs (nous faisons donc
rfrence aux exemples donns concernant MS Access 2003 prcdemment).
Le but de ce document n'tat pas d'apprendre MS InfoPath mais de voir le lien qu'il y a entre
lui et le XML, je ne m'tendrai pas sur la manire de crer le formulaire en soi (c'est
accessible mme a quelqu'un qui dbute en informatique).
Mais avant de crer le formulaire, il nous faut le validateur XSD de la table tblFournisseurs
de notre base *.mdb. Rappelons qu'il est le suivante:

Maintenant, quand vous ouvrez MS InfoPath, dans le volet Office choisissez:

MS Office Access

482/564

Vincent ISOZ

et ensuite toujours dans le volet Office:

Dans la fentre qui apparat slectionnez:

et allez chercher le fichier XSD. Une fois ceci fait vous devriez avoir dans le volet Office:

MS Office Access

483/564

Vincent ISOZ

Il s'agit bien de la structure de notre XSD.


Ensuite, dans MS InfoPath choisissons un joli design pour commencer:

MS Office Access

484/564

Vincent ISOZ

Ensuite retournez dans Data Source et faites un glisser-dplacer du nud dataroot dans la
feuille en slectionnant Section with controls:

et voil la rsultat (aprs avoir un peu chang les texte des libells):

MS Office Access

485/564

Vincent ISOZ

Enregistrez les modification et fermez InfoPath. Faites ensuite un double clique sur le fichier
InfoPath:

et saisissez les donnes. Au besoin, en faisant cliquant sur la flche bleue, vous pouvez
ajouter des nouveaux enregistrements (c'est ce qui fait d'InfoPath un outil trs puissant):

et donc aprs avoir saisi quelques valeurs:

MS Office Access

486/564

Vincent ISOZ

L'utilisateur du formulaire clique sur Enregistrer:

et InfoPath propose automatiquement de sauvegarder les donnes en XML:

MS Office Access

487/564

Vincent ISOZ

et voici le fichier XML sortant:


<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.3" productVersion="11.0.5531" PIVersion="1.0.0.0"
href="file:///C:\Documents%20and%20Settings\Isoz\Mes%20documents\Professionel\Cours\XML\exo17(InfoPath2003)\Fournisseu
rs.xsn" language="fr" ?>
<?mso-application progid="InfoPath.Document"?>
<dataroot>
<tblFournisseurs>
<idFournisseur/>
<strNom>TSR</strNom>
<strRue>Ch. des vernets</strRue>
<intNbRue>8</intNbRue>
<intNpa>1006</intNpa>
<strCanton>Genve</strCanton>
<strDelaiLivraison>30</strDelaiLivraison>
</tblFournisseurs>
<tblFournisseurs>
<idFournisseur/>
<strNom>SSR</strNom>
<strRue>Burgstrasse</strRue>
<intNbRue>20</intNbRue>
<intNpa>8005</intNpa>
<strCanton>Zrich</strCanton>
<strDelaiLivraison>1</strDelaiLivraison>
</tblFournisseurs>
</dataroot>

Tout est parfait (mis part la ligne propritaire de Microsoft) pour un traitement par MS
Excel 2003, pour un formatage web par un XSL, pour une utilisation de pagination dans MS
Word 2003 ou pour un import dans MS Access 2003. Rien de nouveau donc de ce ct.
L'employ n'a qu'a envoyer ce document XML par e-mail son responsable ou des
collgues.

26.2 Echange de donnes


Nous allons maintenant faire un formulaire dynamique li directement la table
tblFournisseurs de notre base MS Access avec des listes droulantes, etc. etc. L'change des
donnes entre MS Access et MS InfoPaths se faisant par un flux XML.
Ouvrez InfoPath (SP1) et slectionnez:

MS Office Access

488/564

Vincent ISOZ

Dans le volet Office cliquez sur:

Afin que nous puissions nous connecter la base MS Access:

Ensuite la fentre suivante apparat (cliquez sur Next):

et aprs avoir slectionn tables.mdb slectionnez tblFournisseurs:

MS Office Access

489/564

Vincent ISOZ

et vous devez avoir:

Cliquez sur Next, donnez un nom votre connexion (Fournisseurs par exemple) et sur Finish.
Vous devrez avoir le rsultat suivant dans le volet Office:

MS Office Access

490/564

Vincent ISOZ

A gauche sur la feuille (InfoPath SP1), vous avez une zone Drag data fields here (vous
pouvez effacer la partie concernant la Query). Glissez-y le nud d:tblFournisseurs:

Quand vous glissez ici:

La bote de dialogue suivante apparat:

Dans la bote de dialogue, slectionnez Repeating Section with Controls. Vous aurez:

MS Office Access

491/564

Vincent ISOZ

Vous pouvez changer le nom des tiquettes.et supprimer le champ id Fournisseur (puisque
c'est un cl primaire AutoNumber dans notre base Access):

Maintenant nous aimerions que lorsque l'utilisateur cliquer sur Canton ou Pays que la liste des
cantons ou pays disponibles dans la base Access (dans les tables tblCantons et tblPays)
s'affiche l'cran (pour que l'utilisateur n'ait pas les saisir).
Pour ce faire, il faut aller dans le menu Tools/Data Connection:

MS Office Access

492/564

Vincent ISOZ

Addensuite Receive Data ensuite Database (Microsoft SQL Server or Microsoft Access
only) ensuite Select Database et allez chercher la base tables.mdb et la table tblPays:

Cliquez sur Next, donnez un nom la connexion et recommencez l'opration pour la table des
cantons. Vous aurez alors dans la fentre des connexions (Tools/Data connections) trois
connexions:

MS Office Access

493/564

Vincent ISOZ
Cliquez sur Close.
Pour relier les champs Cantons et Pays du formulaire InfoPath aux tables de la base Access
et les transformer en listbox voici comment il faut procder:
Il faut d'abord transformer les champs texte en Drop Down Listbox. Pour ce faire, bouton
droit et:

et idem pour les pays.


Maintenant il faut "peupler" les ListBox avec le contenu des tables de la base Access. Pour ce,
clique droit et:

MS Office Access

494/564

Vincent ISOZ
Ensuite:

Vous cliquez sur OK et vous faites idem pour les pays.


Vous enregistrez votre formulaire (*.xsn) et l'ouvrez par un double clique depuis votre
raccourci sur le bureau ou votre explorateur Windows (si lorsque vous l'ouvrez il vous dit que
les donnes se trouve sur un autre domaine vous validez par Oui):

MS Office Access

495/564

Vincent ISOZ

Cliquez sur une des ListBox et oh miracle:

et maintenant pour la saisie de donnes ? Eh ben c'est trs simple, on saisit le premier Record
et le deuxime (cliquez sur Insert Item) etc:

MS Office Access

496/564

Vincent ISOZ

et quand c'est fini, on clique sur:

on a:

on est forts hein

MS Office Access

497/564

Vincent ISOZ
Et si nous allons ouvrir notre table Access tblFournisseurs, nous avons bien:

Remarque: pour supprimer le bouton d'dition de MS InfoPath sur les postes clients allez dans
Tools/Options et activez Enable protection.
Voil pour les bases de MS InfoPath et XML.
Bien sr il faut avoir en tte que tout cela communique avec l'ensemble des produits de la
gamme MS Office 2003.

MS Office Access

498/564

Vincent ISOZ

27 MS SQL Server
27.1 Reverse engineering vers SQL server
Nous allons voir maintenant comment envoyer notre base de donnes MS Access vers SQL
Server. Pour l'exemple, nous disposons de MS Access 2003 en anglais, de notre base
Magasin.mdb habituelle et de MS SQL Server 2000 SP3 (le serveur s'appelant "ISOZ").
Rappelons que le schma de notre base est (grosso modo) le suivant:

Pour la migrer vers MS SQL Server nous allons dans le menu suivant:

MS Office Access

499/564

Vincent ISOZ

Ds lors la fentre suivante apparat:

Nous allons donc crer une nouvelle base de donnes sur notre Server SQL et nous cliquons
sur Next. La fentre suivante apparat o nous saisissons le nom du Serveur et le nom de la
future base (aucun paramtre de scurit n'a t dfini):

MS Office Access

500/564

Vincent ISOZ

Nous cliquons alors nouveau sur Next. MS Access nous demande alors quelles tables
doivent tre envoyes vers le serveur:

Nous les prenons bien videmment toutes et cliquons nouveau sur Next. La fentre suivante
apparat demandant si nous souhaitons prendre quelques proprits particulires de la base et
certaines manires de grer les relations entre les donnes:

MS Office Access

501/564

Vincent ISOZ

Sans rien changer cliquez sur Next. La prochaine fentre est trs intressant elle nous permet:
1. D'automatique lier le fichier *.mdb en cours afin de travailler sans presque rien
changer aux codes et requtes existantes
2. La seconde propose de crer un fichier *.adb c'est--dire les fichiers d'accs aux
donnes dont nous avions parl tout au dbut de ce document.

Sans rien changer, cliquez sur Finish. L'ordinateur va alors travailler pendant un petit
moment:

MS Office Access

502/564

Vincent ISOZ

Ensuite il va vous afficher un rapport, fermer votre fichier *.mdb, ouvrir automatiquement le
fichier *.adp et voil ce que vous aurez dans SQL Server Entreprise Manager:

Nous y retrouvons donc bien notre base Magasin avec toutes ses tables plus de nombreuses
tables relatives aux proprits de scurit de MS Access.
Voyons quelque chose de pertinant maintenant:
Cration d'une nouvelle vue partir du dossier Diagrams (bouton droit de la souris dessus et
New Diagram):

MS Office Access

503/564

Vincent ISOZ

Cliquez sur Suivant:

La fentre suivante apparat:

MS Office Access

504/564

Vincent ISOZ

Figure 8 Schma SQL Server


Nous voyons quelque chose d'intressant: toutes les relations qui n'utilisent pas l'ID autonumber ne sont pas reconnues dans SQL Server d'o la tout premire remarque que nous
avions fait au dbut. Mme si nous essayons de forcer les relations:

MS Office Access

505/564

Vincent ISOZ

Problme vident:

27.2 Connexion SQL server


Nous allons voir ici comment nous connecter une base de donnes SQL Server pour
rapatrier des informations dans une base Access du type *.mdb existante.
Pour cela il faut aller dans Fichier/Donnes Externes/Lier les tables:

et choisir l'option ODBC dans la liste droulante Type de fichier. apparat alors
automatiquement la bote de dialogue suivante:
MS Office Access

506/564

Vincent ISOZ

Cliquez sur Nouveau:

et choisissez le pilote SQL Server et cliquez sur Suivant. Ensuite, donnez un nom la
connexion:

MS Office Access

507/564

Vincent ISOZ

et cliquez sur Suivant:

et sur Terminer. Vous arrivez alors la boite de dialogue suivante:

MS Office Access

508/564

Vincent ISOZ

bien videmment il faut connatre les informations saisir Ensuite faites Suivant et laissez
(car c'est le cas majoritaire) les options par dfaut:

et la suite ncessite une connexion serveur sinon cela ne passera pas

MS Office Access

509/564

Vincent ISOZ

28 AS/400
Dans le genre base de donnes prhistoriques () il existe une technologie appele AS/400
encore utilise par certaines entreprises (qui n'ont aucun intrt changer et elles ont bien
raison!).
Pour ceux qui n'ont jamais vu quoi cela ressemble, en voici une image:

Ce que nous allons voir maintenant c'est comment se connecter une telle base de donnes.
Dans le panneau de configuration cliquez sur:

Ensuite, slectionnez dBase comme ci-dessous:

Cliquez sur Addet slectionnez le driver mis en vidence ci-desous:

MS Office Access

510/564

Vincent ISOZ

Attention! Si vous n'avez pas ce driver c'est que soit:


1. Vous n'avez pas install Microsoft Access avec toutes les options
2. Que votre ordinateur n'est pas jour!
3. Votre ordinateur ne reconnat pas que dans le domaine il y a un AS400
Dans la fentre qui suivra (dsol mais je n'ai pas d'AS400) il faudra dans l'onglet General
saisir un nom pour la connexion ODBC (typiquement on choisira AS400) et on spcifiera
l'adresse IP de l'AS400 dans le champ se situant sous la description de la connexion.
Attention! Enregistrez toujours une requte avant de l'excuter.

MS Office Access

511/564

Vincent ISOZ

Une fois ceci fait, en thorie il suffit de valider le tout et de retourner dans MS Access et aller
dans Fichier/Donnes externes et choisir Lier les tables:

et de choisir:

MS Office Access

512/564

Vincent ISOZ

et dans l'assistant qui suite de slectionner la connexion ODBC cre prcdemment.


Remarque: Si vous enregistrez des requtes AS400 au format *.dtf (gnres avec iSeries)
celles-ci ne peuvent malheureusement pas tre connectes directement MS Access Il faut
pour cela utiliser le fichier que gnre le *.dtf, fichier choisi lors de la cration du *.dtf mme
dans les options de l'AS400 (csv, txt, xls). S'il s'agit d'un fichier MS Excel, CSV ou TXt,
reportez vous au chapitre correspondant Liaison MS Excel/CSV.
Pour mettre jour automatiquement les requtes *.dtf qui gnreront les fichiers *.csv, *.txt
ou *.xls vous pouvez passer par le code VBA suivant:
Option Compare Database
'La ligne ci-dessous peut s'avrer indispensable si la requte dtf importe des millions de
donnes et que du code s'excute par la suite
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub ShellLogin( )
OpenDtf=Shell("Nom du fichier.dtf", 1))
Sleep 1000
End Sub

MS Office Access

513/564

Vincent ISOZ

29 Oracle Express 11.2g


Nous allons voir ici comment nous connecter une base Oracle Express 10g. Evidemment le
systme est toujours le mme
D'abord nous supposerons que le produit Oracle Database Express 10g est install et
fonctionnel et que vous connaissez votre nom utilisateur et mot de passe:

Dans notre installation, le nom d'utilisateur sera system et le mot de passe sera root (choisi au
dbut de l'installation).
D'abord dans MS Access il faut aller dans Fichier/Donnes Externes/Lier les tables...:

MS Office Access

514/564

Vincent ISOZ

et choisir ODBC:

MS Office Access

515/564

Vincent ISOZ
Ensuite dans la bote de dialogue suivante:

Cliquer sur Nouveau...:

Prenez Source de donnes systme (pour cette machine uniquement) Slectionner le Driver
ODBC Oracle:

MS Office Access

516/564

Vincent ISOZ

et cliquer sur Suivant:

Et cliquez sur Terminer. Il vient alors:

MS Office Access

517/564

Vincent ISOZ

Nous cliquons sur Test Connection pour avoir la bote de dialogue suivante (avec Oracle
Express le nom du service est presque toujours XE):

Sin nous cliquons sur OK il vient alors si les informations ci-dessus ont t correctement
saisies:

MS Office Access

518/564

Vincent ISOZ

Ensuite, nous validons par OK ce qui nous ramne :

Si nous validons par OK il se peut que les informations suivante vous soit redemandes:

MS Office Access

519/564

Vincent ISOZ

La liste des tables de la base apparat alors l'cran:

Si nous slectionnons un table et validons par OK nous avons alors la table qui va se retrouver
lie dans Microsoft Access aprs un petit moment d'attente:

et aprs avoir demand la liste des champs de la table importer:

MS Office Access

520/564

Vincent ISOZ

Ce qui donnera au final une nouvelle table lie:

MS Office Access

521/564

Vincent ISOZ

30 MySQL
Toujours dans le cadre de l'utilisation de MS Access en tant que base frontale, passons la
connexion de plus en plus courante avec MySQL (souvent utilis comme SGBRD web).
Remarque: Le texte ci-dessous a t entirement copier/coller du site http://blogmotion.fr
Pour permettre l'accs la base MySQL de faon transparente au travers d'une application
Microsoft nous devons installer un connecteur ODBC.
MySQL propose justement de tlcharger ce connecteur MySQL ODBC gratuitement:
http://dev.mysql.com/downloads/connector/odbc
Installez-le!
Ensuite, rendez-vous dans le menu Dmarrer/Outils d'administration/Source de donnes
(ODBC), ou via Dmarrer/Excuter et tapez odbcad32.exe
Cliquer sur Ajouter:

Choisir MySQL ODBC:

Puis cliquer sur Terminer.


Prciser un nom et une description pour ce connecteur (de votre choix) puis entrez le nom ou
adresse IP du serveur MySQL (localhost pour moi) ainsi que l'utilisateur ayant accs votre
base de donnes:

MS Office Access

522/564

Vincent ISOZ

Vous devrez obtenir Connection Successful si vous cliquez sur le bouton Test.
Si ce n'est pas le cas, pensez vrifier que votre serveur MySQL fonctionne et que celui-ci est
accessible partir de l'extrieur, l'accs est parfois restreint sur l'interface de boucle local
(localhost) 127.0.0.1. Si vous ne connaissez pas le nom ou le port de votre serveur MySQL
vous pouvez crir les deux commandes suivante dans le systme de requte de MySQL pour
obtenir ces deux informations:

MS Office Access

523/564

Vincent ISOZ

Cliquer sur OK, vous devriez obtenir ceci (except le nom):

C'est termin pour la partie ODBC.


Maintenant, dans Access 2007 ou ultrieur allez dans l'onglet Donnes externes/Plus/Base de
donnes ODBC:

MS Office Access

524/564

Vincent ISOZ

Dans le deuxime onglet Source de donnes machine slectionner le Connecteur


prcdemment cr:

Pour tablir une liaison synchrone, slectionner Lier la source de donnes en crant une
table attache:

MS Office Access

525/564

Vincent ISOZ

Slectionner que vous souhaitez exploiter et cliquer sur OK:

Vous retrouvez vos donnes de MySQL dans Access:

Attention: chaque modification effectue sera rpercute sur votre base MySQL!

MS Office Access

526/564

Vincent ISOZ

31 PocketPC
Voici trs probablement le point le plus intressant de ce support de cours: comment rendre
votre base de donnes MDB mobile sur PocketPC.
Nous allons synchroniser notre base Magasin.mdb situe dans notre dossier Mes documents
avec notre PocketPC. Pour cela, dans ActiveSync 3.7.1 voici comment effectuer l'opration:

S'ouvre une bote de dialogue vous demandant o se situe votre base. Il vous suffit de cliquer
sur Ajouter:

Slectionnez les tables que vous souhaitez synchroniser:

MS Office Access

527/564

Vincent ISOZ

Aprs avoir cliqu sur OK, la conversion se fera:

et celle-ci une fois termine:

MS Office Access

528/564

Vincent ISOZ

et cliquez sur OK. Une fois ceci fait, en allant dans l'explorateur de votre PocketPC vous
aurez:

Ouvrant la base Magasin, vous arrivez dans DB Anywhere:

MS Office Access

529/564

Vincent ISOZ

Nous retrouvons donc leurs tables avec leurs donnes respectives par contre, les requtes et
formulaires que nous avions cr ne sont plus disponibles.
Aprs avoir jou deux ou trois minutes avec DB Anywhere (qui vous permet quand mme
d'utiliser des filtres, requtes, formulaires mais ne gre pas les relations entre les tables ce
jour) nous pouvons faire un petit formulaire (attention dans les options de le mettre en Full
Access sinon vous ne pourrez pas ajouter de donnes par la suite!):

MS Office Access

530/564

Vincent ISOZ
Faites attention aux cls primaires usant de champ de numration qui taient automatiques
dans MS Access car dans DB Anywhere cela n'existe pas et alors lors de la synchronisation
vous aurez un message d'erreur.
L'ajout d'une nouvel article (n'oubliez pas de l'enregistrer en cliquant sur la petite disquette
):

Aprs synchronisation avec ActiveSync nous retrouvons bien dans MS Access:

MS Office Access

531/564

Vincent ISOZ

32 Business Objects
Nous allons observer dans ce chapitre comment connecter une base de donnes MS Access au
logiciel BusinessObjects 5.0
Nous allons donc continuer avec notre base de donnes Magasin.mdb. Dans les outils
d'administration de MS Windows allez dans Source de donnes (ODBC) nous en aurons
besoin pour que BO se connecte notre base et suivez les tapes indiques ci-dessous:

Cliquez sur Ajouter et slection une source (driver) de donnes MS Access:

cliquez sur Suivant et allez cherchez la base de donnes Magasin.mdb:

MS Office Access

532/564

Vincent ISOZ

Quand vous cliquerez sur OK, vous aurez:

validez par OK et quittez ODBC pour lancer BO:

MS Office Access

533/564

Vincent ISOZ

Slectionnez la premire option et lorsque vous cliquez sur Commencer choisissez SQL la
carte:

Dans la fentre suivante, cliquez sur le bouton indiqu ci-dessous par aller cherche la source
de donnes utilisateur Magasin.mdb:

MS Office Access

534/564

Vincent ISOZ

et slectionnez ODBC sur la fentre qui apparat:

Ensuite, prenez garde bien slectionne Magasin comme source de donnes:

MS Office Access

535/564

Vincent ISOZ

et validez par OK, vous aurez alors:

crivez votre requte SQL (exemple pris du cours MS Access plus haut):

MS Office Access

536/564

Vincent ISOZ

et cliquez sur Excuter. Vous aurez alors:

Ensuite c'est du "bte" usage de BusinessObjects (concept d'utilisation similaire MS Excel


avec la possibilit d'ajouter des colonnes dans le tableau avec des formules, filtres, tris,
tableau crois, etc.).

MS Office Access

537/564

Vincent ISOZ

33 Crystal Reports
L'utilisation de Crystal Reports pour notre base Magasin.mdb tient nouveau par les mmes
procdures initiales de cration d'un driver ODBC nomm Magasin comme montr ci-dessous
(assistant obtenu en cliquant sur le bouton Nouveau en haut gauche de l'cran de
CrystalReports et ensuite sur le bouton Database).

Remarque: un pro passera par Crystal SQL Query


Avec un double clic sur Magasin, vous obtiendrez:

MS Office Access

538/564

Vincent ISOZ

o l'on voit aussi bien les tables que les requtes ! En faisant un double clic sur la table
tblSorties, vous obtiendrez:

Ensuite, il vous suffit de parcourir les onglets Fields, Group, Total, Top N, Chart, Select et
Style un par un et de lancer la machinerie et c'est du CrystalReports standard !

MS Office Access

539/564

Vincent ISOZ

34 Runtime
Il n'est pas possible toutes les entreprises de payer une licence MS Access leurs employs
et honntement cela n'a gure d'intrt... D'o le fait qu'il existe un runtime (tlchargeable
gratuitement sur le site internet de Microsoft).
Dj avant de dployer le runtime, il faut vrifier que sa base de donnes, fonctionne bien
avec le runtime. Pour cela vous pouvez simuler le runtime en cration un raccourci
MS Windows avec la syntaxe suivante:
"C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" _
"C:\magasin.mdb" /runtime
bon videmment il vaut mieux travailler avec une frontable en *.mde et une dorsale *.mdb
mais aprs c'est une histoire.
Si jamais depuis voici comment convertir une base *.accdb en fichier runtime excutable avec
MS Access 2010 (attention!! normalement on fait cette manipulation que lorsque l'on a
spar la base en une front-end et une back-end!!!):
1. Vous n'oubliez pas de mettre un formulaire de dmarrage pour votre base de donnes
comme nous l'avons vu plus haut
2. Vous allez dans Fichier/Engregistrer et choisissez l'option Crer ACCDE:

MS Office Access

540/564

Vincent ISOZ
3. Vous enregistrez votre base de donnes l'endroit dsir:

4. Dans le dossier avec votre fichier


*.accdr comme ci aprs:

vous renommez l'extension en

Ce qui vous donner l'ouvertur un fichier protg qui s'ouvre dans le runtime:

Je ne traiterai pas comment dployer et crer un fichier d'installation (*.exe) de la base de


donnes MS Access car de toute faon en ce dbut de 21me sicle, les application client n'ont
aucun avenir face la flexibilit, le design, la compatibilit multi-plateforme et la
performance des bases de donnes internet (qui ne ncessitent qu'un navigateur et un petit
serveur pour un prix ngligeable).
N'oubliez que dans le mode Runtime vous n'aurez pas les filtres par formulaire!!!

34.1 Activer le clic droit dans le runtime


Le clic droit n'est pas dfaut plus disponible en mode Runtime depuis Access 2007. Donc
outre la possibilit classique d'associer des boutons la barre d'accs rapide de la base de
donne courante et qui apparatront alors sur la barre d'accs rapide du runtime de chacun de
vos utilisateurs, vous pouvez recrer un menu contextuel avec du code VBA.
MS Office Access

541/564

Vincent ISOZ
Par exemple, pour obtenir dans le runtime un menu contextuel au clic droit avec les options
Couper/Copier/Coller comme visible ici:

D'abord, ajoutez la rfrence suivante au projet VBA:

Ensuite, crez un module avec le code suivant:


Option Compare Database
Option Explicit
Private Sub CreateContextMenu()
Const strMenuName As String = "Form1_CommandBar"
Dim cbar As CommandBar
Dim bt As CommandBarButton
Set cbar = CommandBars.Add(strMenuName, msoBarPopup, , False)
Set bt = cbar.Controls.Add
bt.Caption = "Cut"
bt.OnAction = "=fCut()"
bt.FaceId = 21
Set bt = cbar.Controls.Add
bt.Caption = "Copy"
MS Office Access

542/564

Vincent ISOZ
bt.OnAction = "=fCopy()"
bt.FaceId = 19
Set bt = cbar.Controls.Add
bt.Caption = "Paste"
bt.OnAction = "=fPaste()"
bt.FaceId = 22
End Sub
Function fCut()
On Error Resume Next
Application.CommandBars.ExecuteMso ("Cut")
End Function
Function fCopy()
On Error Resume Next
Application.CommandBars.ExecuteMso ("Copy")
End Function
Function fPaste()
On Error Resume Next
Application.CommandBars.ExecuteMso ("Paste")
End Function
Excutez une unique fois le routine principale CreateContextMenu afin de pouvoir par la
suite l'associer n'importe quel formulaire (si nous ne l'excutez pas, vous ne pourrez
associer ce menu un formulaire!!).
Une fois ceci fait, dans les proprits des formulaires de votre choix, vous changez la
proprit Barre de menu contextuel afin d'y prendre la barre que nous venons de crer dans le
module VBA:

et voil...

MS Office Access

543/564

Vincent ISOZ

35 Optimisation de bases de donnes


J'ai crit ce petit chapitre par plaisir personnel et suite une tude de cas avec un client qui
devait grer plusieurs millions de nouveaux enregistrements par jour.
Je ne suis certes pas un spcialiste dans ce domaine mais j'espre avoir quand mme russi
collecter des informations pertinentes, parfois videntes, dans l'espoir qu'elles ne sont pas
erronnes (n'hsitez pas m'avertir le cas chant) et d'en faire un rsum au plus propre.
Avant toute chose, je ne souhaite pas traiter de la partie lectronique ou optolectronique d'un
serveur de donnes car il me semble quasi trivial pour analyser d'immenses masses de
donnes, il faut privilgier des systmes avec des mmoires vives, caches, accs
lecture/criture du HD, disques SSD, bande passante, architecture (64 bits, 32 bits) les plus
rapides et les plus fiables. On trouve dj une littrature trs abondante et de tout niveau sur le
sujet.
J'ai aussi souhait me concentrer sur un aspect qui m'intressait un plus personnellement: les
algorithmes et la complexit algorithmique de recherche de donnes dans les moteurs de base
de donnes (il parat que les disques dur utiliseraient des algorithmes quivalents).
Avant de commencer optimiser sa base de dones et son environnement associ il me
semble qu'il faut connatre les points suivants au minimum pour savoir ce qu'on veut
optimiser:

Le modle conceptel de donnes de la base avec description des tables, des cls (sur
champs ou auto-incrmentes) des contraintes d'intgrit (l'erreur type par exemple sur
les forums internet est de mettre les messages dans la mme table que les titres du
sujet principal).

Le modle physique de donnes de la base avec index et chemins d'accs, tailles des
blocs sur la mmoire morte (clusters).

Des statistiques d'utilisation comme la taille des tables, des index, distribution des
valeurs, les taux de mises--jour, le workload

Les particularits du systme hardaware comme le paralllisme, les processeurs


spcialiss, l'architecture, la connectique, la mmoire

et des algorithmes qui peuvent diffrer selon les systmes

MS Office Access

544/564

Vincent ISOZ

Remarque: Parmi les techniques prsentes ci-dessous, il n'y a pas de technique meilleure
qu'une autre dans l'absolu.

35.1 Systme FAT (File Allocation System)


Considrons une table de donnes. Nous y associons alors une table des matires Table Of
Content en anglais (TOC) qui contient l'adresse du premier enregistrement et chaque
enregistrement contient l'adresse de l'enregistrement suivant selon un systme de chanage.
On parle parfois "d'accs direct/indirect" pour cette stratgie.
Trouver le n-ime enregistrement avec ce systme implique alors une recherche squentielle
(complexit linaire). C'est donc peu efficace pour rechercher une donne et en termes de
mmoire (vu que chaque enregistrement une adresse) mais c'est la mthode de codage la
plus intuitive et elle reste beaucoup utilise dans des systmes qui ncessitent peu de
performance en termes de requtes ou dans des systmes dvelopps par des amateurs
clairs.
C'est typiquement la meilleure stratgie lorsqu'on rappatrie tout le temps l'ensemble des
donnes d'une table et ce en termes de rapidit et de mmoire C'est galement trs rapide
lorsqu'on insre des nouvelles donnes.

35.2 Systme ISAM (Indexed Sequential Access Method)


Dans ce systme appel en franais "organisation squentielle indexe" (OSI), un
"descripteur" (i-node) contient les adresses d'un certain nombre d'enregistrements
quidistribus, plus l'adresse d'un bloc d'index primaire qui contient les adresses des blocs
suivants. Si le descripteur fait plus qu'un certain nombre de blocs prdfinis, on alloue un bloc
pour l'adresse d'un index secondaire qui contient les adresses des prochains blocs d'index etc.
Le tout a donc une structure d'arbre!

MS Office Access

545/564

Vincent ISOZ
Voici un exemple d'index squentiel tri dont les informations (donnes) recherches sont
identifies lors de la recherche par des nombres 5 chiffres:

Si nous cherchons rappatrier tous les enregistrements, nous sommes donc moins efficaces
qu'une mthode FAT. Mais si nous devons aller chercher un ou plusieurs enregistrements
spcifiques, nous sommes trivialement gagnants en termes de rapidit mais les i-node
ncessitent par contre de la mmoire A signaler aussi que l'insertion est trs coteuse
lorsqu'on arrive la fin d'un bloc: on peut alors laisser de la place libre dans chaque bloc ou
rserver une zone non trie pour les insertions.

MS Office Access

546/564

Vincent ISOZ
Remarque: Ce systme aurait t utilis (je n'ai pas pu vrifier) dans les dbuts de Linux,
Unix, le systme FAT de MS Windows et les vieux SGBD! Par dfaut MySQL utilise utilise
la technologie ISAM jusqu' la version 5.5.
Le fait d'avoir des blocs qui contiennent que la premire valeur d'un bloc est ce que nous
appelons un "index non-dense" l'oppos des index FAT qui sont des "index denses" car
chaque valeur contient une adresse.
Ainsi, une cl primaire est dans la pratique un index unique, normalement toujours tri (selon
une squence naturelle) de type non-dense ou multi-niveaux (arbre-B ou arbre-B+ que nous
verrons plus loin).

35.3 Arbres
Le principe des arbres (types d'index particuliers donc!) est une version amliore du ISAM
ma connaissance Le principe est bas sur la stratgie du diviser pour mieux rgner
Il existe plusieurs types d'arbres dont voici les plus connus:

Arbres B (MS Access, MySQL, NTFS)

Arbres B+ (SQL Server, Oracle)

Arbres- (lectronique/mmoire flash)

Arbres quadrants (thorie des ensembles)

Arbres R (gomatique)

Arbres k-d (gnralisation des arbres R: 2D)

Enfin indiquons un exemple de test de performance de l'index par dfaut dans MySQL 5.0 fait
par un collgue avant d'aller plus loin. Le test est effectu sur une table contenant 60'000
lignes et cinq colonnes dont une nomme Type, contenant les valeurs 1, 2 ou 3. La valeur 1
apparat environ 2% des fois dans la colonne, tandis que les valeurs 2 et 3 apparaissent
respectivement 20% et 78% des fois (approximativement). Le test consiste rpter 20 fois
les requtes de slection:
SELECT * FROM NomTable WHERE Type = 1
SELECT * FROM NomTable WHERE Type = 2
SELECT * FROM NomTable WHERE Type =
et mesurer le temps d'excution de chacune d'entre elles. Nous avons test ces trois requtes
avec et sans index sur la colonne Type, ce qui nous fait un jeu de six chantillons. Les
rsultats sont donns en secondes et sont rsums dans le tableau ci-dessous:

MS Office Access

547/564

Vincent ISOZ

Nous pouvons constater que:


1. Les deux premires colonnes nous montrent que pour des valeurs qui apparaissent trs
rarement dans la table (2%), une requte de slection de ces valeurs prend nettement moins de
temps avec un index sur la colonne.
2. Les troisimes et quatrimes colonnes nous montrent qu'aux alentour d'un taux d'apparition
de 20-25%, il n'y a pas beaucoup de diffrence entre avoir un index ou pas.
3. Enfin les deux dernires colonnes nous montrent que la situation est renverse lorsque le
taux d'apparition est lev (80%) et que dans ce cas, il vaut mieux ne pas avoir d'index.La
suite viendra
Ce montre donc qu'il faut toujours tester les performances des index avant de les considrer
comme dfinitivement activs.

35.3.1 Arbre B
L'arbre B est simplement un organigramme dont la taille des branches n'est pas forcment
gale. Nous parlons alors en toute gnralit "d'arbre non balanc". C'est le type d'index
qu'utilisent ma connaissance MS Office Access, MySQL et le systme NTFS. Le problme
avec MS Offce Access c'est qu'au-del de quelques centaines de millier d'enregistrements, il
faut parfois aller changer des valeurs dans la base de registre pour crer des index.
Voici typiquement un exemple d'arbre (celui-ci est balanc!) 2 niveau et 3 feuilles (nondenses) contenant des identifiants (alvoles) associs implicitement des enregistrements
(l'association cl-lments est ce que nous appelons:

Si nous y recherchons la cl 6: 6[5,9[ donc nous allons dans f2 et 6f2.


Pour un arbre trois niveaux:

MS Office Access

548/564

Vincent ISOZ

Si nous y recherchons de la cl 9: 98 donc nous allons dans n1 et comme 9 < 10 nous allons
dans f3 et 9f3.
Chaque sous-arbre dbute donc avec ce que nous appelons un "nud". Un noeud est donc un
index local, les enregistrements servant de cl (avec une table de hachage ou non), intercals
avec des pointeurs mmoire:

Le sous-arbre point par P2 contient ainsi tous les enregistrements dont la cl est comprise
entre C1 et C2.
Considrons par exemple une table contenant 1'000'000 d'enregistrements o l'administrateur
a pu dfinir un taille de 28 octets par entre (taille d'une alvole) et qu'un cluster a une taille
de 4'096 octets.
Nous avons alors:
4096
146 alvoles / cluster 146 entres / cluster
28

Soit un total de:


1000000
6850 clusters
146

tout en bas de l'arbre. Le niveau d'au-dessus devrait pouvoir indexer ces 6850 clusters aussi
avec des alvoles, il lui faudra donc:
6850
47 clusters
146

Et le niveau d'au-dessus sera simplement un unique cluster avec 47 alvoles. Il s'agit donc
d'un arbre trois niveaux. L'arbre aura donc une taille mmoire utilise pour un millions
d'enregistrement 28 octets l'enregistrement de:

MS Office Access

549/564

Vincent ISOZ

(47 47 146 6850 146) 28 28 Mo


et si l'arbre tait plein nous aurions:

146 146 146 28 80 Mo


qui correspond donc la mmoire allouer sur le disque pour l'index s'il venait tre plein et
correspond donc environ 3'000'000 d'enregistrements avec 3 niveaux (sur 1 niveau 146
enregistrements, sur 2 niveaux environ 20'000, sur 3 niveaux environ 3 millions et sur 4
niveax environ 450 millions).

35.3.2 Arbre B+
L'Arbre B+ (R. Bayer et C. McCreight, 1972), appel galement: B-tree ou arbre de Bayer. Le
B+ est l pour indiqu que l'arbre est Balanc (tous les chemins partant de la racine vers une
feuille ont la mme longueur).

Les proprits de l'arbre B+ sont les suivantes:

Toutes les pages (feuilles) sont remplies au minimum 50%


Chaque noeud est un index local (bloc mmoire)
Tous les noeuds dans la ralit ont la mme taille (contrairement aux exemples
pdagogiques qui vont suivre)
Tous les noeuds feuilles sont au mme niveau
La hirarchie de l'arbre grossit par la racine
Tous les chemins de la racine aux noeuds feuilles ont la mme longueur
Contrairement l'arbre B, la largeur et la hauteur de l'arbre est dynamique
Contrairement ISAM ncessite moins de pages (feuilles) de dbordement (donc
moins de mmoire)
Typiquement avec 67% de remplissage en moyenne
Nombre denfants d'un nud est appel fan-out et est not m

Voici comment se remplit un arbre B+ (nous y observons bien que les feuilles sont remplies
au minimum 50%):

MS Office Access

550/564

Vincent ISOZ

ou avec un exemple comportant autre chose que des chiffres:

Ensuite nous rajoutons encore une personne et puisque toutes les feuilles sont pleines, il
faudra faire une insertion balance (recompalitation de la totalit de l'index):
MS Office Access

551/564

Vincent ISOZ

La contrainte d'occupation minimale est ainsi garantie!

35.3.3 Arbre-R
L'arbre R permet donc de dcouper des zones gographiques en ensembles et sous-ensembles
et de regroupes celles-ci sous formes d'arbres afin d'accder ensuite plus rapidement aux
donnes. Elles sont utilises non pas pour faire des requtes de noms de pays, villes ou autres
mais utilises pour crer des map visuelles (pensez Google Earth!):

MS Office Access

552/564

Vincent ISOZ

36 Limites MS Office Access


36.1 Limites MS Access 2000+2002+2007+2010
En anglais par flemme de traduction (il n'y pas d'volutions entre la version 2003 et 2010):

General
Attribute

Maximum
2GB, minus the space needed for system objects

Note NOTE: Although the maximum size for a single database


Access database (.accdb) file is 2GB, you can work around this limitation by using a split
file size
database. A front-end database file can point to thousands of backend database files, each of which could be as large as 2GB. For
more information, see the topic, Split a database.
Number of objects in a
database

32'768

Number of modules
(including forms and
reports that have the
1'000
HasModule property set to
True)
Number of characters in
an object name

64

Number of characters in a
20
password
Number of characters in a
20
user name or group name
Number of concurrent
users

MS Office Access

255

553/564

Vincent ISOZ

Table
Attribute

Maximum

Number of characters in a table name

64

Number of characters in a field name

64

Number of fields in a table

255

Number of open tables

2'048; the actual number might be


smaller because of tables opened
internally by Access

Table size

2GB minus the space needed for the


system objects
1GB in Access 2000

Number of characters in a Text field

255

Number of characters in a Memo field

65'535 when entering data through


the user interface;
2 GB of character storage when
entering data programmatically

Size of an OLE Object field

1 GB

Number of indexes in a table

32

Number of fields in an index

10

Number of characters in a validation message

255

Number of characters in a validation rule

2'048

Number of characters in a table or field description

255

Number of characters in a record (excluding Memo and 4'000


OLE Object fields) when the UnicodeCompression
2'000 in Access XP
property of the fields is set to Yes
Number of characters in a field property setting

MS Office Access

255

554/564

Vincent ISOZ

Query
Attribute

Maximum

Number of enforced
relationships

32 per table, minus the number of indexes that are on the


table for fields or combinations of fields that are not involved
in relationships*

Number of tables in a query

32*

Number of joins in a query

16*

Number of fields in a recordset 255


Recordset size

1 gigabyte

Sort limit

255 characters in one or more fields

Number of levels of nested


queries

50*

Number of characters in a cell


1'024
in the query design grid
Number of characters for a
255
parameter in a parameter query
Number of AND operators in a
99*
WHERE or HAVING clause
Number of characters in an
SQL statement

Approximately 64'000*

*Maximum values might be lower if the query includes multivalued lookup fields.

MS Office Access

555/564

Vincent ISOZ

Form and report


Attribute

Maximum
Number of characters in a label
2'048
Number of characters in a text box
65'535
Form or report width
22 in. (55.87 cm)
Section height
22 in. (55.87 cm)
Height of all sections plus section headers (in Design view)
200 in. (508 cm)
7
Number of levels of nested forms or reports
3 in Access 2000
Number of fields or expressions that you can sort or group on in a report 10
1 report
header/footer;
1 page
Number of headers and footers in a report
header/footer;
10 group
headers/footers
Number of printed pages in a report
65,536
Number of controls and sections that you can add over the lifetime of the
754
form or report
Number of characters in an SQL statement that serves as the
Recordsource or Rowsource property of a form, report, or control (both 32'750
.accdb and .adp)

MS Office Access

556/564

Vincent ISOZ

Macro
Attribute
Maximum
Number of actions in a macro
999
Number of characters in a condition
255
Number of characters in a comment
255
Number of characters in an action argument 255

MS Office Access

557/564

Vincent ISOZ

37 Nouveauts MS Office Access


On m'a parfois demand de communiquer la liste des nouveauts des diffrentes versions sur
lesquelle je donne des cours. Voici donc une numration non exhaustive:
Pour les nouveauts de MS Access 2000 par rapport 97:

Presse-papier pour copier/coller multiple


Nouvelle fonctionnalit de personnalisation des barres d'outils
Menus volutifs
Envoi d'e-mail directement depuis les applications
Historique des derniers fichiers ouverts
Options d'ouverture dans la bote de dialogue d'Ouverture
Enregistrement en une version antrieure d'une base de donnes
Repercussion automatique des noms des champs dans les objets dpendants
Formatage conditionnel de champs dans les formulaires
Export de donnes vers Excel par simple cliquer/glisser des tables ou requtes
Impression du diagramme des relations
Option de compression la fermeture
Page d'accs de donnes web
Interoprabilit de Microsoft SQL Server

Pour les nouveauts de MS Access XP (2002) par rapport 2000:

Nouvelle interface et aide en ligne


Impression par *.mdi
SmartTags (balises actives)
Nouvelles options de collage spcial
Cration facilite de certificats pour les macros
Nouvelle option d'export au format XML

Pour les nouveauts de MS Access 2003 par rapport XP:

Intgration avec WSS


Options de vrification des erreurs
Affichage des liaisons (interdpendances) entre objets
Sauvegarde de la base de donnes sous un autre nom
Propagation des proprits des champs
Amlioration du tri des contrles listbox et combobox
Aide contextuelle dans les vues SQL

Pour les nouveauts de MS Access 2007 par rapport 2003:

Nouvelle Interface (onglets et rubans, rubans contextuels, galeries, super infobulles,


menu Office)
Visualisation de raccourcis claviers par la touche (Alt)
Changement du thme de couleur de visualisation de l'interface
Barre d'accs rapide et personnalisation pour un modle ou le logiciel
Personnalisation des rubans avec le langage RibbonX

MS Office Access

558/564

Vincent ISOZ

Activation de l'onglet Dveloppeur


Listing des documents rcents fixable
Nouveau format de fichier (*.accdb)
Navigation par onglets (dsactivation pour revenir en mode fentres)
Nouveau visuel dans le MCD (schma relationnel)
Nouvelles options de filtrage dans les tables
Nouveaux modles de couleurs pour les formulaires et rapports
Nouveau type de donnes et contrle de pices jointes
Nouvel assistant liste de choix avec valeurs de slection multiples (champs Objective
Date Picker automatique avec les champs de type Date en mode table
Utilisation des Layouts pour le regroupement de contrles dans les formulaires et
rapports et Gridlines
Nouveau format de contrle texte RTF
Nouvelles mises en forme automatiques (autoformats)
Rdaction directe des arguments des actions dans les objets Macros
Affichage de la totalit des actions de macros
Suppression du Workgroup Security Manager pour les fichiers accdb
Suppression la Rplicaton pour les fichiers accdb
Suppressions des formulaires Web pour les fichiers accdb
Envoi de requte de saisie par e-mail et gestion des retours de donnes
Suppression du contrle de liste droulante pour la recherche
Disparition du champ de saisie de critres de filtrage au clic droit de la souris dans les
champs de tables et formulaires
Format comptabilit plus possible
Option d'historique dans les champs mmo
Liaison SharePoint n'est plus possible avec les vues (affichages) importe toute la
table!
Le code VBA concernant les connexions ADODB doit tre rcrit
Nouvelles commandes VBA d'export de tables vers SharePoint
La commande VBA acExportDelim exporte indpendamment des paramtres
rgionaux de l'ordinateur avec une "," comme dlimiteur, il faut obligatoirement
dfinir un modle d'export pour avoir le ";"
Suppression du fonctionnement correct des auto-liaisons ( priori...)

Pour les nouveauts de MS Access 2010 par rapport 2007:

Nouveau menu Office tendu (backstage menu)


Personnalisation des rubans (sans RibbonX avec Import/Export de l'UI)
Nouvelle catgorie de SmartArts (SmartArts avec images)
Nouvelle balise active au copier/coller
Cration de macros de donnes dans les tables
MS Access Services (version serveur)
Vrificateur de compatibilit avec publication web
Refonte complte du constructeur de macros
Ne gre plus du tout les proprits (description) de tables/requtes/rapports ou macros
importes ayant plus de 255 caractres
Utilisation et cration de modles de "composants d'application"
Utilisation et cration de modles de "champs de donnes"
Suppression de l'ActiveX de contrle de calendrier

MS Office Access

559/564

Vincent ISOZ

Nouveau contrle de navigateur web (trs utile pour l'aperu des PDF dans les
formulaires)
Nombreuses nouvelles proprits de formatage (typiquement pour les boutons)
et autres pas encore dcouvertes

37.1 Propositions de nouveauts ultrieures


Bon... comme pour dans mon livre pour Microsoft Project... je commence perdre patience
quant l'absence de nouveauts consquentes ces dix dernires annes concernant ce logiciel.
Donc voici une liste de nouveauts attendues:

Proposer une version pour Macintosh (Apple)


Revoir tout l'IDE du VBAE (numrotation des lignes, groupements de structures de
codes, codage dynamique, etc.)
Permettre d'utiliser l'ensemble du standard SQL comme le fait Oracle avec les
fonctions analytiques par exemple
Cration d'un formulaire de type Calendrier avec une grande multitude de choix
d'affichages
Cration d'un planning de Gantt avec WBS, navigation dans le temps, replanification
par glisser-dplacer, etc.
Permettre de contrler plus en finesses les couleurs des onglets dans les formulaires
Retour et modernisation des tableaux et graphiques croiss dynamiques
retour d'une gestion avance et native de la scurit des utilisateurs (et dont la
granularit va jusqu'aux champs eux-mmes!!!)
Pouvoir aligner verticalement du texte dans un champ ou label

MS Office Access

560/564

Vincent ISOZ

38 Raccourcis claviers
Vous trouvez que l'utilisation du clavier est parfois plus rapide que celle de la souris ? Les
touches de raccourci vous permettent d'viter les menus et d'excuter des commandes
directement. Vous pouvez utiliser les touches de raccourci de nombreuses fins dans Access,
pour accder aux commandes et aux boutons de la barre d'outils aussi bien que pour insrer la
date du jour. Les touches de raccourci sont parfois rpertories en regard des noms de
commandes dans les menus Access. Par exemple, dans le menu Fichier, la commande
Imprimer indique le raccourci CTRL+P.Pour obtenir la liste exhaustive des raccourcis,
demandez de l'aide au Compagnon Office. Dans Access 2000 ou dans n'importe quelle autre
application Office 2000, appuyez sur F1 pour afficher le Compagnon, puis tapez touches de
raccourci dans la zone de texte. Voici quelques-unes des touches de raccourci les plus utiles
de Access:
TOUCHES DE RACCOURCIS DIVERSES
F2
F7
MAJ+F2

ALT+ENTREE
ALT+F4

Pour afficher l'adresse complte du lien hypertexte slectionn


Pour vrifier l'orthographe
Pour ouvrir la zone Zoom afin de faciliter la saisie
d'expressions et autre texte dans des zones de saisie rduites.
Pour MS Access 2007 et les champs mmo avec l'option RTF
active ne permet cependant pas d'utiliser correctement cette
nouvelle fonctionalit. Il faut passer par un formulaire.
Pour afficher une feuille des proprits en mode Cration.
Pour quitter Microsoft Access, fermer une bote de dialogue ou
fermer une feuille des proprits
Pour appeler un Gnrateur
Afficher la fentre de la base de donnes
Annuler

CTRL+F2
F11
CTRL+Z
CHAP CHAP
(appuyez deux fois Annuler les modifications apportes l'enregistrement en cours
sur CHAP)
Annuler les modifications apportes au champ en cours
CHAP
Basculer entre Visual Basic Editor et la fentre active
ALT+F11
prcdente
Coller
CTRL+V
Copier
CTRL+C
Enregistrer
CTRL+S
Imprimer
CTRL+P
Insrer la date du jour
CTRL+;
Insrer les donnes du mme champ dans l'enregistrement
CTRL+'
prcdent
Insrer l'heure courante
CTRL+:
CTRL+ENTRE Insrer un retour chariot dans un champ de type mmo ou texte
Ouvrir une base de donnes existante
CTRL+O

MS Office Access

561/564

Vincent ISOZ
CTRL+N
CTRL+F
CTRL+F11

Ouvrir une nouvelle base de donnes


Rechercher et remplacer
Pour basculer entre une barre de menus personnalise et une
barre de menus intgre

LES TOUCHES DE RACCOURCI POUR LES OPERATIONS DE DONNES


Ctrl+CTRL++

Supprime la fiche active d'un formulaire ou la ligne active


d'une table
Cration d'un nouvel enregistrement dans un formulaire ou
dans une table

LES TOUCHES DE RACCOURCI POUR LES OPERATIONS DE FENETRE


CTRL+./CTRL+,
F11 ou ALT+F1
CTRL+F6
ENTREE
CTRL+F8

ALT+ESPACE
MAJ+F10
CTRL+W ou
CTRL+F4
ALT+F11
ALT+MAJ+F11

Pour changer le mode d'affichage des requtes (Ctrl+. excute


la requte, Ctrl+, remet la requte en mode cration)
Pour amener la fentre Base de donnes au premier plan
Pour parcourir les fentres (onglets) ouvertes (pour passer de
l'une l'autre en d'autres termes)
Pour rtablir la taille de la fentre rduite slectionne lorsque
toutes les fentres sont rduites.
Pour activer le mode Redimensionner de la fentre active
lorsqu'elle n'est pas agrandie ; appuyez sur les touches de
direction pour redimensionner la fentre.
Pour afficher le menu Systme
Pour afficher le menu contextuel.
Pour fermer la fentre active.
Pour basculer entre Visual Basic Editor et la fentre active
prcdente.
Pour basculer entre Microsoft Script Editor et la fentre active
prcdente

LES TOUCHES DE RACCOURCI POUR MODIFIER UN CONTROLE


Pour ajouter un contrle une section.
Pour copier le contrle slectionn vers le Presse-papiers.
Pour couper le contrle slectionn et le placer dans le Pressepapiers.
Pour coller le contenu du Presse-papiers dans le coin suprieur
CTRL+V
gauche de la section slectionne.
CTRL+DROITE Pour dplacer le contrle slectionn vers la droite.
CTRL+GAUCHE Pour dplacer le contrle slectionn vers la gauche.
Pour dplacer le contrle slectionn vers la haut.
CTRL+HAUT
Pour dplacer le contrle slectionn vers le bas.
CTRL+BAS
Pour augmenter la hauteur du contrle slectionn.
MAJ+BAS
Pour augmenter la largeur du contrle slectionn.
MAJ+DROITE
MAJ+ENTREE
CTRL+C
CTRL+X

MS Office Access

562/564

Vincent ISOZ
MAJ+HAUT
MAJ+GAUCHE

Pour rduire la hauteur du contrle slectionn.


Pour rduire la largeur du contrle slectionn.

LES TOUCHES DE RACCOURCI POUR L'UTILISATION DU MODE


"CREATION"
F2
F5
F6

Pour basculer entre le mode Modification (quand le point


d'insertion est affich) et le mode Dplacement.
Pour basculer du mode Cration de formulaire au mode
Formulaire.
Pour basculer entre les parties infrieure et suprieure d'une
fentre (mode Cration des tables, macros et requtes et la
fentre Filtre/tri avanc uniquement).

LES TOUCHES DE RACCOURCI POUR RECHERCHE OU REMPLACER DU


TEXTE OU DES DONNEES
CTRL+F

CTRL+H

MAJ+F4

Pour ouvrir l'onglet Rechercher de la bote de dialogue


Rechercher et remplacer (modes Feuille de donnes et
Formulaire uniquement).
Pour ouvrir l'onglet Remplacer de la bote de dialogue
Rechercher et remplacer (modes Feuille de donnes et
Formulaire uniquement).
Pour trouver l'occurrence suivante du texte spcifi dans la
bote de dialogue Rechercher et Remplacer lorsque la bote de
dialogue est ferme (modes Feuille de donnes et Formulaire
uniquement).

LES TOUCHES RACCOURCIS POUR L'UTILISATION D'UNE ZONES DE LISTE


F4 ou ALT+BAS
F9
BAS
PG.SUIV
HAUT
PG.PREC
TAB

Pour ouvrir une zone de liste modifiable


Pour actualiser le contenu d'un champ Liste de choix d'une
zone de liste ou d'une zone de liste modifiable
Pour descendre d'une ligne
Pour descendre d'une page
Pour monter d'une ligne
Pour monter d'une page
Pour quitter la zone de liste modifiable ou la zone de liste

LES TOUCHES RACCOURCIS POUR L'IMPRESSION ET LA SAUVEGARDE


CTRL+P
CTRL+S ou
MAJ+F12 ou
ALT+MAJ+F2
F12 ou ALT+F2

Pour imprimer l'objet slectionn ou actif


Pour enregistrer un objet de base de donnes

Pour ouvrir la base de donnes Enregistrer sous

LES TOUCHES DE RACCOURCI POUR L'OUVERTURE DE BASES DE DONNEES

MS Office Access

563/564

Vincent ISOZ
CTRL+N
CTRL+O

Pour ouvrir une nouvelle base de donnes


Pour ouvrir une base de donnes existante

LES TOUCHES DE RACCOURCI POUR L'AFFICHAGE DE L'AIDE


F1

MAJ+F1

MAJ+F1

MS Office Access

Pour afficher l'aide de l'Assistant Office et de Microsoft


Access, l'aide intuitive relative la proprit, au contrle,
l'action de macro ou au mot rserv Visual Basic slectionn ;
ou les messages d'alerte comportant un bouton Aide.
Pour afficher des Info-bulles ; aprs avoir appuy sur MAJ+F1,
placez le pointeur sur la commande de menu, le bouton de
barre d'outils ou une rgion de l'cran, puis cliquez le bouton
de la souris.
Pour afficher des info-bulles dans une bote de dialogue, aprs
avoir slectionn l'option l'aide du clavier.

564/564

Vous aimerez peut-être aussi