Vous êtes sur la page 1sur 116

Microsoft Access

2007

Tous droits de ©2003-2009 Styve JEAN Ing


reproduction réservés
Introduction

Nous allons essayer, à travers ces écrits, de comprendre les mécanismes et les fonctionnalités
fondamentales d'Access. L'objectif de cette partie n'est pas de maîtriser ce produit, mais d'en avoir une
bonne vue d'ensemble.

Préparation d‟un projet

Analyse du projet
Listez-en vrac
Anticipez les besoins futurs
Structurez vos informations

Analyse du projet

Lorsque vous construisez un texte sur Word, par exemple, vous pouvez le tapez et le modifier a votre
gré. Vous pouvez ainsi démarrer votre ordinateur et avoir un document terminé en 10 minutes.

Au contraire, quand vous allez construire une base de données, il faudra au préalable passer par une
phase d‟analyse, aboutissant à une sorte des cahiers de charges de votre projet. Cette phase est
importante : une base de données est un outil à moyen/long terme, et une mauvaise analyse pourrait
vous faire perdre énormément de temps.

Dans ce cas, n‟allumez pas tout de suite votre ordinateur. Réfléchissez d‟abord à ce que vous souhaitez
faire !

Listez-en vrac…

Sans faire appel à des méthodologies d‟analyse (comme Merise), voici quelques éléments pour définir
votre base de données :

Les besoins actuels


Les documents à éditer (recensez les documents déjà existants)
Les statistiques à obtenir
Les éléments à calculer
Les informations à stocker

Anticipez les besoins futurs

Quelles seront les évolutions possibles de votre base de données ?


La taille des rubriques prévues est-elle suffisante ?

Structurez vos informations

Une fois que vous avez énuméré tous les besoins et toutes les informations à stocker, classer ces
informations par thème, en imaginant à chaque fois un bac de fiches papier. Vous devez créer une fiche
(Entité) pour chaque ensemble d‟information.

Prenons un exemple de la vie courante : Vous avez acquis un terrain, et vous souhaitez construire.
En effet, il est préférable de commencer par faire un plan. Ensuite, nous basant sur ce plan, il sera facile
de faire le gros-œuvre, puis de mettre en place les éléments fonctionnels, tels la plomberie et l'électricité,
pour finir par la décoration (peinture, parquet et autres papiers peints).

Le plan, c'est le résultat de l'analyse.


Le gros-œuvre, correspond aux tables et relations de la base de données ; la partie stockage des
données à gérer.
La plomberie, l'électricité, etc., tous ces éléments fonctionnels représentent les requêtes, qui
vous permettront d'exploiter les données brutes présentes dans les tables.
Enfin, les formulaires et les états sont les outils vous permettant de créer l'aspect cosmétique, la
décoration, de votre application, aussi bien à l'écran (formulaires) qu'à l'impression (états).

Pourquoi utiliser Access ?

Pour comprendre l'importance des bases de données, prenons un exemple. Ne serait-il pas plus simple
de saisir les commandes dans Excel, pour permettre leur suivi et d'utiliser Word pour faire un mailing
pour les imprimer et de les envoyer à mes clients, que de se mettre à un logiciel tel qu'Access ?

Examinons les faits. Si nous voulons faire un tableau dans Excel à cette fin, dans une même fiche nous
aurons bien l'ensemble des informations relatives à notre client, toutes celles propres à la commande de
ce client, ainsi que tout ce qui concerne les produits commandés.

En saisissant la première ligne de notre première commande, et tout ira pour le mieux.

Maintenant, imagine que notre client n'a pas commandé qu'un seul produit. Et là, intervient le premier
souci : qu'allons-nous faire du deuxième produit ? Nous allons l'écrire sur la ligne du dessous, en prenant
bien soin de recopier chaque information relative au client et à la commande car, sans cela, le moindre tri
risque d'être fatal. Nous risquons de perdre la relation existant entre mon produit et ma commande, donc
mon client…

Cela nous obligerait à dupliquer la plupart des informations que nous avons déjà saisies, mais, quoi qu'il
en soit, nous pouvons donc arriver à ce résultat, qui nous donnent une certaine satisfaction :

A partir de là, d'autres soucis peuvent intervenir : Comment savoir combien de commande sont
enregistrées ? Nous ne pouvons plus compter les lignes. Certaines commandes feront une seule ligne,
d'autres cinquante (nous l'espérons). Nous serons donc amené à faire un traitement d'extraction pour
récupérer chaque N° de facture sans ses doublons, pour ensuite compter le nombre de lignes ainsi
récupérées. Mais cela reste faisable avec Excel.

Puis les commandes s'enchaînent et nous en arrivons à nous poser des questions d'analyse. Prenons
par exemple, lors de ma saisie, j'ai fait une erreur : une ligne indique TOMATES et l'autre TOMATE et
maintenant je veux connaitre le cout d‟achat pour le produit TOMATES, Excel après calcul va me donner
uniquement le cout d‟achat pour TOMATES, parce qu‟il y a une grande différence pour Excel entre
TOMATE et TOMATES.

Nous ne parlons même pas de la limite physique de ce tableau qui ne pourra jamais excéder les
1.048.576 lignes. Et, dans ce cas, les temps de latence seront extrêmes, notamment dans le cas de
calculs analytiques complexes.
En résumé, même si on peut s'en sortir par la technique Excel, de nombreux problèmes peuvent venir
s'interposer :

Redondance des données. Cette réécriture étant source d'erreurs


Limitation du nombre de lignes
Le mélange des divers „ensembles de données‟ (Client / Commande / Produit / …) dans un seul
et même tableau ne facilite pas les analyses statistiques.

Il faut donc trouver un autre système. C'est là qu'interviennent les Bases de Données Relationnelles.

Un SGBDR

Un SGBDR est un „Système de Gestion de Bases de Données Relationnel'.

Examinons ce nom dans le détail :

Access est un „Système de Gestion'. C'est un logiciel, et en aucun cas, il ne s'agit d'une base de données
! C'est un „Système' qui sert à „Gérer', et à „Gérer' des „Bases de données Relationnelles'. La „Base de
Données Relationnelle' est donc le type de fichiers gérés par Access, au même titre que Word gère des
documents et Excel des classeurs.

Sur Access, pour les versions antérieurs les documents gérés ont une extension en .mdb (ou .mde) (1),
mais avec l‟arrivée d‟Access 2007 l‟extension des documents gérés est .accdb. Il s'agit des bases de
données accessibles à travers le moteur de base de données utilisé nativement par Access, moteur qui
porte le doux nom de JET.

Conception

1. C'est quoi ? A quoi ça sert ?


La conception de la base est l'étape fondamentale.

Si nous voulons reprendre l'exemple de la construction de la maison, il s'agit tout simplement de la


fabrication des plans ! Si les plans sont vite faits, sans concertation avec les différents intervenants, sans
prendre en considération le terrain, etc. il parait inconcevable que la maison soit bâtie sans soucis !

En fait, le plan va être réalisé par un architecte, basé sur une étude du terrain réalisée par un géomètre,
en accord avec la mairie, etc.

De même, pour réaliser la conception de votre base de données, vous allez devoir prendre des
informations auprès des différentes sources concernées, auprès des utilisateurs, des décideurs, faire des
réunions régulières pour savoir si ce que vous concevez est bien en adéquation avec la réalité ... bref,
c'est un travail qui demandera un temps certain. Ne vous précipitez donc pas dans cette étape de la
réalisation de votre base de données. Une fois la conception faite, le reste ressemblera à une partie de
plaisir.
2. Les principes fondamentaux

Repartons de notre cas précédent, réalisé sur Excel, qui nous posait quelques soucis : celui des
commandes.

L'idée est de réussir à rassembler les informations, comme sur des fiches types.

Par exemple, un client est un client. Quel que soit le client, nous allons systématiquement avoir besoin
d'informations qui sont propres à chaque client, comme l'adresse, le nom, le téléphone, etc. Nous
pouvons gérer ce client, l'enregistrer sur une fiche. D'ailleurs, ne parle-t-on pas de fiche client, et même,
de fichier client.

Nous pourrions même imaginer „pré formater' des feuilles ainsi, nous n'aurions plus qu'à les remplir et à
les mettre dans notre fameux „fichier client'.

En fait, cette „fiche pré formatée', on pourrait l'appeler „entité'. Tout le jeu va donc être, maintenant, de
répartir les données que nous avons dans notre tableau de départ, et de les rassembler par „fiche type' et
de faire autant de „fiche type' ou „entité' que nous avons d'éléments distincts à gérer. C'est le point de
départ du Modèle Entité-Association (MEA)

3. Le Modèle Entité-Association
Le modèle entité-association est un modèle, un dessin qui représente les différents éléments (entités) et
leurs interactions (associations), dans le système qui nous intéresse.

Cette définition est peut-être un peu vague. Aussi, je vous propose d'avancer pas à pas dans la méthode
rapide que je vous propose.

3-a. Définition des Entités

Sur notre problématique, nous avons repéré trois entités : Client, Commande, Produit, Fournisseur.

Nous pourrions les dessiner ainsi :

Client Commande Produits Fournisseurs

Chose importante, dans chaque entité, nous devons créer une zone qui contiendra une valeur obligatoire
et unique à travers toutes les fiches tirées de cette entité. On appelle cela un identifiant. Voici la
définition la plus correcte de l'Identifiant : "L'identifiant assure l'unicité de l'occurrence (de la fiche remplie)
de l'entité". Dans le cas du client, ce sera le N° de client. Pour la commande, le N° de Commande. Pour
o
les produits, la référence produit fera l'affaire (un code barre par exemple), N du Fournisseur. Après
avoir ajouté nos identifiants, nous obtenons ceci (vous noterez la convention qui consiste à souligner
l'Identifiant) :
Client Commande Produits Fournisseurs

NoClient NoCommande RefProduit NoFournisseur

Maintenant, on va pouvoir ajouter toutes les informations (on les appelle 'attributs') que l'on souhaite
enregistrer dans chaque fiche. Le résultat obtenu doit ressembler à ceci :

Client Commande Produits Fournisseurs

N0Client N0Commande RefProduit NoFournisseur


Titre DateCommande NomProduit Titre
Nom DateLivraison PrixUnitaire Nom
Adresse CommandeLivre Taxe Prénom
Téléphone QteStock Adresse
Ville NiveauAlerte CodePostal
CodePostal Téléphone
Observations
Nous avons maintenant une série de fiches type, et nous sommes capables, dans chaque fiche, de
stocker toute l'information qui nous intéresse.

De plus, comme les identifiants sont uniques, on peut très facilement retrouver un client, une commande
ou un produit, simplement par son identifiant. Enfin, rien ne nous empêchera d'avoir deux clients ayant le
même nom mais étant localisés dans des villes différentes par exemple. Nous ne risquons pas de les
mélanger, puisqu'ils ont des identifiants différents.

Cependant rien ne nous permet de déterminer ce qui se passe entre ces fiches type. Par exemple, si
nous lisons bien la fiche d'une commande, nous n'avons aucun moyen de savoir quel client l'a passée.
Nous avons donc un peu de mal à exploiter les fiches en l'état actuel des choses. Il va falloir déterminer
les actions se passant entre les fiches, et savoir en garder trace. C'est tout l'objet de la deuxième étape.

3-b. Définition des Associations et de leurs cardinalités

L'association sert à définir l'action qu'exercent les entités entre elles. C'est pour cela qu'on les désigne
souvent par un verbe.

Que fait le client ? Il passe des commandes. Il existe donc une action que fait le client sur les
commandes, et cette action est décrite par le verbe „passer'. On peut donc tracer l'association entre le
client et la commande comme ceci :
Client Commande Produits Fournisseurs
0 0 o
N Client N Commande RefProduit N Fournisseur
Titre DateCommande NomProduit Titre
Nom Passer DateLivraison PrixUnitaire Nom
Adresse CommandeLivre Taxe Prénom
Téléphone QteStock Adresse
Ville NiveauAlerte CodePostal
CodePostal Téléphone
Observations
Maintenant, on peut aussi dire que les commandes regroupent des produits. Encore une fois, le verbe
regroupé décrit ici l'action qui se passe entre les commandes et les produits et de plus le verbe fournir qui
décrit l‟action entre les produits et les fournisseurs.

Client Commande Produits Fournisseurs

N0Client N0Commande RefProduit NoFournisseur


Titre DateCommande NomProduit Titre
Nom Passer DateLivraison Regrouper PrixUnitaire Fournir Nom
Adresse CommandeLivre Taxe Prénom
Téléphone QteStock Adresse
Ville NiveauAlerte CodePostal
CodePostal Téléphone
Observations

Cette étape importante étant terminée, il faut déterminer COMMENT ces associations s'exercent. Il s'agit
de déterminer les cardinalités.

Pour cela, on se sert d'une petite phrase magique que voici :

« Est-ce que un(e) {ENTITE} peut {ACTION} plusieurs {AUTRE ENTITE} »

Application : Occupons-nous de la relation „passer„ entre Client et Commande, et posons-nous cette


question de l'une des entités vers l'autre, puis vice-versa :

« Est-ce que un {Client} peut {passer} plusieurs {Commandes} »

La réponse est OUI, bien sûr, et heureusement !

« Est-ce que une {Commande} peut {être passée par} plusieurs {Clients} »

Cette fois la réponse est NON. Chaque commande n'est passée que par un seul client.

Comme nous ne pouvons donner qu'une seule réponse positive sur les deux questions, nous avons une
association 1-n (un à plusieurs).
Client Commande Produits Fournisseurs

N0Client N0Commande RefProduit NoFournisseur


Titre DateCommande NomProduit Titre
Nom 1 Passer n DateLivraison Regrouper PrixUnitaire Fournir Nom
Adresse CommandeLivre Taxe Prénom
Téléphone QteStock Adresse
Ville NiveauAlerte CodePostal
CodePostal Téléphone
Observations

A partir de là, tout est simple.

Lorsque nous sommes en présence d'une relation un à plusieurs, il faut reproduire l'identifiant de l'entité
côté 1 dans l'entité côté plusieurs :
Client Commande Produits Fournisseurs

N0Client N0Commande RefProduit NoFournisseur


Titre DateCommande NomProduit Titre
Nom 1 Passer n DateLivraison Regrouper PrixUnitaire Fournir Nom
Adresse CommandeLivre Taxe Prénom
Téléphone QteStock Adresse
Ville NoClient NiveauAlerte CodePostal
CodePostal Téléphone
Observations

Passons maintenant à la deuxième association, l'association „regrouper'

« Est-ce que une {Commande} peut {contenir} plusieurs {Produits} »

La réponse est OUI, bien sûr, et heureusement !

« Est-ce que un {Produit} peut {être contenu dans} plusieurs {Commandes}»

Cette fois encore la réponse est OUI. Il est évident que le produit TOMATE peut apparaître dans
plusieurs commandes.

Comme nous pouvons donner deux réponses positives, nous avons une association n-n (plusieurs à
plusieurs).

Client Commande Produits Fournisseurs

N0Client N0Commande RefProduit NoFournisseur


Titre DateCommande NomProduit Titre
Nom 1 Passer n DateLivraison 1,n Regrouper 1,n PrixUnitaire Fournir Nom
Adresse CommandeLivre Taxe Prénom
Téléphone QteStock Adresse
Ville NoClient NiveauAlerte CodePostal
CodePostal Téléphone
Observations

Dans ce cas, le traitement va se faire en plusieurs phases.

Tout d'abord, nous allons reproduire les 2 identifiants dans l'association (qu'il va falloir agrandir pour
l'occasion). Nous obtenons donc ceci :
Client Commande Regrouper Produits

N0Client N0Commande NoCommande RefProduit


Titre DateCommande RefProduit NomProduit
Nom 1 Passer n DateLivraison 1 n n 1 PrixUnitaire
Adresse CommandeLivre Taxe
Téléphone QteStock
Ville NoClient NiveauAlerte
CodePostal
Observations Fournir

Fournisseurs

NoFournisseur
Titre
Nom
Prénom
Adresse
CodePostal
Téléphone

Mais surtout, il va falloir penser à toutes les informations que nous n'avons pas pu stocker jusqu'à
présent. En réfléchissant, on comprend bien que ces quantités ne peuvent être présentes dans les
produits, car il ne s'agit pas de „quantité de produits' mais de „quantité de produits dans les commandes'.
De même pour l'entité des commandes. En aucun cas il ne s'agit de la quantité de commandes n'est-ce
pas !

La place de cette valeur est donc maintenant toute trouvée : dans l'association „Regrouper'. Maintenant,
si je faisais ceci, que penseriez-vous :
Client Commande Regrouper Produits

N0Client N0Commande NoCommande RefProduit


Titre DateCommande RefProduit NomProduit
Nom 1 Passer n DateLivraison 1 n n 1 PrixUnitaire
Adresse CommandeLivre Quantité Taxe
Téléphone Remise QteStock
Ville NoClient PrixUnitaire NiveauAlerte
CodePostal Taxe
Observations

Fournir

Fournisseurs

NoFournisseur
Titre
Nom
Prénom
Adresse
CodePostal
Téléphone
Certains diront certainement que, vu que nous cherchons à éviter la duplication des données, il est inutile
de reproduire le PrixUnitaire qui est déjà présent dans l'entité Produit, mais que la Quantité et la Remise
sont bien placées.

Partagez-vous ce point de vue ?

C'est probable. Pourtant, même si ces informations ont le même nom, elles n'emportent pas la même
signification :

Les PrixUnitaire de l'entité Produit ont rapport avec le prix et le taux actuels. Ceux qui sont appliqués pour
la facture qu'on est en train de faire.

Les PrixUnitaire de l'association Regrouper ont, quant à eux, rapport avec les données historiques.
Chaque ligne de commande étant enregistrée ici, nous gardons une trace de l'historique des prix. Ce que
nous ne trouvons nulle part ailleurs. Nous avons donc aussi bien les prix des commandes de Janvier
2003 que ceux d'avril 2004. Et sans ces données, nous serions dans l'impossibilité de calculer l'évolution
du chiffre d'affaire, car le seul prix et le seul taux disponibles concerneraient l'instant présent.

Donc, lorsque nous sommes en présence d'une association plusieurs à plusieurs, il convient de toujours
se poser les questions relatives aux données complémentaires, et tout particulièrement les données
historiques.

Passons maintenant à la troisième association, l'association „fournir'

« Est-ce que un {Produits} peut {être livre} plusieurs {Fournisseurs} »

La réponse est OUI, bien sûr, et heureusement !

« Est-ce que un {Fournisseurs} peut {livrer} plusieurs {Produits}»

Cette fois encore la réponse est OUI. Il est possible qu‟un fournisseur livre des TOMATES et du RIZ.

Comme nous pouvons donner deux réponses positives, nous avons une association n-n (plusieurs à
plusieurs).

Dans ce cas si, on va faire pareille qu‟on a fait pour les Entités Commandes et Produits. On aura :
Client Commande Regrouper Produits

N0Client N0Commande NoCommande RefProduit


Titre DateCommande RefProduit NomProduit
Nom 1 Passer n DateLivraison 1 n n 1 PrixUnitaire
Adresse CommandeLivre Quantité Taxe
Téléphone Remise QteStock
Ville NoClient PrixUnitaire NiveauAlerte
CodePostal Taxe
Observations

Produits-Fournis
Fournisseurs
RefProduit
NoFournisseur NoFournisseur
1 n n
Titre
Nom
Prénom
Adresse
CodePostal
Téléphone

On aurait pu dire qu‟un produit pouvait être livré par un seul fournisseur, dans ce cas, la table
intermédiaire

« Produits-Fournis» aurait été inutile, pour savoir quel était le fournisseur d‟un produit, il suffisait d‟ajouter
un champ « n° fournisseur » dans la table produit. Il aurait contenu, pour chaque produit, le n° de
fournisseur le livrant.

3-c. En résumé

Après avoir posé la question magique, vous retiendrez 3 situations au maximum :


plusieurs-à-
un-à-plusieurs un-à-un
plusieurs

Ce cas aussi est très


fréquent. Il est un peu
Ce cas est extrêmement plus complexe à
courant. Il est très facilement mettre en œuvre. Il
géré également. correspond en fait à 2
associations un-à- Ce cas est extrêmement rare.
- dans ce cas, il faut plusieurs Si une entité ne peut être liée
reproduire l'identifiant de qu'à une seule autre entité et
l'entité qui est du côté un - reproduire les réciproquement, il est fort
dans l'entité côté plusieurs (à identifiants des deux probable qu'il s'agisse en fait
noter que le nom même est entités dans de la même entité
peu important, mais que l'association
l'information qu'on va y - Réfléchir à
mettre, elle, l'est) l'ensemble des
données annexes (y
compris historiques)

A vous de Jouer !

Nous allons énoncer 2 exercices. Essayez de les réaliser avant de passer aux chapitres suivants.

Exercice 1 : Commandes

En partant de notre modèle de prise de commande précédent, ajoutez les entités suivantes :

Messager (il s'agit de la société qui va s'occuper de faire la livraison)


Employé (il s'agit de l'employé ayant pris la commande)

Exercice 2 : Société Informatique

Nous allons passer maintenant à la mise en application. Voici un petit exercice que vous allez essayé de
résoudre par vous-même. Je commence par mettre en situation.

Imaginez que vous interveniez pour une société de prestations de services informatiques, afin de
concevoir une base de données permettant le suivi et la facturation des interventions réalisées chez les
clients. La société est susceptible de réaliser n'importe quelle intervention. Il faut impérativement que le
modèle que vous allez concevoir puisse répondre aux questions suivantes, sans en oublier une partie :

1. quel employé est dans quel service, et qui le dirige ?


2. quel employé travaille pour quel client et à quelles dates ?
3. quel client a demandé quelle intervention ?
4. quels matériels sont à facturer, pour quelles interventions, et en quelles quantités ?
5. quels matériels composent quels autres matériels ?

Voici quelques informations supplémentaires que vous devez connaître :

un employé ne peut appartenir qu'à un seul service même si chaque service peut contenir une
multitude d'employés.
à aucun moment mon client ne peut prendre contact directement avec mon employé. Il serait
d'ailleurs tout aussi inconvenant que mon employé prenne directement contact avec mon client.
une intervention peut nécessiter plusieurs jours, et la présence de plusieurs employés. Il est
aussi possible qu'une intervention ne nécessite la présence que d'un seul employé pour une
seule journée. La présence de mes employés pour une intervention peut-être discontinue
(vacances, week-end,...).

Essayez de réaliser une solution par vous-même.


Les tables
1- La base de données

Une base de données est un ensemble structuré de données enregistrées sur des supports accessibles
par l‟ordinateur pour satisfaire simultanément plusieurs utilisateurs de façon sélective et en un temps
opportun.

Elle doit avoir un certain nombre de caractéristiques :

Données structurées : les informations contenues dans une base de données sont réparties en
enregistrements, chaque enregistrement ayant une structure bien définie

Données non redondantes : Une même information ne sera pas répétée plusieurs fois dans la base de
données.

Données cohérentes : Il ne doit pas être permis d‟enregistrer dans une base des informations
incohérentes entre elles

Données accessibles directement selon de multiples critères

Indépendance des programmes et des données : La base de données doit être indépendante des
programmes qui y ont accès, on doit pouvoir utiliser un autre programme pour traiter différemment ces
données sans avoir à toucher à ces données

Sécurité des données stockées : la base de données doit permettre un système de sécurité permettant
de gérer les droits d‟accès aux informations par les utilisateurs.

2- L’organisation des données dans la base de données

L’organisation des données dans un SGBD

Dans Access, comme dans les autres SGBD, les informations doivent être segmentées en données qui
sont stockées dans des tables.

Une table est donc un ensemble de données, organisées en lignes et en colonnes.

On peut stocker dans une table n‟importe quel type d‟information (texte, chiffres, graphisme, son, etc.)

Chaque table est divisée en enregistrements.

Les enregistrements étant l‟ensemble des données relatives à la même information. Prenons l‟exemple
d‟un carnet d‟adresses. Pour ce carnet d‟adresses, nous allons utiliser une table « contacts » qui
contiendra toutes les informations concernant chaque contact, chaque enregistrement contiendra les
informations relatives à un (et un seul) contact (nom, adresse, téléphone, date de naissance, etc.…).

Comme on vient de le voir, chaque enregistrement contient un ensemble d‟informations (nom, adresse,
téléphone) qui ont elles-mêmes divisé l‟enregistrement en plusieurs parties, chaque partie s‟appelle un
champ.
Le champ contient une partie des informations de chaque enregistrement.

Base de données

Table1 Table2 Table3

Enregistrement1 Enregistrement2

Organisation de la base de données


Champ1 Champ2 Champ3

Nous avons vu précédemment que, dans les BDD, les données sont stockées dans des tables. Nous
aborderons donc l'étude des BDD par celle de la création et de la manipulation des tables. Dans les
bases de données, la table est le premier objet par ordre d'importance décroissante. Pas de table, pas de
données!

Chacune des entités de notre modèle constitue une table dans notre BDD.

La création d'une table

La première opération consiste à créer d'abord une base de données vide.

Création de la Base de données

On lance Microsoft Access 2007 en cliquant sur Start – All Programs – Microsoft Office – Microsoft
Access 2007.
La fenêtre ci-dessus s‟affichera. Dans la partie de droite, on a les différentes Template disponible
classées par catégories et à gauche les bases de données récemment ouverte et au milieu tout en haut,
on a Nouvelle base de données vide et en bas les différentes Template. Maintenant pour créer une
nouvelle BDD, on clique sur BDD vide et dans le panneau de gauche affichera une nouvelle fenêtre qui
nous demandera de rentrer le nom que l‟on veut donner a notre BDD, tout juste en bas on a le chemin
dans lequel se trouvant le répertoire qui va contenir notre BDD. Par défaut Access place notre BDD dans
Mes documents ; si vous voulez changer de répertoire cliquer sur parcourir et choisir le chemin menant
au répertoire désirant placer la BDD. Une fois le nom de la base rentrer « Magasin » par exemple, vous
cliquez sur créer. Une nouvelle fenêtre affichera. Voir les images ci-dessous.
Image1

Image2
Access affiche automatiquement pour vous une nouvelle table. On ferme cette table.

Pour fermer la BDD, vous cliquez sur le bouton Office puis sur la commande Fermer la BDD. Cela
n‟arrête pas Access, et vous pouvez ouvrir une autre BDD.

Pour quitter Access, cliquez sur la croix placée en haut à droite de votre écran. Vous obtenez le même
résultat en cliquant sur le bouton Office puis sur Quitter Access.

Ouvrir a nouveau la BDD «Magasin» qu‟on a créé et vous verrez un avertissement de sécurité affiché.
Pour le masquer temporairement :

Cliquez sur le bouton Options dans le bandeau de sécurité.

Dans la boite qui se présente, choisissez l‟option Activer ce contenu. Valider par le bouton OK.

Cet avertissement s‟affichera systématiquement à chaque ouverture de la BDD; vous verrez, dans une
prochaine fiche, comment désactiver cet affichage.

Voir Image ci-dessous


Dans Access 2007 les barres de menu disparaissent. Celles-ci sont regroupées dans une large bande
horizontale nommée Ruban, structurée en plusieurs onglets. En ce moment vous voyez probablement
les onglets Accueil, Créer, Données Externes, Outils de Base de Données, entre autres, mais
d‟autres onglets peuvent s‟ajouter au Ruban, selon les opérations que vous allez lancer.

Le volet de navigation, à gauche de l‟écran, est une autre nouveauté d‟Access 2007, qui remplace
avantageusement; la fenêtre de BDD des versions précédentes. Son rôle est de recenser l‟ensemble des
objets (tables, requêtes, formulaires, états) de la BDD, en les regroupant par catégories.

Désactiver les avertissements de sécurité

Pour ce faire, cliquez sur le bouton Office, puis sur la commande Option Access.

La fenêtre qui se présente compte un grand nombre de réglages. Activez la catégorie Centre de gestion
de la confidentialité. Cliquez ensuite sur le bouton Paramètres du centre de gestion de la
confidentialité.

Dans la nouvelle boite qui apparait, activez la section emplacements approuvés. Le principe consiste à
indiquer à Access quels sont les dossiers de votre disque dur pouvant être considérés comme surs.

Cliquez sur le bouton Ajouter un nouvel emplacement, puis sur le bouton Parcourir.

Allez jusqu‟au dossier désirer, le sélectionner et cliquez sur OK.

De retour dans la boite précédente, activez la case les sous dossiers de cet emplacement sont
également approuvées. Une description succincte peut faciliter la gestion de vos emplacements sur le
long terme. Cliquez sur OK autant de fois que nécessaire pour valider vos réglages.
La fenêtre Base de Données s‟affiche, elle contient tous les « objets » qui peuvent composer une base
Access :

Les Tables : Chaque table de la base va contenir les données se rapportant à un sujet particulier, la
table « clients » va contenir les informations sur les clients. C‟est l‟objet fondamental de la base de
données, toute requête, formulaire ou état va être basé sur une ou plusieurs tables.

Les Requêtes : Les requêtes vont être utilisées pour obtenir des données contenues dans une ou
plusieurs tables à partir d‟une question. Par exemple, une requête va pouvoir nous afficher la liste des
clients habitant à Paris.

Les Formulaires : Le formulaire est utilisé pour faciliter la saisie et la modification des données d‟une
table, par exemple, le formulaire "client" va permettre d‟entrer de façon conviviale les informations
concernant un client. On peut les saisir sans formulaire, ce que nous verrons, mais cette méthode est
moins conviviale.

Les États : Les états permettent d‟imprimer des données contenues dans des tables selon une
présentation définie en y intégrant éventuellement des calculs.

Les Macros : Les macros commandes permettent d‟automatiser une suite d‟opérations répétitives.

Les Modules : Les modules sont des programmes écrits en Visual Basic for Application (VBA) pour
réaliser des opérations qui seraient trop complexes en utilisant les seules fonctionnalités d‟Access.

Maintenant pour créer la table :

Cliquez sur l‟onglet Créer.

Sélectionner l'objet table, s'il ne l'est pas déjà par défaut.

Trois méthodes sont proposées pour créer une nouvelle table :


créer une table en mode création. C'est la méthode générale, la seule que nous
recommandions ;
créer une table à l'aide de l'assistant. Ce dernier vous offre un certain nombre de tables toutes
prêtes dont vous pouvez vous inspirer. Cependant, rien ne remplace une bonne analyse du
problème de stockage des données, suivie d'une réalisation personnalisée et adaptée ;
créer une table en entrant des données. Une table toute prête vous est proposée, dans laquelle
vous pouvez immédiatement saisir des données, le logiciel se chargeant de déterminer leur type
et leur format. Cette façon de procéder est déplorable, et nous la déconseillons absolument, sauf
pour des essais sans suite.

Dans le groupe d‟objet Table, sélectionnez Table en mode création.


En mode création, une fenêtre s'ouvre qui permet de définir la table champ par champ, en précisant le
nom du champ et le type de données qu'il contient.
Une nouvelle fenêtre s‟affiche avec un nouvel onglet et le nouvel objet Table1.

La création de la table s‟effectue en remplissant les trois colonnes « Nom du champ », « Type de
données » et « Description »

Chaque ligne de ce tableau contient les informations de chaque champ :

Le nom de chaque champ de la table (de 1 à 64 caractères)

Le type de données (voir plus bas) à choisir parmi 9 types proposés par Access

La description du champ (255 caractères maximum)

Les types de données

Chaque champ peut contenir des données de différents types : le nom du client va contenir des
caractères alphabétiques, le code postal va contenir des chiffres, la date de livraison une date, un champ
prix va contenir des valeurs monétaires.

Il faut choisir, pour chaque champ de la table, le type de données le plus approprié, en effet, rien
n‟interdit de choisir comme type de données pour un champ contenant une date ou un code postal
un type « texte » ou pour champ contenant un prix un type « numérique », mais autant utiliser les types
les plus appropriés !
Les différents types sont :

Texte : Pour un champ destiné à contenir des caractères alphanumériques (lettres et/ou chiffres sur
lesquels on n'effectue pas de calculs (code postal, numéro de téléphone)), attention, le champ de type
texte ne peut contenir plus de 255 caractères, on l‟utilise pour un nom, une adresse, etc…

Mémo : Même utilisation que le type texte, mais le champ de type mémo peut contenir jusque 65535
caractères (64 Ko). Utilisé pour une description longue par exemple.

Numérique : Le champ ne pourra contenir que des nombres avec ou sans décimales. (Un code postal,
un n° d‟identification par exemple). Données numériques (non monétaires) susceptibles d'être utilisées
dans des opérations mathématiques

Date/Heure : Le champ ne pourra contenir que des dates ou des heures (Access vérifie la validité des
dates ou des heures saisies)

Monétaire : Valeurs présentées sous format monétaire (exemple : 1 23,45F)

NuméroAuto Valeur numérique incrémentée automatiquement lors de la saisie de chaque


Enregistrement. Si vous choisissez ce type de champ, vous ne pourrez rien saisir dedans, c‟est Access
qui y placera un nombre automatiquement à chaque fois que vous créerez un nouvel enregistrement. On
l‟utilisera lorsqu‟on veut être sur que le contenu de ce champ ne se retrouvera pas dans un autre
enregistrement de la table, par exemple pour le numéro de client : chaque nouveau client aura un
numéro unique automatiquement affecté par Access, c'est un champ de ce type qui sera le plus souvent
utilisé pour être une clef primaire.

Oui/Non : Seules deux données sont autorisées dans ce champ : Oui et Non (on utilisera ce type de
données par exemple avec un champ « réglé » qui indiquera si une facture a été réglée ou non)
Objet OLE : OLE (Object Linked and Embbeded) est une technologie utilisée par Windows, elle permet
d‟insérer dans une application des objets provenant d‟autres applications, on utilisera un champ de ce
type pour insérer dans la table une image, un son, un fichier Word, etc...

Lien Un champ de ce type contiendra une adresse Internet sur laquelle on pourra cliquer Hypertexte
directement.

La liste de choix n‟est pas vraiment un type de données, nous l‟étudierons plus tard.

Au choix de l'utilisateur, il est aussi possible d'ajouter une description. Ceci est pratique lorsque vous
revenez quelques mois plus tard et voulez savoir pourquoi vous avez choisi d'avoir ces champs dans la
table. Cette description va aussi apparaître dans le coin inférieur gauche de la fenêtre au moment de
l'entrée ou la modification des données.

Les propriétés du champ

Au bas de l'écran, il y a les caractéristiques ou les propriétés du champ. Chacun est pratique selon les
circonstances. La partie qui suit explique chacune de ces propriétés et quand ceux-ci sont pratiques.
Vous pouvez aussi aller chercher plus d'information sur l'une des propriétés ci-dessous en plaçant le
pointeur sur celle-ci et en appuyant sur la touche F1.

Taille: Détermine le nombre de caractère qui peut être contenu dans un champ. Cette propriété
est seulement valide pour les champs de type Texte. Les autres types de champs ont
déjà une taille prédéterminée.

Format: Détermine la façon que l'information sera affichée dans le champ.

Masque de Détermine la façon que l'information sera entrée dans le champ.


saisie:

Légende: Texte qui sera affiché dans la feuille de données, les formulaires et les états à la place
du nom du champ.

Valeur par Détermine une valeur initiale lors de l'ajout de nouveaux enregistrements.
défaut:

Valide si: Place des bornes ou des limites sur le genre d'information qui peut être entré dans un
champ. Par exemple, peu de personnes seraient prêtes à travailler pour un salaire
négatif.

Message si Affiche ce message si le contenu du champ ne respecte pas les restrictions de la


erreur: propriété valide si.

Null Interdit: Si actif, ne permet pas d'avoir un contenu vide dans le champ.

Chaîne vide Permet d'insérer des espaces " " dans un champ.
autorisée:
Indexé: Cette propriété est pour afficher les informations en ordre croissant lors de l'affichage.
Elle est aussi nécessaire lors de la création de relations avec d'autres tables.

Compression Unicode: Un octet suffit pour saisir un caractère (pour les alphabets utilises dans l‟Europe
de l‟ouest et dans le monde anglophone).

Remarque 1 : la propriété "mode IME" concerne l'usage d'Access en japonais, et ne nous intéresse donc
pas ici.
Pour faire fonctionner correctement certaines requêtes, il est important de bien comprendre la différence
entre la valeur Null, une chaîne vide et une chaîne blanche. Un champ d'un enregistrement :
possède la valeur Null si aucune information n'a été introduite, ou si l'information présente a été
supprimée ;
contient une chaîne vide si on a défini la valeur par défaut du champ à l'aide de deux guillemets
contigus (""), et si aucune information n'a été introduite (ou si l'information introduite a été
supprimée) ;
contient une chaîne "blanche", si un ou plusieurs espaces ont été introduits et n'ont pas été
supprimés.

Ces dernières propriétés sont ceux qui sont disponibles pour les champs de type Texte. Voici quelques
propriétés supplémentaires disponibles pour les autres types de champs.

Décimales (Numérique, Détermine le nombre de décimales qui sera conservé avec le chiffre.
Monétaire):

Nouvelles Valeurs Détermine si le prochain chiffre sera la suite de la série (Incrément) ou un


(NuméroAuto): chiffre au hasard (aléatoire).

Une fois la table « Client » correctement renseignée, on devrait avoir quelque chose qui ressemble à ça :
Pour avoir plus d'informations sur les propriétés des champs:

Placez le pointeur dans la propriété pour laquelle vous voulez plus d'informations.
Appuyez sur la touche F1.

L'aide d'Access va vous afficher l'information qu'elle possède sur cette propriété.

Sauvegarder la structure de la table

Après avoir conçu une table, il faut la conserver.

Appuyez sur le bouton .


OU
Du menu Fichier, sélectionnez l'option Enregistrer.

Access va ensuite vous demander quel est le nom de la nouvelle table.

Entrez le nom de votre choix. Pour cet exercice, entrez le nom Client et appuyez sur le bouton
OK.

Access va possiblement vous demander si vous voulez ajouter une clé primaire à votre table. Pour le
moment, cette table n'a pas besoin de clé primaire. Elle sera ajoutée un peu plus loin sur cette page.

Appuyez sur le bouton Non.

Entrée de données

Maintenant que la structure de la table est définie, il est possible d'entrer de l'information utile pour
l'utilisateur; des données. Pour commencer, il y a des données sur les quatre clients du magasin. La
prochaine étape consiste à entrer ces données dans la table.
Appuyez sur le bouton . Se trouvant au coin supérieur droit de l‟écran.
Access va vous montrer une grille pour entrer les données comme celle-ci (sans les données).

Entrez les informations suivantes sur les clients du magasin.

Prénom Nom Adresse Téléphone DateNaissance Titre Sexe

Louis-Jacques Blanc Turgeau 50937152342 56-02-15 Manager Masculin

Jacqueline Georges Croix des bouquets 50925127892 75-05-23 Couturière Féminin

André Joseph Pétion-Ville 50934237845 45-10-18 PDG Masculin

Rose Jean Carrefour 50922344673 77-09-07 Assistante Féminin

Note: La dernière ligne d'une table ou d'une requête affiche toujours un "*" dans la case grise à la gauche
de la ligne. Ceci est pour indiquer la fin de celle-ci.
Modification de la table

Après un certain temps, vous vous apercevrez que des changements sont nécessaires à une table. Elle a
besoin de nouveaux champs. Ou, certains champs ont besoin d'être modifiés ou simplement éliminés.

À partir du mode feuille de données, appuyez sur le bouton

Ou

À partir du Panneau de Navigation, sélectionnez la table et appuyez sur le bouton Modifier.

Pour l'exemple, il faut ajouter quatre nouveaux champs: NuméroClient, statut, ville et pays. Le champ
NuméroClient sera utilisé pour différencier chacun des enregistrements. Il sera la clé primaire de la
table. De plus, le champ Numéro de poste sera inséré au début de la structure de la table. Le champ
Statut servira à conserver le statut marital de l'employé. Ce champ sera du type Numérique. Il va
conserver le statut marial selon un chiffre: 1 = célibataire, 2 = marié sans dépendants, 3 = marié avec
dépendants, 4 = divorcé, 5 = divorcé avec allocation familiale. Donc, les seules chiffes valides sont entre
1 et 5. Il sera aussi utilisé lors de la création d'un formulaire. Le champ Ville sera du type Texte. La ville
qu‟habite le client. Le champ Pays sera de type Texte.

Nom du champ Type de champ Taille Format Autre

NuméroClient Compteur

Prénom Texte 15

Nom Texte 15

Adresse Texte 10

Téléphone Texte 15

DateNaissance Date/Heure Date abrégée

Sexe Texte 10

Titre Texte 15

Ville Texte 10

Pays Texte 15
Insérer un champ

Placez le pointeur sur la ligne que vous voulez insérer un nouveau champ à la table. Pour l'exercice,
placez le pointeur sur la première ligne de la table, soit la ligne du champ Prénom.
Du menu Création, sélectionnez l'option Insertion d'une ligne.
OU
Appuyez sur le bouton .

Une nouvelle ligne libre va apparaître. Les autres lignes seront décalées vers le bas.

Écrivez le nom du champ. Pour l'exercice, il s'agit de NumeroClient.


Sélectionnez le type de champ NuméroAuto avec une taille de 15 caractères.
Insérez les nouveaux champs Statut, Ville et Pays à la fin de la table avec leurs propriétés qui
sont décrites dans la table ci-dessus.

Déplacer un champ

Pour changer l'ordre de présentation des champs


Cliquez sur la boîte grise à la gauche du nom du champ.
En gardant un doigt sur le bouton gauche de la souris, déplacez le champ vers le haut ou le bas selon
vos besoins.

Le champ va se réinsérer dans la structure de la table entre les deux champs dont la ligne qui la sépare
est plus épaisse dès que vous lâcherez le bouton de la souris.

Supprimer un champ

Cliquez sur la ligne du champ que vous voulez supprimer.


Appuyez sur la touche Supprime.
OU
Du menu Création, sélectionnez l'option Supprimer les lignes.

Placer la clé primaire

La clé primaire est un champ, ou une série de champs, qui permet de distinguer chacun des
enregistrements. Chaque personne à son numéro d'assurance social, un numéro de client ou d'employé.
Celui-ci peut être composé de lettres ou de chiffres. L'une des choses qu'Access vérifie par après est de
s'assurer qu'il n'y a pas deux enregistrements qui auront la même information dans le champ. Par
exemple, deux personnes peuvent avoir le même numéro d'assurance sociale ou deux produits le même
numéro de produits.

Access ne permettra pas la création de la clé primaire si deux enregistrements ont la même information
dans le champ choisi. Si vous avez absolument besoin que les deux enregistrements aient la même
information, il faudrait considérer un autre champ, ou une combinaison de champs, pour la clé primaire
de la table.

Une table n'est pas obligée d'avoir une clé primaire. Elle a cependant besoin d'une clé primaire si d'autres
tables veulent accéder à de l'information de cette table. Par exemple, la table Commande pourrait, grâce
aux relations entre les tables, accéder à l'information de la table Clients pour connaître le nom du client,
son adresse et d'autres informations. Donc, pour trouver plus rapidement l'information et pour s'assurer
qu'il n'y a pas deux clients avec le même numéro de clients, il faut que le champ Numéro de client de la
table Clients soit la clé primaire de cette table.

Pour cet exercice, le nouveau champ NuméroClient sera la clé primaire de la table.

Placez le pointeur sur la ligne du champ qui sera la clé primaire de la table. Pour l'exercice, il s'agit du
champ NuméroClient.
Appuyez sur le bouton .
La clé placée dans la boîte grise à la gauche du champ NuméroClient confirme que la clé primaire est
sur ce champ.

Si par erreur, vous avez choisi le mauvais champ pour la clé primaire, appuyez sur le bouton pour
désélectionner le champ comme clé primaire.

Placer une clé primaire sur plusieurs champs

Une clé primaire peut aussi être composée de plusieurs champs. Il y a même des occasions où il est
nécessaire d'avoir une clé primaire de cette façon. Pour cet exercice, la clé primaire sera composée des
champs Prénom, Nom et DateNaissance.

Cliquez sur la petite boîte grise à la gauche du champ Prénom.


En gardant un doit sur la touche CTRL, cliquez ensuite sur les boîtes grises à la gauche des champs
Nom et DateNaissance.
Appuyez sur le bouton .

Voici le résultat final.


La clé placée dans la boîte grise confirme que la clé primaire est composée des champs Prénom, Nom
et DateNaissance. Cela veut dire qu'il est possible d'inscrire plusieurs fois la même valeur dans l'un des
champs. Mais il est impossible d'inscrire plusieurs fois les mêmes valeurs dans tous les champs qui
composent la clé primaire en même temps. Par exemple, il est impossible d'avoir deux personnes ayant
le même prénom et nom qui sont embauchés en même temps.

Pour les besoins des prochains exercices, replacez la clé primaire sur le champ NumeroClient.

Liste de choix (liste déroulante)

Les listes ont l'avantage de permettre d'entrer plus rapidement les données ainsi que de réduire le
nombre d'erreurs à l'entrée. Il est aussi possible de limiter l'entrée de données au contenu de la liste. Les
prochains exercices consistent à utiliser une liste de choix avec le champ Sexe.

Retournez en mode création.


Placez le pointeur sur le champ Sexe.
Dans la colonne type de données, sélectionnez Assistant Liste de choix.
La fenêtre suivante s‟affiche
Il y a deux façons de créer une liste de choix : soit a partir du contenu d'une autre table (ce que nous
verrons après), soit à partir d'une liste que l'on va taper soi-même une fois pour toutes, c'est ce que nous
allons choisir.

(Cliquez ensuite sur Suivant)

On va taper dans la colonne Col1 la liste de Sexe possible et cliquer sur Suivant une fois terminé.
On nomme ici la liste de choix (peu importe le nom choisi) et on clique sur "Terminer"

Enregistrer les modifications de la table en appuyant sur le bouton .


Appuyez sur le bouton .

Placez le pointeur sur le champ Sexe de l'un des enregistrements.

Le bouton de la liste va apparaître à la droite de la case. Vous pouvez cliquez dessus pour choisir l'un
des choix. Vous pouvez aussi commencer à écrire dans la case.

Entrez dans la case du Sexe Male.


Appuyez sur la touche Entrée.

Vous verrez qu‟Access accepte que vous entrez autre chose dans la liste, pour vous limitez qu‟à votre
liste, retournez en mode création.

À partir du mode feuille de données, appuyez sur le bouton


Placez le pointeur sur le champ Sexe.
Au bas de l'écran, sélectionnez l'onglet Liste de choix.
Dans le champ limité à la liste sélectionnez oui.
Retourner en mode feuille de données, appuyer sur le bouton

Entrez dans la case du Sexe Male.


Appuyez sur la touche Entrée.
Access va vous afficher ce message d'erreur puisque Male n'est pas dans la liste prédéterminée.

Appuyez sur le bouton OK.


Sélectionnez l'un des éléments de la liste.

Retournez en mode Création en appuyant sur le bouton .

Le prochain exercice consiste à utiliser une liste de choix en utilisant le nom des champs d'une table ou
d'une requête.

Pour le faire on crée une table qu‟on va appeler Commande qui contient les champs suivants :
NumeroCommande de type NuméroAuto, la Description décrit le ou les article(s) se trouvant dans la
Commande de type Texte, la DateCommande la date a laquelle le client a passe la commande de type
Date/Heure, la DateLivraison la date qu‟on a livre la commande au client de type Date/Heure et en
dernier lieu le NumeroClient afin de retracer le client qui a passe la commande de type Numérique.

On suit le même processus de création de table qu‟avant et on obtiendra le résultat suivant :


Placez le pointeur sur le champ NumeroClient de la table Commande.
Dans la colonne type de données, sélectionnez Assistant Liste de choix.

La fenêtre suivante s‟affiche

1- Nous choisissons l'option "Je veux que la liste de choix recherche les valeurs dans une table
ou requête" ;
2- nous choisissons la table "Client" ;

3- nous sélectionnons les champs, intitulés « Noclient, Nom, Prénom, Ville » ;


4- nous réglons la largeur de la future liste ; nous désactivons l‟option « Cachée la colonne Clé
(Recommandé) » ;

5- Access nous demande lequel de ces trois champ va servir à initialiser le champ "Noclient" de la
table "Commande", il est clair que nous voulons que le champ "Noclient" de la table
"Commande" soit initialisé avec le numéro de client du client que nous aurons sélectionné dans
la liste, on choisit donc "Noclient" et on clique sur Suivant, on nomme ensuite la liste, et on peut
commencer à saisir des commandes
Que se passe-t-il lorsqu'on se positionne sur le n° de client ?
Access va lire toute la table "Client", et créer une liste de choix à partir de cette table. Cette liste contient
les champs que nous lui avons indiqué. Il suffit de sélectionner un client dans la liste, et comme nous lui
avons dit d'initialiser le champ N° Client de la table "Commande" avec la première colonne de la liste de
choix, son numéro sera automatiquement copié.

Les relations

Nous avons vu, précédemment, comment établir le schéma relationnel d'une base de données. Pour
implémenter ce schéma dans un SGBD, il faut créer des tables (déjà fait) et des relations.

La création d'une relation

Nous ouvrons la fenêtre "Relations" en cliquant sur l‟onglet « Outils de BDD » puis sur « Relations ».

La fenêtre ci-dessus s‟affiche, avec une petite boite de dialogue. Cette boite contient trois onglets
s‟intitulant: table, requête et les deux. L‟onglet table affiche la liste des tables, l‟onglet requête affiche la
liste des requêtes et le dernier la table et les requêtes que contient la BDD. Nous sélectionnons dans
“l’onglet table” la ou les table(s) sur laquelle doit porter la relation, puis nous cliquons successivement
sur les boutons "Ajouter" et "Fermer".
La ou les tables choisies (s) apparaitront dans la fenêtre de la relation.

Ajout d’une table dans la fenêtre « Relation »

Pour Ajouter une table a la fenêtre « Relations », on clique sur « Afficher la table », puis on choisi la ou
les table(s) sur laquelle va se faire la relation puis cliquons successivement sur « Ajouter » et
« Fermer ».

Suppression d’une table dans la fenêtre « Relation »

Pour enlever une table dans la fenêtre « Relations », on sélectionne la table et on clique sur « Cachée la
Table ». Pour notre première relation, effectuons celle entre la table « Client » et la table
« Commande », pour créer la relation désirée entre les deux tables, nous cliquons sur le champ
"NoClient" de la table « Client », et nous tirons le curseur (le bouton gauche de la souris maintenu
enfoncé) vers le champ "NoClient" de l'autre table. Une fenêtre intitulée "Modification des relations"
s'ouvre, comme le montre la figure ci-dessous.

Il suffit de cliquer sur le bouton "Créer" pour que la relation apparaisse, comme le montre la figure
suivante :
Pour supprimer une relation : nous ouvrons la fenêtre "Relations", nous sélectionnons la relation d'un clic
droit, nous choisissons "Supprimer" dans la liste qui s'affiche, et nous confirmons la suppression.

Pour modifier une relation : nous ouvrons la fenêtre « Relations », nous sélectionnons la relation d‟un
clic droit, nous choisissons « Modifier la relation » dans la liste, de telle sorte que la fenêtre
"Modification des relations » s'ouvre.

L'intégrité référentielle

Dans la fenêtre "Modification des relations", un choix s'offre à nous, celui de l'intégrité référentielle.
Ce terme implique que le SGBD effectue un certain nombre de contrôles, pour assurer la cohérence
interne de la BDD. Si nous appliquons l'intégrité référentielle :
un numéro de client ne provenant pas de la table "Client" sera refusé dans la table
"Commande" ;
il ne sera pas possible de supprimer un numéro de client dans la table "Client" s'il a été utilisé
dans la table "Commande".
Nous cochons donc la case "Appliquer l'intégrité référentielle", puis nous appuyons sur le bouton
"OK". Dans la fenêtre "Relations", la présence des signes 1 et infini traduit l'application de l'intégrité
référentielle. On remarquera que le nom du champ qui porte la clé (et qui se trouve du côté 1 de la
relation) est toujours écrit en caractères gras.
Attention ! le SGBD refusera d'appliquer l'intégrité référentielle si les deux champs liés par la relation ne
possèdent pas le même type de données. Seule exception : si le champ côté 1 est du type NuméroAuto,
il doit être du type numérique (entier long) du côté n. De même, le SGBD refusera d'appliquer l'intégrité
référentielle si les tables contiennent déjà des données, dont certaines ont des valeurs empêchant
l'intégrité référentielle de s'appliquer. Exemple : un numéro de client dans la table "Commande" ne figure
pas dans la table "Client".

Si nous demandons l'intégrité référentielle (et il est très fortement conseillé de le faire !), le système nous
propose deux autres choix. Le premier, "Mettre à jour en cascade les champs correspondants",
signifie que si nous modifions l'écriture du numéro de client du côté 1 de la relation, cette modification
sera reportée partout du côté n. D'une manière générale, il est recommandé d'activer cette mise à jour en
cascade. Si nous ne le faisons pas, et si nous tentons de modifier un numéro de client (pour corriger une
faute d'orthographe, par exemple), le système nous arrêtera, avec le message suivant : "Impossible de
supprimer ou de modifier l'enregistrement car la table 'Commande' comprend des enregistrements
connexes". C'est clair, n'est-ce pas ?
Le second choix, "Effacer en cascade les enregistrements correspondants", signifie que si nous
supprimons une donnée du côté 1 de la relation, tous les enregistrements utilisant cette donnée du côté n
seront supprimés. Cela implique que, si nous supprimons par erreur un numéro de client dans la table
"Client", nous supprimons en même temps de la table "Commande" toutes les commandes passées par
ce client. Il ne faut donc pas activer cette option, sauf momentanément et en cas de besoin spécifique.
Les Requêtes
Nous savons désormais stocker des informations structurées dans les tables d'une base de données
relationnelle. Cette étape franchie, il nous faut maintenant apprendre à gérer ces informations, et à
retrouver celles dont nous avons besoin quand cela s'avère nécessaire. Pour ce faire, la requête
constitue l'outil adéquat. Les requêtes vont servir à afficher uniquement certaines données contenues
dans les tables selon certains critères. Elles peuvent aussi faire des calculs sur vos données, ainsi que
créer des sources de données pour les formulaires, les états ou même d'autres requêtes (on peut faire
une requête sur le résultat d'une autre requête). Elles servent encore à modifier des tables existantes ou
à en créer des nouvelles.
L'outil requête à trois fonctions principales :
la réalisation de vues présentant tout ou partie de l'information contenue dans la BDD. Dans une
base de données relationnelle, les données sont éparpillées dans de multiple tables, liées par des
relations, et contenant souvent des codes non explicites. Pour appréhender, en partie ou en
totalité, le contenu de la base, il faut rassembler les données utiles dans une seule table, que
l'utilisateur peut consulter directement ou via un formulaire. Pour ce faire, on sélectionne des
colonnes dans différentes tables, et on met les lignes en correspondance grâce aux relations ;
la maintenance de la BDD. Cette opération consiste à archiver et / ou supprimer des
enregistrements obsolètes, mettre à jour des données révisables, rechercher et supprimer les
doublons indésirables, etc. Elle concerne des lignes particulières, mais le nombre de colonnes
n'est pas modifié ;
la recherche d'information dans la BDD. Cette opération consiste à créer une sous-table
contenant les enregistrements répondant à certains critères et appartenant à certains champs.
Elle porte à la fois sur les lignes et les colonnes d'une table, ou de plusieurs tables liées par des
relations.
Les différents types de requêtes
Pour assurer les trois fonctions précitées, différents types de requêtes ont été créés, que l'on retrouve
dans presque tous les SGBD. On peut les classer ainsi :

La requête sélection : C'est celle qu'on utilisera le plus souvent. Elle permet de sélectionner des
enregistrements, de faire des calculs et des regroupements. Elles ressemblent beaucoup aux filtres, mais
permettent, en plus, de travailler sur plusieurs tables simultanément.
La requête de Création de table : Cette requête crée une table à partir des données qu'elle a extraites
dans une ou plusieurs autres tables.
La requête Mise à Jour : Cette requête modifie le contenu d'un ou plusieurs champs d'une ou plusieurs
tables. C'est le moyen le plus efficace pour mettre à jour un grand nombre d'enregistrements en une
seule opération.
La requête Ajout : Cette requête ajoute les données qu'elle a extraites à la fin d'une table déjà existante.
La requête Suppression : Cette requête supprime un ou plusieurs enregistrements dans une ou
plusieurs tables.
La requête d'Analyse croisée : Cette requête présente ses résultats sous forme de tableau (de type
Excel). On l'utilisera pour comparer des valeurs, dégager des tendances.

Le SGBD Access permet de créer des requêtes en utilisant soit une interface graphique, soit le langage
SQL. Notre étude se base plutôt sur l‟interface graphique. La recherche d'information est, à notre humble
avis, l'aspect le plus intéressant, pour ne pas dire le plus passionnant, de l'étude des bases de données.

Création d'une requête

La requête sélection
Notons d'abord qu'une requête opère sur une ou sur plusieurs tables, sur une ou plusieurs requête, sur
les deux. On ne peut donc pas créer de requête dans une base de données vide. Certes, le SGBD
Access ne refusera pas d'ouvrir la fenêtre de création d'une requête dans une base vide, mais si aucune
table n'est présente, nous ne pourrons rien faire d'autre que créer une requête vide.
Ouvrons donc notre BDD “Magasin”, sélectionnons l‟onglet “Créer” puis cliquons sur l‟objet “Requête en
mode création”.

Une fenêtre intitulée "Requête1" s'ouvre, ainsi qu'une boite de dialogue intitulée "Afficher la table". Cette
boite contient trois onglets s‟intitulant: table, requête et les deux. L‟onglet table affiche la liste des tables,
l‟onglet requête affiche la liste des requêtes et le dernier la table et les requêtes que contient la BDD.
Nous sélectionnons dans “l‟onglet table” la ou les table(s) sur laquelle doit porter la requête, puis nous
cliquons successivement sur les boutons "Ajouter" et "Fermer".

A titre d‟exemple de requête de sélection, nous allons créer une requête qui extrait d'une table la liste des
clients désignées par leur nom et leur prénom de notre BDD. La table "Client" est maintenant présente
dans la moitié haute de la fenêtre de création de la requête.
La moitié basse contient la grille de définition de la requête. Pour y introduire un champ (on notera au
passage que l'astérisque représente la totalité des champs), nous disposons de trois méthodes :
cliquer sur la ligne "Champ :" et choisir dans la liste déroulante qui s'affiche ;
double cliquer sur le nom du champ ;
tirer le nom du champ avec la souris de la table vers la grille.
Pour extraire de la table "Client" les deux premières colonnes, nous introduisons dans la grille les champs
correspondants. Sur la ligne "Afficher :", les cases doivent être cochées (elles le sont par défaut). La
figure suivante est extraite de la grille de définition de la requête :

La requête étant définie, nous l'exécutons en cliquant sur le bouton de la barre d'outils. Nous obtenons
le résultat suivant :
Nous voyons que, comme une table, une requête présente un double aspect :
l'aspect structure, lequel est défini en mode création ;
l'aspect résultat, qui est représentée par une table à l'existence volatile, laquelle s'appelle "feuille
de données" dans la terminologie de Microsoft.
Comme pour une table également, on peut passer rapidement d'un aspect à l'autre en cliquant dans la
barre d'outils sur le bouton (en mode feuille de données), ou le bouton (en mode création).
Pour conserver la structure de la requête, il suffit de cliquer sur l'icône "Enregistrer", de donner un nom
(par exemple, "Sélection des clients") à la requête dans la boite de dialogue qui s'ouvre, et de confirmer.
Ce nom figurera désormais dans la fenêtre "Base de données" (l'objet "Requêtes" étant sélectionné),
précédé de l‟icône , pour rappeler qu'il s'agit d'une requête de sélection. Si nous fermons la fenêtre de
définition de la requête sans avoir préalablement enregistré la structure, le SGBD nous demande si nous
voulons conserver la requête. Dans l'affirmative, la boite de dialogue s'ouvre, et nous procédons comme
précédemment.
Mais le résultat de la requête a disparu ! Pour retrouver cette "feuille de données" volatile, il faut relancer
la requête, soit en double-cliquant sur son nom, soit en la sélectionnant et en cliquant sur le bouton droit
de la souris et en sélectionnant "Ouvrir".
Dans la liste des clients, nous voulons maintenant rassembler chaque nom, suivi de son prénom, dans
une même colonne. Pour ce faire, nous créons la requête suivante :
La signification du contenu de la ligne "Champ :" de la grille ci-dessus est la suivante :
la requête crée une feuille de données contenant une colonne intitulée "personne" ;
chaque ligne contiendra le nom, puis un espace, puis le prénom. Ces données proviendront de la
table située au-dessus de la grille.
Le signe & désigne, comme en Visual Basic, l'opérateur de concaténation de chaînes. Les crochets
[........] signifient que l'on évoque le contenu des champs correspondants. L'espace qui sépare le nom du
prénom est mis entre guillemets pour rappeler qu'il s'agit d'une chaîne de caractères. Le résultat de la
requête est le suivant :

Définition des critères de sélection

Dans nos exemples précédents nous les requêtes affichent tous les enregistrements de la table client,
maintenant nous allons créer des requêtes affichant des enregistrements sous certains critères que nous
définirons.
Nous disons précédemment que la sélection représente l'outil courant de recherche de l'information dans
les bases de données. D'une manière générale, la sélection :

s'applique soit à une seule table, soit à plusieurs tables liées par des relations ;

permet de sélectionner les lignes par application d'un ou plusieurs critères portant sur un ou
plusieurs champs ;

permet de choisir les colonnes que l'on veut conserver (comme la sélection simple) ;

peut enregistrer son résultat sous forme d'une table ;

peut créer une nouvelle colonne ;

peut être paramétrée.


Sa réalisation pratique pose des problèmes de syntaxe, qui sont propres au SGBD utilisé. Elle varie avec
le type de données du champ sur lequel porte le critère.

Les Opérateurs

On peut utiliser dans les requêtes les opérateurs suivants :

Opérateur Signification
= Egal
<> Différent
< Inférieur
> Supérieur
<= Inférieur ou égal
>= Supérieur ou égal

Access met à notre disposition d'autres opérateurs :

Opérateur Signification Exemple

Entre Sélectionne les enregistrements Entre "A" et "C"


pour Entre 10 et 20
lesquels la valeur d'un champ est Entre #01/01/99# et #31/12/99#
comprise dans un intervalle de
valeurs.

Dans Sélectionne les enregistrements Dans ("Paris”; “Saint-Quentin")


pour
lesquels la valeur d'un champ est
comprise dans une liste.

Est Sélectionne les enregistrements Est NULL


pour Est pas NULL
lesquels un champ est vide ou
non

Comme Sélectionne les enregistrements Comme "rue*"


contenant une donnée
approximative.

Pas Sélectionne les enregistrements Pas Entre "A" et "C"


ne
correspondant pas au critère

 Le Signe égal “=”est équivalent a l‟operateur “Comme”


 Le signe différent « <> » est équivalent a l‟operateur “Pas Comme”

Une requête un peu élaborée fait appel à plusieurs critères s'appliquant soit à un même champ, soit à
des champs distincts. Ces critères sont liés par des opérateurs logiques, dont les plus utilisés sont ET,
OU et PAS. L'utilisation de parenthèses permet de définir l'ordre dans lequel s'appliquent les opérateurs.
Dans Access, les opérateurs logiques Et et OU peuvent être écrits explicitement, ou être représentés
graphiquement dans la grille de l'interface graphique de création d'une requête. L'opérateur PAS doit être
écrit explicitement.

Pour rechercher, dans le champ "Nom" d'une table intitulée "Client", les individus s'appelant Jean ou
André, nous avons le choix entre les deux solutions que nous avons représentées ci-dessous:

Nous voyons que l'opérateur OU peut être écrit explicitement (à droite), ou traduit graphiquement (à
gauche). Le résultat de la requête est, bien entendu, le même dans les deux cas.

L'opérateur logique peut porter sur deux champs distincts. La traduction graphique de l'opérateur OU est
alors plus simple que son écriture explicite, comme le montrent les figures ci-dessous. On notera que le
OU s'obtient en se décalant d'une ligne... sinon c'est l'opérateur ET qui fonctionne !

L'opérateur ET peut lui aussi être traduit graphiquement ou écrit explicitement, comme le montrent les
figures ci-dessous. La requête recherche les noms commençant par la lettre "j" et finissant par la lettre
"n", et retrouve par exemple "Jean".
L'opérateur logique peut impliquer deux champs distincts, comme le montre l'exemple ci-dessous. La
requête recherche les enregistrements relatifs à un client nommée Jean Mathieu.

Conclusion : dans la grille de création d'une requête, le déplacement horizontal correspond à


l'opérateur ET, et le déplacement vertical correspond à l'opérateur OU. L'opérateur PAS est sans
représentation graphique.

Les fonctions

On peut intégrer des fonctions dans les critères de sélection. Access met à notre disposition un très
grand nombre de fonctions (pour en avoir la liste complète, consultez l'aide intégrée à Access). Ce sont
les mêmes fonctions que celles qui sont utilisés dans les contrôles des formulaires (et d‟ailleurs dans tous
les logiciels de la gamme Microsoft Office).
Les fonctions sont spécifiques à la fois du SGBD et du type de données du champ considéré.

Pour les champs en mode texte :

Droite([Nom];2)="se" retrouve les noms se terminant par "se" ;

Gauche([Nom];2)="du" retrouve les noms commençant par "du" ;

Pour les dates et les heures :

Jour([DateCommande])=12 retrouve les commandes effectuées le 12 (des mois présents dans la


table) ;

Mois([DateCommande])=6 retrouve les commandes du mois de juin ;

Année([DateCommande])=2000 retrouve les commandes de l'année 2000 ;


La requête de sélection paramétrée

Imaginons que nous ayons régulièrement besoin des informations relatives à une date donnée. Nous
pouvons, bien sûr, créer chaque fois une requête nouvelle, mais il est plus commode d'écrire une seule
fois la requête et de paramétrer la valeur de la date. Dans la grille de création de la requête, la valeur du
paramètre date est remplacée par un message écrit entre crochets :

Supposons qu‟on aimerait avoir la liste des commandes passées pour une date quelconque, pour ce faire
on va créer une requête sur laquelle on va paramétrer le champ date de la commande. On procède ainsi:

Si nous lançons la requête, la boite de dialogue suivante s'affiche :

Nous saisissons la date dans le format utilisé par la table (jj/mm/aaaa), et nous validons. Le SGBD
affiche les lignes relatives à la date indiquée :
Requête de sélection portant sur plusieurs tables

Pour l'instant, nos requêtes ne portaient que sur une seule table, il est possible de faire des requêtes qui
portent sur plusieurs tables simultanément. Dans ce cas, les requêtes peuvent être très complexes.
Par exemple, si nous voulons la liste des clients ayant commandé le produit n° 2 :

Les fonctions de regroupement


Jusqu'à présent, nos requêtes nous permettaient de répondre à des questions du type : "Liste des Clients
de Sexe Masculin”, "Liste des Produits Commandés par un Client". Grâce aux fonctions de
regroupement, nous allons pouvoir répondre à des questions du type : "Combien de clients de sexe
masculin?” ou "Pour combien à commandé chaque client ?".

La création de la requête
Nous allons créer le premier regroupement envisagé au paragraphe précédent (“Combien
de client de sexe masculine ?”). Pour ne pas nous tromper, nous allons opérer de manière
méthodique.
Première étape. Elle consiste à ouvrir la fenêtre de définition d'une requête, et à y
introduire la table sur laquelle on veut effectuer l'opération de comptage ici (“Client").
Seconde étape. Elle consiste à introduire dans la grille le champ sur lequel s'effectue le
comptage. Comme nous cherchons à calculer le nombre de client de sexe masculin, ce
champ ne peut être que le Numéro du client. Nous introduisons donc le champ "NoClient"
dans la grille de création de la requête.
Troisième étape. Il faut signifier au SGBD que la requête implique un comptage sur le
champ "NoClient". Pour ce faire, nous cliquons sur l'icône "Totaux". Une nouvelle ligne,
baptisée "Opération :", apparaît dans la grille de définition de la requête, entre "Table :" et
"Tri :" (figures ci-dessous). La valeur par défaut, pour le champ "NoClient", est justement
"Regroupement", nous cliquons sur la ligne et nous sélectionnons "Compte" dans la liste
déroulante). Ainsi, le comptage sera effectué sur le NoClient.
Quatrième étape. Il faut maintenant introduire le champ sur lequel s'effectue l'opération
liée au comptage. Dans le présent exemple, l'opération consiste à préciser au quel cas le
comptage doit se faire. Nous introduisons donc le champ "Sexe" dans la grille.
Cinquième étape. Il faut indiquer au SGBD à quelle opération il doit procéder sur le
champ "Sexe". Nous cliquons sur la ligne "Opération :", nous utilisons la liste déroulante
pour remplacer "Regroupement" (qui s'est inscrit par défaut) par "Ou". Ensuite cliquons
sur la ligne “Critère” et entrer Comme “Masculin”.
La requête se présente ainsi comme le montre la figure ci-dessous à gauche.

Le deuxième regroupement ” Le montant total commande par chaque client”.


A partir du moment où on veut un résultat par catégorie (une somme par client, un nombre de clients par
sexe, etc…), il y a regroupement, ici on veut la somme des commandes regroupées par clients, c'est pour
ça qu'on a choisi comme opération pour numéro de client "Regroupement".
Pourquoi a-t-on ajouté le champ "nom" ? Simplement pour ne pas avoir une liste de numéros avec un
montant correspondant. Pourquoi dans ce cas, n'a-t-on pas regroupé les clients par leur nom au lieu de le
faire par numéro et nom ? Parce que plusieurs clients peuvent avoir le même nom et qu'on ne veut pas
cumuler le montant des commandes par clients homonymes, on regroupe donc les clients par numéro et
nom. Enfin, le troisième champ : on veut la somme du montant des commandes : qu'est-ce qu'une
commande ? C‟est une liste de prix unitaires * une quantité. A la place d'un champ, on indique donc
qu'on veut les prix unitaires * les quantités. La syntaxe est [nom de la table].[champ de la table], une
commande, c'est donc une liste de [Produit].[PrixUnitaire] * [CommandeProduit].[Quantite]. Et on veut la
somme de toutes ces commandes, on choisi donc l'opération "Somme".

En plus de la somme et de compte, il existe d'autres opérations possibles :


Opération Signification
Ecartype: calcule l'écart type. S'applique uniquement aux données numériques ou monétaires
Max: retient seulement la valeur la plus haute. S'applique aussi au texte (classement alphabétique)
Min: retient seulement la valeur la plus basse. S'applique aussi au texte (classement alphabétique)
Moyenne: calcule la moyenne. S'applique uniquement aux données numériques ou monétaires
Premier retient la première valeur rencontrée (en parcourant la table du haut en bas). S'applique aussi
au texte
Dernier: retient la dernière valeur rencontrée (en parcourant la table du haut en bas). S'applique aussi au
texte
Var: calcule la variance. S'applique uniquement aux données numériques ou monétaires
Compte : compte le nombre de doublons dans le regroupement. S'applique à tous les types de
données.
Somme: Total. S'applique qu'aux données numériques et monétaires.

Exercices
1- Nombre de clients nommés "Jean" par ville
2- Liste des clients ayant commandé plus de 700 dollars du produit 3.
Les requêtes d'analyse croisée
Les requêtes d'analyse croisée permettent de répondre à des questions du type "qui a commandé
combien de quoi ?". Elles retournent le résultat sous forme d'un tableau comportant des champs en
abscisse et en ordonnée, avec, dans chaque case la réponse à notre question.
Exemple : Qui a commandé combien de quoi ?

Qui Qui
Quoi Combien Combien
Quoi Combien Combien

L'en-tête "Qui" va contenir le nom des clients


L'en-tête "Quoi" va contenir la liste des produits
Et combien va donner, pour chaque client, le nombre de produits qu'il a commandé.

Pour ce faire:

1. D'abord on crée une requête standard : pour cette requête nous avons besoin du nom dans la table
clients, du libellé du produit dans la table produit et de la quantité commandé dans la table
CommandeProduit.
2. On transforme la requête en requête d'analyse croisée en allant dans le menu "Requête" et en
choisissant "Analyse croisée".
3. Une nouvelle ligne apparaît dans la requête : la ligne "Analyse"
4. Dans cette ligne, on va indiquer si le champ qu'on a choisi va être l'en-tête des colonnes, l'en-tête des
lignes ou la valeur contenue dans les cases du tableau.
5. L'Opération pour les en-têtes est toujours "Regroupement"
6. L'Opération pour les valeurs des cases dépend de ce qu'on cherche, ici on cherche le nombre de
produits acheté, l'opération est donc "Somme".

On exécute la requête et voici le résultat


Les requêtes de maintenance ou d’action
Les requêtes faites jusqu'à présent se contentent de retourner le résultat d'une sélection sous forme de
table, cette table, étant, selon le type de requête, modifiable. Il existe cependant d'autres types de
requêtes, les requêtes action, ces requêtes vont permettre de :
1. Créer une table à partir du résultat d'une requête
2. Ajout des enregistrements à une table à partir des résultats de la requête
3. Mettre à Jour une table en fonction de certains critères
4. Supprimer des enregistrements répondant aux critères de la requête

1- Requête Création de table


Une requête création crée une table à partir des résultats qu'elle produit à partir d'une table existante.
Supposons que nous voulions créer une table "Client Masculin" qui contiendrait la liste de tous les clients
de sexe masculin.
Comment on procède:
On crée la requête listant tous les clients de sexe masculin

Ensuite, on la transforme en requête de création en cliquant sur création de table.


Access nous demande le nom de la table à créer :
Attention, si vous sélectionnez une table existante, la table va être écrasée par cette opération.
Exécutez la requête avec l'icône point d'exclamation : la table va être créée avec le résultat de la requête.
Si vous vous voulez vérifier avant de créer la table quel sera le résultat de la requête, cliquez sur l'icône:

Une fois que le résultat sera conforme à vos attentes, vous pourrez cliquer sur l'icône point d'exclamation.

2- Requête d’ajout
Une requête de type ajout copie une partie ou tous les enregistrements d‟une table de départ vers une
table d‟arrivée.
A titre d‟exemple nous voulons ajouter tous les clients de sexe féminin de la table client vers une autre
table.
D‟abord on crée la requête de sélection normale

Ensuite on la transforme en requête d‟ajout en sélectionnant dans la fenêtre création le type de requête
ajout en cliquant sur .

Access nous demande comme précédemment le nom de la table et aussi de choisir la BDD.
Comme précédemment, avec les icônes Affichage et point d'exclamation, vérifiez et validez votre
requête.
Note
Les enregistrements sont copiés de la table source vers la table cible et non pas déplacés.

Les deux tables doivent avoir des noms de champs identiques (et les mêmes types de données), les deux structures
ne doivent pas nécessairement être identiques.

Si la table source comporte plus de champs que la table cible, les champs supplémentaires sont ignores

Si la table source comporte moins de champs que la table cible, les champs dont les noms sont identiques sont
copiés, les autres sont laissés vides.

Access ne copie QUE les champs que vous avez déclarés dans la requête (d'ou le champ *)

3- Les requêtes Mise à Jour


Les requêtes mise à jour permettent de modifier rapidement une partie ou tous les enregistrements d'une
table ou d‟un groupe de table:

Supposons qu'on souhaite augmenter de 10% le prix des produits dont le prix actuel est supérieur ou
égal à 700 dollars.
1. On crée une requête de sélection normale, et dans le menu Requête, on clique sur "Requête Mise à
Jour"
2. Un champ "Mise à jour" apparaît dans la requête, c'est là qu'on va indiquer la modification qui va avoir
lieu:
Dans la case Mise à Jour, on a indiqué, qu'à la place du prix unitaire, nous voulions [Prix Unitaire]*1.1
(soit une augmentation de 10%), ceci pour les produits dont le prix est supérieur ou égal à 700 (critère).

4- Les requêtes Suppression


Les requêtes suppression vous permettent de supprimer un groupe d'enregistrements qui répondent à un
critère donné. Supposons que l'on veuille supprimer de la table client tous les clients de sexe masculin:
On crée une requête standard, puis dans le menu Requête, on clique sur Requête Suppression:

On exécute la requête ou on vérifie avant que le résultat est conforme à ce que l'on attend.
Note
Vérifiez bien le résultat avant d'exécuter la requête, il n'est pas possible de revenir en arrière après avoir
effacé des enregistrements.
Les Formulaires
Le formulaire va nous permettre d‟afficher et de modifier le contenu d‟une table de façon bien plus
agréable que le mode « feuille de données » qui ne permet qu‟un affichage en lignes et colonnes.
De plus, le mode « feuille de données » ne permet l‟affichage et la modification d‟informations ne
provenant que d‟une seule table, le formulaire va nous permettre de manipuler au même endroit des
informations provenant de plusieurs tables simultanément. Les informations saisies ou modifiées dans le
formulaire seront modifiées dans les tables à partir desquelles le formulaire a été créé.

La création d'un formulaire simple


Nous allons créer le formulaire associé à la table « clients ». Pour créer un formulaire, on clique sur
l‟onglet “Créer”, il existe plusieurs méthodes de générer un formulaire, celles qui nous intéresse le plus ce
sont:

Mode création: on va tout faire seul « à la main » sans aucune aide d‟Access

Assistant Formulaire: Access va nous guider pas à pas dans la réalisation de notre
Formulaire

Formulaires Instantanés : Ces méthodes vont générer rapidement un formulaire à partir d‟une ou
plusieurs table sans nous poser de questions, son aspect sera rudimentaire et ne nous donnera pas de
grandes possibilités de personnalisations.

Commençons par générer le formulaire « client » à partir de l‟assistant formulaire. Pour ce faire :

Sélectionnez « Plus de Formulaires » ; dans la liste choisissez « Assistant Formulaire ». Une boite de
dialogue s‟affiche nous proposant dans un premier temps de choisir la table sur laquelle le formulaire va
être créer et dans un second temps les différents champs de cette table qui vont être afficher sur le
formulaire. Si nous voulons être en mesure de modifier tous les champs de chaque enregistrement de la
table, il faudra tous les choisir, si, par exemple, notre formulaire ne doit servir qu‟à afficher certaines
informations, on choisira uniquement les champs pertinents. Les modifications ou ajouts que nous ferons
dans le formulaire auront des répercutions dans cette table:

Note

Dans un formulaire, on va pouvoir, comme dans la feuille de données, ajouter des enregistrements dans
la table, les champs non présents dans le formulaire ne seront pas initialisés (ils resteront vides) lors de
l’ajout. (Le seul moyen alors pour remplir ces champs sera d’aller dans la feuille de données).
Pour choisir les champs à ajouter ou à enlever dans le formulaire, on va utiliser les boutons :
>: Ajouter le champ dans le formulaire
>>: Ajouter tous les champs dans le formulaire
<: Supprimer un champ du formulaire
<<: Supprimer tous les champs du formulaire

Nous allons ajouter tous les champs du formulaire, cliquez ensuite sur « suivant »
Une nouvelle fenêtre s‟affiche :

On choisit ici la façon d‟afficher les champs choisis dans le formulaire, il y a quatre façons d‟afficher les
champs:
Colonne simple: Le formulaire va afficher les champs sous la forme : « nom du champ : contenu du
champ ». Le formulaire va afficher les champs d‟un enregistrement à la fois.
Tabulaire : Le formulaire va afficher les champs choisis sous la forme d‟un tableau : en haut du
formulaire vont être affichés les noms des champs, et, en dessous sous forme de tableau, le contenu,
avec un enregistrement par ligne. Cette façon d‟afficher les données ressemble à la feuille de données.
Feuille de données: C‟est la même chose que la feuille de données utilisées pour saisir des informations
dans une table, la seule différence est que ne sont affichés ici que les champs sélectionnés dans l‟étape
précédente.
Justifié: Va afficher les champs choisis les un à la suite des autres, ce n‟est pas très beau (enfin c‟est
une question de goût).
Nous utiliserons le plus souvent (voire tout le temps) le mode « Colonne simple » ou le mode « Tabulaire
». Nous choisissons ici le mode « Colonne Simple », puis on clique sur « Suivant »
On choisit ici "l‟apparence" que l'on va donner au formulaire, il existe plusieurs style d‟apparence
prédéfinis, bien sur, on pourra, par la suite, modifier le style choisi ici, et cliquez “Suivant”.

Enfin, on va nommer son formulaire “Formulaire du Client”, c'est sous ce nom qu'il apparaîtra dans le
panneau de navigation de la fenêtre principale d'Access, puis cliquez sur "Terminer" et le formulaire est
créé.
Access nous propose alors de commencer tout de suite la saisie dans notre nouveau formulaire.
Vous pouvez voir ici le formulaire tel qu'il est une fois créé : Il utilise les champs choisis dans la table
sélectionnée, il affiche les champs sous forme de "Colonne simple" (un couple nom du champ - contenu
du champ par ligne) et utilise le décor choisi.
Pour se déplacer parmi les enregistrements dans le formulaire, on utilise les icônes fléchés en bas du
formulaire.

Pour modifier l'aspect et le contenu du formulaire, on clique sur le bouton "Modifier" soit l'icône suivant:

On passe alors automatiquement en mode modification :


Le formulaire est constitué de plusieurs parties: L'en-tête, le détail et le pied.
Tout ce qui se trouve sur le formulaire s'appelle un contrôle : un texte affiché sur le formulaire est un
contrôle, un champ d'un enregistrement est un contrôle, une image place sur le formulaire est un contrôle
: tout ce qui est affiché dans le formulaire est un contrôle. La boîte à outils en haut dans l‟onglet création
affiche tous les contrôles possibles que l'on peut placer sur un formulaire. Ils sont assez nombreux et
permettent d'afficher tous les types d'informations possibles (même du son ou de la vidéo !).

Ces contrôles peuvent être divisés en trois catégories: Les contrôles indépendants, les contrôles
dépendants et les contrôles calculés.

Les contrôles indépendants : Ils n'ont aucune relation avec la ou les table(s) qui est ou sont liée(s)
au formulaire (n'oubliez pas que chaque formulaire manipule des informations provenant d'une ou
plusieurs table(s) de la base). Par exemple un titre “formulaire du client” placé sur le formulaire client n'a
aucune relation avec la table client, c'est un contrôle indépendant.

Les contrôles dépendants: Les contrôles dépendants sont liés à la ou les table(s) liée(s) au
formulaire, ils vont afficher le contenu d'un champ, toute modification dans ce contrôle ira modifier le
champ auquel il est lié dans la table:
Dans notre exemple, le contrôle à droite est dépendant du champ "nom" de la table
"Clients", il affichera, pour l'enregistrement courant, le contenu du champ "nom". Toute modification dans
ce contrôle ira modifier le contenu du champ "nom" de la table "Client" pour l'enregistrement en cours.

Notez que le contrôle à gauche est un contrôle indépendant, il se contente d'afficher le texte "nom",
tandis que celui de droite est dépendant et va chercher son contenu dans le champ de la table dont le
nom est affiché (champ "nom"), nous verrons plus bas comment rendre un contrôle dépendant.

Les contrôles calculés: Les contrôles calculés ne vont pas chercher les informations qu'ils vont
afficher dans un champ de la table lié au formulaire mais à partir du contenu d'autres contrôle du
formulaire, par exemple un contrôle dans le formulaire lié à la table
"Produit" pourra afficher le” Montant Total” à partir des contrôles affichant les Prix Unitaire et la Quantité
acheté dans cet article.

Les contrôles:
Voici la liste des contrôles que nous pourrons utiliser, les contrôles non documentés servent, de façon
générale, à insérer dans un formulaire des "objets" provenant d'autres applications Windows, comme par
exemple un fichier sonore Wave, une vidéo AVI, un fichier au format Word, une page HTML, etc.

Les contrôles les plus utilisés


Contrôle « Etiquette »

Il va être utilisé pour afficher du texte "statique", c'est à dire qui ne variera pas d'un enregistrement à
l'autre, c'est donc un contrôle indépendant, qui servira typiquement à afficher par exemple le titre du
formulaire, ou le nom d'un champ dont le contenu sera affiché à côté dans un contrôle dépendant. Dans
notre formulaire, tous les noms des champs affichés à gauche sont des contrôles "Intitulé", ce sont des
textes statiques ne dépendant de rien, on peut modifier ce qui est affiché sans affecter quoi que ce soit
dans la table associée au formulaire.
Le contrôle "Zone de Texte"
Ce contrôle est l'un des contrôles les plus utilisés dans les formulaires, on va, dans ce contrôle, pouvoir
saisir des données. Typiquement, ce contrôle est soit un contrôle dépendant, soit un contrôle calculé.
Pourquoi ? On peut, dans ce contrôle, saisir des informations, il serait alors judicieux que les informations
saisies puissent servir à quelque chose, si le contrôle n'est lié à aucun champ de la table associée au
formulaire, les informations que l'on va taper vont se perdre dans la nature dès qu'on sera passé sur
l'enregistrement suivant. En revanche, si le contrôle est lié à un champ de la table, les informations
entrées dans ce contrôle seront placées dans le champ lié au contrôle.

Tout ce qui sera entré dans un contrôle dépendant affectera le contenu du champ auquel il est lié. Bien
sur, rien n‟interdit de lier un même champ sur plusieurs contrôles dans le même formulaire (ce qui n‟a
pas, à priori, d‟intérêt).
Dans notre formulaire, tous les contrôles dans lesquels on va saisir des informations sur les clients sont
des contrôles dépendants liés à des champs de la table. Le nom du champ auquel est lié le contrôle est
d‟ailleurs écrit dans ce contrôle.

Pour relier un contrôle à un champ, procédez ainsi :

1. Cliquez dans la boîte à outils sur le contrôle zone de texte


2. Placez le contrôle sur le formulaire et dimensionnez-le
3. Access crée en fait DEUX contrôles : il suppose, à juste titre, que l‟on va lier ce contrôle avec un
champ, il crée donc un contrôle « Etiquette » qu‟on à vu avant qui contient le texte « Texte xx » (où xx est
un nombre quelconque) et notre fameux contrôle « Zone de Texte » qui contient la mention «
indépendant ».
4. On va supposer ici qu‟on veut lier ce contrôle au champ « Nom » de notre table
Clients (même si il se trouve déjà sur le formulaire, c‟est juste un exemple)
5. A la place de « Texte xx », on va taper « Nom : » (histoire de savoir ce qu‟il va falloir saisir dans le
contrôle d‟à côté)
6. Vous avez pu noter la mention « indépendant », ce qui signifie que, pour l‟instant, le contrôle « Zone
de Texte » créé n‟est lié à rien, on peut taper du texte dedans mais le texte ne sera sauvé nulle part. Pour
dire à Access qu‟on veut sauver ce texte dans le champ « Nom » de la table Clients, on clique avec le
bouton droit sur le contrôle et on clique sur « Propriétés » si la fenêtre propriété n‟était pas déjà activée :

Ici se trouvent toutes les propriétés qui vont définir l‟aspect et le comportement de notre contrôle, il y en a
beaucoup et je ne vais pas les détailler. Celle qui nous intéresse particulièrement est la propriété «
Source Contrôle » de l‟onglet « Données ». C‟est ici qu„on indique à Access d‟où viennent les
informations qui vont être affichées dans le contrôle. Il y a une flèche qui descend à droite, si on clique
dessus, tous les champs de la (ou des) table(s) liés au formulaire vont s‟afficher, on choisi dedans le
champ « Nom », et on ferme la fenêtre de propriétés.
7. Le contrôle n‟est plus indépendant, à la place de la mention « Indépendant », il est affiché « Nom »,
c‟est-à-dire le nom du champ avec lequel il va être lié. A partir de maintenant, lors de l‟affichage d‟un
enregistrement dans le formulaire, le nom du client sera affiché dans ce contrôle, et toute modification de
son contenu sera répercutée dans la table.

Le contrôle « Groupe d’options »


Le contrôle « Groupe d‟option » va servir à faire un choix limité entre plusieurs options et d‟affecter
l‟option choisie à un champ d‟une table. Par exemple, supposons maintenant que nous ajoutions un
champ « vendeur » à la table « Commandes » pour savoir qui a effectué une vente. Nous allons
supposer que notre magasin à trois vendeurs nommés André (vendeur 1), Gessy (vendeur 2) et Jacques
(vendeur 3). Nous allons d‟abord ajouter le champ « NoVendeur » à la table « Commande », puis sur le
formulaire « Commande » liée à cette table, nous ajoutons un contrôle « Groupe d‟options ».

Nous entrons ici les différents noms des vendeurs et nous cliquons sur « Suivant »

Nous pouvons choisir ici le vendeur qui sera toujours proposé par défaut, nous pouvons également ne
choisir aucun vendeur par défaut, on clique « Suivant ».
Nous avons vu que chaque vendeur à un numéro, c‟est ce numéro, et nom le nom du vendeur qui va être
sauvé dans le champ « NoVendeur » de la table « Commande », on indique ici, pour chaque vendeur,
son numéro, on clique « Suivant ».

On indique enfin à Access en choisissant dans le menu quel est le champ de la table qui va contenir le
numéro correspondant au vendeur qu‟on a choisi et on clique « Suivant
On choisit l‟aspect de notre groupe d‟options, on clique « Suivant ».

On le nomme, et c‟est terminé :

Vous pouvez voir en bas le groupe d‟options avec les trois vendeurs proposés, en en choisissant un, on
sauve dans le champ lié à ce groupe (NoVendeur), le numéro associé au vendeur choisi.

Les contrôles « Zone de Liste » et « Zone de Liste Modifiable »

Vous vous souvenez de l‟assistant « Liste de choix » dans les tables qui permettait, au lieu de saisir une
valeur, de pouvoir choisir dans une liste. Ce type de menu existe également dans les formulaires, on va
pouvoir, grâce à ces deux types de contrôles, pouvoir, par exemple dans le formulaire « Commande »,
choisir parmi la liste des clients au lieu de saisir son numéro.
Pour cela, on procède ainsi :
1. Ouvrir le formulaire « Commande » en modification
2. Choisir le formulaire « Zone de Liste » dans la boîte à outils
3. Le placer sur le formulaire

Il y a trois façon de générer cette zone de liste, comme pour la feuille de données, nous voulons afficher
une liste des clients existants dans la table client, pour cela, on sélectionne la 1ère option « Je veux que
la zone de liste recherche les valeurs dans une table » (en l‟occurrence, la table clients), et on clique sur
suivant
4-
Access nous affiche les tables existantes : On choisi la table « Clients » et on clique sur « Suivant ».

5-

On choisit ici les champs qui seront affichés dans la zone de liste, nous pouvons juger que seuls les
champs nom, prénom et ville sont nécessaires et on clique sur « Suivant ».
6-

On choisit l‟ordre de tri dans le contrôle « Zone de Liste » et on clique « Suivant ».


7-

Access nous affiche à quoi va ressembler notre zone de liste. On clique sur « Suivant ».

Notez que l’option « Colonne clé cachée » est cochée, qu’est-ce que cela signifie ?
Nous sommes d’accord que le but de l’opération est de choisir parmi une liste un client et d’affecter son
numéro au champ « n° client » de la table « Commande » afin d’éviter d’avoir à taper ce numéro. Or,
nous avons choisi uniquement les champs Nom, Prénom et Ville de la table « Client », et pas le numéro.
Access a remarqué que le numéro du client est la clef de la table « Client », il en déduit que c’est donc le
seul moyen d’identifier de façon unique un client, il va donc ajouter une colonne à notre liste, cette
colonne sera cachée, et c’est le contenu de cette colonne cachée qui sera affectée au champ « n° client
» de la table « Commande ».
8-
On va indiquer à Access dans quel champ de la table liée au formulaire on veut stocker cette valeur (ici
n° client). On clique « Suivant ».

9-

On nomme la zone de liste, et c‟est terminé.


Vous voyez qu‟au lieu de saisir un numéro, nous avons une liste dans laquelle nous pouvons choisir un
client, le numéro de ce client, présent dans la colonne cachée de la zone de liste, sera affecté au champ
choisi plus haut (n° client).
Le contrôle « Zone de liste modifiable » agit exactement de la même façon, il est différent parce que c‟est
un menu déroulant (il faut cliquer sur une petite flèche pour le faire apparaître) au lieu d‟être fixe.
Essayez-le…

Le contrôle « Bouton de commande»

Ce contrôle va permettre d‟exécuter simplement en cliquant dessus n‟importe quelle action d‟Access.
Toutes les actions possibles d‟Access, normalement accessibles par les menus déroulant ou par la barre
d‟icônes peuvent être reproduites par l‟intermédiaire de ce contrôle.
Pour comprendre son fonctionnement, nous allons créer un nouveau formulaire vide dans lequel nous
allons simplement poser un contrôle « Bouton de commande ».
Dès que le contrôle est posé sur le formulaire, l‟assistant suivant apparaît :

Le menu Catégories affiche les principales fonctions d‟Access :


Déplacement entre enregistrements : Pour se positionner sur un enregistrement précis de la table.
Opération sur enregistrement : Ajouter, Supprimer, Copier, Imprimer un enregistrement
Opération sur formulaire : Ouvrir un formulaire, le fermer, appliquer un filtre dessus, l‟imprimer
Opérations sur Etat : Imprimer, Sauver
Applications : Exécuter une autre application comme Word ou Excel
Divers : Exécuter une macro, Imprimer une table complète, …
Comme vous pouvez le voir, toutes les actions possibles d‟Access sont réunies ici, il suffit d‟en choisir
une et le fait de cliquer sur le contrôle exécutera cette action.
Nous allons prendre pour exemple l‟ouverture du formulaire « Client ».

Nous choisissons donc la Catégorie « Opération sur Formulaire » puis l‟action « Ouvrir un formulaire »
Access nous demande alors quel formulaire nous voulons ouvrir.

On choisit « Formulaire du Client » et on clique « Suivant ».


Access nous propose deux choix, nous verrons le premier plus tard, nous lui demandons d‟afficher tous
les enregistrements dans le formulaire.

On peut ici choisir ce qui va être affiché dans le contrôle, par défaut Access propose un icône, on peut
afficher à la place un texte ou choisir un autre icône.
On nomme le contrôle et c‟est terminé.
Notre formulaire ressemble à ça.

Quand on cliquera sur le bouton de commande créé, le formulaire « Clients » s‟ouvrira et affichera tous
les clients de la table « Clients ».

Le contrôles « Sous-Formulaire »
Grâce à ce contrôle, nous allons pouvoir afficher des formulaires imbriqués dans d‟autres, par exemple
pour afficher une liste d‟enregistrement correspondant à un seul enregistrement : pour une commande
donnée, on pourra, dans le même formulaire, afficher toutes les lignes de cette commande.
Le but de la manœuvre va être de réaliser un formulaire complexe que l‟on va nommer « facture ». Il
contiendra toutes les informations relatives à une commande : en en-tête le numéro de la commande, sa
date, les informations sur le client, et en dessous le détail de cette commande, avec en bas le montant
total de la commande.
Pour cela, on crée le formulaire « facture ». Ce formulaire va être l‟en-tête de notre formulaire final : il va
contenir les informations sur la commande et sur le client qui l‟a passé. On va donc aller chercher des
informations dans deux tables : « Clients » et « Commandes ».
Comme on l‟a vu, le formulaire va être généré à partir de deux tables, on ne choisit donc rien dans le
menu « Choisissez la table ».

C‟est ici qu‟on va choisir les tables : En haut à gauche se trouvent les tables de la base, en dessous les
champs de la table choisie plus haut et à gauche les champs que nous allons utiliser dans notre
formulaire.
Pour notre en-tête, nous avons besoin des informations suivantes : n° de la commande, n° du client qui a
passé cette commande, la date de la commande, ces informations provenant de la table « Commande »
et le nom, le prénom et la ville du client qui a passé cette commande, ces informations provenant de la
table « Clients».
A partir de maintenant, nous supposerons que les relations ont été bien réalisées entre les tables, c’est
une condition nécessaire au bon déroulement de la suite des opérations. Si les relations ne sont pas
faites ou mal faites, Access va « tenter » de relier comme il peut les tables entre elles, et c’est la source
de problèmes…
Les relations étant correctement faites, Access, dans une crise d‟intelligence remarque qu‟a partir des
champs choisis précédemment, on peut faire deux choses : soit afficher les données par clients, c‟est à
dire que, avec les champs choisis, on peut afficher un client et en dessous afficher toutes les commandes
qu‟il a passé. Soit afficher les données par commande, c‟est à dire que pour une commande choisie, on
va afficher les informations concernant le client qui a fait cette commande. A droite s‟affiche la façon dont
les données seront affichées en fonction du mode qu‟on aura choisi.
J‟espère que votre esprit affûté aura remarqué que la deuxième proposition est la bonne, nous la
choisissons donc.

Les étapes suivantes sont classiques : choix de la disposition, de la décoration et du nom, on arrive à la
fin à quelque chose comme ça :
Bon, étape 1 terminée. Nous allons maintenant créer un nouveau formulaire, ce formulaire va être une
sorte de « super formulaire CommandeProduit ». Dans notre formulaire CommandeProduit, nous avons
seulement le numéro de la commande, le numéro du produit et la quantité.

Nous allons créer un formulaire « Commande Produit » qui va contenir sur chaque ligne : le numéro de la
commande, le numéro du produit, sa quantité (tout cela provenant de la table « CommandeProduit »),
mais en plus le nom du produit, son prix unitaire (provenant de la table « Produit ») et pour corser l
„affaire, nous ajouterons le calcul du montant total de la ligne, et hop !

Comme pour notre précédent formulaire, nous allons utiliser deux tables :

Nous choisissons les champs numéro de commande, numéro de produit et quantité de la table «
CommandeProduit » et les champs Description et PrixUnitaire de la table « Produit ».

Une fois de plus, Access fait preuve d „intelligence ! Il se rend compte qu‟avec les champs que nous
avons choisi, nous pouvons afficher les données sous deux formes : soit par produit, dans ce cas il va
afficher toutes les lignes de commandes où ce produit est présent, pourquoi pas ? Mais ça ne nous
intéresse pas spécialement, soit par CommandeProduit, et il va dans ce cas, afficher les informations sur
le produit présent dans cette Commande. Voilà qui est beaucoup plus intéressant.

Cette fois-ci, nous allons afficher le formulaire sous forme « Tabulaire ». Comme ce formulaire va
contenir la liste des produits commandés, c‟est la meilleure façon d‟afficher une liste.
A la fin, on obtient un formulaire qui a cette forme ou dans l‟en-tête se trouvent les titres des colonnes, et
dans le détail, les lignes du formulaire.
Une fois ouvert, il aura cet aspect :

Nous sommes bien d‟accord, ce formulaire affiche le détail de toutes les commandes. Comme on peut le
voir dans la 1ère colonne, il concerne plusieurs commandes .
Bien, maintenant, nous allons ajouter un contrôle dans ce formulaire pour calculer le montant total de
chaque ligne :

Nous avons ajouté deux contrôles : un contrôle « Intitulé » pour afficher l‟en-tête de le
colonne, et un contrôle « Zone de Texte » dans lequel on va calculer le montant total de la ligne..
Pour calculer le montant total, on affiche les propriétés du contrôle et dans la propriété
« Source » de l‟onglet « Données », on tape la formule de calcul :

La formule de calcul est :


[PrixUnitaire] * [Quantite]
Si on affiche maintenant le formulaire, on obtient :
Plus fort, maintenant, nous allons afficher le montant total commandé. Nous sommes toujours d'accord,
le montant total va être le montant total pour toutes les commandes, notre formulaire pour l‟instant ne fait
pas de distinction entre les commandes.

Vous avez pu remarquer que le formulaire a en plus de l‟en-tête et du détail, une partie « Pied de
formulaire ». Cette partie ne sera affichée qu‟en bas du formulaire, une fois toutes les lignes affichées.
Comme précédemment, nous mettons dans cette partie du formulaire un contrôle « Zone de Texte »
dans lequel nous allons faire le calcul de la somme.
Que contient la formule ? La même que tout à l‟heure, mais nous avons ajouté le mot-clef « Somme »
avant : Access va calculer la somme de toutes les lignes ici.

Et voilà le travail : en bas du formulaire apparaît la somme totale.


Arrivé ici, nous avons notre formulaire « facture » qui contient les informations générales sur la
commande et le formulaire «CommandeProduit » qui contient les détails de toutes les commandes. Il
serait bien de pouvoir insérer ce formulaire dans le premier et de lui faire afficher seulement les
commandes correspondantes à la commande choisie.
Pour cela, on va rouvrir notre formulaire « facture » et poser dessus un contrôle « Sous-
Formulaire ». L‟assistant suivant s‟affiche alors :

Access nous demande à partir de quoi il va afficher ce sous-formulaire ? d‟une table ou d‟un formulaire
existant déjà ? Nous choisissons la deuxième solution et nous choisissons notre formulaire «
CommandeProduit ».

C‟est ici que tout se fait. Il va falloir indiquer à Access quel est le rapport entre le formulaire et le sous
formulaire qu‟il contient. Si on se contentait d‟insérer le sous formulaire tel quel dans le formulaire, il
continuerait à afficher tout le temps la totalité des commandes quelle que soit la commande affichée dans
le formulaire principal.
Nous voulons qu‟il affiche dans le sous-formulaire les commandes correspondantes à la commande
affichée dans le formulaire principal.
Quel est le rapport entre les deux ? Comment faire une relation entre les deux ? Simplement : le
formulaire contient le numéro de la commande en cours, le sous-formulaire contient pour chaque
commande affichée le numéro de la commande concernée. Il va donc falloir dire à Access que les lignes
affichées dans le sous formulaire vont être celles dont le numéro de commande est celui qui est affiché
dans le formulaire.
Pour cela, on indique dans la colonne de gauche quel est le champ qui contient le numéro de commande
dans le formulaire principal et quel est le champ qui contient aussi un numéro de commande dans le
sous-formulaire.
On donne un titre a notre sous formulaire et c‟est terminé.

On peut directement modifier le sous formulaire à partir d‟ici.

Maintenant, lorsque vous ouvrez le formulaire principal :


Vous avez, pour une commande donnée en haut, son contenu exact et son montant. Vous noterez que le
numéro de commande est répété pour chaque ligne, vous pouvez, comme il est inutile maintenant
puisque déjà présent dans l‟en-tête, le supprimer du formulaire.

Voilà pour les sous-formulaires. Il existe une méthode plus simple pour faire ce que nous venons de faire.
Il suffit pour cela, d‟abord de bien relier les tables entre elles, ensuite lorsqu‟on crée le premier formulaire
de mettre toutes les champs de toutes les tables concernées dans le même formulaire : n° de
commande, n° de client, date venant de la table « Commande », nom, prénom, adresse venant de la
table « Client », IDCommande, IDProduit, Quantité venant de la table « CommandeProduit » et
Description, PrixUnitaire et venant de la table « Produit».

Access affiche alors :

Access a deviné tout seul ce que nous voulions faire (grâce quand même aux relations), et nous propose
de faire tout seul ce que nous avons fait avant. Vous remarquez que l‟exemple qu‟il nous propose à droite
ressemble étrangement à ce que nous avons fait « à la main ».
Il nous propose le format d‟affichage

Ici on nomme le formulaire, vous pouvez noter qu‟il a crée tout seul le sous formulaire et qu‟il en profite
pour nous demander son nom.

Et voilà le travail ! En cinq secondes, il a fait ce qui nous a pris beaucoup du temps !
Il nous faudra simplement ajouter ensuite dans le sous formulaire le calcul des montants et le montant
total. Comme quoi, si les relations sont bien faites, Access fait les trois quart du boulot tout seul.
Les Etats
Dans une base de données, l'objet état est utilisé pour mettre en forme les données destinées à être
imprimées. Lorsque la matérialisation de données issue d'un SGBD présente un caractère répétitif, et
plus encore lorsqu'il est envisagé d'automatiser cette opération, le recours à un état constitue la meilleure
solution.

Les états vont permettre l'impression d'enregistrements selon une présentation qui aura été définie
préalablement. La création d'un état ressemble fortement à la création d'un formulaire.

Création d'un état


Pour créer un état, dans la fenêtre principale d'Access, cliquez sur l'onglet "Créer".

Il y a plusieurs méthodes pour créer un état :

Mode création : on crée tout de A à Z, on n'utilisera pas cette méthode

Assistant Etat : Access va nous guider pas à pas dans la création d'un état complexe

Etat Instantané: Access va générer automatiquement un état à partir du contenu d'une table, la
présentation se fera comme dans un formulaire

Création d'un état Instantané

Nous allons créer un état rapidement à partir de la table Clients :

Notez qu'on choisi d‟abord la table dans le panneau de configuration.

Access nous génère automatiquement l'état suivant (en mode prévisualisation)

En haut, le nom de la table, suivi du nom des champs et sur chaque ligne, le contenu des champs pour
chaque enregistrement.

Création d'un état à partir de l'assistant


Nous utiliserons désormais cette méthode pour créer un état, la méthode précédente étant trop
restrictive.
Comme précédemment, on choisit à partir de quelle table va être créé l'état, puis on sélectionne
« Assistant Etat ». On renseignera la provenance des données dans l'écran suivant :
Comme pour la création d'un formulaire, on choisit à gauche les champs que l'on veut voir apparaître
dans l'état, notez que si vous voulez afficher des champs provenant de plusieurs tables, vous choisirez
dans le menu "Table/requêtes" une nouvelle table, les champs correspondants s'afficheront en dessous.
Comme dans les formulaires, pour ajouter un champ, on utilise l'icône ">", pour les ajouter tous, on utilise
l'icône
">>" et dans l'autre sens pour les retirer, cliquez ensuite sur "Suivant >".
Notez que la source de l'état n'est pas nécessairement une table, on peut très bien générer un état à
partir d'une requête. Le fonctionnement reste le même sauf qu'au lieu d'aller chercher des informations
dans une table, Access ira les chercher dans la table résultant de la requête.

Ici, on va indiquer comment se fait le regroupement.


A quoi sert le regroupement ?
Par exemple, ici, on veut créer un état qui va afficher tous nos clients, on a choisit comme regroupement
le champ "Ville", ce qui signifie que dans l'état qui va être généré, Access va afficher d'abord le nom de la
ville, puis tous les clients habitant cette ville, puis la ville suivante et les clients et ainsi de suite. On peut
choisir plusieurs niveaux de regroupement, on aurait pu ajouter un niveau supplémentaire avec par
exemple le nom, dans ce cas, Access affichera d'abord la ville, puis le nom, puis tous les clients portant
ce nom dans cette ville, puis le nom suivant, puis la ville suivante, etc.
On va se contenter de faire un regroupement par Ville, un regroupement par nom n'a pas, en soi,
tellement de sens. On clique sur « Suivant > ».

On va déterminer ici si on désire que les lignes de l'état soient triées et comment elles vont l'être :
On peut trier chaque ligne de détail (la ligne de détail est la ligne qui sera affichée pour chaque
enregistrement) selon quatre critères, ces quatres critères sont des champs. On va choisir sur quels
champs vont se faire ces tris, les lignes seront ainsi d'abord triées par nom, puis par prénom, etc.
Notez que l'on peut trier soit par ordre alphabétique normal (par défaut) ou à l'envers (de Z à A) en
cliquant sur le bouton (Croissant) placé à droite du champ.
On clique ensuite sur "Suivant >"
On choisit ici le modèle de présentation de l'état.
Et enfin le style de l'état :

On nomme l'état, et Access va le générer automatiquement :

Et c‟est terminé
Comme vous le constatez, les clients, classés par nom, prénom et adresse, sont regroupés par Ville.

Création d'un état avec plusieurs tables

Jusqu'à présent, nos états n'affichaient que le contenu d'une table, nous allons créer un état qui va
afficher la liste des clients, avec, pour chaque client, la liste des commandes qu'il a passé.
Attention, pour que ceci fonctionne, vous devez avoir crée correctement les relations entre les tables,
sinon, Access risque de se perdre…
Comme avant, on crée un état grâce à l'assistant :

La différence est qu'ici, on va chercher des données appartenant à deux tables : NoClient, Nom, Prénom
et Ville proviennent de la table "Client", NoCommande, Description, DateCommande et DateLivre
proviennent de la table "Commande".
On clique sur « Suivant ».
Et là, on voit que si on a bien fait les relations entre les tables, Access est intelligent, il a vu qu'à un client
peut correspondre plusieurs commandes, il nous propose donc de générer un état qui va soit afficher
tous les clients, avec, pour chaque client les commandes correspondantes, ou toutes les commandes,
avec, pour chaque commande, le client qui l'a passé.
Ce qui nous intéresse n'est pas d'avoir la liste des commandes, car un client peut avoir passé plusieurs
commandes, on retrouvera donc son nom plusieurs fois dans l'état, on va donc regrouper par client.

On peut ajouter ici un nouveau niveau de regroupement, je veux par exemple, pour chaque client la liste
des commandes, mais en plus, je veux avoir cette liste groupée par NoClient. On clique sur « Suivant >»

Ici, on va indiquer comment va se faire le tri, on va trier sur la Date (pourquoi pas), on aura donc un état
qui va afficher pour chaque client, les commandes qu'il a passé, triées par NoCommande et par date et
regroupées par NoClient.
On choisit ensuite la présentation et on donne un nom à l'état et Access génére :
Comme on peut le constater, on a ici le client, suivi de la liste de ses commandes, regroupées par
NoClient.

Modifier la structure d'un état


A présent, nous allons modifier l'état, nous allons ajouter, pour chaque client, une ligne qui va indiquer
combien il a passé de commandes.
On clique sur l'état que l'on vient de créer et sur le bouton "Modifier" dans la fenêtre principale d'Access :

Comme on peut le constater, il y a plusieurs parties dans un état :


L'en-tête de l'état : c'est ce qui va être imprimé au début de l'état, ce ne sera imprimé qu'une seule fois.
L'en-tête de page : c'est ce qui sera imprimé au début de chaque page (un titre par exemple).
L'en-tête de groupe : c'est ce qui va être imprimé au début de chaque groupe, ici l'état est groupé par
client, en en-tête du groupe client, on va donc imprimer les informations sur le client, il y a un sous-
groupe dans le groupe client, c'est le groupe "NoClient", on va donc imprimer dans l'en-tête de ce sous
groupe le « NoClient ».
Le détail : c'est ici que vont être imprimées chaque ligne de l'état, en l'occurrence ici les commandes
Le pied de page : c'est ce qui sera imprimé en bas de chaque page (souvent la date et la numérotation
des pages)
Le pied d'état : c'est ce qui sera imprimé une seule fois à la fin de l'état.
A chaque en-tête peut correspondre un pied, ici les pieds pour les groupes Clients et NoClient ne sont
pas affichés, mais si ils l'étaient, à la fin de chaque groupement, le contenu du pied de groupe
s'imprimerait, par exemple, après chaque client, avant d'imprimer l'en-tête pour le client suivant, Access
imprimerait le pied pour le client, idem pour le groupe NoClient, avant d'imprimer l'en-tête du prochain
NoClient, Access imprimerait le pied du groupe NoClient.

On va afficher le nombre de commandes passées dans le pied du groupe client, ce qui est logique : à la
fin d'un client, on affiche le nombre de commandes qu'il a passé :
Le pied du groupe client n'existe pas, il va falloir l'afficher, pour cela on clique sur l'icône :

Access affiche alors :

Qu'avons-nous dans cette fenêtre ?


On a la liste des champs sur lesquelles sont groupées ou triées les informations dans l'état (ici l'état est
groupés sur les champs NoClient de la table Client et NoClient de la table Commande), (les champs
NoCommande, DateCommande sert uniquement au tri). On peut, dans cette fenêtre, ajouter un nouveau
critère de tri ou un nouveau groupe.
La flèche à coté de chaque groupe ou tri se trouvent les propriétés de chaque champ. Pour le champ
Client_NoClient, on clique sur la flèche a cote de « Plus »on peut voir que, entres autres, on a la
propriété "Sans pied de groupe" , ce qui signifie qu'il n'y aura pas de pied de groupe pour ce groupe là,
nous voulons qu'il y en aie un pour que nous puissions imprimer dans ce pied le nombre de commandes
passées pour ce client. Nous choisissons "Avec un pied de groupe".
On peut constater que le pied de groupe "NoClient" est apparu.
Dans ce pied, nous allons ajouter les informations que nous désirons voir apparaître. Pour cela, nous
procédons comme avec les formulaires, nous allons utiliser un contrôle "Zone de Texte" qui va nous
permettre d'afficher le résultat d'un calcul (le calcul étant ici le nombre de commandes passées).

Nous avons notre contrôle qui, pour l'instant n'est lié à rien (il est indépendant).

Nous allons indiquer à Access que ce qui doit être affiché dans ce contrôle est le nombre de commandes
passées pour ce client :

Pour cela nous utilisons la fonction "Compte" que nous avions vu dans les formulaires, cette fonction
compte le nombre de fois que le champ passé en paramètre va être affiché.
On obtient donc dans le pied de groupe :
Lorsqu'on demande à visualiser l'état, on obtient :

Vous pouvez voir, qu'en dessous du détail de chaque client, se trouve le nombre de commandes qu'il a
passé.

Insertion d'un sous-état


Comme pour les formulaires, on peut insérer dans un état un sous état. Les données du sous état seront
imprimées en fonction de celles contenues dans l'état. Nous allons imprimer un bon de commande, le
bon de commande va contenir toutes les informations concernant cette commande : les coordonnées du
client, et le détail de chaque ligne de la commande.
Pour varier les plaisirs, nous allons baser cet état non plus sur une table comme précédemment mais sur
une requête, cette requête va afficher, pour un numéro de commande donné, les informations la
concernant :
DateCommande, DateLivre, nom et coordonnées du client :
Je n'entre pas dans le détail de la requête, (vous êtes censé savoir comment on fait), sachez seulement
que pour pouvoir saisir le numéro de commande, on place comme critère au champ "N° Commande" le
critère "= [Entrez le numéro de la commande].

Une fois la requête créée, on va créer un état en le basant sur cette requête :

On choisit tous les champs de la requête :

Cette fois -ci, on veut que l'état affiche les renseignements par commande (on veut imprimer un bon de
commande) et non pas par client :
On indique dans l'écran suivant qu'on ne veut pas de niveau de regroupement supplémentaire et on
choisit le format d'impression :

Choisissez la décoration et donnez un nom à votre état, Access génére l'état et affiche :

Pourquoi ? Simplement parce que comme l'état est basé sur une requête, Access appelle d'abord la
requête pour construire l'état, et cette boite de dialogue est générée par la requête.
Il génère alors un état tout simple :
Nous allons, comme avec le sous-formulaire, ajouter un sous état à l'état actuel, ce sous état va afficher,
pour la commande le détail de chaque ligne de la commande :
Pour cela, on passe en mode modification de l'état et on insère dans la partie "Détail" de l'état un contrôle
sous-état :
Access nous demande à partir de quoi va être généré notre sous-état, il va l'être à partir de tables.

Access nous demande ensuite quels vont être les champs qui vont être affichés dans le sous-état.

On retrouve ici ce qu'on avait fait dans les formulaires, on indique ici les champs et les tables d'où
proviennent les informations : IDProduit, Quantité et IDCommande viennent de la table
"CommandeProduit" et Description, PrixUnitaire viennent de la table "Produit"

Notez que le champ IDProduit (numéro du produit) vient de la table "CommandeProduit" et non pas de la
table "Produits". Pourquoi ? Parce qu'on veut la liste des produits commandés (donc présents dans la
table CommandeProduit"), si on avait choisi le numéro de produit venant de la table "Produit", cela aurait
voulu dire qu'on voulait la liste de tous les produits présents dans la table "Produits".
Il va falloir maintenant indiquer à Access comment faire la relation entre l'état et le sous-état. De deux
choses l'une, soit les relations sont bien faites et Access va savoir seul comment faire la relation, soit
elles sont mal faites, ou Access ne voit pas comment faire et il va afficher la fenêtre suivante :

Ici, on va simplement indiquer à Access quel est le champ qui va être commun à l'état et au sous-état,
c'est à partir de ce champ commun que le sous état va pouvoir être généré. On veut afficher, pour
chaque commande le détail de chaque ligne de la commande, ce détail se trouve dans la table "
CommandeProduit", dans la table "CommandeProduit" se trouve le champ "IDCommande" qui indique à
quelle commande appartient cette ligne de commande.

La "jointure" entre ces deux tables va donc se faire sur le numéro de commande, d'un côté le champ
"NoCommande" dans la table "Commande" avec le champ "IDCommande" dans la table
"CommandeProduit" de l'autre.

D'ailleurs, on peut voir dès qu'on a choisi ces champs, qu'Access nous affiche en français la nature de
cette relation entre les tables.

Access génère l'état et affiche :


Vous pouvez constater que maintenant, pour la commande, s'affiche, en plus le sous état contenant le
détail de chaque commande.
LES MACRO COMMANDES
1. Introduction
La macro commande permet d'automatiser certaines tâches d'Access, elle peut simuler une suite
d'actions qui auraient du être faites par l'utilisateur.
Une macro est composée d'Actions, chaque action correspond à une tâche : lorsque vous exécutez la
macro, Access exécute automatiquement les actions qu'elle contient. Certaines de ces actions, plus
complexes, vous permettent d'afficher des boîtes de dialogue, de tester la réponse fournie par
l'utilisateur, d'afficher une barre de menus personnalisée… et de développer une application autonome
sans avoir besoin de programmer des modules en Visual Basic (bien que les actions fassent référence à
des instructions en Visual Basic).
La méthode de création d'une macro est liée à deux facteurs importants :
L'environnement de départ de la macro : certaines macros peuvent être exécutées quelle que soit
la fenêtre active, d'autres sont liées à un objet de la base de données (formulaire, état, …)
L'événement qui va déclencher l'exécution de la macro : dans un formulaire, ce peut être un clic
sur un bouton, ce peut être l'ouverture du formulaire, la valeur du contenu d'un contrôle, ou encore en
fonction de la mise en page d'un état.

Création d'une macro autonome


Une macro autonome n'est pas liée à un événement spécifique et peut être exécutée quelle que soit la
fenêtre active.
Nous allons créer une macro qui va ouvrir la table Clients et son formulaire :
1. Dans la fenêtre principale d'Access, cliquez sur l'onglet « Créer » et sur Macro:

La partie supérieure de la fenêtre (le tableau) est destinée aux différentes actions qui vont composer la
macro. La plupart des actions ont des paramètres (par exemple l'action OuvrirTable qui ouvre une table
demande en paramètre le nom de la table qu'elle va ouvrir), les paramètres (par exemple ici, le nom de la
table) sera indiqué dans la partie inférieure de la fenêtre.

2. On choisit dans le menu déroulant l'action que l'on veut faire exécuter par la macro :
Comme vous pouvez le constater, il existe un très grand nombre d'actions possible, en fait, tout ce qu'on
peut faire dans Access se retrouve dans ce menu. Pour avoir la liste des actions possibles, utilisez l'aide
intégrée à Access qui décrit le fonctionnement de chaque action.
Nous voulons ouvrir une table, nous choisissons l'action "OuvrirTable".

3. Saisie des paramètres de l'action


Comme vous pouvez le constater, dans le champ "Nom table" apparaissent les noms de toutes les tables
de la base, on choisit "Client".
Deux autres champs peuvent paramétrer l'action :
Affichage : détermine si la table sera ouverte en mode création ou en mode feuille de données
Mode données : Trois choix : Ajout (on peut ajouter des enregistrements à la table), Modification (on
peut ajouter, modifier ou supprimer des enregistrements) et Lecture Seule (seule la consultation est
permise).

4. Une deuxième action


Vous l'avez remarqué, le tableau de la fenêtre "Macros" contient plusieurs lignes, on peut exécuter
plusieurs actions les unes à la suite des autres dans la même macro, maintenant, après avoir ouvert
notre table Clients, nous allons ouvrir le formulaire associé à cette table :

L'Action "OuvrirFormulaire" a plus de paramètres :


Affichage : identique aux tables
Mode données : identique aux tables
Nom Filtre : on peut indiquer ici le nom d'une requête contenant les critères nécessaires à la sélection
des enregistrements.
Mode fenêtre : indique comment le formulaire va être affiché : Standard (comme défini dans Affichage),
Masquée (le formulaire est ouvert et automatiquement caché), Icône (le formulaire est réduit en icône),
Boîte de dialogue (nous verrons ça plus tard)
Condition Where : plus tard…
5. Exécution de la macro
Sauvez votre macro.
Comme pour les requêtes, cliquez sur l'icône 'Point d'exclamation'. Access va alors exécuter toutes les
lignes de la macro et s'arrêter dès qu'il va rencontrer une ligne vide, ou dès qu'il va rencontrer l'action
"ArretMacro".
Exécuter la macro pas à pas

Pour analyser le déroulement d'une macro, on peut l'exécuter pas à pas, c'est-à-dire, action après action.
Pour cela :
1. Ouvrir la macro en mode création
2. Cliquer sur l'icône :

3. Exécuter ensuite la macro

Access affiche la première action ainsi que ses paramètres, cliquez sur :
Pas à pas : pour exécuter cette action et passer à la suivante
Arrêter : pour stopper l'exécution de la macro
Continuer : Pour poursuivre l'exécution de la macro en mode normal

Modifier une macro

Pour modifier une macro, ouvrez là en mode création et positionnez vous sur l'action à modifier, cliquez
dessus avec le bouton droit : vous pouvez alors la supprimer ou en insérer une autre.

Création d'une macro associée à un formulaire

Certaines macros doivent être exécutées en réponse à un événement lié au formulaire (ouverture,
fermeture, fermeture…), d'autres dépendent d'un événement lié à un contrôle du formulaire (clic, valeur
du contrôle, etc.). Dans le premier cas, la macro doit être insérée dans la feuille de propriétés du
formulaire, dans le second cas, elle doit apparaître dans la feuille de propriétés du contrôle.
Il faut définir précisément quel est l'événement qui va déclencher l'exécution de la macro (quand tel
événement se produit, telles actions vont se dérouler).
Prenons un exemple, nous voulons refuser l'enregistrement d'une commande si la date de cette
commande n'a pas été saisie. (Nous pourrions dans les propriétés du champ date, indiquer dans la
propriété Null Interdit « Oui »).
La question à se poser est : "Quand va-t-on vérifier que le champ date est vide ?", Il n'y a qu'une réponse
: "Quand on passera à un nouvel enregistrement, que ce soit pour retourner sur un enregistrement
précédent ou pour en créer un nouveau". Donc, lorsqu'on passera à un nouvel enregistrement, si la date
est vide, on va afficher un message d'erreur, et positionner le curseur à nouveau sur le champ date pour
pouvoir le saisir.
L'événement "passer à un nouvel enregistrement" est lié au formulaire et pas au contrôle "Date",
l'événement sera donc associé au formulaire.

Voici la liste des principaux événements qui peuvent être associés à un formulaire :

Evénement La macro doit s'exécuter:

Sur Ouverture A l'ouverture du formulaire

Sur Fermeture A la fermeture du formulaire

Sur Activation Lorsqu‟Access accède à un enregistrement du


formulaire

Sur Insertion Lorsqu'on précise la valeur d'un champ d'un nouvel


enregistrement

Sur Suppression Lorsqu'on va supprimer un enregistrement

Avant MAJ Après avoir quitté un enregistrement modifié et


avant l'enregistrement des
modifications

Après MAJ Après avoir quitté un enregistrement modifié et


après l'enregistrement des modifications.

En résumé, ces événements concernent l'ouverture, la fermeture du formulaire et la gestion des


enregistrements.
Les événements liés aux contrôles d'un formulaire sont les suivants :

Evénement La Macro doit s’exécuter :


Sur Clic Quand on clique sur le contrôle

Sur Double Clic Quand on double-clique sur un contrôle

Sur Entrée Avant d'accéder à un contrôle

Sur Sortie Lorsqu'on quitte un contrôle

Avant MAJ Après avoir quitté un contrôle modifié et avant


qu'Access ne fasse la mise à
jour

Apres MAJ Après avoir quitté un contrôle modifié et après sa


mise à jour

Dans notre exemple, il faut que la macro s'exécute lorsqu'on va accéder à un nouvel enregistrement, on
va donc l'affecter à l'événement "AvantMAJ" du formulaire : il faut que la vérification de la bonne saisie de
la date se fasse lorsque l'on veut changer d'enregistrement mais avant qu'Access n'enregistre quoi que
ce soit.

Exécuter des actions en fonction de conditions


1. On va créer une nouvelle macro pour vérifier la date, une fois la fenêtre de la macro ouverte, cliquez
sur l'icône :

2. Une nouvelle colonne apparaît dans la fenêtre de la macro, c'est la colonne "Condition", c'est dans
cette colonne qu'on va taper la condition qui décidera si oui ou non l'action de la macro doit s'exécuter.
3. On veut qu'un message d'erreur s'affiche lorsque la date de la commande est vide, la condition pour
que le message s'affiche est donc : [DateCommande] Est Null. L'action qui va être déclenchée si la
condition s'avère vraie va être l'affichage d'un message d'erreur.

Afficher un message

Pour afficher un message pendant une macro, on utilise l'action "BoîteMsg", "BoîteMsg" va afficher une
boîte de dialogue Windows avec le texte et les caractéristiques qu'on va indiquer dans les paramètres de
l'action.
L'action "BoîteMsg" a les paramètres suivants :
Message : texte à afficher
Bip : Emet un bip sonore lors de l'affichage du texte
Type : Icône à afficher à côté du texte (point d'exclamation, d'interrogation, etc…)
Titre : titre de la fenêtre où va s'afficher le texte

Déplacer le curseur

Une fois le message d'erreur affiché, il va falloir positionner le curseur automatiquement sur le contrôle
DateCommande, pour que l'utilisateur puisse le ressaisir.
Il existe plusieurs actions pour déplacer le curseur :
AtteindreContrôle : Déplace le curseur sur un contrôle spécifié
AtteindrePage : Déplace le curseur sur le premier contrôle de la page spécifiée
AtteindreEnregistrement : Déplace le curseur sur l'enregistrement spécifié ou sur un nouvel
enregistrement.
Nous devons déplacer le curseur dans le formulaire sur le contrôle du champ "DateCommande", nous
utiliserons donc l'action "AtteindreContrôle" :

Quoi de neuf dans cette fenêtre ?

Sur la première ligne on a la condition : si la date de la commande est vide, on affiche le message
d'erreur, mais après avoir affiché l'erreur que fait-on ? On va faire plusieurs choses, et pour indiquer que
les autres actions que l'on va faire vont se dérouler dans le cas où l'erreur s'est produite, on va mettre
comme condition "…", autrement dit, à chaque fois qu'Access va rencontrer comme condition "…", il va
reprendre la condition spécifiée explicitement plus haut.
Donc, après avoir affiché l'erreur, on va exécuter l'action "AnnulerEvénement". A quoi sert cette action ?
Normalement, après avoir modifié le formulaire, Access va mettre à jour les champs correspondants dans
les tables liés à ce formulaire. Juste avant de faire cette mise à jour, Access va appeler la macro
associée à l‟évènement « AvantMAJ ». La macro va être exécutée, puis la mise à jour sera faite. Il faut
qu‟on annule cette mise à jour, sinon, le message indiquant que la date est vide va être affiché, puis
Access va sauvegarder les modifications et sauver dans la table commandes la date vide. L‟action
« AnnulerEvénement » annule la mise à jour qui allait être faite, ainsi, la date vide ne sera pas sauvée.
Enfin, on va déplacer le curseur sur le contrôle "DateCommande" grâce à l'action "AtteindreContrôle",
Ainsi le curseur clignotera directement sur le contrôle où l‟utilisateur devra saisir la date.

Affectation de la macro à l'événement

Maintenant que la macro est créée, on va l'affecter à la macro à l'événement "AvantMAJ" du formulaire
"Commandes". Pour afficher les propriétés d'un formulaire, cliquez avec le bouton droit sur le carré noir
situé en haut à gauche du formulaire, puis dans le menu, cliquez sur "Propriétés".
Choisissez l'événement auquel vous voulez associer la macro, dans le menu déroulant s'affichent toutes
les macros existantes, on choisit "DateObligatoire".
Une fois la macro associée à l'événement, il suffit d'entrer une commande dans laquelle on omet de saisir
la date pour vérifier que la macro va s'exécuter (message d'erreur et repositionnement sur le contrôle) :

Ouvrir un formulaire et afficher un enregistrement

Notez que cette manipulation n’est donnée qu’à titre d’exemple, on peut faire la même beaucoup plus
simplement en utilisant l’assistant du bouton de contrôle.

Nous allons ajouter un bouton sur un formulaire, ce bouton affichera les informations complètes sur le
client concerné:
D'abord, on crée une macro qui va ouvrir le formulaire :
On indique qu'on ouvre le formulaire "Client", et ici, on utilise la condition Where qu'on avait vu plus tôt,
on va indiquer que dans le formulaire qui va être ouvert, le champ [Nom] (nom du client) va être égal à
[Formulaires].[frmclient ].[txtclient]. Ce qui signifie que le champ [Nom client] dans le formulaire "Clients"
va être égal au contenu du contrôle "Nom Client" dans le formulaire "frmclient".

Créer une boite de dialogue

Il peut être pratique de créer une boîte de dialogue pour répondre à une question par exemple, nous
allons créer une boîte de dialogue dans laquelle nous allons entrer un numéro de commande, et qui
affichera le formulaire correspondant à cette commande.
1. Création de la boîte de dialogue
Une boîte de dialogue est un formulaire standard qui a des propriétés particulières : Dans la fenêtre
propriétés du formulaire, cliquez sur l'onglet "Toutes", et mettez la propriété "Fen Modale" à oui, "Auto
Center" à oui, "Boite Contrôle" à non et "Affiche par défaut" à "Mode simple".
On va mettre sur le formulaire les contrôles suivants : «Etiquette », « Boite de liste », « Bouton de
commande ».
La liste de choix contient le résultat d'une requête allant chercher les numéros de toutes les commandes.
2. On crée ensuite la macro
La macro est du même type que la précédente, la clause Where ici est :
[NoCommande]=[Formulaires].[frmcommande].[lstcommande] où [NoCommande] est le nom du champ
contenant le numéro de commande dans le formulaire "frmcommande" et [lstcommande] est le nom de la
liste contenant la liste des commandes existantes.
Voilà, nous avons fait le tour rapidement des fonctionnalités offertes par l'utilisation des macros, on peut,
bien sur, pousser plus loin et faire beaucoup d'autres choses avec, à vous d'expérimenter et de trouver
d'autres utilisations aux macros.
Menu General
Le menu c‟est le fait de regrouper sur un formulaire des contrôles faisant appellent aux différents objets
créer au cours de la création de notre BDD.

Il y a deux façons de créer un Menu General:

1- Avec l‟aide d‟Access


2- On crée soi même notre menu.

On verra ces deux méthodes respectivement (amusant non).

1- Avec l’assistant d’Access

Pour ce faire :

Etape 1 : On clique sur l‟onglet « Outils de BDD ». Dans le menu on selection « Tableau de distribution ».
Etant donne que notre BDD n‟avait pas encore de tableau de distribution, une boite de dialogue s‟affiche
disant que le gestionnaire est incapable de trouver un tableau de distribution dans la BDD en cours, si
vous aimeriez qu‟il en crée un? On clique sur « Oui ».

Etape 2 : La fenêtre ci-dessus nous invite à créer la page de notre tableau de distribution, pour y arriver
on clique sur « Nouveau… ».

Dans la nouvelle fenêtre, on nomme la page du tableau de distribution (« Accueil » par exemple) et on
clique sur « OK ».

Automatiquement la page apparait dans le gestionnaire :


Etape 3 : On va ajouter maintenant sur la page les contrôles qui vont faire appellent aux différents objets
de la BDD, d‟abord on sélectionne la page « Accueil » ensuite on clique sur « Editer » :

Dans la fenêtre ci-dessus, on va créer les contrôles qui vont se retrouver sur la page. On clique sur
« Nouveau ». Dans la nouvelle fenêtre on nomme notre contrôle, ensuite on choisit l‟action que doit
effectuer la commande ; dans notre cas on choisit « Ouvrir formulaire en Mode Modification », on choisit
par la suite le formulaire auquel on veut lier le contrôle « Formulaire du client » :

On clique sur « OK » et voila:


Une fois tous les contrôles ont été placé sur la page, on ferme la fenêtre en cliquant sur « Fermer », on
revient à la fenêtre précédente, on sélectionne la page « Accueil », on clique « Par défaut », ensuite on
clique sur « Fermer » et c‟est Terminé :

Définir les options de démarrage

Maintenant que vos formulaires s‟affichent via des boutons, vous quittez de plus en plus votre statut de
concepteur pour redevenir utilisateur. Au quotidien pour de la saisie ou de la consultation, le volet de
navigation n‟est pas indispensable. Vous allez le masquer, ainsi que toutes les fonctions techniques
d‟Access.
Appliquer les options de démarrage

1- Dans la fenêtre de votre BDD, cliquez sur le bouton « Office », en haut à gauche de l‟écran, puis
sur la commande « Options Access », au bas du menu. Dans la boite de dialogue qui se
présente, activez l‟option « Base de données active ».

2- Dans la première zone de saisie (Titre de l‟application), saisissez un texte quelconque qui servira
de titre pour votre BDD. Ce titre sera repris en haut de la fenêtre du logiciel, en remplacement de
la mention « Microsoft Access ».
3- Si vous disposez d‟une image de petite taille au format ICO ou BMP, vous pouvez en faire l‟icône
de votre BDD. Cliquez, dans ce cas, sur le bouton « Parcourir » placé à droite de la rubrique
« Icône de l‟application », puis sélectionnez l‟image sur votre disque dur.
4- A droite de la boite de dialogue, déroulez la liste « Afficher le formulaire », et sélectionnez le nom
de votre formulaire de démarrage (« Accueil »). De cette manière, le formulaire s‟ouvrira
automatiquement a chaque fois que vous démarrez votre magasin.
5- Décrochez maintenant les cases suivantes, de façon à désactiver l‟accès au mode de conception
de la BDD :
Utiliser les touches spéciales Access ;
Activer le mode Page pour cette BDD ;
Autoriser les modifications de structure des tables en mode Feuille de données ;
Afficher le volet de navigation ;
Autoriser les menus complets ;
Autoriser les menus contextuels par défaut.

Vous pouvez masquer également les onglets de document (a savoir, les onglets associes aux tables,
requetes et autres objets Access ouverts). Conservez activée l‟option « Afficher la barre d‟état ». Cette
barre bleue située en bas de l‟écran est pratique, car elle affiche diverses informations ou messages
d‟avertissement.

6- Validez vos choix en cliquant sur le bouton OK.

Maintenant, testez

1- Quittez Access, ou fermez votre projet grâce au bouton « Office » et à la commande « Fermer la
BDD. »
2- Rouvrez la BDD en cliquant sur le bouton « Office », puis sur le nom du fichier, à droite du menu.

Comme vous pouvez le constater, l‟écran est beaucoup « épure » désormais :

Le volet navigation ne s‟affiche plus (même s‟il est toujours la pour faire fonctionner l‟ensemble) ;
Le bouton droit de la souris est inactif ;
Le Ruban est toujours présent mais allégé. Seules les options relatives à la saisie/consultation
sont encore disponibles. Les options « concepteur » sont masquées.
Annuler les options de démarrage

Tout cela est parfait, mais comment le concepteur retrouve-t-il un accès complet a la BDD ? Voici l‟astuce
pour y parvenir.

1- Démarrez Access sans ouvrir votre BDD(ou quittez Access si la base est actuellement ouverte).
2- Sur la page d‟accueil du logiciel figurent les noms des BDD ouvertes récemment, dont celle qu‟on
utilise.
3- Ne cliquez pas directement sur le fichier de votre BDD vos options de démarrage seraient prises
en compte aussitôt. L‟astuce consiste à maintenir la touche « Shift » enfoncée, tandis que vous
cliquez sur le fichier. Cette fois, les réglages de démarrage sont court-circuités : vous accédez a
toute la base.

La technique fonctionne même si vous ouvrez votre base d‟une autre manière (via le bouton « Office »,
l‟icône de la BDD dans le dossier Mes documents) .

2- Créer une page d’accueil soi même

Votre application Access disposant déjà de nombreux formulaires, il est intéressant de construire un
formulaire de démarrage, qui servira a aiguiller l‟utilisateur vers les autres écrans de saisie a l‟aide de
boutons

Ce nouveau type de formulaire n‟est associe ni a une table ni a une requête (il ne sert pas en
consultation/saisie de données). Il sera donc construit sans assistance.

1- Ouvrez votre BDD dans Access. Sur le Ruban, activez l‟onglet créé, puis cliquez sur l‟option
« Création de formulaire ».

Vous obtenez un formulaire pour le moins dépouillé : une zone de « détail » seule, représentée par un
rectangle quadrillé.

2- Commencez par définir une image de fond, le formulaire sera plus joli ! Vous pouvez également
ajourer une ou plusieurs images en premier plan.
3- Ajoutez un titre au formulaire. Pour cela, cliquez sur l‟icône « Titre » du Ruban. Une zone
d‟étiquette se crée automatiquement, qu‟il vous suffit de remplir. Validez votre intitulé via la
touche « Entrée ».
4- Vous pouvez éventuellement personnaliser la mise en forme (police, taille, couleur, encadrement)
du titre.
5- L‟icône « Logo » vous permet d‟ajouter également une image dans l‟entête du formulaire.
6- Enregistrez votre travail : cliquez sur le bouton « Office », en haut de l‟écran, puis sur la
commande « Enregistrer ». Nommez votre formulaire frmAccueil, par exemple.

Ajouter des boutons sur le formulaire d’accueil

1- Il faut maintenant placer, sur le formulaire d‟accueil, un bouton pour ouvrir chacun des autres
formulaires de la BDD. Pour construire le premier de ces boutons, ouvrant le formulaire
« Client ».
2- Toujours dans le Ruban, cliquez sur l‟icône « Bouton » que vous avez déjà utilisé précédemment.
Cliquez ensuite quelque part sur mon formulaire.
3- Dans la première boite de dialogue de l‟assistant bouton de commande, sélectionnez la
catégorie « Operations sur formulaire » et l‟action « Ouvrir un formulaire ». Cliquez sur le bouton
« Suivant », au bas de la boite.
4- Choisissez maintenant le formulaire à ouvrir, en l‟occurrence « Client », puis cliquez sur le bouton
« Suivant ».
5- Vous disposez de deux options. Conservez celle qui est proposée (l‟objectif est de permettre la
consultation ou la modification de tous les clients de la base). Le second choix permet de filtrer le
formulaire « Client » à l‟ouverture. Il n‟est pas applicable ici. Cliquez sur le bouton « Suivant ».
6- Définissez le texte ou l‟image de votre bouton. Dans notre exemple, nous avons préféré du texte,
plus parlant qu‟une image pour différencier les boutons du formulaire. Cliquez une nouvelle fois
sur le bouton « Suivant »
7- La dernière étape consiste à nommer le bouton. Saisissez, par exemple btnclient. Vous pouvez
enfin cliquer sur le bouton « Terminer ».
8- Comme toujours testez ce bouton avant d‟aller plus loin dans la conception : cliquez sur
l‟icône « Affichage » pour passer du cote Utilisateur, puis cliquez sur le bouton créer.
9- Enregistrez à nouveau votre travail.

Si tout fonctionne, vous pouvez maintenant reproduire toutes ces étapes pour créer autant de boutons
qu‟il y a de formulaires dans votre BDD.

Vous reprenez enfin le processus de définition des options de démarrage expliquer avant.