Tutoriel réalisé avec Access 2013
Lorsque vous créez une base de données complexe, il vous sera fortement utile d’utiliser les relations et donc d’en comprendre leur fonctionnement. Les relations entre les tables permettent d’éviter les redondances et donc de réécrire les informations plusieurs fois et surtout d’éviter les erreurs.
Par exemple, si j’utilise Access pour créer mes factures, je peux créer une Table Clients où je saisirai toutes les informations concernant chaque client et je créerai une Table Factures où je ne saisirai que les informations concernant la facture elle-même comme son Numéro, sa Date d’émission et sa Description (quantité, prix unitaire, montant…) et je n’aurais pas besoin de ressaisir à chaque facture les informations du client grâce à la relation que j’aurais créée entre les deux tables et je n’aurais pas de doublon.
Rappel des différents types de relations sur Access
Pour bien comprendre le fonctionnement des relations, voici un petit rappel.
Il existe 3 types de relations (on peut également appeler ces relations « cardinalité ») :
- 1 à 1 (1-1) ;
- 1 à plusieurs (1-N) ;
- Plusieurs à plusieurs (N-N).
N désigne le symbole infini (∞) dans le logiciel Access.
Exemples de relations Access
Nous allons prendre 3 exemples pour mieux comprendre ces 3 types de relations.
À gauche et à droite nous retrouvons les tables avec, en titre, leur nom suivi de leurs champs (dans ces exemples, les champs ont été simplifiés, mais on peut bien sûr en avoir plus). Au centre, nous utilisons un verbe qui peut être utilisé dans la relation entre les 2 tables.
Dans cet exemple, on peut dire qu’un Individu possède une seule Carte d’identité. Dans le sens inverse, une Carte d’identité ne peut être possédée que par un seul Individu.
La relation est donc 1 à 1.
Ici, on peut dire qu’un Client peut recevoir plusieurs Factures. À l’inverse, une facture ne peut être reçue que par un seul Client.
La relation est donc 1 à plusieurs.
Enfin, dans cet exemple, nous pourrons dire qu’un Étudiant peut suivre plusieurs Cours, mais aussi qu’un Cours peut être suivi par plusieurs Étudiants.
La relation est donc plusieurs à plusieurs.
À partir du moment où la réponse est différente de 1, je retiens la réponse plusieurs.
Maintenant, nous allons mettre en application ce que nous venons de voir pour créer une relation sur Access.
Création d’une relation sur Access
Pour l’exemple, nous allons prendre une Table Clients et une Table Factures comme dans le schéma n°2 où la relation est 1 à plusieurs. Vous trouverez une base de données comprenant ces 2 tables, au bas de l’article, afin de mettre en pratique ce tutoriel si vous le souhaitez.
Création de la clé primaire
Pour créer des relations, je dois d’abord avoir un champ en commun dans mes 2 tables.
Pour cela, je vais créer un champ N° client dans ma Table Factures ayant exactement le même nom que le champ N° client de la Table Clients. Le même nom n’est pas obligatoire, mais le même type oui.
J’ouvre ma Table Factures et je clique soit directement sur Affichage , soit sur la flèche sous le bouton Affichage pour passer en Mode Création
. Je peux placer mon nouveau champ où je le souhaite, à la fin ou sous mon N° de facture par exemple. Si je souhaite l’ajouter sous mon N° de facture, il suffit de cliquer droit sur Date d’émission (qui est le champ suivant) et de cliquer sur Insérer des lignes
.
Je nomme mon champ N° client, dans ce cas, je ne peux pas choisir le Numéroauto comme type de champ puisque qu’Access n’accepte qu’un seul type Numéroauto par table et que N° facture possède déjà ce type. Je choisis donc Numérique. Ce champ est une clé étrangère, c’est-à-dire une clé primaire venant d’une autre table.
Pour savoir quelle table recevra la clé étrangère, il faut retenir que c’est la clé primaire du côté 1 qui sera reprise dans la table du côté plusieurs. Comme j’avais indiqué qu’un client peut recevoir plusieurs factures, ma clé primaire de ma Table Clients sera reprise dans ma Table Factures.
Pour créer une relation, il est important d’avoir fermé les tables, auquel cas, Access nous le signalera par la suite. Donc, une fois mon nouveau champ créé, je referme ma table par un clic droit sur son nom dans les onglets. On me demande si je souhaite enregistrer, je clique sur Oui.
Création de la relation via la fenêtre Relations
Ensuite, je vais dans l’onglet Outils de base de données et je clique sur Relations .
Dans la boîte de dialogue qui s’affiche, je reste sur l’onglet Tables et double-clique sur chacune des 2 tables ou je clique sur chaque table et clique sur Ajouter . La même boîte de dialogue peut apparaître en cliquant sur Afficher la table
.
Une fois mes 2 tables présentes sur mon écran, je clique sur Fermer . Je peux réduire ou agrandir mes tables mais aussi les déplacer sans aucune incidence sur mes relations, cela permet juste une meilleure visualisation. Pour information, il ne faut jamais faire apparaître 2 fois la même table ou requête sur l’espace des relations, car il pourrait y avoir des problèmes dans la base de données par la suite.
Pour créer ma relation, j’ai juste à me placer sur N° client de la Table Clients et à le glisser vers N° client de la Table Factures. Mon curseur doit faire apparaître un carré blanc avec une croix pour m’indiquer que je peux lier ces 2 tables.
Dans la boîte de dialogue qui s’affiche, j’ai bien mon champ N° client de la Table Clients et N° client de la Table Factures qui vont être liés. Je vais cocher Appliquer l’intégrité référentielle.
Principe de l’intégrité référentielle sur Access
L’intégrité référentielle permet à Access de garantir que les relations entre les enregistrements dans les tables liées sont valides et que vous n’allez pas effacer ou modifier par erreur des données liées. Ce qui permet de créer une relation forte entre ces tables.
Pour appliquer cette intégrité référentielle :
- Les tables doivent posséder une clé primaire ou l’option d’index sans doublons ;
- Les tables ne doivent pas contenir de doublons (par exemple si plusieurs clients possèdent le même numéro de client, l’intégrité référentielle est impossible) ;
- Le champ en commun ne doit pas être vide ;
- Les tables doivent contenir les mêmes équivalences (si vous avez 5 numéros de produits dans votre Table Factures alors que vous n’en avez que 4 dans votre Table Produits, l’intégrité référentielle n’est pas possible) ;
- Les tables que nous souhaitons relier ne doivent pas être ouvertes dans les onglets.
Le concept de l’intégrité référentielle est un peu complexe, mais, pour simplifier, c’est une bonne chose de l’appliquer, car elle permet de synchroniser les informations et d’éviter les erreurs de gestion d’informations.
Cependant, Access peut ne pas l’accepter pour les raisons évoquées précédemment.
Je ne coche pas Mettre à jour en cascade les champs correspondants et Effacer en cascade les enregistrements correspondants, mais cela permettrait de mettre à jour les tables si l’on modifie ou supprime un enregistrement dans les tables liées.
Je clique sur Créer. Je constate que ma relation est créée et que j’ai bien une relation Un-à-plusieurs.
Je peux maintenant fermer l’espace de création des relations en cliquant sur Fermer et j’accepte d’enregistrer.
Il me suffit maintenant de renseigner le N° client dans ma Table Factures (pour faire correspondre chaque client et facture).
Visualisation des données reliées
Grâce à cette relation, lorsque je retourne dans ma Table Clients, j’ai une nouvelle colonne devant chaque enregistrement avec des signes plus (+). Lorsque je clique dessus, je peux voir les factures concernant chaque client.
Grâce à l’intégrité référentielle, je ne peux plus créer de factures avec un N° client qui n’existe pas, car, si dans ma Table Factures, j’ajoute un enregistrement ayant pour N° client 25 (qui n’existe pas dans ma Table Clients) et que je souhaite enregistrer ou fermer ma table, Access m’affiche ce message « Vous ne pouvez pas ajouter ou modifier un enregistrement car l’enregistrement associé est requis dans la table « Clients ». » :
Puis, après avoir cliqué sur Ok, Access vous affichera le message « Impossible d’enregistrer cet enregistrement pour l’instant. » :
De même, je ne peux plus supprimer un client de la Table Clients si une facture le concernant apparaît dans la Table Factures. Auquel cas, j’aurais ce message « Impossible de supprimer ou de modifier l’enregistrement car la table « Factures » comprend des enregistrements connexes » :
Par contre, si vous avez coché Mettre à jour en cascade les champs correspondants et Effacer en cascade les enregistrements correspondants lors de la création de la relation, vous aurez ce message « Les relations qui spécifient les suppressions en cascade provoqueront la suppression de 1 enregistrement(s) dans cette table, ainsi que des enregistrements connexes dans les tables associées. » :
Bonjour, tout d’abord un grand merci pour vos articles. Je vous contacte pour savoir comment créer une relation plusieurs-à-plusieurs car après quelques recherches je n’ai toujours pas réussi a en créer une. Merci pour votre réponse.
Julie
Bonjour Julie,
J’ai trouvé un tuto qui explique très bien comment créer une relation plusieurs-à-plusieurs. Je pense qu’il est plus simple que vous alliez directement dessus plutôt que je réexplique tout ici. Mais si vous avez des difficultés, n’hésitez pas à me recontacter : 🙂
Bonjour Lydia,
Supers tutoriels, vraiment précis et pratiques.
J’ai une question : comment dessiner une relation 1-1 dans Access ? Exemple : un individu qui a une carte d’identité et une carte d’identité est possédée par un individu.
Faut-il recopier la clé primaire num_carte_id de la table pièce d’identité dans la table individu et lui faire une clé primaire composée de id_individu et num_carte_id ?
Cordialement.
Bonjour Cédric,
Dans ce cas, il faut faire glisser la clé primaire de la première table vers la clé primaire de la seconde table en appliquant l’intégralité référentielle.
Bonjour Lydia,
Je suis en train de faire mes relations et je bloque.
J’ai 3 tables :
T_Concession
T_EmployeConcession
T_TypeEmploye
Sachant que chaque Concession peut avoir plusieurs employés et que chaque employé peut travailler pour plusieurs Concessions, quelle sorte de relations dois-je utiliser ?
Bonjour Daniel,
Relation 1-N entre Concession et Employés.
Bonjour,
Merci pour votre travail collaboratif de qualité.
Il existe deux façons de créer un lien entre deux tables (celle indiquée par ce post et celle proposée via l’assistant Access 2013). Je crois que celle que vous avez expliquée est la plus performante à mon avis. Bref…
Pourriez-vous me conseiller, s’il vous plait, en effet, si j’ai 3 tables A, B et C : (A est constituée de deux champs, le premier c’est le N° de A en clef primaire et le second c’est le nom de A) ; (B comporte 3 champs, le premier c’est N° de B en clef primaire, le second c’est le nom de B et le troisième c’est le nom de A, mais le lien passe par la clef primaire de A) ; (C possède 3 champs, le premier c’est le N° de C, Le second le Nom de C et le troisième c’est B, via la clef primaire de B). Dans le troisième champ de C, je sélectionne dans la LISTE DES CHOIX, l’option ZONE DE LISTE DÉROULANTE, etc. et s’affiche correctement le nom de B via la clef primaire de B et apparaît aussi A, mais là seul N° de la clef primaire apparaît et pas le nom de A). Et donc problème…
Car en fait, je veux associer 3 champs dépendants (niveaux pyramidaux => N;N-1;N-2).
Je ne sais pas si je suis très clair dans mon exposé, si oui, pourriez-vous me conseiller ou m’orienter, s’il vous plait ?
Bien cordialement.
Bonjour,
Désolée, mais je n’ai jamais réalisé ce genre de relations et j’ai un peu de mal à visualiser le problème.
Bonjour,
Je viens d’essayer votre tuto et j’ai un souci. Lorsque je clique sur Créer dans la fenêtre « Modifier mes relations », un message d’erreur s’affiche (index unique introuvable pour le champ référencé d’une table principale) qu’est-ce que cela veut dire ?
Rebonjour Lydia,
J’ai oublié de poser une question dans mon précédent commentaire.
J’ai créé une table facture en me basant sur la vôtre (date d’émission, mode de paiement…), j’ai rajouté un champ « référence » et mis en type de donnée « assistant liste de choix ». J’ai rentré 3 colonnes : 1 de référence, la deuxième correspondant au nom de l’article et la troisième au prix.
Je souhaiterais que lorsque je rentre une référence, le nom de l’article correspondant apparaisse dans mon champ « désignation » et le prix correspondant dans le champ « prix unitaire ».
Je ne sais pas si c’était la bonne méthode. Si oui, comment créer cette relation ? Avez-vous déjà fait un tuto dessus ?
Bonjour Laurence,
Peut-être n’avez-vous pas créé de clé primaire ?
Un tuto traite de la « RechercheV » sur Access ici.
Bonjour Lydia,
J’ai lié 5 tables sur Access, dont une avec une liste d’espèces d’oiseaux et une avec des sites de comptage (noms + coordonnées géographiques). Certains sites correspondent à des espèces ne figurant pas dans la première table : comment ne conserver que les sites qui m’intéressent (seulement ceux correspondant aux espèces de la table 1) ?
Bien cordialement,
Marianne
Bonjour Marianne,
Avez-vous essayé avec une requête, car je ne suis pas sûre d’avoir compris ce que vous souhaitez ?
Bonne continuation Lydia et merci pour les tutoriels.
Bonjour Lydia,
Je me repère à vos tutoriels sur la formation Access, car vous avez l’art de bien faire comprendre ce que vous enseignez dans un langage pas trop technique et cela rend vos cours très accessibles. En fait, je reviens sur les relations. J’ai téléchargé la vidéo, mais je n’arrive pas à avoir votre base de données annexée pour pouvoir m’exercer (À quoi servent les relations entre les tables Access et comment les créer ?). D’avance merci.
Bonjour Louis-Patrice,
La base de données, comme tous les autres documents, se trouve au bas de l’article et se déverrouille par un partage de l’article sur un des réseaux sociaux.
Bonjour,
J’ai un petit problème : après avoir créé un formulaire suite à la création d’une table, j’aimerais faire communiquer les deux parties, c’est-à-dire, si je crée un nouvel enregistrement dans le formulaire, qu’il apparaisse dans la table et inversement. Comment faire ?
Merci.
Bonjour Quentin,
Une table s’alimente toujours avec les données saisies dans son formulaire. Si ce n’est pas le cas, il faut regarder du côté de la source du formulaire.
Mademoiselle,
Je suis chirurgien, intelligent (je crois) et vif d’esprit, mais je suis ébloui par la clarté de vos exposés…
Ce qui reste incompréhensible ailleurs est limpide chez vous.
Un immense bravo pour votre génie.
Merci Alain.
Bonjour,
Je veux construire une base de données pour une école de danse. Nous voulons être en mesure d’émettre des reçus/factures (certains paient pour une session et d’autres pour l’année complète). Je compte faire une Table élèves, une Table profs et une Table cours. Donc, un élève peut suivre plusieurs cours qui se donnent selon un certain horaire qui a une durée.
Ex : Ballet, niveau 1, lundi à 18h durée 1 heure prof: Lydia.
Ballet, niveau 1, mardi à 17h durée 1 heure prof : Sylvie
Jazz, niveau 4, mardi à 19h durée 1,5 heure prof : Sylvie…
Le mode de facturation est selon le nombre total d’heures de cours suivies. Comment organiser les relations ?
Merci !
Bonjour Sylvie,
Personnellement, je rajouterais une 4e table : Horaires-Durée (voire avec un champ calculé Heure Fin-Heure début). Tout simplement parce que vous allez faire des redondances avec le type de cours, ce qui n’est pas nécessaire avec Access.
Le cheminement serait : Profs > Cours > Horaires > Élèves (dans ce cas, un professeur peut donner plusieurs cours différents : Jazz Niveau 1, Ballet Niveau 2 etc. par exemple). Si ce n’est pas le cas et ne le sera jamais, alors on fusionne Profs et Cours. De même si un cours n’est donné qu’une seule fois par semaine, dans ce cas on fusionne Cours et Horaires.
Dans mon cheminement, vous créez une clé étrangère dans la table Élèves (ID_Horaires et vous créez une liste déroulante avec les informations de la table horaires). Ensuite, dans la table Horaires, vous créez la clé ID_Cours avec les informations de la table Cours et ainsi de suite pour remonter, en ayant bien sûr une clé primaire dans chaque table.
J’ai essayé et suis arrivé à créer la relation 1 à plusieurs. Très bonnes explications.
Bonjour,
J’ai récupéré une BDD.
J’ai proprement refait un lien « fort » 1-plusieurs, mais, quand je clique sur le « + », il m’affiche indéfiniment la même ligne que celle affichée…
Je ne comprends pas ce qu’il se passe…
Pouvez-vous m’éclairer !?
Merci.
Bonjour,
Je ne comprends pas « il m’affiche indéfiniment la même ligne que celle affichée ». Si vous voulez dire qu’il affiche la même ligne qu’avant sur la table, c’est au niveau de la table, en mode création, dans ses propriétés, qu’il faut effacer ce qui apparaît à la ligne « Sous-feuille données nom ».
Eurêka ! Alléluia ! Et tutti quanti…
Merci. C’est avec vos tutos que j’ai appris Access.
Pour ce problème, j’ai demandé à Google et à tous mes collègues, mais personne n’a su me répondre (j’avoue, j’avais un peu de mal à m’exprimer).
Bonne continuation (et bravo de continuer à répondre des années après la parution de votre tuto !).
Merci Marie 🙂
Merci pour ce tutoriel que je viens de lire, car cela m’a beaucoup édifié et me donne davantage de motivation de continuer mon apprentissage en Access. Il faut dire que je commençais à être gagné par le découragement suite à mes tentatives infructueuses d’établir des relations idoines entre les tables… Bravo et bonne continuation !
Bonjour,
Comment fait-on pour mettre, sur Access, un verbe (au centre) qui est utilisé dans la relation entre les 2 tables ? Comment fait-on également pour créer une contrainte de partition sur Access s’il vous plaît (XT : exclusion totale, T : totale) ?
Merci.
Bonjour Margot,
On ne met pas de verbe sur Access, c’est seulement sur papier, quand on débute, pour schématiser et je ne comprends pas votre 2e question, qu’appelez-vous une contrainte de partition ?
Merci pour votre réponse à la première question.
Concernant la deuxième question, il y a parfois des contraintes inter-associations (= contraintes sur la participation d’une entité à plusieurs associations). Il existe 4 types :
– Égalité : = ou S
– Inclusion : I
– Exclusion: + ou X
– Totalité : T ou (XT si partition)
Savez-vous comment les créer sur Access ?
Merci.
Je ne sais pas si vous confondez Access avec un autre logiciel, car, avec ce dernier, il n’y a que 3 types de relation possibles :
– 1 à 1
– 1 à plusieurs
– Plusieurs à plusieurs
Pour exclure des données, ce sera avec les requêtes.
Bonjour Lydia, est-ce que je peux trouver un document Access 2010 complet avec des exercices sur chaque thématique.
Bonjour Georges, je n’en connais pas.
Bonjour,
Je rencontre un petit problème. Pour certaines colonnes, je crée des listes déroulantes provenant d’une autre table, ce qui crée une relation 1-n au niveau du schéma. Mais sans que je le veuille, cela crée aussi une sous-feuille de données dans la table où il y a le n. Or, je ne veux pas de cette sous-feuille de données et impossible de trouver un moyen pour la supprimer. Avez-vous une solution ?
Bonjour,
La sous-feuille de données est normale et pas très importante puisque visible uniquement dans la table (où vous n’êtes pas censée y saisir les données). S’il n’y a qu’une seule relation, elle sera automatique, sinon, pour qu’Access vous repose la question de la table à afficher, il faut supprimer le contenu de la ligne Sous-feuille de données nom dans les propriétés de la table (s’il y a Auto, vous ne pourrez rien y faire).