Vous êtes sur la page 1sur 123

www.tifawt.

com

www.tifawt.com
Informatique

B
Bases de données

T ACCESS
TD

Travail
vail Dirigé : "Facturation
ration"

Marc SOUQUES
souques@ensat.fr

Version du 14 avril 2011

Ce document
ent appartient à : _________________________
______

INSTI
STITUT NATIONAL POLYTECHNIQUE
ECOLE
www.tifawt.com NATIONA
NALE SUPERIEURE AGRONOMIQUE DE TO
TOULOUSE
Av de l’Agrobiopol
pole, BP 107, 31 326 Auzeville Tolosane Tel : 05.34
.34.32.39.00
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Table des Matières


CH1. BASE DE DONNEES "FACTURATION".............................................................................................................5
1. C AHIER DES CHARGES POUR APPLICATION "FACTURATION" ........................................................................................5
2. MODELE P HYSIQUE AVEC SES LIENS SUR LE SGBD A CCESS ........................................................................................5
CH2. LES TABLES DE BASE ..........................................................................................................................................6
1. C ONCEPTION ET C ONSTRUCTION DE LA BASE DE DONNEES ......................................................................................... 6
2. C REER LES TABLES S IMPLES ........................................................................................................................................6
A. Créer la table Client ..............................................................................................................................................7
B. Créer la table Produit............................................................................................................................................8
3. C REER LES TABLES C OMPLEXES ..................................................................................................................................9
A. Deux régles de base pour créer des tables .......................................................................................................... 10
B. Etude des Commandes......................................................................................................................................... 11
C. Créer la table CommandeEnTete ........................................................................................................................ 12
D. Créer la table CommandeLigneProduit .............................................................................................................. 14
E. Conventions de nommage dans les Tables .......................................................................................................... 16
F. Importer des données d'Excel dans Access.......................................................................................................... 16
G. Exporter des données d'Access vers Excel .......................................................................................................... 16
4. S ECURITE DE L'UTILISATION DE L'APPLICATION ......................................................................................................... 17
5. U TILISER LES TABLES EN MODE I NTERACTIF.............................................................................................................. 18
A. Rechercher des données ...................................................................................................................................... 18
B. Remplacer des données ....................................................................................................................................... 18
C. Tester les boutons… ............................................................................................................................................ 18
6. D EFINIR LES RELATIONS ENTRE LES TABLES .............................................................................................................. 19
A. Importance des relations dans un SGBD Relationnel ......................................................................................... 21
B. Des régles dans les relations ............................................................................................................................... 21
C. Tester l'Intégrité Référentielle des Relations ....................................................................................................... 22
7. R ESUME DES T ABLES ................................................................................................................................................. 23
CH3. LES REQUETES DE BASE................................................................................................................................... 24
1. R EQUETE SELECTION ................................................................................................................................................. 24
A. Requête simple sur une seule table ...................................................................................................................... 24
B. Requête multitable simple avec Relation ............................................................................................................. 27
C. Requête multitable avec calcul par enregistrement............................................................................................. 29
D. Erreur à éviter dans les requêtes multitable. ....................................................................................................... 31
E. Les fonctions du langage VBA pour les Requêtes................................................................................................ 32
F. Exercices à faire .................................................................................................................................................. 35
G. Requête avec calcul sur "Regroupement" d'enregistrements .............................................................................. 36
H. Exercices à faire .................................................................................................................................................. 36
2. R ESUME DES R EQUETES ............................................................................................................................................. 37
CH4. LES FORMULAIRES DE BASE .......................................................................................................................... 38
1. F ORMULAIRE U NITAIRE BASE SUR UNE TABLE ........................................................................................................... 38
A. Créer un Formulaire Colonne simple.................................................................................................................. 38
B. Utiliser un formulaire .......................................................................................................................................... 38
C. Modifier un formulaire ........................................................................................................................................ 39
2. F ORMULAIRE T ABULAIRE BASE SUR UNE REQUETE.................................................................................................... 43
A. Créer la requête source du futur Formulaire ...................................................................................................... 43
B. Créer un formulaire Tabulaire basé sur la requête............................................................................................. 44
C. Ajouter des contrôles ........................................................................................................................................... 44
D. Exercices à faire .................................................................................................................................................. 45
3. R ESUME DES F ORMULAIRES....................................................................................................................................... 45
CH5. LES TABLES AVEC LISTES DEROULANTES DE CHOIX POUR CLE ETRANGERE........................... 46
1. T ABLES ACTUELLES BASIQUES................................................................................................................................... 46
2. C HAMP C LE ETRANGERE AVEC LISTE DEROULANTE DE C HOIX .................................................................................. 46
A. Modifier propriétés Liste de choix des champs clés étrangères .......................................................................... 47
B. Exercice à faire… ................................................................................................................................................ 49
CH6. BILAN DE L'APPLICATION ............................................................................................................................... 51
1. D ES TABLES ............................................................................................................................................................... 51
2. D ES R EQUETES .......................................................................................................................................................... 51
3. D ES F ORMULAIRES .................................................................................................................................................... 51

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 2
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
CH7. FACTURATION: EXTENSIONS A FAIRE SEUL ............................................................................................ 52
1. C AHIER DES CHARGES POUR LES TABLES ................................................................................................................... 52
A. Table simple......................................................................................................................................................... 52
B. Table complexe.................................................................................................................................................... 52
2. C AHIER DES CHARGES POUR LES REQUETES .............................................................................................................. 53
A. Requête simple ..................................................................................................................................................... 53
B. Requête multitable ............................................................................................................................................... 53
3. C AHIER DES CHARGES POUR LES FORMULAIRES ........................................................................................................ 55
A. Formulaire simple ............................................................................................................................................... 55
B. Formulaire Tabulaire basé sur une requête ........................................................................................................ 55
C. Formulaire "Produit" à compléter ...................................................................................................................... 55
CH8. L'ETAT .................................................................................................................................................................... 56
1. C REER UN ETAT ......................................................................................................................................................... 56
A. Etat basé sur une table ........................................................................................................................................ 56
B. Etat basé sur une requête .................................................................................................................................... 57
2. R ESUME DES E TATS ................................................................................................................................................... 60
CH9. LES FORMULAIRES COMPLEXES .................................................................................................................. 61
1. F ORMULAIRE AVEC S OUS-FORMULAIRE ..................................................................................................................... 61
2. F ORMULAIRE AVEC S OUS FORMULAIRE COMPLEXE ................................................................................................... 63
A. Version basée sur 2 Tables (pour FP) et 2 Tables (pour SF). ............................................................................. 63
B. Version basée sur 3 niveaux de Tables................................................................................................................ 64
C. Version avec 2 sous formulaires de même niveau. .............................................................................................. 64
3. F ORMULAIRE AVEC GRAPHIQUE ................................................................................................................................. 67
A. Graphique simple basé sur une Table ................................................................................................................. 67
4. F ORMULAIRE MENU PRINCIPAL ................................................................................................................................. 69
5. R ESUME SUR LES F ORMULAIRES ................................................................................................................................ 70
CH10. LES MACROS ........................................................................................................................................................ 72
1. MACRO DE DEMARRAGE AUTOMATIQUE : AUTOEXEC ............................................................................................... 72
2. MACROS POUR OUVRIR FORMULAIRES ET ETATS........................................................................................................ 72
A. Créer la macro .................................................................................................................................................... 72
B. Attacher une macro à un événement d’un contrôle Bouton................................................................................. 73
CH11. LES RECHERCHES .............................................................................................................................................. 74
1. R ECHERCHE MONO CRITERE, MONO VALEUR DU CRITERE, MONO RESULTAT ............................................................. 75
A. Rechercher un client sur son Nom Prénom par liste déroulante......................................................................... 75
B. Auto-Actualiser la liste déroulante sur sa définition ........................................................................................... 77
2. R ECHERCHE MONO CRITERE, MONO VALEUR DU CRITERE, MULTI RESULTATS ........................................................... 77
A. Rechercher des clients sur leur ville par liste déroulante ................................................................................... 77
3. R ECHERCHE MONO CRITERE, MULTI VALEURS DU CRITERE, MULTI RESULTATS ......................................................... 80
4. R ECHERCHE MULTI CRITERES, MONO VALEUR DU CRITERE , MULTI RESULTATS ......................................................... 80
CH12. LES FORMULAIRES COMPLEXES SUITE ..................................................................................................... 82
1. S OUS FORMULAIRE BASE SUR R EQUETE AVEC CALCULS ............................................................................................ 82
CH13. INTRODUCTION AUX BASES DE DONNEES ET A ACCESS ................................................................... 83
1. U N S YSTEME DE GESTION DE B ASES DE DONNEES .................................................................................................... 83
2. U NE APPLICATION DE B ASE DE D ONNEES.................................................................................................................. 83
3. U NE B ASE DE DONNEES ............................................................................................................................................. 83
4. ACCESS ................................................................................................................................................................... 84
A. Choix entre Access et Excel pour développer une application ? ......................................................................... 84
CH14. CORRECTION EXTENSION: LES TABLES .................................................................................................... 85
A. Créer la table Categorie ...................................................................................................................................... 85
B. Modifier la table Produit ..................................................................................................................................... 85
C. Créer la table Fournisseur .................................................................................................................................. 86
D. Créer la table Intermédiaire ProdFour ............................................................................................................... 86
E. Tirer les Relations avec Intégrité Référentielle: .................................................................................................. 88
F. Modèle Conceptuel de Données (MCD) à la source du Modèle Physique Access............................................. 88
CH15. CORRECTION EXTENSION: LES REQUETES .............................................................................................. 89
A. Requête simple ..................................................................................................................................................... 89
B. Requête multitable ............................................................................................................................................... 89
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 3
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
CH16. CORRECTION EXTENSION : FORMULAIRES.............................................................................................. 91
A. Formulaire simple ............................................................................................................................................... 91
B. Formulaire Tabulaire basé sur une requête ........................................................................................................ 91
C. Formulaire produit à compléter .......................................................................................................................... 91
CH17. DES ERREURS A NE PAS FAIRE....................................................................................................................... 92
CH18. GESTION DES IMAGES DEPENDANTES D'ENREGISTREMENTS D'UNE TABLE ............................... 93
1. I MAGES ET T ABLE : VERSION1 BASEE SUR C HAMP OLE ............................................................................................ 93
A. Gérer un champ OLE .......................................................................................................................................... 93
B. Gérer un contrôle de formulaire pour afficher l'image ....................................................................................... 93
2. I MAGES ET T ABLE : VERSION 2 BASEE SUR C HAMP TEXTE ET MACRO D'AFFECTATION ............................................. 94
3. I MAGES ET T ABLE : VERSION 3 BASEE SUR C HAMP TEXTE ET P ROCEDURE-VBA D'AFFECTATION ............................ 97
4. R ESUME :S AISIR, STOCKER, MODIFIER ET S UPPRIMER DES IMAGES DANS DES ENREGISTREMENTS DE TABLE . .......... 99
CH19. LES TABLES AVEC CHAMPS A LONGUEUR VARIABLE ........................................................................ 100
1. C HAMP DE TYPE MEMO............................................................................................................................................ 100
2. C HAMP DE TYPE P IECE JOINTE ................................................................................................................................. 100
3. C HAMP AVEC PLUSIEURS VALEURS .......................................................................................................................... 101
A. Démarche Classique Relationnelle.................................................................................................................... 102
4. F ORMULAIRE BASE SUR UN MODELE DE FORMULAIRE.............................................................................................. 105
A. Créer un modèle de formulaire.......................................................................................................................... 105
B. Créer un formulaire basé sur un 'modèle' de formulaire................................................................................... 105
CH20. LES MODES D'UTILISATION DE L'APPLICATION ................................................................................... 106
1. MODE UTILISATEUR : CONFIGURATION DU DEMARRAGE ......................................................................................... 106
2. MODE PARTAGE DE DONNEES ENTRE PLUSIEURS UTILIS ATEURS EN RESEAU LOCAL ................................................ 107
CH21. LES MACROS AVANCEES................................................................................................................................ 108
1. T ESTER LES EVENEMENTS DECLANCHANT DES MACROS DANS UN FORMULAIRE ...................................................... 108
2. MACRO CONDITIONNELLE ATTACHEE A UN EVENEMENT ......................................................................................... 109
3. R EFERENCE DES ACTIONS DES MACROS .................................................................................................................. 111
CH22. MODIFICATION DES DONNEES DES TABLES ........................................................................................... 113
1. MODIFICATION MANUELLE ...................................................................................................................................... 113
2. MODIFICATION AUTOMATIQUE PAR REQUETE ......................................................................................................... 114
A. La requête action ............................................................................................................................................... 114
B. La requête action paramétrée par formulaire ................................................................................................... 115
3. MODIFICATION AUTOMATIQUE PAR MACRO ............................................................................................................ 117
A. Mise à jour Automatique Invisible du stock de Produit sur événement Saisie de la Quantité commandée ....... 117
CH23. TRAITEMENTS DE SYNTHESE ...................................................................................................................... 120
1. F ORMULAIRE T ABLEAU C ROISE DYNAMIQUE (TCD) .............................................................................................. 120
A. Créer la requête source du futur formulaire ..................................................................................................... 120
B. Créer le formulaire TCD basé sur la requête.................................................................................................... 121
CH24. LA BASE DE DONNEES FINALE..................................................................................................................... 123

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 4
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch1. Base de données "Facturation"


A partir d’un cahier des charges définissant le sujet de l'application, création de la base de données.

1. Cahier des charges pour application "Facturation"


Gérer une application commerciale de facturation pour PME.
Il existe des ensembles de Clients, de Commandes et de Produits.
Un Client fait référence à au plus plusieurs () Commandes.
Une Commande fait référence à au plus 1 seul Client.
Une Commande fait référence à au plus plusieurs Produits (commandés).
Un Produit fait référence à au plus plusieurs Commandes (où il est commandé)
Pour 1 Commande ET pour 1 Produit, il y a 1 Quantité de produit commandée.

2. Modèle Physique avec ses liens sur le SGBD Access


Structure de la base de données à créer.

Ci-dessous, les champs des tables avec les VALEURS assurant les Relations.

Clé primaire Clé primaire


SANS doublon SANS doublon

Clé primaire
SANS doublon
basée sur
2 champs

Clé primaire Clé


SANS doublon étrangère
AVEC
doublons Clé Clé
étrangère étrangère
AVEC AVEC
Légende : doublons doublons
Clé primaire mono ou multi champ
Clé étrangère liée à une clé primaire
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 5
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch2. Les Tables de base


Objectif du TD :
Construire une Base de Données de FACTURATION basée sur plusieurs Tables :
- Client - Produit - Commande - Produit Commandé pour commencer

1. Conception et Construction de la Base de données


Lorsque l'on veut construire une Maison, on doit procéder en 3 temps :
a) Créer sur le papier un Plan Conceptuel sans aspect technique des différentes Pièces qui composent
la future Maison et gérer les Liens et Interdépendances qui existent entre ces Pièces.
b) Créer sur le papier un Plan Logique, à partir du Plan Conceptuel, en y ajoutant les éléments
techniques (type de matériaux, épaisseur isolation, câblage électrique, réseau eau, chauffage, …).
c) Construire sur le Terrain la Maison Physique , à partir du Plan Logique.

En informatique, pour construire une Base de Données, on procède de même en 3 temps :


a) Créer sur le papier un Modèle Conceptuel (sans aspect technique) des différentes Entités qui
composent la future Base de Données et gérer les Associations (liens) qui existent entre ces Entités.
b) Créer sur le papier un Modèle Logique, à partir du Modèle Conceptuel, en y ajoutant les éléments
techniques (Clé primaire, Clé étrangère, Relations d'une Base de Données RELATIONNELLE)
c) Construire sur l'Ordinateur (Access) la Base de Données Physique , à partir du Modèle Logique.
(Voir éventuellement Cours de Modélisation présentant ces 3 modèles)
Ce TD vise à utiliser ACCESS pour créer directement sur ordinateur une Base de Données Physique
mais il est recommandé de se documenter sur les cours de Modélisation des Données qui
permettent de créer Modèles Conceptuels de Données (MCD) et Modèles Logiques de Données (MLD).
Vous trouverez plus loin dans ce document (fin Chapitre 14) le MCD (Modèle Conceptuel des Données)
correspondant à la base de données Access développée dans ce TD.
Notre démarche consiste, pour la partie concernant les Données, à établir au fur et à mesure quelques
règles simples pour définir les Tables de notre application de Facturation.

Démarrer ACCESS .
Clic sur Base de donnée vide, Clic sur pour choisir un dossier puis nommer l'application ESSAI
(l'extension accdb signifie Access Data Base c'est le format 2007 et 2010) et bouton Créer.
- Si besoin, compréhension et configuration de l'environnement de travail :
Bouton Office (Fichier en Version 2010) puis Options Access :
- Standard : Définir le dossier de données par défaut pour ouvrir ou enregistrer des bases
- Base de données active : Cocher Compacter lors de la fermeture (pour réduire la taille du fichier accdb)
- Personnaliser : Définir les icones de la barre d'accès rapide
en haut d'écran et valider OK.

2. Créer les Tables Simples


Nous allons créer les tables Client et Produit qui sont simples car chaque enregistrement ne fait pas
référence à au plus 1 seul enregistrement d'une autre table.
Un Client ne fait pas référence à au plus 1 seule Commande ou à au plus 1 seul Produit commandé.
Un Produit ne fait pas référence à au plus 1 seule Commande ou à au plus 1 seul Client.
Fermer la table ouverte par défaut.

Onglet Créer, Bouton Création de Table pour être en mode 'Création'

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 6
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

A. Créer la table Client Voir exemple en bas de page


Nom du Champ Type de données Propriétés Un nombre qui s’incrémente
Num Client NuméroAuto automatiquement à chaque nouveau
Nom Texte Taille : 25 client saisi : 1 puis 2 puis 3
(Attention : le type Format : > (conversion en Majuscule)
Texte est limité à Null interdit : OUI (saisie obligatoire) (Null = VIDE)
255 caractères !) Chaine vide autorisée : NON Si besoin de plus de 255
Prénom Texte Taille : 15 Null interdit : OUI caractères, utiliser le
Chaine vide autorisée : NON type Mémo (taille illimitée)
Adresse Texte Taille : 30 Fonction Date() retournant la
Code Postal Texte (pas Num car on Taille : 5 date du jour. On peut la
ne fait pas de calcul sur Null interdit : NON donc trouver par , Fonction,
les codes postaux !) saisie facultative Fonction intégrées,
Ville Texte Taille : 25, Format : > (Majuscule) Date/heure, Date
Valeur par défaut : TOULOUSE
Date Entrée Date/Heure Format : Date, abrégé
Valeur par défaut : Date( )
Afficher le sélecteur : À certaines dates
Une clé primaire est un (ou plusieurs) champ de la table qui identifie sans ambiguïté chaque
enregistrement de la table (chaque élément de la population ). Deux mêmes valeurs dans 2
enregistrements de ce champ sont interdites (pas de doublons: 2 personnes ne doivent pas avoir le même
numéro de client 3).
Définir une clé primaire sur le champ: Num Client en sélectionnant ce champ puis barre d’outils
Clé primaire (Cela bascule automatiquement la propriété Index du champ Num Client : Oui SANS doublon).
Convention personnelle pour Nom de la Clé primaire : Num + (Nom de table) = Num Client
On souhaite que le couple Nom Prénom soit unique, interdire 2 fois LECLERC Alain. Clic sur Index :
Donner librement un Nom à un Index : NomPrenom
Choisir dans la liste déroulante les 2 champs à indexer : Nom puis Prénom
Sélectionner la ligne NomPrenom et saisir Unique : Oui
pour éviter les doublons sur ce couple de champs
Enregistrer la table (disquette de la barre outils 'Accès rapide') : Client

Passer en mode Feuille de données pour saisir 3 Clients comme ci-dessus :


Ok pour message erreur ci-dessus, pour éviter le doublon MUILLARD Marc, modifier l'enregistrement
3 en DURAND Alain pour avoir :

Passer en mode Création pour consulter la structure de la table puis fermer (croix à droite) la table Client.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 7
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Créer la table Produit

Onglet Créer, Bouton Création de Table pour être en mode 'Création'


Nom du Champ Type de données Propriété du champ Si besoin de plus de 255 caractères,
Num Produit Texte Taille : 6 utiliser le type Mémo (taille illimitée)
Désignation Texte Taille : 60
Prix Ht Monétaire Valide si : >=3
(pour afficher € uros) Message si erreur :Vérifier le minimum (>=3 €)
Taux Tva Numérique Taille : Réel simple (Touche F1 pour l’Aide)
Ici, le Num Produit n'est pas en NuméroAuto Format : Pourcentage (%)
car on veut gérer notre propre Numérotation : Valeur par défaut : taper 0.196 pour obtenir
3 lettres pour la marque du produit et 0,196 (virgule à la place du point)
3 chiffres pour le rang du produit dans la marque Valide si : 0.196 Ou 0.055
(ACE002 pour le 2° produit de marque ACER)
Message si erreur : Vérifier le taux
Le Prix Ttc est une valeur calculée (Prix Ttc = Prix Ht * (1+Taux Tva)). On ne stocke pas
dans une Table un champ calculé car on risque l'erreur d'avoir calculé et stocké un PrixTtc sur
un ancien Prix Ht : exemple
Prix Ht = 100 ; Prix Ttc = 119.6 puis modif Prix Ht = 95 et Prix Ttc = 119.6 faux car non modifié
On calculera donc le Prix Ttc (sur les actuels Prix Ht et Taux Tva) chaque fois que l'on en aura
besoin même si cela prend un peu (si peu) de temps-machine.

Règle : La Table stocke des informations de base (non calculées)


Une clé primaire est un (ou plusieurs) champ de la table qui identifie sans ambiguïté chaque
enregistrement de la table (chaque élément de la population). Deux mêmes valeurs dans deux
enregistrements de ce champ sont interdites (pas de doublons: 2 produits ne doivent pas avoir le même
numéro de produit).
Définir une clé primaire sur le champ: Num Produit en sélectionnant ce champ puis barre d’outils
Clé primaire (Cela bascule automatiquement la propriété Index du champ Num Produit : Oui SANS doublon).
Convention personnelle pour Clé primaire : Num + (Nom de table) = Num Produit
On souhaite que la Désignation du produit soit unique, interdire 2 fois Imprimante laser Canon type 1.
On veut donc un index sans doublon (unique) sur le seul champ Désignation
Compléter la description du champ Désignation avec :
Désignation Texte Indexé : Oui sans doublons

Ici, il est inutile de passer par Clic sur Index car l'index est
ici MONO-Champ.
Par contre, le résultat est bien stocké dans les index :

ATTENTION :
Num Produit Texte Indexé : Oui sans doublons car Clé Primaire
Désignation Texte Indexé : Oui sans doublons sans être Clé primaire
La clé primaire est le champ qui identifie chaque enregistrement de la table, c'est cette information qui
est utilisée dans une autre table pour pointer (référencer) vers la table Produit.
Enregistrer la table : Produit puis Fermer la table :
Remarque : Les noms des tables sont notés au singulier (Client, Produit) sans préfixe Tab Produits
Faire un effort dans le choix des noms des tables pour que le nom corresponde au contenu de la table :
Les produits Catalogue produit Produits vendus
Visualisation en mode feuille de données
Ouvrir la table Produit par double-clic sur Produit :
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 8
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Passer en mode Création par le bouton (en haut à gauche) de l'onglet Accueil :
Passer en mode Feuille de données par le même bouton de barre d' outils : (en haut à gauche)

Saisir : (remarque les erreurs volontaires sont en italique et souligné ci-dessous)

Num Produit Désignation Prix Ht Taux Tva Erreur


CAN001 Imprimante laser 1 puis 300 19.6% Erreur sur le Prix
Canon type 1
MIC001 Initiation à 15 20.6% puis 5.5% Erreur sur la Tva
ACCESS pour erreur La tva sur les livres est à 5.5%
erreur les Nuls erreur
CAN001 Imprimante 1000 19.6% Erreur sur Num Produit
détectée seulement après saisie
de Taux Tva (doublon dans clé
primaire avec le 1° enregistrement) :
erreur modifier ce Num Produit en
CAN002
EPS001 Imprimante 75 19.6% Erreur sur Désignation
(doublon sur propriété "OUI
sans doublon"), modifier cette
Désignation avec Imprimante
Jet encre Epson série1
Remarque sur le champ Num Produit : les 3 premières lettres correspondent à la marque du produit.
CAN pour Canon, EPS pour Epson, MIC pour l'éditeur Microapplication
Il y a vérification automatique de l’unicité (Unique) de la clé Primaire de Num produit.

Remarque : les Données saisies sont enregistrées automatiquement (pas besoin d'enregistrer sauf la
mise en forme ou les définitions des champs des tables).
Elargir la colonne Désignation (modification de la mise en forme).

Fermer la table : (l'enregistrement de la mise en forme de la table est proposé)


Ouvrir la table : elle est triée sur la clé primaire : Num Produit
Ajouter un enregistrement par ce bouton dans la dernière ligne de la
table signalée par (ce symbole sur une ligne vierge indique la position pour ajouter des
enregistrements) et tester l’erreur sur le taux de TVA:
CAN003 Imprimante Canon couleur 300 33.33% puis 19.6%
Supprimer l'enregistrement ci-dessus en le sélectionnant préalablement par la colonne grisée à gauche
de Num Produit puis Suppr du clavier. Fermer la table :

3. Créer les Tables Complexes


Nous allons créer les tables pour gérer les Commandes de Produits faites par les Clients.
Il y a 2 aspects complexes concernant les Commandes de Produits :
a) Chaque enregistrement d'une table1 fait référence à au plus 1 seul enregistrement d'une table2.
- Une Commande fait référence à au plus 1 seul Client.
b) Chaque enregistrement d'une table1 fait référence à au plus N enregistrements d'une table2 et
chaque enregistrement d'une table2 fait référence à au plus N enregistrements d'une table1.
- Une Commande fait référence à au plus N Produits qui sont commandés et
un Produit fait référence à au plus N Commandes où il est commandé.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 9
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

A. Deux régles de base pour créer des tables


Si on ne dispose pas d'une analyse des données sous forme de Modèle Conceptuel de Données (MCD)
et Modèle Logique de Données (MLD) , on peut utiliser les règles suivantes directement dans Access.
De manière très simplifiée et limitée , il existe 2 types principaux de relation entre 2 tables :

Relation Père - Fils et Relation Frère - Sœur


1) Relation Père - Fils :
PERE FILS
Un Père peut avoir de 0 à N Fils, un Fils peut avoir de 0 à 1 Père.
x x
Pour gérer cette relation, on ajoute dans la table Fils
x x
un champ Ref Père contenant la valeur de l'identification du Père. x
x
Clé étrangère Clé primaire x
AVEC doublons SANS doublon

Père sans fils ou ayant


perdu son ou ses fils

Fils de père
Table Fils Table Père inconnu

Convention perso pour nom Clé étrangère : Ref + (Nom de la table liée) = Ref Père (en italique bleu)
Convention perso pour nom Clé primaire : Num + (Nom de la table) = Num Fils (en gras rouge)
Demander à voir éventuellement exemple diapositive : "PV et sa Voiture".

2) Relation Frère - Sœur


Un Frère peut avoir de 0 à N Sœurs, une Sœur peut avoir de 0 à N Frères. FRERE SOEUR
Pour gérer cette relation, on ajoute une nouvelle table intermédiaire avec x x
un champ Ref Frère un champ Ref Soeur D'éventuels champs x
x
contenant la valeur de contenant la valeur de dépendants de frère x x
l'identification de Frère l'identification de Sœur ET sœur. x x

Clé étrangère Clé étrangère


Clé primaire AVEC doublons AVEC doublons Clé primaire
SANS doublon SANS doublon

Table Frère Table Croisement : Frère - Sœur Table Sœur

Autre présentation non informatique de la table Croisement Frère - Sœur

A l'aide de ces 2 règles de base, nous allons gérer les Commandes de Produits faites par les Clients.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 10
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Etude des Commandes


1) Relation Père – Fils

Un Client fait référence à au plus N Commandes.


Une Commande fait référence à au plus 1 seul Client.

Convention :
gras +
souligné
Table Commande indique une
Table Client clé primaire

2) Relation Frère – Sœur

Une Commande fait référence à au plus N Produits qui sont commandés.


Un Produit fait référence à au plus N Commandes qui le commandent.

Table Commande
Table Produit
Table Croisement : Commande - Produit

On nomme généralement cette table de Croisement en mixant les noms des 2 tables croisées, par
exemple : ComProd ou ProdCom

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 11
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

C. Créer la table CommandeEnTete


Un Client fait référence à au plus plusieurs () Commandes.
Une Commande fait référence à au plus 1 seul Client.
Nous sommes donc dans la règle Père – Fils vue précédemment.
Un Père fait référence à au plus plusieurs Fils
Un Fils fait référence à au plus 1 seul Père

Donc nous gérerons un champ Ref Client dans la table Commande pour pointer vers le champ
Num Client Clé primaire de la table Client.
Ce champ Ref Client est appelé Clé étrangère car il sera relié plus tard à Num Client.

On gère ici la partie fixe de la Commande, le haut de la commande, son En-tête, sans prendre en
compte les produits commandés car ils sont en nombre variable. Un nombre qui s’incrémente
Nom du Champ Type de données Propriétés automatiquement à chaque nouvelle
Num Commande NuméroAuto commande saisie : 1 puis 2 puis 3
Ref Client Numérique Taille : Entier long ; PAS de valeur par défaut
(pour futur lien vers Num Null interdit : OUI donc saisie obligatoire d'1 valeur de
Client Chaine vide autorisée : NON
de table CLIENT)
(pour future compatibilité avec Num Client de la table
Client qui est NuméroAuto donc en Numérique-Entier long)
Date Commande Date/Heure Format : Date, abrégé (jj/mm/aaaa)
Valeur par défaut : Date( ) (=date du jour)
Afficher le sélecteur : À certaines dates
Date Echéance Date/Heure Format : Date, abrégé Aujourd'hui
Valeur par défaut : Date( ) + 30 + 30 jours
Afficher le sélecteur : À certaines dates
Payée Oui/Non Valeur par défaut : Non
Total Commande : NE PAS gérer car ce n'est pas une DONNEE mais un CALCUL
Remarque : Dans cette table CommandeEnTete, le nom Ref Client est choisi librement.
Je prends la règle 'Ref'+NomTable liée pour la Clé étrangère mais d'autres solutions sont possibles.
(Num Client est souvent utilisé mais confusion possible avec le nom et le rôle de Num Client qui
est clé primaire de la table CLIENT)
Définir la clé primaire sur le champ : Num Commande

Enregistrer la table : CommandeEnTete Donnée existant dans la clé


primaire Num Client de la
Passer en mode Feuille de données : table Client
Saisir : Table Client
Num Commande Ref Client Date Commande Date Echéance Payée
1 (Automatique) 3 (saisir une date) (saisir une date) Cocher pour Oui
2 (Automatique) 3 (valider date) (valider date) Rien pour Non
3 (Automatique) 1 (valider date) (saisir une date) Cocher pour Oui

Il y a 3 CommandeEnTete.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 12
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
a) La Commande 1 fait référence à un seul client (le 3) par le champ Ref Client.
Num Commande Ref Client Date Date Echéance Payée
Commande
1 3

b) Le Client 3 fait référence à plusieurs Commandes (la 1 et la 2) par le champ Ref Client

Num Commande Ref Client Date Date Echéance Payée


Commande
1 3
2 3
C'est par cette technique que l'on respecte le cahier des charges :
Une Commande fait référence à au plus 1 seul Client.
Un Client fait référence à au plus plusieurs () Commandes.
Fermer la table CommandeEnTete.

Le texte ci-dessous est une explication, il n'y a rien à faire mais tout à lire.
Gestion de la saisie dans la clé étrangère Ref Client :
Pour le champ Ref Client, pour le moment, la saisie est faite au clavier en tapant manuellement 3 par
exemple.
En réalité, pour une liste de clients comme celle ci-contre,
on ne peut faire référence pour Ref Client de la table CommandeEnTete qu'à 1
des 3 clients identifiés (1, 2, 3) dans la clé primaire Num Client de la table
Client.
Une erreur consisterait pour Ref Client à saisir un numéro 4 qui n'existe pas dans Num Client.
Pour éviter cette erreur, nous gérerons plus tard (voir Chapitre 5 LES TABLES AVEC LISTES
DEROULANTES POUR CLE ETRANGERE) la saisie dans Ref Client par une liste déroulante ne
proposant QUE les Clients qui existent dans la clé primaire Num Client de la table Client.
Pour faciliter le choix du client de la commande, nous présenterons en plus de Num Client, le Nom et le
Prénom du client en classant ces clients par ordre alphabétique des Noms – Prénoms.

Nous pourrons même simplifier la saisie en n'affichant pas le Numéro du Client.

Le champ Ref Client a le rôle technique de gérer le lien entre les 2


tables. Il a ici un nom peu compréhensible pour l'utilisateur.
La propriété Légende des champs permet de gérer un nom de
substitution qui s'affichera à la place de Ref Client.
Nous n'utilisons pas cette procédure pour le moment pour ne pas compliquer la compréhension.

Si vous relisez ce polycopié pour faire un projet Access, il faut traiter la gestion de ces listes
déroulantes de clés étrangères dès la création des Tables .

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 13
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

D. Créer la table CommandeLigneProduit


Une Commande fait référence à au plus plusieurs Produits (commandés).
Un Produit fait référence à au plus plusieurs Commandes.(où il est commandé)
Pour 1 Commande ET pour 1 Produit, il y a 1 Quantité de produit commandée.
Nous sommes donc dans la règle Frère – Sœur vue précédemment.
Un Frère fait référence à au plus plusieurs Sœurs
Une Sœur fait référence à au plus plusieurs Frères
Donc, alors que les tables CommandeEnTête et Produit sont déjà créées, nous allons créer une nouvelle
table intermédiaire entre ces 2 tables pour assurer le lien plusieurs à plusieurs (N / N).

Donc nous gérerons dans cette table un champ Ref Commande pour pointer vers le champ
Num Commande Clé primaire de la table Commande.
Ce champ Ref Commande est appelé Clé étrangère car il sera relié avec le champ Num Commande.

Donc nous gérerons dans cette table un champ Ref Produit pour pointer vers le champ
Num Produit Clé primaire de la table Produit.
Ce champ Ref Produit est appelé Clé étrangère car il sera relié avec le champ Num Produit.

On gère ici la structure de la table pour un Produit commandé d' une CommandeEnTete.
C'est la table de croisement entre la table CommandeEnTete et la table Produit.
Nom du Champ Type de Propriétés
données

Ref Commande Numérique Taille : Entier long ; PAS de valeur par défaut
(pour lien vers (pour future compatibilité avec Num Commande de la table
Num Commande CommandeEnTete qui est en NuméroAuto donc en
de table CommandeEnTete) Numérique-Entier long),
Null interdit : OUI ; Chaine vide autorisée : NON
Ref Produit Texte Taille : 6 ; PAS de valeur par défaut ,
(pour lien vers (pour future compatibilité avec Num Produit de la table
Num Produit Produit qui est Texte de longueur 6)
de table Produit) Null interdit : OUI ; Chaine vide autorisée : NON
Quantité Numérique Taille : Réel simple (au cas où on vendrait 1 boite et
(quantité commandée d'un demie de 10 DVD = 15 DVD = 1,5 boite)
produit d'une commande) Valeur par défaut : 1
Ici, la clé primaire n'est pas mono-champ. C'est le couple 1 - CAN001 qui identifie
un Produit commandé (CAN001) dans le cadre d'une Commande (1).
Définir une clé primaire : sélectionner les 2 premiers
champs Ref Commande, Ref Produit par un glissé à la
souris (dans la colonne de gauche) et les définir par le bouton
Clé primaire comme clé primaire composée :
Attention : Ref Commande et Ref Produit ne sont pas individuellement clé primaire
mais le couple Ref Commande + Ref Produit est clé primaire.
Il n'y a qu'1 Clé primaire par Table.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 14
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Enregistrer la table : CommandeLigneProduit Donnée existant dans la clé


(Ce nom intégre Commande et Produit : les 2 tables croisées) primaire Num Produit de la
Passer en mode Feuille de données : table Produit

Saisir :
Ref Commande Ref Produit Quantité
1 CAN001 4
1 EPS001 2 Table Produit
2 CAN001 1
2 CAN002 3
2 MIC001 5
Table CommandeLigneProduit
Nous avons donc 5 Produits commandées dans CommandeLigneProduit répartis sur 2 Commandes.
La Commande 1 (Ref Commande) contient 2 Produits, CAN001 et EPS001
La Commande 2 (Ref Commande) contient 3 Produits, CAN001, CAN002 et MIC001
Le Produit CAN001 (Ref Produit) a été commandé 2 fois, dans les Commandes 1 et 2.
Un produit commandé est identifié par la clé primaire composite Ref Commande - Ref Produit .
Le couple 1 - CAN001 identifie la commande du produit CAN001 dans la commande 1.

Il est impossible de ressaisir ce couple 1 - CAN001 sinon Doublon sur clé primaire.
Fermer la table CommandeEnTete
Fermer Access et donc la base essai (croix en haut à droite)

Le texte ci-dessous est une explication, il n'y a rien à faire mais tout à lire.
Gestion de la saisie dans les clés étrangères Ref Commande et Ref Produit :
Pour le champ Ref Produit, pour le moment, la saisie est faite au clavier en tapant manuellement
CAN001 par exemple.

En réalité, pour une liste de produit comme celle ci-contre,


on ne peut faire référence pour Ref Produit de la table CommandeLigneProduit
qu'à 1 des n Produits identifiés (ACE001, ACE002, CAN001, …) dans la clé
primaire Num Produit de la table Produit.
Une erreur consisterait pour Ref Produit à saisir ABC001 qui n'existe pas dans Num Produit.
Pour éviter cette erreur, nous gérerons plus tard (voir Chapitre 5 LES TABLES AVEC LISTES
DEROULANTES POUR CLE ETRANGERE) la saisie dans Ref Produit par une liste déroulante ne
proposant QUE les Produits qui existent dans la clé primaire Num Produit de la table Produit.
Pour faciliter le choix du produit commandé, nous
présenterons en plus de Num Produit, la
Désignation du produit en classant ces désignations
de produits par ordre alphabétique.

Nous pourrons même simplifier la saisie en


n'affichant pas le Numéro du Produit.

Si vous relisez ce polycopié pour faire un projet


Access, il faut traiter la gestion de ces listes
déroulantes de clés étrangères dès la création des
Tables.
Faire de même pour l'autre clé étrangère Ref Commande de cette table. FIN TD1

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 15
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

E. Conventions de nommage dans les Tables

- Pour les noms des champs :


J'ai choisi d'utiliser les possibilités d'Access avec espaces et accents car ces noms sont affichés à
l'utilisateur de l'application.

Je mets une majuscule à la première lettre de chacun des mots composant le Champ.

Exemple : Date Echéance avec 2 majuscules, 1 espace entre Date et Echéance et 1 accent.
Remarque : On peut aussi gérer des noms sans espace et sans accent (DateEcheance) pour faciliter
l'écriture de ces noms en programmation VBA et gérer dans ce cas la propriété du champ Légende qui
propose un nom de substitution (avec espaces et accents : Date d'Echéance) pour les affichages dans les
formulaires

- Pour les noms des tables :


J'ai choisi de NE PAS utiliser les possibilités d'espace et d'accent car ces noms NE SONT PAS affichés
à l'utilisateur de l'application.

Je mets une majuscule à la première lettre de chacun des mots composant la Table.
Je note les noms de table au singulier car une table définit la structure pour 1 enregistrement type.

Exemple : CommandeEnTete avec 2 majuscules, 0 espace, 0 accent et au singulier.

F. Importer des données d'Excel dans Access


Le menu Données Externes permet d'importer des données d'origines diverses vers Access.
Attention : la structuration des données dans Excel est incompatible avec celle d'Access.
On peut récupérer certaines informations d'Excel dans Access mais un travail manuel est ensuite
nécessaire pour restructurer ces informations suivant le modèle Relationnel utilisé par Access.

Le transfert Excel  Access est souvent difficile.

G. Exporter des données d'Access vers Excel


Le menu Données Externes permet d'exporter des données vers diverses destinations comme Excel.
Remarque : la structuration des données dans Excel est incompatible avec celle d'Access.
On peut exporter des informations d'Access vers Excel.

Le transfert Access  Excel est généralement facile.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 16
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

4. Sécurité de l'utilisation de l'application


Par défaut, Access est configuré comme ci-dessous dans Bouton Office (Fichier dans version
2010), Options Access, Centre de gestion de la confidentialité, Paramètres de centre de gestion de
la confidentialité :

Donc, à l'ouverture d'une application Access, vous pouvez voir ceci :

En effet, une application Access (comme Excel, Word et Powerpoint) peut avoir un contenu (programme
VBA ou autres techniques) potentiellement dangereux.

Donc, ici, du contenu est désactivé. Pour gérer cet aspect, plusieurs solutions :
1. Garder la configuration ci-dessus et cliquer
à chaque ouverture de la base sur le bouton Option…
puis choisir Activer le contenu si vous faite confiance
à l'origine du fichier.
2. Modifier la configuration ci-dessus en activant l'option
Activer toutes les macros. C'est non recommandé et
potentiellement dangereux car ainsi, pour toutes les
applications, du code malsain peut être exécuté.
3. Garder la configuration ci-dessus pour le Paramètre des macros à Désactivé mais définir un
dossier où vous rangerez les applications de confiance (les vôtres par exemple). Dans la fenêtre
du Centre de gestion de la confidentialité, Emplacements approuvés, ajouter un nouvel
emplacement pour un dossier (et éventuellement ses sous-dossiers) pour obtenir un résultat de ce
type. Attention, cette opération peut poser problème sur un disque d’un réseau local protégé.

C'est cette dernière solution qui est recommandée et que vous mettez en place.
Valider ces paramètres et fermer Access.

-Sous l'application Explorateur de fichiers :


- Supprimer éventuellement la base : essai.accdb
- Copier Fac01a2007.accdb depuis le dossier de correction vers votre dossier de travail.
- Ouvrir la base : Fac01a2007.accdb par double clic (la votre , pas celle donnée en correction)
Cette application a les mêmes définitions que ci-dessus mais avec plus de données saisies dans les
tables.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 17
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

5. Utiliser les tables en mode Interactif


A. Rechercher des données
Ouvrir Table Client :
Positionner le curseur sur le champ Nom et sur l’enregistrement 1:
Clic sur le bouton de Recherche (Jumelles de l'onglet Accueil) : TERIEUR puis bouton Suivant
1) Caractères génériques * ? #
a) Astérisque : * (remplace une chaîne de caractères quelconque)
Positionner le curseur sur le champ Nom et sur l’enregistrement 1:
Rechercher : BON*
Rechercher : *R
b) Point d'interrogation : ? (remplace un seul caractère quelconque)
Positionner le curseur sur le champ Nom Client et sur l’enregistrement 1:
Rechercher : ??R
c) Dièse : # (remplace un seul caractère-chiffre)
Positionner le curseur sur le champ Adresse et sur l’enregistrement 1:
Rechercher : 6#*
Rechercher : 6* (comprendre la différence avec 6#*) Ce que vous cherchez 'bd'
B. Remplacer des données est ou pas une sous partie
du 'champ entier' ?
Onglet Accueil > bouton de Recherche > Remplacer...
Positionner le curseur sur le champ Adresse et sur l’enregistrement 1:
Rechercher : bd (attention : rechercher dans "champ entier" ou autre manière ?)
Remplacer par: boulevard
a) en manuel : bouton Suivant pour chercher et bouton Remplacer pour modifier
b) en automatique : bouton Remplacer tout

Remettre bd à la place de boulevard


C. Tester les boutons…
1) Les 5 boutons de déplacement d’enregistrements en bas d’écran

Premier , Précédent, Rang de l'enregistrement courant , Suivant, Dernier, Nouvel enregistrement

2) Les 2 boutons de tri croissant et décroissant

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 18
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

6. Définir les relations entre les tables


Nous avons maintenant 4 tables, préparées pour être liées les unes aux autres. Avant de tirer les
Relations, il faut vérifier que toutes les tables sont fermées et non utilisées par des formulaires ou
requêtes.
Accéder à la fenêtre Relation :
Onglet Outils de base de données

/ Relations .
Ci-dessus : travail à faire = lier les tables par des Relations ou Jointures

Ajouter (si besoin par bouton +Afficher la table ) les 4 tables: Client, CommandeEnTete,
CommandeLigneProduit et Produit et fermer cette fenêtre d'ajout.

1° lien :
1 Client (Père) peut avoir N CommandeEnTete (Fils) et
1 CommandeEnTete (Fils) est liée à 1 seul Client (Père)
Définir des Liens ( appelés aussi Jointures) :
* Glisser Num Client de Client (clé primaire) sur
Ref Client de CommandeEnTete (clé étrangère)
. Boîte de dialogue :
- cocher Appliquer Intégrité Référentielle,
(vérifications des données des liens, voir TEST plus loin)
- Ne pas cocher 'Mettre à jour en cascade'
- Ne pas cocher 'Effacer en cascade'
- Type de Jointure (consulter seulement) Créer

EGAUX
Un-à-plusieurs : c'est le cas classique

Un-à-un : erreur probable

Remarque : le 1 et le ∞ se placent automatiquement sur le lien,


Le 1 à coté du champ clé primaire car ce champ est sans doublon,
Le ∞ à coté du champ clé étrangère car ce champ est doublons possibles.
Pour une valeur de Num Client, on peut trouver N (∞) Commandes.
Pour une valeur de Ref Client, on ne peut trouver qu'1 Client.

2° lien :
1 CommandeEnTete peut avoir N CommandeLigneProduit et
1 CommandeLigneProduit est liée à 1 seule CommandeEnTete
Définir des Liens ( appelés aussi Jointures) :
* Glisser Num Commande de CommandeEnTete (clé primaire) sur
Ref Commande de CommandeLigneProduit (clé étrangère)
Remarque : Ref Commande n'est pas un champ clé primaire (malgré le symbole clé ) mais la moitié
d'une clé primaire qui elle est composée des 2 champs Ref Commande et Ref Produit
. Boîte de dialogue
- cocher Appliquer Intégrité Référentielle (vérifications des données des liens, voir TEST plus loin)
- Relation 1 à Plusieurs -Pas de Mise à jour et pas d'Effacement en cascade
- Type de Jointure (consulter seulement) Créer

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 19
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
3° lien :
1 Produit peut avoir N CommandeLigneProduit et
1 CommandeLigneProduit est liée à 1 seul Produit
Définir des Liens ( appelés aussi Jointures) :
* Glisser Num Produit de Produit (clé primaire) sur
Ref Produit de CommandeLigneProduit (clé étrangère)
Remarque : Ref Produit n'est pas un champ clé primaire (malgré le symbole clé ) mais la moitié d'une
clé primaire qui elle est composée des 2 champs Ref Commande et Ref Produit
. Boîte de dialogue
- cocher Appliquer Intégrité Référentielle (vérifications des données des liens, voir TEST plus loin )
- Relation 1 à Plusieurs-Pas de Mise à jour et pas d' Effacement en cascade
- Type de Jointure (consulter seulement) Créer

Convention personnelle (à garder) pour nommer les champs des tables:


Clé primaire mono-champ : Numxx (xx pour nom de cette table)
Clé étrangère : Refxx (xx pour nom de la table liée)

Remarque : On trouvera ailleurs que dans notre établissement des liens (jointures, relations) entre
clé primaire et clé étrangère comme ceci par exemple :
Numxx clé primaire de table-père et Numxx clé étrangère de table-fils ou
Codexx clé primaire de table-père et Codexx clé étrangère de table-fils ou
Idxx clé primaire de table-père et Idxx clé étrangère de table-fils ou
Refxx clé primaire de table-père et Refxx clé étrangère de table-fils.
Soit le même nom de champ pour la clé Primaire et Etrangère !!!
Je n'adhère pas, à titre pédagogique, à cette manière de nommer 2 choses différentes avec le même nom
mais il faut savoir que cette manière de nommer existe même si elle est ambigüe.
Cela vient en partie du fait qu'il existe des logiciels (PowerAMC, WinDesign) qui, à partir d'un MCD, génèrent
automatiquement un MLD Relationnel et que ces logiciels reprennent (faute de règle) automatiquement le nom de
la clé primaire du MCD (l'identifiant pour être exact) pour créer la clé étrangère.

Comme il n'y a pas de règle pour nommer ces 2 types de clés, chacun fait avec sa règle.
Vous trouverez donc toutes les combinaisons possibles de clé Primaire et Etrangère, l'essentiel est de
bien comprendre le rôle différent de chaque clé :

La Clé primaire :
- identifie chaque enregistrement d'une table.
- est SANS doublon.
- est souvent de type numérique et même Numauto
(pour générer AUTOMATIQUEMENT un numéro).
- est définie comme Primaire car clic sur
La Clé étrangère :
- pointe vers 1 enregistrement d'une autre table.
- est AVEC doublon possible (2 fois la valeur 1 car 2 Commandes peuvent pointer vers le même
Num Client 1).
- est d'un type qui dépend obligatoirement du type de la clé primaire pointée, JAMAIS Numauto
car l'objectif est que l'utilisateur choisisse MANUELLEMENT (ou par liste déroulante) un
enregistrement de l'autre table.
- est définie comme Etrangère seulement parce que c'est elle qui est liée à la clé primaire de
l'autre table.

Nous nommerons donc différemment clé primaire et clé étrangère.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 20
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

A. Importance des relations dans un SGBD Relationnel


Access est un SGBD (Système de Gestion de Base de Données) Relationnel.
Tout le fonctionnement d'une application sous Access est basé sur les Relations entre les Tables.
La définition des Tables et Relations représente les FONDATIONS de l'application sur lesquelles il
'suffira' ensuite de créer d'autres objets bénéficiant de ces Relations.
En France, la méthode la plus utilisée pour créer ces relations est la méthode Merise qui ne sera pas
abordée ici. La méthode UML prend peu à peu le relais de la méthode Merise avec les mêmes principes
concernant la définition des Données.
Rater la définition des Tables et Relations condamne l'application à l'échec !!!
B. Des régles dans les relations
Règle 1 :
L'un des 2 champs du lien est obligatoirement une clé primaire (Num xxx dans mes conventions).
L'autre champ est obligatoirement une clé étrangère (Ref xxx dans mes conventions)
donc, jamais 2 clés primaires reliées :
Num Commande (1) n’a aucun rapport avec Num Produit (CAN001)
Attention : certaines clés étrangères ont le symbole car elles sont sous partie d'une clé primaire
composée de plusieurs champs : exemple : Ref Produit

Règle 2 :
Pour qu’une relation (lien ou jointure) puisse être réalisée, les 2 champs liés doivent contenir des
données de même type et même longueur.
Clé primaire (Num xxx) Clé étrangère (Ref xxx)
(NumAuto) donc du Numérique entier Numérique, Entier long
Texte, Longueur 6 Texte, Longueur 6
Numérique, Entier long Numérique, Entier long

Règle 3 :

Les valeurs du champ Ref xxx de la table1 doivent pouvoir être égales …
au champ Num xxx de la table2. =
Clé primaire (Num xxx) Clé étrangère (Ref xxx)
Num Client de Client = 3 Ref Client de CommandeEnTete = 3
Num Produit de Produit = CAN001 Ref Produit de CommandeLigneProduit = CAN001
Etablir un lien entre Num Client (1, 2, 3, 4,…) et Ref Produit (CAN001, EPS001, CAN002, …)
n'a AUCUN sens car les valeurs ne seront jamais égales (=).
Pour modifier ou Supprimer des relations : (Clic droit sur le trait 1--  )
Enregistrer la mise en forme des relations et Fermer cette fenêtre Relation :

IMPORTANT :
Le travail réalisé par Accès au niveau des Relations consiste :
Voir
- à rechercher à partir d'une valeur d'une clé étrangère exemples
l'unique (1) valeur égale (=) dans la clé primaire liée. en bas de
- à rechercher à partir d'une valeur d'une clé primaire page 5 du
les (N) valeurs égales (=) dans la clé étrangère liée. Chapitre I

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 21
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

C. Tester l'Intégrité Référentielle des Relations


L'Intégrité Référentielle est la vérification des données présentes dans la clé primaire et
la clé étrangère d'une Relation suite à une opération de saisie, modification ou suppression.

1) Ouvrir la table CommandeEnTete


Tenter de saisir dans Ref client de la table CommandeEnTete
une valeur n'existant pas dans Num Client de la table Client : 999 999 (et valider l'enregistrement)

 erreur car, dans la table Fils CommandeEnTete, saisir dans Ref Client la valeur 999 999 alors
que dans la clé primaire Num Client de la table Père "Client" la valeur 999 999 n'existe pas, cela n'est
pas valide.

Un Fils ne peut PAS faire référence à un Père dont la valeur ne peut être retrouvée
dans la table Père.
Remarque : un fils peut ne pas faire référence à un père si on l'autorise, une CommandeEnTete
pourrait ne pas faire référence à un client (pas de saisie dans Ref Client) mais nous l'avons interdit dans
cette application dans le champ Ref Client avec la propriété Null interdit (vide interdit) : OUI et Chaine
vide autorisé : NON donc ici la saisie est obligatoire.

2) Ouvrir la table Produit


Tenter de supprimer de la table Produit le produit CAN001 (clic dans la marge et bouton Suppr )
alors que ce produit existe (est commandé) dans la table CommandeLigneProduit dans le
champ Ref Produit : CAN001.

 erreur car supprimer dans la table Père une clé primaire CAN001 alors qu'au moins un
enregistrement de la table Fils CommandeLigneProduit y fait référence par la clé étrangère Ref Produit
est une suppression non valide.

Un Père ne peut PAS être supprimé s'il a encore au moins 1 Fils qui fait référence à lui même.

Dans les cas 1) et 2), on ne veut pas d'un Fils pointant vers un Père NON "trouvable".

Voila ce que l'intégrité référentielle doit éviter :

Null interdit (vide interdit) : NON donc saisie facultative


Fils de Père inconnu est autorisé ici.

Utiliser le fichier Fac02a2007.accdb pour la suite.


(Demander à Voir le diaporama "PV et sa Voiture")

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 22
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

7. Résumé des Tables


 4 tables avec : Nom des champs, Clé primaire, Type de données et Propriétés de
chaque champ (ici propriétés du champ fléché).

Plus tard, "Liste de choix" avec


liste déroulante

 Des Relations entre les tables avec Intégrité référentielle

 Des Données saisies


Remarque : Créer une application gérant des personnes nécessite l'autorisation ou la déclaration à la
CNIL (Commission Nationale Informatique et Liberté) :
http://www.cnil.fr/vos-responsabilites/declarer-a-la-cnil/
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 23
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch3. Les requêtes de base


La requête permet de faire des TRAITEMENTS sur les DONNEES des TABLES. Il existe plusieurs
types de Requête : la plus simple est celle qui sélectionne des enregistrements sur des critères.
Possibilité de faire des requêtes qui ajoutent, modifient ou suppriment des enregistrements.

1. Requête sélection
Elle permet de sélectionner, trier, calculer des enregistrements sur une ou plusieurs tables
reliées entre elles.
A. Requête simple sur une seule table
Créer une Nouvelle requête, onglet Créer, bouton Création de requête basée sur la table Client.
1) Requête "R01 Client Ou"
Question : "Liste des clients avec visualisation des champs Nom, Prénom, Date Entrée et Ville, par
ordre alphabétique de leur nom puis prénom, habitant Clamart OU nommés TERIEUR "
Saisir les noms des champs ci-dessous par double-clic dans la table affichée en haut de l’écran.
Champ: Nom Prénom Date Entrée Ville
Table: Client Client Client Client
Tri: Croissant Croissant
Afficher: X X X X
Critères: clamart
Ou = entre 2 lignes
Ou: TERIEUR de colonnes quelconques
Pour une saisie dans un champ de type TEXTE, les " sont ajoutés comme délimiteur "TERIEUR"

Exécuter la requête (Afficher les résultats) par le bouton puis


revenir en mode création (Définition de la requête en tableau) par le bouton puis
passer en mode SQL (Définition de la requête en langage SQL = Structured Query Langage) par clic
sur Affichage sous puis par le bouton

SELECT Client.Nom, Client.Prénom, Client.[Date Entrée], Client.Ville


FROM Client
WHERE (Client.Nom = "TERIEUR") OR (Client.Ville = "CLAMART")
ORDER BY Client.Nom, Client.Prénom ;

SQL est un langage Standard pour tous les Systèmes de Gestion de Bases de Données pour créer,
interroger et manipuler les Bases de Données (BD). La commande de base permet la
Sélection de Champs de Tables où des conditions sont requises, ordonnés par des critères de tri.

SELECT liste de champs FROM tables WHERE conditions de sélection ORDER BY critères de tri

Dans Access, dans un premier temps, nous n'aurons pas besoin de la syntaxe SQL pour créer une requête
car nous bénéficions du mode Création de la requête sous forme de tableau interactif.

Si vous souhaitez vous formez au langage SQL, je vous propose mon Polycopié à demander :
SQL pour SGBD.pdf

Passer en mode Création :


Enregistrer la requête : R01 Client Ou et fermer cette requête.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 24
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2) Requête "R02 Client Et"


Question : "Liste des clients nommés TERIEUR et habitant CLAMART"
Champ: Nom Ville Ville
Table: Client Client Client
Tri:
Afficher: X X X
Critères: TERIEUR CLAMART Différence entre
Ou: ces 2 lignes CLAMART

Exécuter la requête : Et = entre 2 colonnes


de la même ligne
Passer en mode Création :
Enregistrer la requête : R02 Client Et et fermer cette requête.

3) Requête "R03 Client Entre"


Question : "Liste décroissante des noms des clients inscrits entre le 15/4/2009 et le 1/5/2009"

Champ: Nom Date Entrée


Table: Client Client
Tri: Décroissant
Afficher: X X
Critères: entre 15/4/2009 et 1/5/2009

Pour une saisie dans un champ de type DATE, les # sont ajoutés automatiquement
comme délimiteur de date= #15/04/2009#
Opérateurs de comparaison : (faute d’opérateur choisi, c’est l’opérateur = qui est utilisé par défaut)
= , > , < , >= , <= , < > (différent), Comme (comparaison avec caractères joker ci-dessous)
Possibilité d'utiliser les caractères Jokers vus précédemment (pour les champs de type Texte) :
* , ? , # avec l'opérateur Comme pour interpréter ces 'Jokers'
Exécuter la requête, Passer en mode Création :
Enregistrer la requête : R03 Client Entre et fermer cette requête.

4) Requête "R04 Client Comme"


Question : "Recherche des clients dont le Nom commence par la lettre T et inscrits après le 10/4/ de
l'année 2009. Afficher aussi la ville "
Champ: Nom Date Entrée Ville
Table: Client Client Client
Tri:
Afficher: X X X
Critères: T* >10/04/2009 ATTENTION :
Ou: Ici, la saisie de "T*" génère
automatiquement "Comme T*" mais
parfois vous devrez saisir
manuellement le Comme
pour utiliser * ? ou #
Exécuter la requête, Passer en mode Création
Possibilités de dimensionner les colonnes, déplacer une colonne, insérer une colonne, insérer une ligne
de critères, supprimer une colonne.
Enregistrer la requête : R Client Comme. Fermer la fenêtre des requêtes :
Exécuter la requête R Client Comme.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 25
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
5) Exercices à faire
A FAIRE…1 : nommer la requête R05
Question : "Recherche des produits dont
[le Prix est inférieur à 500 € et dont la Désignation commence par "imp" (en minuscule ou majuscule)]
ou bien [dont le taux de TVA est supérieur ou égal à 15% (0.15) et dont le Num Produit a un "A" en 2
ième
position et un "0" (zéro) en 5 ième position
Penser à utiliser l’opérateur Comme " " si vous utilisez des caractères ?, *, #.
Classer par désignation. "

A FAIRE…2 : nommer la requête R06


Question : "Recherche des clients dont
[la Date d’entrée est postérieure au 15 Avril 2009 et habitant le département 93] ou bien
[des Toulousains prénommés Jean].
Classer par Nom. "

A FAIRE…3 : nommer la requête R07


Question : "Recherche des clients dont
[la Date d’entrée est Mai (5)] et qui ne sont pas toulousain.

6) Requête "R08 Commande Mono Table "


Question : "Recherche, dans la seule table CommandeEnTete, des Commandes des clients 3, 6 et 34
dont les commandes ne sont pas payées.
Afficher tous les champs, trier par client."

« A vous d'essayer... »

Commentaire :
Les résultats ne font apparaître aucune des informations du client (nom, prénom, …) hors mis le numéro.
Ces données sont dans les tables Client.
Nous allons donc faire des requêtes multi-table pour visualiser les informations client depuis une
commande.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 26
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Requête multitable simple avec Relation


1) Requête "R09 Commande et son Client"
Question : " Liste des Commandes (seulement l'en tête) avec détail de son Nom et Prénom Client."

Nous avons lié les Clients et les Commandes dans la fenêtre relation.
Ce lien peut être utilisé dans 2 sens :
- Pour 1 Commande, j'obtiens son Unique Client
- Pour 1 Client, j'obtiens ses N (∞) Commandes.

Définir une requête basée sur les 2 tables CommandeEnTete et Client avec les champs suivants.

Ce résultat affiche les Commandes pour lesquelles Ref Client = Num Client
Voir le mode SQL de la requête : SELECT [Num Commande], [Date Commande], [Date Echéance],
[Ref Client], [Num Client], Nom, Prénom FROM Client INNER JOIN CommandeEnTete
ON Client.[Num Client] = CommandeEnTete.[Ref Client];
Clé primaire
Clé étrangère
AVEC doublons SANS doublon
de table "Père"
de table "Fils"

Attention : Toutes les commandes peuvent ne pas être affichées. Si …


le champ Ref Client de CommandeEnTete est vide, Access ne trouve pas un Num Client avec contenu
vide EGAL (=) car une clé primaire (Num Client ) ne peut être vide.
Ici, toutes les commandes sont affichées car le champ Ref Client est
en Null interdit = OUI et Chaine vide autorisée = NON donc saisie obligatoire et jamais effacé.

Dans une relation Père - Fils, les Fils pointant vers aucun Père (pas de saisie) ne sont pas affichés
dans une requête basée sur les 2 tables liées. - Ce sont des Fils de Père inconnu -
Ce Problème peut être géré en modifiant le type jointure sur la
Relation Clé primaire - Clé Etrangère.
Nous ne le verrons pas pour le moment.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 27
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2) Requête "R10 Client et ses Commandes" Demander à voir le


Question : " Liste des Clients avec leurs Commandes (seulement l'en tête)". Formulaire Client et
ses commandes FP
Nous avons lié les Clients et les Commandes dans la fenêtre relation.
Ce lien peut être utilisé dans 2 sens :
Pour 1 Client, j'obtiens ses N (∞) Commandes.
Pour 1 Commande, j'obtiens son Unique Client

Définir une requête basée sur les 2 tables Client et CommandeEnTete avec les champs suivants.

Ce résultat affiche les Clients avec Num Client = Ref Client


Voir le mode SQL de la requête : SELECT Nom, Prénom, [Num Client], [Ref Client], [Num
Commande], [Date Commande], [Date Echéance] FROM Client INNER JOIN CommandeEnTete
ON Client.[Num Client] = CommandeEnTete.[Ref Client];
Clé primaire
SANS doublon Clé étrangère
"Père" AVEC doublons
"Fils"

Attention : Tous les clients peuvent ne pas être affichées. Si …


certaines valeurs de Num Client ne sont pas saisies dans le champ Ref Client de CommandeEnTete,
Access ne trouve pas l'égalité clé primaire = clé étrangère.
Ici, le client 2 n'est pas affiché car aucun enregistrement de Ref Client ne contient la valeur 2.

Par contre, le client 3 DURAND est affiché plusieurs fois car plusieurs enregistrements du champ
Ref Client contiennent la valeur 3. DURAND possède N commandes : la 1 et la 2.

Dans une relation Père - Fils, les Pères n'ayant aucun Fils pointant sur eux ne sont pas affichés
dans une requête basée sur les 2 tables liées. Ce sont des Pères 'potentiels' sans Fils.
Ce Problème peut être géré en modifiant le Type
jointure sur la Relation Clé primaire - Clé Etrangère.
Nous ne le verrons pas pour le moment.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 28
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

C. Requête multitable avec calcul par enregistrement


1) Requête "R11 Produits commandés et calcul"
Question : " Liste des Produits commandés dans les Commandes avec calcul Total HT à payer (prix
HT* quantité), Montant de la TVA et Montant TTC de la ligne de commande éventuellement remisé".
a) Gérer tables et champs de table
On peut créer une requête avec les 4 tables liées ( = ) et les champs suivants.
= = =

Mais il n'est pas obligatoire de présenter les paires de champs liés. Simplifier.

On simplifie encore (pour faire de la place sur ce document pour les futurs calculs).

Enregistrer : R11 Produits commandées et calculs (Enregistrement OBLIGATOIRE pour la suite)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 29
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

b) Gérer les colonnes de calcul


Objectif : Ajouter les 4 calculs

Objectif : Ajouter dans une colonne vierge de la requête un champ calculé -


Remarque : Il n’y a pas de différence dans les noms de champ entre minuscule et majuscule !
- Calcul de la première colonne calculée

Utilisation du générateur d’expression pour champ calculé ( voir l’enseignant pour explications)
Nom de la colonne
librement choisi

Total HT : [prix Ht] * [Quantité]


A prendre dans le générateur, sur la
Saisie Clavier première ligne
Le : sépare le nom de la colonne (à gauche)
Exécuter: R11 Produits commandés et calculs
du calcul (à droite)

Remarque: le générateur d'expression ne présente dans sa fenêtre QUE les colonnes de la requête
enregistrées sur disque et non pas celles qui sont affichées à l'écran donc, avant chaque
utilisation du générateur, il faut enregistrer la requête.

- Calcul de la deuxième et troisième colonne calculée


Utilisation du générateur d’expression pour champ calculé :
Donc Enregistrer (cela pour enregistrer le précédent champ calculé Total HT dont on a besoin ci-
dessous pour les calculs de la TVA)
Dans l'expression ci-dessous, seul Total TVA : est saisi au clavier.
[Total HT] est pris dans une des colonnes de la requête courante par le générateur d'expression.
[Produit] ! [Taux Tva] n'étant pas une des colonnes de la requête courante du générateur d'expression,
il faut aller chercher, grâce au générateur d'expression, ce champ dans la rubrique Tables (double-clic),
rubrique Produit .
A prendre dans le générateur, dans +Tables, Produit, Taux Tva car ce
champ n’est pas présent dans les colonnes de la requête courante.

Total TVA : [Total HT] * [Produit] ! [Taux TVA]


Ici, on a le droit d'utiliser la table Produit car elle est présente en haut de requête dans la liste des tables.
Il est INTERDIT d'utiliser des Tables ou Requêtes NON PRESENTES en haut de requête.
Remarque : ########## signifie que la colonne n’est pas assez large pour afficher le résultat :
élargissez la colonne à la souris comme dans Excel.
Enregistrer (pour enregistrer le nouveau champ calculé Total TVA pour pouvoir l'utiliser dans le
générateur dans l'expression suivante ci-dessous)
Total TTC : [Total HT] + [Total TVA]
Exécuter, Enregistrer, Consulter la syntaxe SQL (par le bouton Affichage en haut à gauche).
Remarque : pour visualiser en entier le contenu d'une cellule de requête : Touche MAJ + F2

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 30
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Eventuellement !
- Calcul de la quatrième colonne calculée taper 0 virgule 1
Ici nous voulons un calcul conditionnel : Total TTC remisé est égal à : et non pas
Si (Total TTC > 1000 alors afficher Total TTC * (1 - 0,1) sinon afficher Total TTC) 0.1 suivant votre
machine !
Fonction VraiFaux() (IIf en V 2010) correspond à SI() est à prendre dans le générateur, dans :
+Fonctions, Fonction intégrée, Déroulement prog.

Total TTC remisé : VraiFaux([Total TTC]>1000 ; [Total TTC]*(1-0,1) ; [Total TTC])

La fonction VraiFaux a la même logique que le SI d'Excel : (condition ; valeur si Vrai ; valeur si Faux)
La fonction VraiFaux() s'écrit Iif() en version 2010 et en syntaxe anglaise.

Remarque : Ici, la remise est de 10 % constant dans le calcul.


Une solution plus avancée irait chercher le Taux de remise (10% ou 0,1) dans une table de Paramètres
pour ne pas avoir la valeur 0,1 pratiquement figée car difficilement modifiable dans ce calcul par un
NON spécialiste des requêtes d'Access.
De même pour le Seuil de 1 000 €, il serait préférable qu'il soit stocké dans une table de Paramètres pour
qu'un simple utilisateur puisse modifier cette valeur sans avoir à faire appel à un informaticien.
Cette table Paramètres pourrait être structurée ainsi avec un champ par paramètre et donc n'avoir qu'un
seul enregistrement :

Penser à gérer en mode Création pour chacune des 4 colonnes de calcul un format Monétaire par
le bouton Feuille de propriétés :

Attention : parfois l'application de ce format ne marche pas. Fermer la requête et la réouvrir !


Exécuter, Enregistrer et Fermer.

D. Erreur à éviter dans les requêtes multitable.


Les tables que vous utilisez dans le haut de la
requête graphique doivent TOUJOURS être
liées. Nombre d'enregistrement de la requête :

Si vous voulez utiliser seulement les champs


de la table Client et de la table
CommandeLigneProduit, vous ne pouvez pas
seulement choisir 2 tables NON liées car le
nombre d'enregistrement de la réponse serait
de ,
c'est-à-dire la multiplication des 43 enregistrements de la table Client par les 18 enregistrements de la
table CommandeLigneproduit ce qui n'a aucun sens pour notre travail.
FIN du TD2
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 31
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

E. Les fonctions du langage VBA pour les Requêtes


Ouvrir Fac02a2007.accdb pour ce Td 3.
Access dispose d'une large liste de fonctions en version anglaise et française issues du langage VBA.
La syntaxe anglaise est utilisable partout, la version française est proposée dans le générateur
d'expression mais on peut aussi saisir la syntaxe anglaise en l'écrivant à la main (elle est ensuite traduite
en syntaxe française). Par ailleurs, l'aide d'Access ne répertorie que la syntaxe anglaise, si l'on
programme en VBA, c'est encore la version anglaise qu'il faut utiliser et enfin, certaines fonctions
anglaises ne sont pas traduites en Français.
- Depuis votre espace de travail Access, Voir l'aide sur les fonctions par F1 > Automation et
programmabilité > Fonctions.
- L'aide est mieux structurée depuis l'éditeur du langage VBA accessible par ALT + F11 puis
F1 > Visual basic-Manuel de référence du langage > Fonctions (pour un classement alphabétique) ou
Index/Listes (pour un classement thématique).
Quelques exemples de fonctions parmi des centaines :
1) Fonctions Mathématiques
Syntaxe anglaise Syntaxe française Définition Exemple Résultats
Round(expression;n) Round( ) Arrondir à n Round(123,456;2) 123,46
décimales
Int(expression) Ent( ) Donner la partie Int(10/3) 3
Int() en V 2010 entière sans arrondir
2) Fonctions Date et Heure
Syntaxe anglaise Syntaxe française Définition Exemple Résultats
Date() Date( ) Donner la date du jour Date() 19/10/2009
Time() Temps( ) Donner l'heure courante Time() 09:55:51
Now() Maintenant( ) Donner date et heure Now() 19/10/2009
courantes 09:55:51
Day(date) Jour( ) Donner le jour de la Day(19/10/2009) 19
date (1-31)
Month(date) Mois( ) Donner le mois d'une Month(19/10/200 10
date (1-12) 9)
Year(date) An( ) Donner l'année d'une Year(19/10/2009) 2009
Année() en V 2010 date
DateSerial() SerieDate() Construit une date à DateSerial(2009; 31/12/2009
partir de 3 nombres 12; 31)
TimeSerial() SerieHeure() Construit une heure à TimeSerial(23; 23:59:30
partir de 3 nombres 59; 30
3) Fonction Chaîne de caractères
Syntaxe anglaise Syntaxe française Définition Exemple Résultats
UCase(expression) Majuscule( ) Convertir en UCase("abc") ABC
(Up) majuscule
LCase(expression) Minuscule( ) Convertir en LCase("DEF") def
(Low) minuscule
Left(expression;n) Gauche( ) Extraire n caractères à Left("abcdef";4) abcd
partir de la gauche
Right(expression;n) Droite( ) Extraire n car à partir Right("abcdef",2) ef
de la droite
Mid(expression; ExtracChaine( ) Extraire une sous Mid("abcdef";3;2) cd
position; longueur) chaine à partir de
(Midle pour milieu) position sur longueur
Len(expression) NbCar( ) Donner la longueur Len("abcdef") 5
(Length)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 32
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Chr(nombre) Car() Donner le caractère du Chr(65) A
code ASCII fourni Chr(13) & Chr(10) <retour à la ligne>
Concaténer (juxtaposer) des chaines de caractères :
Utiliser l'opérateur de concaténation & : "abc" & " " & "def" donne "abc def"
On peut aussi utiliser l'opérateur + mais parfois ambigüe avec somme : "abc" + " " + "def" donne "abc def"

4) Fonctions de Domaine
Ces fonctions effectuent des regroupements sur des domaines et produisent des résultats analogues aux
requêtes de regroupement.
Gros avantage : en une fonction totalement autonome, on a l'équivalent d'une requête travaillant sur
des données (Table ou Requête), effectuant par le nom de la fonction (Compter, Sommer, …) un calcul
sur un champ (ou une expression) dont les enregistrements utilisés peuvent éventuellement être
sélectionnés par une condition (filtre).

Forme générale :
FonctionDeDomaine ("champ_ou_expression" ; "table_ou_requête" ;" filtre")

Syntaxe Syntaxe Définition Exemple Résultats


anglaise française
DCount() CompteDom( ) Compte le nombre DCount ("[Num client]"; 3
d'enregistrements "Client"; "Ville = 'PARIS' " )
Noter les ' autour de Paris
DSum() SomDom( ) Somme un champ DSum ("[Prix Ht]"; "Produit"; 2500
"[Prix Ht] >500" )
DAvg() MoyDom( ) Calcule la moyenne DAvg ("[Prix Ht]"; "R04 abc") 450
d'un champ Requête au lieu de table
Pas de filtre ici
DMax MaxDom( ) Calcule la valeur DMax ("[Prix Ht]"; "Produit"; 2000
maximale "[Prix Ht] >500")
DMin MinDom( ) Calcule la valeur DMin ("[Prix Ht]"; "Produit"; 30
minimale "[Prix Ht] >500")
DLookup( ) RechDom( ) Rechercher le PUISSE
DLookup ("Nom" &" " &
premier Alain
"Prénom"; "Client";
enregistrement "[NumClient] = " &
répondant à un Formulaires![Commande]![Ref
critère Client]))
Noter l'expression avec "[Nom]" &" " &

Noter le filtre basé sur la valeur actuelle
du contrôle du formulaire ouvert

5) Fonctions de conversion
Syntaxe anglaise Syntaxe française Définition Exemple Résultats
Nz(expression; Nz( ) Convertir une valeur Nz(Quantité)*2 0 si quantité
valeur de Null en une autre valeur = Null.
remplacement) (0 par défaut pour une Quantité *2 Null si quantité =
(Nz pour Null to Zéro) variable numérique) Null
Val() CNum() Renvoie un nombre à Val("88 rue des 88
partir d'une chaine de corsaires")
caractères
Str() NumChaine() Transforme un nombre Str(12) "12"
en chaine de caractères

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 33
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

6) Fonctions Diverses
Syntaxe anglaise Syntaxe française Définition Exemple Résultats
Iif(condition; VraiFaux( ) Retourner une valeur en Iif(1=1; 6
valeurSiVrai; IIF() en V 2010 fonction de la condition 2*3;
valeurSifaux) Remarque : nous Vraie ou Fausse 4)
avons déjà utilisé Même logique que le SI Excel
cette fonction
page 31 en haut
IsNull(expression) EstNull( ) Tester si la valeur est Null IsNull(champ1 Vrai ou Faux
(vide) )
MsgBox(message; BoîteMsg() Afficher une boite de MsgBox("Ajou
boutons; titre) message t effectué")

InputBox(message; BEntrée () Afficher une boite de InputBox( Entrer


titre; valeur par saisie de donnée par le votre âge ")
défaut) clavier

ATTENTION : Ces fonctions sont utilisables:


- dans les Requêtes, les Formulaires et les Macros (voir plus loin pour les Formulaires et Macros) : le
séparateur entre les argument est le point virgule : MsgBox(message ; boutons ; titre)
- dans la programmation VBA : le séparateur est la virgule : MsgBox(message , boutons , titre)

Exemple d'utilisation de fonction VBA dans une requête


1) Afficher la liste des commandes dont la date de commande est supérieure à
la date d'entrée minimale des clients Toulousains .

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 34
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
7) Fonctions Personnelles
Vous pouvez aussi écrire en langage VBA dans l'éditeur (ALT+F11) vos propres fonctions qui pourront
être appelées depuis les calculs de Requêtes, Formulaires et Etats. Exemple :
'Exemple de fonction appelée dans une requête ou un formulaire
Function DureeEnHeures(ByVal DureeMin As Integer) As String
NE PAS FAIRE
'Role : Retourner une chaine de caractères correspondant à une durée en Heures et Minutes
' à partir d'une Durée en minutes exemple : 65 Mn donne "1H05Mn"
'ENTREE : DureeMin : Durée en minutes (ex : 65)
Dim Heure As Integer, Minute As Integer CETTE PARTIE
Heure = DureeMin / 60
Minute = DureeMin Mod 60 'Mod pour le reste de la division
DureeEnHeures = Heure & "H" & Format(Minute, "00") & "Mn" 'Conversion implicite en String
End Function
Exemple d'utilisation dans une requête depuis le générateur d'expression :

NE PAS FAIRE

CETTE PARTIE

- Fin de la partie Fonctions -


- Utiliser le fichier Fac02a2007.accdb pour la suite
F. Exercices à faire
Question : "Créer la requête R12 Calcul TTC unitaire permettant d'afficher précisément le résultat ci-
dessous".

"A vous d'essayer…


en faisant attention au choix des tables !"

Question : "Créer la requête R12_1 Des informations sur les clients permettant d'afficher le type de
résultat ci-dessous en manipulant & et les fonctions VBA".

"A vous d'essayer…


en faisant attention au choix des tables !"
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 35
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

G. Requête avec calcul sur "Regroupement" d'enregistrements


1) Requête "R13 Calcul sur regroupement"
Question : " Nombre total de produit commandés de marque Canon seulement (CAN dans le code du
produit) regroupées par produit "
a) Sélectionner les commandes de tous les produits Canon (dans les Ref Produit)

Exécuter

b) Regrouper les enregistrements ayant même valeur (CAN001 par exemple) pour faire des
traitements sur le groupe.
Ajouter la ligne Opération par le bouton Totaux .

Tester.

Dans l'en-tête de la dernière colonne, transformer "Quantité" en "Total des ventes : Quantité"
pour éviter l'affichage de SommeDeQuantité remplacé par Total des ventes (nom de colonne calculée).
Tester pour la colonne Total des ventes les autres Opérations (autres que Somme) disponibles sur un
Regroupement : Moyenne, Min, Max, Compte, …

H. Exercices à faire
Question : "Créer la requête R14 : Moyenne des
quantités de produits des commandes par client
permettant d'afficher précisément le résultat ci-contre
trié par moyenne".

"A vous d'essayer…


en faisant attention au
choix des tables !"
Voir bas de page 31 le conseil pour une requête …

Utiliser le fichier Fac03a2007.accdb pour la suite

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 36
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2. Résumé des Requêtes


 Requête Sélection mono-table
Gestion du Tri, des Critères de sélection, des Opérateurs logiques Et / Ou entre les
critères, des Opérateurs de sélection : =,<,>,>=,<=, < > (différent), Entre
et Comme (Comme pour utiliser les caractères joker : ? , * , # )

 Requête Sélection Multi-tables avec Relation entre les tables


La relation ci-dessous est héritée de la fenêtre Relation

 Requête Sélection Multi-tables avec Relation entre les tables et Calculs

= = =

Insertion de Champs de Tables Définitions de Colonnes de Calcul, Nom : Calcul

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 37
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch4. Les Formulaires de base


Ils permettent la présentation des Données issues des Tables ou Requêtes :
Remarque : les requêtes ne stockent pas de données, elles les recherchent dans les Tables.

Utilisateur

Table ou Requête = affichage brut des données Formulaire = affichage permettant une
en mode Feuille de données (tableau). Mise en Forme des données.
Intérêts du Formulaire :
- être l'interface (l'intermédiaire) entre les Données et l'Utilisateur pour lire et écrire des données
- présenter un affichage optimisé et sophistiqué (Interface graphique Windows)
- faciliter la saisie (aide à la saisie par choix dans liste déroulante par exemple)

1. Formulaire Unitaire basé sur une table


A. Créer un Formulaire Colonne simple (voir Résultat Final page suivante)
Depuis l'onglet Créer, bouton Plus de Formulaire (Assistant formulaire en V 2010):
Assistants : Assistant formulaire Table : Client OK
Champs a insérer (dans l'ordre) : Tous sauf Date Entrée Suivant
Présentation : Colonne simple Suivant ; Style : Access 2003 Suivant
Titre : Client (c’est le nom d’enregistrement de ce formulaire) Terminer
Passer en Mode Création par Fermer le formulaire. Fermer la table Client si ouverte
Ouvrir le formulaire en Mode Formulaire (double clic sur nom du formulaire Client).
Le mode Formulaire permet de voir les Données sans possibilité de mise en forme.
Passer en Mode Page par . Ce mode permet de voir les données ET permet de
faire de la mise en forme et mise en page. Tester quelques modifications de forme.
B. Utiliser un formulaire
Passer en mode Formulaire pour être Utilisateur de l'application et non Développeur.
1) Ajouter des enregistrements
Atteindre un nouvel enregistrement vide : (en bas d'écran) par ce bouton
Saisir : Vendaire Isabelle 2 Av Casanova 31000 TOULOUSE .
Vérifier que Vendaire ajouté depuis le Formulaire est présent dans la Table Client.
2) Consulter des enregistrements en mode formulaire
Utiliser les 4 boutons de déplacement en bas de formulaire
3) Modifier des enregistrements
Directement au clavier sur les données (les modifications se répercutent directement sur les données des Tables)
4) Rechercher des enregistrements
Rechercher TERIEUR : se positionner sur le champ Nom et utiliser
5) Supprimer des enregistrements
Sélectionner à la souris l'ensemble "Vendaire" par la barre de sélection
à gauche des données puis touche Suppr

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 38
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

C. Modifier un formulaire
Objectif à obtenir à la fin de cette partie Modification :

Modifications
2

3
Passer en mode Création sur le formulaire Client : il y a 3 sections (En tête, Détail, Pied).
Les éléments d'un Formulaire sont appelés des Contrôles

Deux types de contrôles sont présents sur ce formulaire: Demander


-Zone de texte = texte modifiable par l'utilisateur (Toulouse) explications
correspondant aux données des champs de la Table Client à l'enseignant
-Etiquette = texte figé pour l'utilisateur (Ville)
précisant seulement que Toulouse est une donnée du domaine Ville
1) Gérer les contrôles existants
.Sélection : (à la souris : clic ou +clic pour ajouter à une sélection)
(à la souris : par glissé encadrant partiellement les contrôles ciblés)
.Dégrouper : les contrôles affichés ici sont groupés dans une Disposition : cliquer la croix
pour sélectionner les contrôles puis clic droit sur un des contrôles Disposition > Supprimer pour
pouvoir dégrouper et gérer ces contrôles individuellement.
.Déplacement : (avec souris : "contour" pour le couple de contrôles, "carré haut gauche" pour un seul)
Application :
.sélectionner le contrôle Num Client
.déplacer le couple Etiquette (sur fond gris) et Zone de texte (sur fond blanc)
.déplacer seulement le contrôle zone de texte sans son étiquette; étiquette sans sa zone de texte.
.Mise en forme:
- police - taille de la police - attribut (gras, italique)
- alignement (Gauche, Centre, Droit) - style et couleurs
Application : modifier la taille et le style de la police pour tous les contrôles sauf le Num Client
.Sélectionner les contrôles par un glissé à la souris, .choisir police Arial, taille 14 , clic droit sur un
contrôle, -Taille -(adaptée) Au contenu
.sélectionner Zone de texte-Nom par clic ,.sélectionner Zone de texte-Prénom par +clic
.utiliser onglet Accueil pour: Fond=jaune, .sélectionner la ligne Détail du formulaire par
clic et attribuer Fond=vert clair.
Remarque : Pour afficher les propriétés d'un contrôle : double-clic sur le contrôle (si non sélectionné).
Remarque : Voir aussi le clic-droit sur un contrôle.

Exécuter, Enregistrer, Retour en Création

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 39
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2) Ajouter des contrôles par la barre de contrôles

Onglet Création : nous


allons utiliser quelques types
de contrôle de formulaire

Voir numéros 1,2,3,4 ci-dessous et leur correspondance sur la copie d'écran de la page précédente.
1. contrôle Etiquette
Correspond à du Texte non modifiable par l'utilisateur de l'application et basé sur le texte d'une légende.
Application : .sélectionner l’outil Etiquette (Aa) qui permet d’ajouter du texte figé .créer une
Etiquette à droite du contrôle Num Client par un glissé puis saisir son texte : Automatique (indiquant
ainsi que la génération du Num client est Automatique)

2. contrôle Rectangle
Application : .sélectionner l’outil de dessin Rectangle dans la barre d’outil, .dessiner un
rectangle autour du Nom et Prénom par un glissé .donner une couleur au rectangle puis mettre le
rectangle en arrière plan par onglet Réorganiser, bouton Mettre en arrière plan de zone Position

3. contrôle Zone de texte


Correspond à du Texte généralement modifiable par l'utilisateur de l'application et basé le plus souvent sur un
champ de table.
Application : sélectionner l’outil zone de texte et ajouter un contrôle ‘Date Entrée’
(utiliser dans les propriétés Source du contrôle pour choisir 'Date Entrée’ dans la liste des champs de la
table Client). Un contrôle de type Etiquette a été associé en plus à la Zone de texte.
Modifier la propriété Légende de l’Etiquette de texte en ‘Date de l'Entrée :’
Autre manière d'ajouter facilement un couple Etiquette-Zone de texte sur la base d'un champ de
Table: utiliser le bouton 'Ajouter champs existants' puis faire glisser un champ sur le formulaire.

4. contrôle Logo
Application : Ajouter le logo Clientele.gif (fichier fourni). Le logo est ajouté automatiquement
dans la zone En tête du formulaire. Par la propriété Mode d'Affichage du Logo, affecter successivement
Découpage, Echelle, Zoom à l'image pour comprendre la présentation de l'image.

Le contrôle Logo est en réalité un contrôle Image, positionné automatiquement dans l'en tête du
formulaire, avec une petite taille par défaut. Tester le contrôle Image avec le même fichier .gif puis
effacer cette image.
Bilan sur l'affichage des Images :
-En Découpage : L'image ne rentre pas dans la surface qui lui est allouée, elle est découpée (il manque
ici le haut et le bas). Sa taille de base est gardée.
-En Echelle : L'image est déformée horizontalement et verticalement (mis à l'échelle : ici élargie
horizontalement) pour occuper toute la surface qui lui est allouée. La totalité de l'image est vue.
-En Zoom : L'image n'est pas découpée, n'est pas déformée, elle n'occupe pas toute la zone qui lui est
allouée (à droite et gauche) et elle est zoomée (ici zoom arrière). La totalité de l'image est vue.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 40
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

3) Catalogue des types de contrôl


trôle
Voici quelques
es exemples de type de contrôle avec leur affi
affichage

Etiquette : pour du texte figé


igé non modifiable

Zone de texte : pour afficher-modifier


aff des données
(champs de tables ou colonnes de requêtes)

Groupe d'options :

Bouton bascule

Bouton d'option

Case à cocher
Liste déroulante :

Zone de liste :
liste de valeurs toujours visible mais
ma prend de la place

Bouton de commande : pour


pou déclencher des programmes

Image fixe de décoratiotion (non lié à un numéro


d'enregistrement d’une Table)

Logo : une petite image dans


ns l'en tête du formulaire

Cadre d’objet indépendant des


d données : son affichage est
identique (figé) pour tous les enreg
registrements du formulaire

Cadre d’objet DEPENDAN ANT d'un champ de table donc


changeant pour chaque enregistristrement (exemple : photo de
chaque client prise dans Table Clie
lient)

Saut de page : utilisable pour


our les impressions ----< Saut
Sau de Page >----

Onglet pour superposer des


es ppages d'informations
Sous-formulaire : formulaire
ire représentant une liste
associée à 1 enregistrement (les N produits d'une commande)

Trait à dessiner

Rectangle à dessiner

Graphique

www
ww.fnac.com
Lien hypertexte : lien vers pag
page web par exemple
Lien vers une pièce jointe : un fichier word par exemple

www.tifawt.com
En - Informatique Appliquée - Marc Souques
Ensat Page 41
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

4) Remarque sur la largeur les Formulaires :


Dans un formulaire, il n'y a pas de bouton pour régler le zoom (contrairement à Word et Excel).
Il faut donc faire en sorte que la largeur de vos formulaires affichés ne dépasse pas de l'écran de
l'utilisateur en tenant compte de l'inconnue de la résolution écran de l'utilisateur.
Voici les limites :
Résolution écran de l'utilisateur Taille maxi du formulaire en mode création
800 x 600 19 cm
1024 x 768 25 cm
1280 x 1024 32 cm
Il faut donc faire un choix de limite : 25 cm maxi (1024 x 768) semble aujourd'hui accessible pour beaucoup.

Question : Créer un formulaire pour présenter les produits de notre catalogue.

Zone
En-tête

Zone
Détail

Zone
Pied

" A vous d'essayer "


avec :

Dans l'Entête du formulaire :


- le texte figé "Catalogue Produit"
- une image basée sur le fichier " LogoProduit.gif" fourni
Dans la zone Détail :
- les 4 champs de l'enregistrement avec gestion de la présentation 'superposée'
- 2 rectangles
- Num Produit et Désignation : cadrage à gauche
- Prix et Taux de tva : cadrage à droite
Dans le Pied du formulaire :
- le texte figé "Les meilleurs produits du marché"
Afficher le Produit : Initiation à Access pour les nuls
Nous calculerons et afficherons le Prix Ttc plus tard.

REMARQUE : Les données de l'application sont présentées à l'utilisateur uniquement


(pour le moment) par les FORMULAIRES.
Les TABLES (qui stockent les données) et les REQUETES (qui traitent les données) ne sont
normalement JAMAIS présentées à l'utilisateur, elles servent à alimenter les FORMULAIRES qui
ont donc des données (de base ou traitées) et qui ajoutent la Forme de la présentation.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 42
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2. Formulaire Tabulaire basé sur une requête


Objectif : Créer ce formulaire et afficher les produits commandés non payés triés par date de commande.
Le formulaire affichera les données provenant de plusieurs tables, sous forme de tableau (Tabulaire )
avec le calcul Total TTC par Produit et avec un Total général en bas de formulaire.

Des
calculs

Procédure : Ce problème
d'affichage n'est pas
A. Créer la requête source du futur Formulaire traité dans la requête
Créer la requête basée sur les tables avec les champs suivants et 1 calcul mais sera géré dans
le formulaire.

Eventuellement, en
mode Création, voir
bouton Propriétés
puis Format

avec pour le champ 'Payé': critère : non; affichage désactivé (non affiché), tri sur Date Commande
Essayer de faire la requête ci-dessus seul (sinon consulter ci-dessous) :

Utiliser les tables CommandeEnTete, CommandeLigneProduit et Produit (Client pas nécessaire).

ATTENTION : dans une REQUETE


Avec
1) Avant d'utiliser le générateur pour les calculs, il faut enregistrer la requête. Générateur
2) Dans une colonne calculée de requête, on peut utiliser: d'expression
- les colonnes de la requête courante (si requête enregistrée) obligatoirement
- les champs des seules tables choisies en haut de la requête courante

Ici, le générateur vous propose d'utiliser les 4 tables de l'application MAIS en réalité vous ne pouvez
utiliser que les 3 tables à la 'source' de votre requête. Table Client interdite d'utilisation !.
De même, vous ne pouvez utilisez aucunes Requête car non présentes à la 'source' de votre requête
Exécuter Enregistrer : R15 Produits commandés avec date puis Fermer.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 43
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Créer un formulaire Tabulaire basé sur la requête


Créer un nouveau formulaire par Assistants formulaire basé sur
la requête R15 Produits commandés avec date avec toutes les colonnes de la requête sauf Taux Tva,
-de type : Tabulaire -présentation : Access 2007 -titre : Produits commandés triés par date
Seul le mode Tabulaire permet de faire des calculs de
synthèse dans le pied du formulaire : ici somme.
(Tabulaire signifie présentation des données en TABLEAU) Attention à ne pas laisser un espace en
-bouton Terminer. début de Titre après avoir effacé R15 du
titre proposé
Passer en Création pour ajouter des Contrôles
C. Ajouter des contrôles
En mode Création, ajuster la taille des contrôles si besoin (Ref Produit), pour le Prix TTC, donner par la
propriété format la valeur : Monétaire pour n'afficher que 2 décimales et €.

1) contrôle Zone de texte (ab) (en réalité, 2 contrôles Étiquette + zone de texte)

Nous souhaitons calculer la somme des montants TTC de tous les produits commandés non payés.

Agrandir le pied de formulaire à la souris puis Ajouter un contrôle Zone de texte dans le pied du
formulaire à droite sous le prix TTC avec les propriétés suivantes :
.source contrôle : utiliser le générateur d’expression
(ne pas saisir au clavier) =Somme([Total TTC])
obtenir Somme dans les Fonctions intégrées
obtenir Total TTC par clic sur <Liste de champs> puis Total TTC
Attention: Dans un contrôle avec calcul, on doit utiliser:
- soit les contrôles du formulaire courant
<Formulaire> =contrôles utilisables
- soit les champs de la requête à la source du formulaire si
clic sur <Liste de champs> = champs utilisables
On ne peut utiliser d'autres données que celles du formulaire
ou celles à la source du formulaire (ici la requête ).
 On ne doit PAS utiliser les TABLES ou REQUETES par
.nom : TotalGénéral
.format : Monétaire. Fermer fenêtre des propriétés
Changer les propriétés de l’Étiquette du contrôle
.légende : Total des commandes impayées

2) contrôle Trait Tirer un trait comme sur l'exemple pour montrer la synthèse par la somme.
Passer en mode Formulaire, tester, Enregistrer et fermer ce formulaire.
Conclusion : des Calculs peuvent être faits :
1. dans des colonnes de Requête (cas le plus courant)
2. dans des contrôles Zone de texte de Formulaire (quand on ne peut le faire dans une requête)
Voir page suivante des Exercices :

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 44
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

D. Exercices à faire
si vous avez du temps :

Travail sur les requêtes :


1- Question:
Afficher les Clients :
Du Département 78 mais pas de Versailles
ou
Entrés avant le 16/4/2009 et habitant exclusivement une « avenue» ou une « place»
Trier par nom prénom.

Enregistrer : R14 A faire 1 fin de td Trouver des clients et ou tri

2- Question:
Afficher les Produits et les clients l'ayant acheté (avec la date de commande) :
Trier par numéro de produit.

Enregistrer : R14 A faire 2 fin de td Trouver des produits et leurs clients

3. Résumé des Formulaires


Voir résumé au Chapitre 9
Fin du TD3

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 45
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch5. Les Tables avec listes déroulantes


de choix pour Clé Etrangère
Utiliser le fichier Fac04a2007.accdb pour la suite

1. Tables actuelles basiques


Avec les tables actuelles, pour saisir une nouvelle CommandeEnTete, il faut saisir au clavier une
valeur dans le champ Ref Client qui soit une valeur existante du champ Num Client de la table Client
car les tables sont liées.

Clé étrangère
AVEC doublons
= Clé primaire
SANS doublon
"Père"
"Fils"

Tester ce principe en saisissant une nouvelle


commande (11) avec pour le champ Clé étrangère
Ref Client la valeur 3 (car dans la Clé Primaire
Num Client, 3 existe) et valider les propositions
pour les dates et Payé.
Num Commande Ref Client Date Commande Date Echéance Payé

Après ce test, supprimer la commande 11 en


cliquant dans la colonne grisée à gauche du 11 (pas sur le +) puis touche Suppression (Suppr).
Nous sommes donc contraints à un choix d'une valeur de Num Client pour saisir Ref Client.
Nous souhaitons que ce choix soit assisté par une liste déroulante .

2. Champ Clé étrangère avec liste déroulante


de choix
Objectif : pour la clé étrangère Ref Client de la table CommandeEnTete, gérer une liste déroulante avec
TRI sur Nom + Prénom pour choisir le client qui commande.
Num Commande Ref Client Date Commande
Pour choisir un client,
hors mis son Num client,
nous afficherons son Nom
et en plus son Prénom car
il y a des homonymes
(GALL).

Dans une première version de base, une fois le choix fait, continuer à afficher la valeur 3 dans Ref Client
Num Commande Ref Client Date Commande

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 46
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

A. Modifier propriétés Liste de choix des champs clés étrangères


1) Version de base pour la liste déroulante Ref Client

Mode Création
Table CommandeEntête, Champ Ref Client.
Onglet Liste de choix

Parmi les 3 colonnes (Num Client,


Nom et Prénom), la colonne liée est
le rang de celle qui est stockée dans
le champ Ref Client
(ici la 1ière , la valeur de Num Client
y est stockée).
C'est aussi cette 1 ière colonne qui est
affiché dans la liste (2 cm). C'est
mon choix temporaire ici, on va
8 cm (Pour 2 cm + 3 cm+ 3 cm) évoluer plus loin.

Contenu détermine ce qui va dérouler dans la liste déroulante (ici Num Client, Nom, Prénom de Client)
Pour la propriété Contenu, utiliser le générateur (…en fin de ligne) pour créer la Requête (ajouter
table Client, 3 champs dans l'ordre : Num Client, Nom, Prénom, tri sur Nom puis Prénom), fermer la
requête, OUI pour enregistrer le code SQL ci-dessous (ne pas saisir le texte ci-dessous)
SELECT Client.[Num Client], Client.Nom, Client.Prénom
FROM Client TRI
ORDER BY Client.Nom, Client.Prénom; OBLIGATOIRE

La valeur de la propriété Contenu est :


-soit le texte SQL définissant une requête dans laquelle on fait au moins un TRI
-soit le Nom d' une requête dans laquelle on fait au moins un TRI
-JAMAIS un Nom de table car dans ce cas nous n'aurions pas le TRI souhaité

Ensuite, passer en mode Affichage de la table,


enregistrer les modifications de la table (OUI),
tester la saisie d'un client.

Une fois le client saisi, l'affichage ci-contre est peu significatif (qui est
le client 3 ? Quel est son Nom ?).

Evolution, nous souhaitons :


- continuer à stocker dans Ref Client un Numéro de client
- afficher devant Ref Client son Nom concaténé (juxtaposé) à son Prénom pour différencier les
homonymes (GALL Alphonse et GALL Bill)

(Voir page suivante la nouvelle version)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 47
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
2) Version évoluée pour la liste déroulante Ref Client
Retrouver la fenêtre des propriétés du champ Ref Client.
Remplacer 2cm pour la première largeur de colonne (celle de Num Client) par 0 cm.

Tester en mode Affichage.


Nous ne voyons plus le Num Client (3) et suite à la
saisie, c'est la première colonne avec une largeur autre
que 0 qui est affichée : Nom (DURAND).

Problème : si on choisi la ligne GALL Alphonse, nous


ne verrons après la saisie que le Nom GALL affiché
sans pouvoir le différencier de GALL Bill !

Evolution : Nous souhaitons toujours avoir la première colonne (caché à 0 Cm) de Num Client mais
avoir dans une deuxième et dernière colonne le Nom en majuscule concaténé (juxtaposé par &) à un
espace (" ") puis concaténé au Prénom pour que ces 2 informations apparaissent ainsi après saisi.

Modifier la propriété Contenu


comme ci-contre qui définit ce
qui déroulera en utilisant le
bouton … en fin de ligne.
Nous construisons comme nous l'avons déjà fait une colonne calculée avec :
- à gauche de : un texte totalement libre qui est l'identification de cette
nouvelle colonne Nom et Prénom (ou Client qui commande si on veut)
- à droite de : un calcul utilisant la fonction Majuscule() (à trouver dans le
d'expression, rubrique Fonction, puis Fonctions intégrées, puis
colonne centrale Texte puis colonne de droite Majuscule).

Utiliser le bouton Affichage pour voir le futur contenu de la liste


déroulante. Fermer cette fenêtre, OUI pour enregistrer les modifications
SQL.
Nous n'avons donc plus que 2
colonnes, donc modifier
comme ci-contre.
Majuscule devient en
Anglais UCase pour
Up Case.

Tester :

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 48
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
3) Version permettant les Ajouts / Modifications / Suppressions assistés de la liste déroulante
Pouvoir choisir un client, c'est bien, mais comment, depuis l'environnement courant (ici la table), ajouter
ou modifier des clients de la liste déroulante ?

Access propose une nouveauté basée sur 2 nouvelles propriétés de la liste de choix :
Autoriser la modification de la liste : OUI
Nom du formulaire pour saisir des clients : Client
Fermer la table et la ré-ouvrir pour activer les 2 modifications ci-dessus.

Après saisie de ces 2 propriétés, lorsque vous déroulez la liste, vous obtenez un petit bouton en
bas ou haut de liste que vous cliquez et qui ouvre le formulaire Client.
On peut ajouter, (atteindre un nouvel enregistrement par)
ou modifier (se déplacer par les boutons ci-dessous puis modifier)

Premier , Précédent, Rang de l'enregistrement courant , Suivant, Dernier, Nouvel enregistrement

ou supprimer des clients puis fermer le formulaire Client.

On retourne AUTOMATIQUEMENT sur notre table CommandeEnTete, réutiliser la liste déroulante


qui est AUTOMATIQUEMENT mis à jour des ajouts, modifications et suppressions faits dans le
formulaire Client.

Tous les mécanismes de la liste déroulante testés ici au niveau de la table CommandeEnTete seront
hérités dans tous les formulaires qui seront construits sur cette table.

B. Exercice à faire…
 Faire de même pour Table CommandeLigneProduit, Champ Ref Produit, Onglet Liste de
choix pour saisir un produit commandé parmi les produits de la table Produit.

Ici, une fois le choix fait par la


liste déroulante, on affichera la
Désignation (1 seul champ ici
car toutes les désignations sont
différentes contrairement aux
noms des clients de l'exemple
précédent) dans Ref Produit.

N'oubliez pas que notre objectif primaire est toujours de stocker dans Ref Produit la valeur du champ
Num Produit (LOG001 pour le Clavier Logitech KZ Noir) de la table Produit même si cela ne se voit
pas sur la copie d'écran ci-dessus !!!

Gérer la propriété : Largeur liste


Gérer aussi les 2 propriétés :
Autoriser la modification de la liste : OUI
Nom du formulaire pour saisir des produits : Produit

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 49
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

 Remarque sur les listes déroulantes de clés étrangères:

Ce que nous avons fait peut être perçu comme ambigu : Pour Ref Produit par exemple :
Ce qui est stocké LOG001 n'est pas affiché et
Ce qui est affiché Clavier Logitech KZ Noir n'est pas stocké !

1) Correction pour la clé étrangère


Pour le champ Ref Produit de la table CommandeLigneProduit :

La 1° colonne Num Produit :


- n'est pas visible dans la liste déroulante (0cm mais existe), est toujours liée (rangée dans Ref Produit)
- n'est pas affichée après saisie donc c'est la colonne suivante (2°=Désignation) qui est affichée (mais pas
stockée dans Ref Produit)

Rappel : Ref Produit est Texte, Longueur 6 caractères donc "Imprimante laser Canon type 1" n'est pas le
contenu de ce champ !!!

 Ne pas gérer une liste déroulante pour la clé étrangère Ref Commande de la table
CommandeLigneProduit, nous utiliserons une autre technique pour assister la saisie de ces
valeurs.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 50
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch6. Bilan de l'application


1. Des Tables
 Pour information, voici le MCD (Modèle Conceptuel de Données) de cette application

 Des Tables avec Relations Clé Primaire - Clé Etrangère

 Des Clés Primaires (nommées Num Table si mono champ)


Mono-Champ Mono-Champ Mono-Champ MULTI-Champs (composée)
Type : NumAuto Texte 6 caractères NumAuto

 Des Clés Etrangères (nommées Ref Table visée)


à Liste déroulante à Liste déroulante SANS Liste déroulante

 Chronologie pour les tables


Dans ce TD, pour mieux comprendre la logique des tables nous n'avons pas respecté la logique normale des étapes qui doit être :
- Définir les champs de chaque table avec sa clé primaire simple ou composée.
- Définir pour chaque clé étrangère une liste déroulante de choix si besoin.
- Définir les Relations avec Intégrité référentielle entre les Tables sur des tables vides de données.
- Saisir les données dans les tables :
- soit directement dans les Tables (peu recommandé).
- soit par l'intermédiaire de Formulaires (recommandé car plus performant).

2. Des Requêtes
 Des Requêtes de Sélection
 Mono ou multi table
 Avec ou sans calcul

3. Des Formulaires
 Avec pour Source une Table ou une Requête
 Affichage Colonne simple (uniquement 1 enregistrement visible) ou Tabulaire (tableau de N enregistrements)
 Avec ou sans Calcul
Utiliser le fichier Fac05a2007.accdb pour la suite
Aller voir le Chapitre "Introduction aux Bases de Données et à ACCESS "
pour comprendre ce qui a été fait.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 51
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch7. Facturation: extensions à faire seul


1. Cahier des charges pour les Tables
On vous demande, sur la base de ce que vous avez appris dans les pages précédentes de créer :
Tables, Champs, Clés primaires, Clés Etrangères, Propriétés de champ
(Taille, Format, Liste déroulante pour les clés étrangères, Index, Null interdit)
et Relations entre les champs des tables.
De nouvelles données doivent être gérées dans cette application de Facturation.
Penser à utiliser les règles de nommage des tables et champs vues précédemment.
A. Table simple
1) Nous voulons gérer les Catégories de produits avec comme base une liste de
valeurs présentes dans un classeur Excel. Voir exemple déjà
Précisions : traité précédemment
Un Produit fait référence à 1 seule Catégorie. Une Commande fait
Une Catégorie fait référence à plusieurs Produits. référence à 1 Client
Gérer pour chaque catégorie le Numéro (clé primaire) et le nom Nom Catégorie.
On veut éviter qu'un utilisateur ne puisse saisir 2 fois (doublon) le même Nom de Catégorie.
Les données seront saisies au clavier. Créer la table Catégorie, modifier la table Produit car on veut
une liste déroulante pour choisir LA Catégorie de chaque Produit. Gérer la Relation entre ces 2 tables.
Créer aussi un formulaire sur la table Catégorie en assistant Formulaire.
2) Nous voulons gérer les 3 Fournisseurs des produits.
Précisions :
On souhaite gérer pour chaque Fournisseur, hors mis la clé primaire,
son Nom et sa Ville.
On souhaite éviter de confondre le nom et la ville du client avec le nom et la ville du fournisseur donc
nommer les champs : Nom Fournisseur, Ville Fournisseur. On veut éviter qu'un utilisateur ne puisse
saisir 2 fois (doublon) le même Nom de Fournisseur. On veut le nom de la ville toujours en majuscule.
Pour simplifier, on ne gère pas l'adresse, le code postal et d'autres informations qui pourraient être utiles.
Gérer la table Fournisseur et créer aussi un formulaire sur la table Fournisseur.
B. Table complexe
Un Produit fait référence à (peut être acheté chez) plusieurs Fournisseurs dans certains cas.
Un Fournisseur fait référence à (peut nous vendre) plusieurs Produits.
Voir exemple déjà traité : Une Commande fait référence à plusieurs Produits.
Un Produit fait référence à plusieurs Commandes.
1) Gérer des informations suivantes pour chaque couple Produit-Fournisseur appelé ProdFour.
- Prix d'achat hors taxe pour un produit proposé par un fournisseur.
- Délai de livraison en jours pour un produit proposé par un fournisseur
Voici à droite un exemple de prix et de délai de livraison
d'un même produit proposé par 2 fournisseurs.
Précisions : On souhaite, pour des raisons de cohérence, ne pas avoir 2 fois un même produit Produit1
proposé par un même fournisseur Fournisseur1. Gérer la clé primaire en conséquence. On souhaite
avoir les listes déroulantes pour choisir Produits et Fournisseurs. En saisissant 1.5 on veut afficher
1,50 Jours donc saisir 0.00" Jours" pour la propriété Format du champ Délai Livraison.
« A vous d'essayer... »
Fin du TD4

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 52
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2. Cahier des charges pour les Requêtes


Utiliser le fichier Fac06a2007.accdb pour la suite
Vous pouvez consulter la procédure de la correction du travail sur les Tables dans ce document.
Voir en fin de la table des matières le numéro de page.
A. Requête simple
Consulter les nouvelles tables et leurs données.
Voici la table Produit : 14 enregistrements.

Remarque : le produit SON002 n'as pas de valeur pour Ref Catégorie !!!

1) Requête "R16 Produits sélectionnés"


Question : Liste de produits composée de :
a) produits avec "imprimante" n'importe où dans la désignation et dont le prix est inférieur à 1000 €
et
b) produits de la catégorie Livre traitant
d' "access".

B. Requête multitable
1) Requête "R17 Produit et sa Catégorie"
Question : Liste des produits classée par Num Produit avec affichage de tous les champs de Produit
(y compris Ref Catégorie) et affichage du Nom de la catégorie de la table Catégorie.
Les 2 dernières colonnes
affichent les mêmes
valeurs mais n'ont pas le
même rôle.
Ref Catégorie permet de
choisir pour un Produit
sa catégorie.
Nom Catégorie affiche
la valeur de la table
Catégorie dépendante
(grâce à la Relation) de
la valeur du champ
Ref Catégorie.
Il n'y a QUE 13 enregistrements alors qu'il y en avait 14 en haut de cette page !!! Si l'on souhaite éviter le
doublon, c'est Nom
Catégorie que l'on
SON002 a disparu : pourquoi ? pourrait ne pas afficher.

Demander la réponse à l'enseignant si besoin.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 53
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2) Requête "R18 Produits moyenne prix achat"


Question : Liste des produits classée par Num Produit avec moyenne des prix d'achat des différents
fournisseurs.

Etape 1 : Liste des produits classée par Num Produit avec PLUSIEURS prix d'achat car plusieurs
fournisseurs par produit (pour certains).

Ici 2
Ici 3
Fournisseurs
par produit

17 enregistrements avec 1 doublon et 1 triplet

Etape 2 : Liste des produits classée par Num Produit avec Regroupement des mêmes produits et
calcul de la moyenne des prix d'achat des différents fournisseurs de produits.

Attention à bien
définir et limiter les
colonnes critères de
regroupement.
Ajouter par exemple
la colonne
Ref Produit pour
voir le problème
généré.
14 enregistrements seulement suite au Regroupement

Voici la fenêtre relation après ajouts des nouvelles tables :

Tables "techniques"
pour gérer lien N-N

Une Commande vend N Produits. Un Produit est fourni par N Fournisseurs.


Un Produit est vendu dans N Commandes. Un Fournisseur fournit N Produits.
Deux relations 1-∞ traduisent un lien N-N Deux relations 1-∞ traduisent un lien N-N

Une Commande est liée à au plus 1 Client donc Clé étrangère Ref Client
Un Produit est lié à au plus 1 Catégorie donc Clé étrangère Ref Catégorie

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 54
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

3. Cahier des charges pour les Formulaires


Utiliser le fichier Fac07a2007.accdb pour la suite
Vous pouvez consulter la procédure de la correction du travail sur les requêtes dans ce document.
Voir en fin de la Table des matières le numéro de page.
A. Formulaire simple
1) Formulaire "Fournisseur"
Créer un formulaire en mode Assistant,
en colonne simple avec
1 seul fournisseur présenté à l'écran
à un moment donné.
Utiliser les boutons en bas d'écran pour se déplacer
sur les fournisseurs.
Nommer Fournisseur ce formulaire
B. Formulaire Tabulaire basé sur une requête
1) Formulaire "Produit et sa Catégorie"

Ce formulaire sera crée en mode Assistant,


basé sur une requête existante
"R17 Produit et sa Catégorie",
présenté 'par Produit',
présenté en mode 'Tabulaire' (donc un tableau).
Nommé "Produit et sa Catégorie"

Tester avec ce formulaire l'ajout d'un nouveau Produit :


Cliquer ici
sur ligne * pour ajouter
ou cliquer ici sur Nouvel enregistrement vide.

Saisir le nouveau produit ci-dessous et saisir dans Ref Catégorie de Produit avec la liste déroulante sa
catégorie : la valeur Clavier.

Ref Catégorie stocke en réalité la valeur 3 mais affiche le Nom de la catégorie correspondante.
Nom catégorie est une information de la table Catégorie et non pas de la table Produit. Ne pas modifier
cette dernière colonne affichée automatiquement grâce à la Relation.
Fermer ce formulaire et vérifier dans la table
Produit (utiliser éventuellement le bouton
Actualiser) la présence de ce nouveau clavier
LOG003 rangé dans l'ordre de la clé primaire : Num Produit
C. Formulaire "Produit" à compléter
Ajouter un contrôle pour saisir-choisir la Catégorie du produit.
En mode Création, utiliser dans l'onglet Création le bouton
'Ajouter des champs existants' puis glisser sur le formulaire
Ref Catégorie. On obtient automatiquement la liste déroulante
définie dans le champ Ref Catégorie de la table Produit.

Passer en mode Affichage, sélectionner le dernier produit par

(SON002) et saisir sa catégorie Ecran. Fermer le formulaire.


www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 55
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch8. L'Etat
Utiliser le fichier Fac08a2007.accdb pour la suite
Impression des Données : 3 possibilités
Impression : Table (possible mais brut de présentation donc pas recommandé)
Impression : Formulaire (possible mais pas le plus adapté)
Impression : Etat (le plus performant)
Intérêts de l'Etat :
- représentation synthétique (synthèse par somme ou moyenne de groupements possibles)
- regroupement par catégorie et calculs (totaux et sous-totaux)
- vue d'ensemble des données
L'Etat imprime (Aperçu avant impression aussi) les Données provenant d'une Table ou Requête

1. Créer un Etat
A. Etat basé sur une table
1) Catalogue des produits basé sur la table Produit version1

a) Créer l'état
Depuis l'onglet Créer, bouton Assistant état :
- basé sur la table Produit
.Sélectionner : tous les champs sauf Ref Catégorie Suivant
.Critère de regroupement : (rien) Suivant
.Le tri sera effectué sur : Num Produit Suivant
.Présentation : Tabulaire, Orientation : Portrait Suivant
.Style : Access 2007 Suivant
.Titre (nom d'enregistrement) : Produit 01 sur table produit Terminer
Un Aperçu avant impression est proposé. Fermer l’aperçu et donc Mode Création.
Comme dans un formulaire, il y a :
- plusieurs Sections : 2 En têtes, 2 Pieds, le Détail
- des Contrôles: ne pas confondre les Etiquettes et les Zones de texte.
- une Boite de contrôles disponible : pour ajouter des contrôles
Passer en Mode Etat par (données visibles, PAS de mise en page possible)
Passer en Mode Page (données visibles ET mise en Page POSSIBLE)
Passer en Aperçu avant impression (vue page format A4 et Zoom)
Passer en Mode Création (données Invisibles mais mise en Page POSSIBLE).

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 56
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

b) Personnaliser l'état :
- modifier dans l’en-tête de l'Etat le titre en Produit : version1
- déplacer ce contrôle au centre de la largeur de la page
- tirer un trait sous ce titre avec le contrôle Trait de la boite des contrôles
- cliquer à gauche sur le bouton Affichage pour visualiser le résultat.
Enregistrer et Fermer
B. Etat basé sur une requête
1) Catalogue des produits basé sur la requête R12 Calcul TTC unitaire
Cliquer la requête "R12 Calcul TTC unitaire" à gauche dans la liste des requêtes pour la choisir
comme base du nouvel Etat.
Onglet Créer, bouton Etat et
affichage direct du résultat.
Enregistrer: Produit 02 sur
requête
Rapide mais non personnalisé. Calcul de la
requête
2) Synthèse des ventes de produits
Objectif : "Etat des ventes des produits avec : Voir procédure
- chiffre d'affaire (CA) total par produit page suivante …
- chiffre d'affaire total par catégorie de Produit
- chiffre d'affaire total Général."

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 57
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

a) Créer la requête Regroupement


Créer la requête basée sur :
- principalement la table CommandeLigneProduit qui contient quantités commandés et Ref produit.
- accessoirement la table Produit pour afficher Prix Ht et utiliser Prix dans le calcul Chiffre Affaire
- accessoirement la table Catégorie pour afficher Nom Catégorie et plus tard regrouper sur la Catégorie
Explication du principe : (ici les réels contenus de Ref Produit pour mieux comprendre)

Table CommandeLigneProduit (début des produits VENDUS)


Somme
Etape 1 : Créer la requête avec Liste des produits vendus triée par Ref Produit avec PLUSIEURS fois la
même Ref Produit et Prix Ht car produits commandés (vendus) plusieurs fois (pour certains).
= =

(début des résultats de la requête)

Etape 2 : Regrouper par Produit et calculer la Somme des multiplications Quantité X Prix Ht :
Déplacer la colonne Nom Catégorie une colonne à droite pour avoir une colonne vide pour futur calcul :
faire un clic sur le rectangle gris au dessus de Nom Catégorie puis faire un glissé de cette colonne …

2 colonnes à droite pour avoir ceci


Enregistrer la requête : R19 Chiffre Affaire par produit (car nous allons nous servir du générateur
d'expression et il faut toujours enregistrer avant pour qu'il soit à jour)

Cliquer dans la nouvelle colonne vide insérée et dans la ligne champ,


clic en haut d'écran sur le bouton et saisir:
- au clavier : CA HT par produit vendu : (futur nom de cette colonne calculée)
- à la souris : [CommandeLigneProduit]![Quantité] (à chercher dans + Tables)
- à la souris : [Prix Ht] (à chercher dans R19 Chiffre affaire par produit)
Enregistrer, Afficher, Fermer.

Visualiser le résultat.
a)- Il y a regroupement et Somme de Quantité x Prix Ht mais pas de regroupement par catégorie
b)- Il n’y a pas de total général des ventes tous produits confondus.
Les points (a) et (b) vont être gérés par l’Etat (voir exemple plus haut).
b) Créer l'état avec assistant
Créer un Nouvel Etat en mode Assistants Etat
- basé sur la requête R19 Chiffre affaire par produit
.Sélectionner tous les champs: (de la requête) Suivant
.Critère de regroupement : (Ref produit est déjà défini mais)
on supprime le regroupement sur Ref Produit
on ajoute le regroupement : Nom Catégorie Suivant
.Le tri sera effectué sur : Ref Produit (ne pas faire Suivant )
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 58
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Des calculs de synthèse
sur le groupement de
Nom Catégorie

Option de synthèse : OK Suivant


.Présentation : Echelonné, Orientation : Portrait Suivant
.Style : Access 2007 Suivant
.Titre (nom d'enregistrement) : Ventes par Catégorie et par Produit Terminer
Un aperçu de l’état final est proposé. Il y a des problèmes à gérer…

Fermer l’aperçu et retour en Création.


c) Personnaliser l'état :
On veut permuter le contenu de la
propriété Légende pour ces 2
Étiquettes car ici, erreur d'Access !
Clic droit sur Prix Ht, Disposition
Supprimer pour gérer
individuellement l'étiquette

Par la propriété Format, donner la


valeur Monétaire pour avoir 2
décimales et €
Supprimer cette Etiquette trop
'bavarde'
Déplacer comme sur l'exemple du
résultat (à voir 2 pages avant) et
ajouter 1 trait au dessus des 2
sommes, donner le format
Comme dans un formulaire, il y a : Monétaire à =Somme
- plusieurs Sections : 2 En têtes, 3 Pieds, le Détail
- une Boite à Outils disponible
- des Contrôles manipulables : ne pas confondre les Etiquettes et les Zones de texte.
Enregistrer, Aperçu avant impression (et éventuellement impression de cet Etat récapitulatif).

S'il vous reste du temps …


Gérer l'Etat suivant pour travailler de manière autonome…

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 59
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

3) Synthèse par Produit de la fourniture de produits par plusieurs Fournisseurs

Il existe dans le
regroupement de la
requête le calcul
Compte qui
compte le nombre de
lignes regroupées
(on comptera les
lignes regroupées de
n'importe quelle
colonne de la
requête).

Cet Etat montre :


- Pour chaque Catégorie, les N Produits listés
- Pour chaque Produit, la moyenne des N prix d'achat des N Fournisseurs, le délai de
livraison minimum des N fournisseurs et le nombre de Fournisseurs
Voir en correction dans Fac09a2007.accdb l'Etat "Moyenne Prix par Catégorie et par Produit" et
Sa requête "R20 Moyenne prix achat par produit"
4) Synthèse par Fournisseur de la fourniture de plusieurs Produits

Voir en correction dans Fac09a2007.accdb l'Etat "Moyenne Prix par Fournisseur" et


Sa requête " R21 Moyenne prix achat par Fournisseur"

2. Résumé des Etats


L'Etat est destiné à être Imprimé ou vu en Aperçu avant impression ou en mode Etat. On ne peut
donc saisir des données.L'Etat se comporte comme un Formulaire. Il a pour source une simple Table ou
mieux une Requête (multi tables avec calculs, tri,…). Il propose, notamment, des calculs de synthèse
(Somme, Moyenne,…) sur des Regroupements de données définis dans l'Etat (en plus des
regroupements de la requête).

Attention à la gestion de la largeur de l'Etat pour respecter les 21 cm de la page A4 sinon vous
aurez des pages supplémentaires imprimées presque vides pour ce qui dépasse des 21 cm de large.
L'Etat a une structure complexe composée de 3 En-têtes,
une zone Détail pour afficher N Lignes et
en fin 3 Pieds.
Il est donc conseillé de le concevoir automatiquement via
l'assistant puis de le personnaliser manuellement si besoin.
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 60
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch9. Les Formulaires Complexes


Utiliser le fichier Fac09a2007.accdb pour la suite

1. Formulaire avec Sous-formulaire


But 1: Créer un formulaire présentant, pour 1 Client, ses N Commandes
L’affichage ci-dessous permet de comprendre le lien Num Client Ref client

Correspondance Formulaire - Sous formulaire et Relation 1 – ∞.


Créer un formulaire Nouveau avec Assistant formulaire. Relation Père et ses Fils

1
Relation

= Père
Relation

1
1

Fils
Procédure à suivre en Assistant Formulaire :
Choisir (pour le Formulaire Principal FP) la table: Client OK
Champs affichés pour FP : tous les champs de Client (PAS Suivant)
ET choisir à nouveau (pour le Sous Formulaire (SF)) la table: CommandeEnTete
Champs affichés pour SF : tous (en initiation, on prend tous les champs, plus tard, nous
éliminerons 1 champ : voir page suivante) les champs de CommandeEnTete Suivant
Afficher : par Client en Formulaire avec SS-Formulaire Suivant
Disposition : Sous-formulaire en Tabulaire Suivant
Style :Access 2007 Suivant
Titre : Formulaire : Client et ses Commandes FP
Titre : Sous-formulaire : Client et ses Commandes SF Terminer

Tous les liens 1-N peuvent être représentés par un Formulaire et Sous-Formulaire :

Voir exemples pages suivante.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 61
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

But 2 : Créer un formulaire présentant, pour 1 En-tête de Commande, ses N Produits commandés
Titre Formulaire : Commande et ses Produits FP
Titre Sous-formulaire : Commande et ses Produits SF
A vous de jouer...

Père

Fils

Saisir, via le formulaire, de nouveaux produits commandés pour des en-têtes de commandes existantes.
Saisir, via le formulaire, de nouvelles Commandes complètes ( en-tête puis leurs produits commandés ).

Remarque: Le champ Ref Commande de la table CommandeLigneProduit n'a pas donné lieu dans
le TD précédent à une liste déroulante car un produit commandé est toujours saisi dans le cadre
d'un Sous-formulaire de CommandeEnTete.

Ainsi, Ref Commande de CommandeLigneProduit prend automatiquement la valeur de Num Commande


de CommandeEnTete : Ref Commande doit donc ne pas être affiché dans le sous-formulaire donc
ne pas choisir ce champ dans l'assistant au niveau du sous formulaire.
(Voir commentaire page précédente : "en initiation on prends tous les champs, plus tard …")
La version finale est donc :

1 Père et …

ses N Fils C'est cette barre de déplacement qui


permet de se déplacer sur les
Produits commandés. Elle indique
ici que nous sommes positionnés sur
le 1° produit commandé par rapport
aux 2 produits commandés de cette
Commande numéro 1

C'est cette barre de déplacement qui


permet de se déplacer sur les
Commandes. Elle indique ici que
nous sommes positionnés sur
la 1° Commande par rapport
aux 10 Commandes de cette
Application.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 62
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

De même pour les autres Formulaires / Sous-formulaires à venir, NE PAS afficher le champ
Refxxx de la table Fille (celle du Sous-Formulaire) lors de la création avec l'assistant.

Autre Formulaire et Sous Formulaire créé directement par Assistant:

 Version Simple basée sur 1 Table et 1 Table.

NON
affiché
car inutile

2. Formulaire avec Sous formulaire complexe


A. Version basée sur 2 Tables (pour FP) et 2 Tables (pour SF).

NON
affiché
car inutile

Pour le Formulaire Principal (FP), nous avons principalement la table Produit et en plus nous
accédons grâce au lien (Relation) à la table Catégorie pour afficher ici le Num Catégorie du Produit.

Pour le Sous Formulaire (SP), nous avons principalement la table ProdFour, nous n'affichons pas le
champ Ref Produit inutile, et en plus nous accédons grâce au lien (Relation) à la table Fournisseur pour
afficher ici la Ville du Fournisseur.

S'il vous reste du temps du TD, voir ou faire les 3 pages suivantes qui gèrent
des Sous-formulaires complexes.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 63
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Version basée sur 3 niveaux de Tables.


Les grands
pères

Les
pères

Les petits
fils

Cette organisation sur 3 niveaux hiérarchisés ne pose aucun problème à générer avec l'assistant en
choisissant les 3 tables, en éliminant de l'affichage les 2 clés étrangères Ref Client et Ref Commande.
Nous avons donc 3 générations présentées : Grands pères, Pères et Petits fils.
C. Version avec 2 sous formulaires de même niveau.
Objectif : Afficher chaque Produit avec sa liste de N Fournisseurs et sa liste de N Commandes.

1 1

N N

1) Créer le formulaire Principal et 1 Sous-formulaire


Créer comme d'habitude en Assistant formulaire 2 formulaires sur les tables Produit (Père) et ProdFour
(Fils) sans choisir la clé étrangère Ref Produit de ProdFour, Présentation Tabulaire pour le sous
formulaire et enregistrer ainsi les 2 formulaires :
Produit et ses Fournisseurs et ses Commandes FP et Produit et ses Fournisseurs et ses Commandes SF.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 64
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Modifier le résultat : Clic droit sur Etiquette
liée à
puis Disposition>Supprimer pour dégrouper
les 2 contrôles puis supprimer l'étiquette pour
faire de la place.
Réduire la largeur des contrôles (Ref
Fournisseur, Prix Achat, Délai) et la largeur
du contrôle de type sous-formulaire
pour faire de la place puis déplacer vers la gauche le grand contrôle SF pour le résultat ci-dessous.

2) Créer un formulaire pour être Sous-formulaire


Objectif : ajouter un 2° SF à droite du 1° (voir exemple
page précédente) en Disposition Tabulaire pour afficher la
liste des Commandes de chaque Produit du formulaire
Principal (FP).
Laisser le formulaire actuel ouvert et depuis le menu
Créer> Plus de formulaire> Assistant formulaire, faire un
formulaire sur la table CommandeLigneproduit basé
seulement sur les 2 champs suivants. FP

SF

(rappel : on ne prend pas la clé étrangère de la table Fille)


Disposition : Tabulaire,
Style : Access 2007
Titre : Liste des Commandes des Produits SF.
Fermer ce formulaire qui va servir de SF pour notre formulaire en
cours de construction.

3) Ajouter un contrôle de type Sous-formulaire sur le formulaire Principal


Depuis votre formulaire Produit et ses Fournisseurs et ses Commandes FP, en mode Création,

Vérifier que le bouton "Assistant Contrôle" est Orangé


donc Actif et choisir le contrôle Sous-formulaire
puis glisser à droite à la souris un contrôle SF de même taille
que le SF de gauche.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 65
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Les étapes de l'assistant SF :
1) Utiliser le formulaire construit précédemment Liste des Commandes des
Produits SF comme futur SF du formulaire principal.

2) Définir le lien entre la table Produit du formulaire principal et


la table CommandeLigneproduit du futur SF.
Ce lien est proposé automatiquement
sur la base de la définition de la
fenêtre Relation.

On peut garder la valeur proposée automatiquement


Ou définir manuellement par :
ce qui est équivalent

3) Enregistrer ce SF

Résultat Final du FP et ses 2 SF :


Gérer en mode Création la présentation pour obtenir ceci.

Nous avons donc 2 générations présentées : Pères (Produit en FP) et …


ses Fils (Liste des Fournisseurs en SF1) et ses Filles (Liste des ventes de CommandeLigneProduit en SF2 ).
On peut même ajouter dans le pied du Sous-formulaire2
un contrôle Zone de texte pour définir
pour la propriété Source contrôle
avec le générateur d'expression

la Somme des lignes Quantité du Sous-formulaire


On peut utiliser d'autres fonctions que Somme, voir dans le générateur :
Fonctions>Fonctions intégrée>RegroupementSQL :

Fin TD5

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 66
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Cette partie Graphique n'est à faire qui s'il
3. Formulaire avec graphique vous reste du temps en fin de TD5.
Comme dans Excel, il est possible de représenter les données de la base par des graphiques.
Les graphiques peuvent être insérés dans les Formulaires ou dans les Etats.
A. Graphique simple basé sur une Table
Objectif :

1) Créer le graphique
Menu Créer / Création de formulaire.
Choisir le contrôle Graphique et le poser sur le formulaire vide
Dans l'assistant démarré : Choisir la table : Produit
Choisir les champs : Num produit ; Prix Ht Suivant
Choisir le type de graphique : Histogramme 3 D Suivant
Cette présentation est proposée:
-Num produit de type texte est proposé comme axe des abscisses :

-Un calcul de Somme de Prix Ht est proposé, cela ne convient pas :


double clic sur ce bouton : Aucune pour synthèse

Cela donne ceci :

Clic sur le bouton en haut à gauche pour Aperçu du graphique :

Fermer l'aperçu puis Suivant et donner un titre au graphique : Les Produits et leur Prix et Terminer

Le résultat est un peu étonnant mais nous sommes en Mode Création donc ce n'est pas l'affichage
final. Passer en mode Formulaire (Affichage)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 67
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2) Modifier le graphique :
Double clic sur le Graphique pour appeler l'application Microsoft Graph.

Choisir de modifier l'axe des Abscisses :


a) Choisir dans la liste déroulante l'objet à modifier :

Autre manipulation pour modifier l'axe des abscisses : double clic


sur la zone à modifier : Ici double clic sur l'abscisse
b) Modifier le Format de l'axe des abscisses :

Dans les propriétés, Alignement à 90 degrés OK


Changer la couleur des barres de l'histogramme : rouge
Cliquer hors du graphique pour sortir de l'application Graph et retour dans Access en mode Création.

Passer en mode Page (Affichage final + modifications possibles), agrandir le graphique pour voir
toutes les valeurs de l'abscisse, passer en mode Formulaire (Affichage) pour obtenir :

Enregistrer le formulaire : Graphique 1 Prix des Produits et fermer ce formulaire.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 68
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
TD6
Nous travaillons éventuellement en Modélisation Entité – Association en TD6

Fin TD6 de Modélisation

4. Formulaire Menu Principal Début TD7

Utiliser le fichier Fac09a2007.accdb pour la suite

But : Créer un formulaire pour proposer le Menu des opérations possibles dans l’application
Facturation. (Aujourd'hui, les boutons de commande seront SANS effet).
Créer un Formulaire Nouveau en mode Création de Formulaire.Base du Formulaire: pas de table
Seule la section Détail s’affiche, l’agrandir à la taille voulue
Sélectionner Zone détail, Couleur Arrière plan = Bleu ciel

- Outil Étiquette : poser un contrôle avec :


Légende : Facturation en police Arial en taille 48
Ajuster le contrôle par clic droit : Taille – (Ajuster) au contenu.

Vérifier que l’outil 'Assistant contrôle' n’est pas actif (Actif = orangé, cliquer pour le désactiver si besoin)
- Outil Bouton de commande (sans Assistant contrôle): poser un contrôle
Le sélectionner puis le dupliquer 6 fois par Copier-Coller
Par les propriétés de chaque bouton (double Clic), donner les 6 légendes et pour le bouton du
bas, pour la propriété Image: choisir en fin de ligne par le générateur le nom de l’image Sortir
Passer en mode Formulaire:
Enregistrer le formulaire : A Menu principal (Je choisis le A devant Menu principal pour avoir ce
formulaire au début de la liste des formulaires classée par ordre alphabétique)
et l'exécuter (passer en mode Formulaire) .

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 69
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

5. Résumé sur les Formulaires


 Source du Formulaire :
- Des Formulaires alimentés en données par
une simple Table

- Des Formulaires alimentés en données par


une Requête (multi tables, calculs, tris, …)

- Des Formulaires alimentés en données par


aucune source (le Menu par exemple)

 Présentation du Formulaire :
- Colonne simple (dans l'assistant) pour présentation
d'1 enregistrement par
écran.
'Colonne simple'
devient en propriété
"Formulaire unique"

- Tabulaire (dans l'assistant) pour présentation


d'1 enregistrement
par ligne soit N
enregistrements /
écran.
'Tabulaire'
devient en propriété "Formulaire continus"

- Formulaire et Sous-formulaire pour présenter un lien


1 Père et ses N Fils : 1 Commande et ses N Produits.

Un formulaire principal en mode Colonne simple (Unique)


incluant un formulaire en mode Tabulaire (Continus)

- Formulaire sans données :


- des Boutons pour présenter le menu.
- un Graphique.

- voir plus loin formulaire Tableau Croisé Dynamique


au Chapitre 23

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 70
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 71
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch10. Les Macros


Utiliser le fichier Fac10a2007.accdb pour la suite

1. Macro de démarrage Automatique : Autoexec


Procédure : Onglet Créer, bouton Macro

Macro: autoexec

Action Argument Valeur


Démarrage automatique de cette macro à l'ouverture de l'application
BoiteMsg (ZoneMessage en Version 2010)
Message: Bienvenue …
Affiche une boite de message

OuvrirFormulaire
Nom formulaire: A Menu principal
Affichage: Formulaire
Nom filtre:
Condition Where:
Mode données:
Mode fenêtre: Standard
Afficher le premier formulaire de l'application : 'A Menu principal'
Agrandir (AgrandirFenêtre en V 2010)
Agrandir la fenêtre active (donc formulaire 'A Menu principal')

Enregistrer la macro sous : Autoexec


Fermer la macro et double-clic sur son nom pour l’exécuter.

Remarque : Cette macro Autoexec (de par son nom particulier) s'Execute Automatiquement au
démarrage de l'application et affiche le formulaire A Menu principal en plein écran.

2. Macros pour ouvrir formulaires et états


A. Créer la macro
Procédure : Onglet Créer, bouton Macro
Action Argument Valeur
Ouvrir formulaire
Nom formulaire: Client
Affichage: Formulaire
Nom filtre:
Condition Where:
Mode données:
Mode fenêtre: Standard
Agrandir (AgrandirFenêtre en V 2010)

Enregistrer la macro : Client


Fermer la macro.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 72
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Attacher une macro à un événement d’un contrôle Bouton


Depuis le formulaire A Menu principal en mode Création, sélectionner le bouton CLIENT et ses
propriétés événementielles, Attacher (choisir dans la liste déroulante) la Macro Client à l'événement
Sur clic (de souris) du bouton sélectionné CLIENT.
Faire de même les macros suivantes :
- Macro Commande avec action OuvrirFormulaire Formulaire Commande et ses produits FP
avec action Agrandir (AgrandirFenêtre en V 2010)
et l’attacher de même à l’événement SurClic du bouton Commande et ses produits

- Macro Ventes avec action :OuvrirEtat, Etat : Ventes par Catégorie et par Produit,
Affichage : Etat (pas en aperçu)
avec 2°action: Agrandir (AgrandirFenêtre en V 2010)
et l’attacher de même à l’événement SurClic du bouton Etat des ventes
- Macro Fermer formulaire avec action Fermer (FermerFenêtre en V 2010)
Type objet : Nom :
(volontairement, on ne précise pas Type et Nom pour que cette macro serve pour fermer un formulaire quelconque)

Remarque : lorsque le formulaire Menu principal est ouvert (dans une couche 1) c2: Client
et que l'on ouvre le formulaire Client (dans une couche 2), celui-ci est 'devant'
c1: Menu
ou 'dessus' le formulaire Menu principal.
Si on ne veut plus utiliser le formulaire Client et retrouver le formulaire Menu, il ne faut pas exécuter
l'action OuvrirFormulaire Menu (celui-ci est encore ouvert et on laisserait ainsi le formulaire Client
ouvert) mais il faut exécuter l'action Fermer le formulaire Client (fermer la couche 2) et retrouver
automatiquement le Formulaire Menu (en couche 1).

Les formulaires s'empilent à l'ouverture et se dépilent à leur fermeture.

I l faut TOUJOURS fermer un formulaire si on ne travaille plus avec. C'est une ERREUR grave d'ouvrir un nouveau formulaire et laisser
l'ancien ouvert sans raison .

Ajouter (sans assistant contrôle) un bouton libellé Fermer dans le pied du formulaire Client et y attacher
la macro Fermer formulaire.
Remarque : possibilité de copier-coller le bouton Fermer du formulaire Client vers d'autres formulaires
(Produits, facture,…) car il a même libellé et même macro quels que soient les formulaires.

- Macro Fermer menu avec action Quitter (QuitterAccess en V 2010)


(Quitter = Quitter Access donc fermer le formulaire Menu, l'application access et Access)
et l’attacher de même à l’événement SurClic du bouton Sortie

Compléter le menu pour gérer le lancement de tous les Formulaires et Etats disponibles…

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 73
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch11. Les recherches


Utiliser le fichier Fac11a2007.accdb pour la suite

Dans une application, il y a des traitements Spécifiques à 1 sujet (par exemple calcul du total d'une
commande) mais il y a aussi des traitements Classiques que l'on retrouve dans tous les sujets.

Les traitements classiques sur les enregistrements d'un formulaire sont :


 Ajouter un enregistrement :
Proposé automatiquement par Access :
 Modifier un enregistrement :
Proposé automatiquement par Access : saisir par formulaire et c'est tout. indique 'en cours de saisie'.
 Supprimer un enregistrement :
Proposé automatiquement par Access : sélectionner l'enregistrement complet par puis touche Suppr
 Trier (classer) des enregistrements :
Proposé automatiquement par Access : sélectionner un contrôle puis
 Changer d'enregistrement (premier, précédent, suivant, dernier) :
Proposé automatiquement par Access :
 Consulter un enregistrement :
Proposé automatiquement par Access : le Formulaire Colonne simple
 Calculer sur des enregistrements :
Proposé automatiquement par Access : la Requête et le Formulaire un peu.
 Lister tous les enregistrements :
Proposé automatiquement par Access : le Formulaire Tabulaire
 Imprimer des enregistrements :
Proposé automatiquement par Access : l'Etat

Toutes ces solutions proposées par Access sont entièrement satisfaisantes.

 Rechercher un enregistrement unique :

Proposé automatiquement par Access : mais saisie clavier du critère de recherche, pas de
proposition de valeurs par liste déroulante donc solution à améliorer par un développement personnel.
 Rechercher (Filtrer) plusieurs enregistrements :

Proposé automatiquement par Access : mais saisie clavier du critère de recherche, pas de
proposition de valeurs par liste déroulante, donc solution à améliorer par un développement personnel.

Il y a plusieurs types de recherche ou filtrage :


Cas Mono critère Multi critères Mono valeur du critère Multi valeurs du critère Mono résultat Multi résultats
1 X X X
2 X X X
3 X X X
4 X X X

Nous allons mettre en œuvre les cas 1, 2 et 4 pour commencer.

Nous présenterons seulement les résultats du cas 3.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 74
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

1. Recherche mono critère, mono valeur du critère,


mono résultat
A. Rechercher un client sur son Nom Prénom par liste déroulante
Objectifs :
Rechercher automatiquement un enregistrement complet CLIENT (Nom, Prénom, Adresse, ...) à partir
de son Nom-Prénom saisi dans une Liste Déroulante proposant tous les Noms-Prénoms Triés des
clients existants. 3 Etapes :
1) Définir une requête pour une liste de clients triée pour alimenter une liste déroulante
2) Définir un contrôle liste déroulante pour choisir un client à rechercher
3) Définir un programme exécuté sur un évènement pour rechercher après la saisie du client

Liste
TOUJOURS
Triée
pour
faciliter le
choix

Procédure :
1) Créer une requête sur la table Client avec Num Client, Nom, Prénom,
triée sur Nom puis Prénom
(donc la colonne Nom doit être à gauche du Prénom pour tri prioritaire)
nommée R22 Client pour liste déroulante.
Ce résultat alimentera la liste déroulante (propriété Contenu).
Le Nom-Prénom permettra de choisir un client (visible dans la liste déroulante)
Le Num Client sera le véritable critère de recherche (INvisible dans la liste
déroulante)
2) Ajouter une liste déroulante de recherche sur le Formulaire Client :

Vérifier dans l'onglet Création, Zone Contrôles que l'Assistant controle est ACTIF
( le bouton est orangé s'il est actif lorsque la souris n'est pas dessus, sinon cliquer dessus pour l'activer).

Ajouter, en mode assistant-contrôle, un contrôle Liste déroulante dans l’en-tête du formulaire


Client avec les réponses suivantes pour l'assistant :
- Je veux que la liste déroulante recherche les valeurs dans une table/requête
- Requête : R22 Client pour liste déroulante
- Les 3 colonnes pour liste déroulante 3 colonnes de
- Pas tri (déjà trié dans la requête) la liste déroulante
- Réduire à 0 cm la largeur de la colonne Num Client (Num Client) Nom Prénom
pour la cacher (on peut aussi la visualiser si besoin)
- Garder Num Client dans le contrôle (critère de recherche)
- Après sélection d’une valeur : Mémoriser la valeur
pour usage ultérieur (donc pas de stockage de cette saisie Le Contrôle
stocke
dans un champ d'une table) Num Client
- Etiquette pour la liste déroulante : Rechercher le client :
-

Ce Contrôle est donc Indépendant d'une quelconque source (champ).

Champ
Indépendant = Vide

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 75
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Par les propriétés du contrôle Liste Déroulante :
- nommer le contrôle par (onglet Toutes) la propriété Nom : ChoisirClient
- visualiser et vérifier les propriétés (onglet Toutes) définies via l’Assistant :
Origine (Table ou Requête), Contenu (nom de la requête ou sa définition SQL), Colonne liée (rang de
la colonne de la requête à garder dans le contrôle =1=Num Client),
Largeur des 3 colonnes (vérifier 0 Cm pour la première colonne donc Num Client à cacher)...
Tester le fonctionnement de la liste déroulante en Mode Formulaire (une saisie, pas encore une
recherche) puis passer en Mode Création pour définir la Recherche.
3) Attacher automatiquement une Macro à un évènement de la Liste Déroulante:
Toujours par les propriétés du contrôle Liste Déroulante, à partir de l’événement Après MAJ
(Après Mise à Jour donc après la saisie par la liste déroulante),
activer (en fin de ligne Après MAJ) le générateur ... (de Macros) et saisir la macro
Actions Arguments
AtteindreContrôle Nom du contrôle : Num Client
(Choix du contrôle dans lequel chercher)
TrouverEnregistrement (Visualiser l’aide Rechercher : = ChoisirClient
par F1 ) (choix de la valeur à chercher)

Ici, les crochets [ ] ne sont pas obligatoires. Ils sont


nécessaires lorsque le nom comporte des espaces.
exemple : [Choisir le client]
Explication de cette macro :
- AtteindreContrôle permet de positionner le curseur sur le contrôle (Zone de texte) Num Client pour
permettre la recherche sur le champ Num Client de ce contrôle.
- TrouverEnregistrement va rechercher dans le champ Num client de la Table Client le NUMERO
saisi dans le contrôle Liste Déroulante (nommé pour cela), l’argument Rechercher fait référence à
l’identificateur de la Liste Déroulante [ChoisirClient] dont le contenu est évalué par l’opérateur =
Si on ne met pas le =, c'est le mot "ChoisirClient" qui est recherché au lieu du contenu de ChoisirClient
Cette macro est déclenchée après la saisie dans la liste déroulante, donc par l’événement Après MAJ
(Mise à Jour car nouveau contenu arrivé par la saisie) de ce contrôle Liste Déroulante. Cette macro n'a pas de
nom car elle est incorporé à cette liste déroulante
Passer en mode Formulaire et tester la liste déroulante (qui permet de rechercher un client et de se
positionner sur l’enregistrement correspondant).

 Maintenir à jour le contenu de la liste déroulante par rapport aux Ajout/Suppression de client.
ATTENTION : Le principe dans Access est qu'à l'ouverture d'un
formulaire, chaque contrôle exécute les données de sa définition puis
garde cette définition même si les données liées à sa définition changent.
Donc, pour notre liste déroulante, à l'ouverture, elle défini par exemple

Si en utilisant le formulaire on ajoute le client AAA Alain


et supprime BON Marc, il faudrait que la liste déroulante
soit actualisée pour afficher en permanence les bonnes
données (les actuelles) disponibles à rechercher.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 76
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Auto-Actualiser la liste déroulante sur sa définition


Vérifier dans les propriétés de la liste déroulante son Nom : ChoisirClient
1) Créer une macro pour actualiser la liste déroulante
- Action BoiteMsg, (cette action n'a ici qu'un but pédagogique pour comprendre l'exécution de
l'évènement "Sur réception focus" à voir plus loin) Message : APRES le clic, AVANT le déroulé.
On supprimera plus tard cette action inutile.
- Action Actualiser, Nom contrôle : ChoisirClient pour que la liste consulte et exécute à
nouveau sa définition (requête R22 Client pour liste déroulante) donnant la liste ACTUELLE des
clients de la table Client).
Enregistrer la macro : Actualiser LD Form Client
2) Exécuter la macro automatiquement
On pourrait mettre un bouton sur le formulaire exécutant la macro ci-dessus et
demander à l'utilisateur de ne pas oublier de cliquer sur ce bouton avant d'utiliser la liste déroulante.
On préférera un système AUTOMATIQUE…
Attacher la macro à la liste déroulante sur l'évènement Sur Réception Focus (événement qui se
produit après le clic sur la liste, quand la liste "receptionne le curseur"
et avant que la liste des Clients soit déroulée) pour que la macro soit
exécutée automatiquement chaque fois que l'on clique sur la liste
déroulante et juste avant de dérouler les clients.

Tester en :
- en ajoutant un client (clic en bas de formulaire sur le bouton Nouveau),
saisir le Nom Prénom AAA Alain et l'enregistrer
dans la table Client par bouton Précédent
ou dans onglet Accueil par sans changer
d'enregistrement.

Noter que dans la barre grisée de gauche, le crayon indique que


l'on est en cours de saisie dans le formulaire et que les données saisies
ne sont pas encore transférées à la table source du formulaire (Client). Enregistrer supprime le 'crayon'
- tester la liste déroulante
- supprimer l'action BoiteMsg de la macro pour ne laisser que Actualiser qui sera invisible à l'exécution
et ajouter (optionnellement) l'action Bip (bip sonore) pour rappeler que la macro existe.
- supprimer le client AAA Alain à sélectionner par le formulaire : clic sur puis touche Suppr

Maintenant, faire de même sur le formulaire Produit pour rechercher un Produit. Fin TD7
2. Recherche mono critère, mono valeur du critère,
multi résultats
A. Rechercher des clients sur leur ville par liste déroulante
Objectifs :
Rechercher automatiquement les enregistrements de CLIENT (Num, Nom, Prénom, Adresse, ...) à partir
de leur Ville saisie (choisie) dans une Liste Déroulante proposant toutes les Villes (sans doublon)
Triées des Clients existants. 3 Etapes :
1) Définir une requête pour une liste de villes pour alimenter une liste déroulante
2) Définir un formulaire avec contrôle liste déroulante pour choisir une ville à rechercher et avec un
contrôle sous-formulaire pour afficher une liste de Clients
3) Définir un programme exécuté sur un évènement pour rechercher après la saisie de la ville

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 77
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Objectif : afficher les clients de la ville sélectionnée

Procédure
1) Une Requête pour alimenter la liste modifiable

Le champ Ville seulement.


Regroupement pour regrouper
en 1 seul exemplaire chaque ville.
Tri Croissant pour la liste.
Enregistrer :
R23 Client Ville unique

2) Un formulaire pour sélectionner la ville et afficher les clients


Créer un formulaire vide, bouton Création de Formulaire (basé sur aucune table/requête).
Vérifier que le bouton Assistant contrôle est désactivé
(pas orangé) et ajouter (sans assistant) sur ce formulaire une
liste déroulante :
Indépendante (= sans valeur pour la propriété Source donc
Indépendante des données des tables),
liste avec un Contenu (propriété) défini par la requête précédente (R23...) puis nommer (propriété Nom
) la Liste déroulante VilleSélection.

Enregistrer ce formulaire Clients à sélectionner par ville.

Garder ce formulaire ouvert et créer une requête pour filtrer les résultats…(voir page suivante)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 78
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
3) Une requête de sélection pour filtrer les clients
basée sur la table Client avec comme critère de sélection la valeur
du contrôle liste modifiable VilleSélection (avec Générateur)
du formulaire Clients à sélectionner par ville

Enregistrer et fermer cette requête : R24 Clients sélectionnés par ville

4) Une liste de clients dans le formulaire


Retourner au formulaire Clients à sélectionner par ville.
Ajouter en mode Assistant contrôle un contrôle de type Sous-formulaire basé sur la requête
précédente R24 avec tous ses champs (pour afficher les clients sélectionnés sur la ville) et enregistrer le
Formulaire généré : Clients sélectionnés par ville SF. (SF pour Sous Formulaire)

2 éléments sont créés par l'assistant :


- un contrôle de type SF nommé par défaut
Clients sélectionnés par ville SF
qui est un CONTENANT
(et son Etiquette)
- un formulaire en mode liste (de client) nommé
par défaut Clients sélectionnés par ville SF
qui est la source du contrôle SF précédent donc son contenu
Enregistrer et utiliser ce formulaire.

Le CONTENANT : le contrôle
Le contenu : le formulaire
Autre représentation : Formulaire Clients à sélectionner par ville et son Sous formulaire (SF):

Contrôle type Liste déroulante


Formulaire Requête
Contrôle de type SF
Formulaire source du source du
principal contrôle de type Formulaire
SF
R24Clients sélectionnés par ville
Clients à sélectionner par ville Clients sélectionnés par ville SF

En résumé : Le formulaire Principal (Clients à sélectionner par ville) contient un


Contrôle de type SF (Clients sélectionnés par ville SF) qui contient un
Formulaire en mode Liste (Clients sélectionnés par ville SF) qui est basé sur une
Requête sélection (R24 Client sélectionnés par ville).

Problème : Le contrôle sous formulaire ne "regarde" par défaut la valeur de la liste déroulante (ville)
qu'à l'ouverture du sous-formulaire (la ville est vide à ce moment là).
Si on saisit ensuite une ville, la liste des clients reste vide. Tester cette solution temporaire.
Solution : Il faut demander explicitement au contrôle SF d'Actualiser son contenu après chaque
nouvelle saisie de la liste déroulante Ville (donc Après la Mise à jour du contenu de la liste
déroulante).

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 79
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

5) Macro pour 'Actualiser' un contrôle Sous-formulaire


Nous avons déjà vu ce principe d'actualisation dans la recherche précédente.
Nous voulons créer une macro mais elle sera spécifique à ce contexte donc nous choisissons de générer
une macro sans nom qui sera 'Incorporée' dans ce formulaire.
A partir de l'événement Après MAJ de la liste déroulante
(donc après chaque nouveau choix de ville) utiliser le bouton pour créer la macro suivante :
Condition Action Arguments
Actualiser Nom contrôle : Clients sélectionnés par ville SF
. Le contrôle de type Sous-formulaire
Tester…

3. Recherche mono critère, multi valeurs du critère,


multi résultats
Exemple : rechercher les clients sur le critère de la ville pour plusieurs villes possibles : ici Tarbes et
Toulouse sélectionnées parmi 4 villes proposées : Albi, Pau, Tarbes et Toulouse

Cette fonctionnalité peut être mise en place dans


Access mais est relativement compliquée.

Nous ne la verrons pas pour le moment.

Si vous êtes intéressé, demander à l'enseignant…

4. Recherche multi critères, mono valeur du critère,


multi résultats
Exemple : liste des clients de la ville de Toulouse ET ayant une date d'entrée supérieure une date.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 80
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Copier le Formulaire Client à sélectionner par ville (clic droit sur ce nom) et
Coller en renommant Client à sélectionner par ville et date entrée
Ouvrir en mode création ce nouveau formulaire et supprimer le grand contrôle sous formulaire.
Ajouter un contrôle zone de texte pour saisir la date, le nommer DateSélection, propriété Format : Date,
abrégé, vérifier que Sélecteur de date est à : À certaines dates pour avoir le calendrier pour saisir.
Enregistrer ce formulaire.
Garder ce formulaire ouvert et créer une requête pour filtrer les résultats.

1) Une requête de sélection


basée sur la table client avec comme critère de sélection les valeurs du formulaire Clients à sélectionner
par ville et date entrée :
- contrôle liste modifiable VilleSélection (avec Générateur)
- contrôle liste modifiable DateSélection (avec Générateur) avec l'opérateur > en début de critère
Les 2 critères sont sur la même ligne Critère donc les 2 critères sont reliés par ET.
Pour un lien par OU, les mettre sur 2 lignes distinctes, la ligne critère et une ligne en dessous

Enregistrer cette requête : R25 Clients sélectionnés par ville et date


Fermer la requête.

2) Une liste de clients dans le formulaire


Retourner au formulaire Clients à sélectionner par ville et date entrée.
Ajouter en mode Assistant contrôle un contrôle de type Sous-formulaire basé sur la requête
précédente avec tous ses champs (pour afficher les clients sélectionnés) et enregistrer le Formulaire
généré : Clients sélectionnés par ville et date SF. (SF pour Sous Formulaire)

Problème : Le contrôle sous formulaire ne "regarde" par défaut les valeurs des 2 contrôles de critère
qu'à l'ouverture du sous-formulaire (les 2 contrôle sont vides à ce moment là).
Si on saisit une ville ou une date, la liste des clients reste vide. Tester cette solution temporaire.
Solution : Il faut demander explicitement au contrôle SF d'Actualiser son contenu après chaque
nouvelle saisie de la liste déroulante Ville et du contrôle Zone de texte date (donc Après la Mise à jour
du contenu de ces contrôles ).

3) Macro pour 'Actualiser' un contrôle Sous-formulaire


Nous avons déjà vu ce principe d'actualisation dans la recherche précédente.
Nous voulons créer une macro mais elle sera utilisée 2 fois ( chacun des 2 contrôles doit actualiser le SF ).
Nous choisissons de générer une macro AVEC un nom qui sera appelée dans les 2 contrôles du
formulaire.
Créer la macro ci-dessous.
Condition Action Arguments
Actualiser Nom contrôle : Clients sélectionnés par ville et date SF
La nommer Rechercher actualiser SF ville et date et la fermer.

Sur le formulaire, à partir de l'événement Après MAJ


de chacun des 2 contrôles de critère, associer la macro précédente.
Rappel : Après MAJ se lie Après MiseA Jour et non pas Après MAJuscule !

Enregistrer et Tester…

Utiliser le fichier Fac12a2007.accdb pour la suite

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 81
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch12. Les Formulaires complexes suite


1. Sous Formulaire basé sur Requête avec calculs
But: Facture grâce à la requête
Table ‘R26 Facture détail’,
base de ce
Sous-formulaire (voir
plus loin)

Ajouter 1 contrôle
Requête dans le pied du
Sous-Formulaire
(et PAS dans le pied
du Formulaire)
princpak

1) Créer une Requête nommée R26 Facture détail qui sera la source du SF
Remarque:
le champ Ref commande de la table CommandeLigneProduit doit être présent dans la requête pour
pouvoir assurer la relation avec Num Commande de la table CommandeEnTete (base du FP) : voir
relation ci-dessus
Ici, le Taux est
Penser à enregistrer la requête recherché explicitement
avant de faire la colonne dans la table Produit
calculée "Total du produit" pour car la colonne Taux
pouvoir accéder aux colonnes n'est pas présente dans
Quantité et Prix de la requête les colonnes de la
courante requête courante.

Désignation est ici inutile car Ref Produit affiche


2) Créer le formulaire Facture
en assistant formulaire avec la table CommandeEnTete (pour FP) et la requête R26 Facture détail
(pour le SF) en n'affichant pas Ref Commande dans le SF, avec pour le SF Disposition Tabulaire
(au lieu de Feuille de données proposée), style : Access 2007 et
enregistrer sous Facture et ses produits FP et Facture et ses produits SF.
En mode création, réduire les largeurs des contrôles comme sur l'exemple plus haut.
3) Ajouter en bas de facture la somme de la facture
Agrandir à la souris la zone Pied de formulaire sur le SF
(et pas Pied du formulaire principal)
et y ajouter un contrôle de type Zone de texte pour calculer
le total de la facture.

Définir la propriété Source contrôle en utilisant le générateur d’expression avec


Fonction /Somme puis dans le générateur d’expression,
sélectionner le formulaire courant (pas dans la liste des
Formulaire MAIS en haut de la liste de la colonne de
gauche) Facture et ses produits SF puis <Liste de
champs> puis Total du produit puis OK. Enregistrer, passer en mode formulaire et fermer.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 82
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch13. Introduction aux


Bases de Données et à ACCESS
ACCESS : Système de Gestion de Bases de Données sur micro-ordinateur. (SGBD)
1. Un Système de Gestion de Bases de Données
Un système de gestion de bases de données est un logiciel spécialisé dans l'organisation et la gestion
d'un nombre important d'informations contenues au sein d'un système informatique.
Il permet d'optimiser (facilité, rapidité, sécurité) les opérations d'ajout, modification, suppression,
classement, sélection, édition et impression sur des Applications de Bases de Données dans un contexte
Multi-utilisateur (Partage d'une application par plusieurs utilisateurs via le réseau).
 C'est une différence importante avec le Tableur qui est multi-utilisateurs en lecture mais mono-
utilisateur en écriture (donc pas de vrai partage collectif d'informations)
Il permet de développer des applications axées sur les Données. (nombre et complexité des Données)
 Le Tableur gère plutôt des Données simples en nombre limité

2. Une Application de Base de Données


C'est une application développée grâce à un SGBD qui contient les Traitements qui s'appliquent
sur des Données structurées en Base de Données.

3. Une Base de Données


Une base de données est un ensemble d'informations relatives à un thème et structurée d'une manière
bien spécifique dans le but d'en optimiser la gestion.
La base de données est composée de Tables.
exemple: Le SGBD Access gère une application de gestion d'une LIBRAIRIE utilisant une Base de
Données, base constituée des Tables : Livre, Editeur, Client, Commande, ...
Une table est constituée comme un tableau à deux dimensions :
- les lignes représentent les enregistrements (éléments d'un ensemble, individus d'une population),
- les colonnes représentent les champs (caractéristiques de chaque élément).
exemple: Table Livre.
Référence Titre Editeur Prix
123456 Excel pour Windows Inter-Edition 25 €
123698 Word pour Windows PSI 15 €
123581 VBA pour Windows SYBEX 26 €
541258 Access pour Windows Micro-Application 19 €
Une base de données Relationnelle comporte plusieurs tables ouvertes simultanément et
liées entre elles par des champs mis en relation.
(voir plus loin Modélisation des Données)
 --- C'est une autre différence importante avec le Tableur où les données sont organisées en
1 ou plusieurs Tableaux de Ligne-Colonne mais sans lien entre les tableaux ---

L'outil pour développer… l'application Traitements


de Type
4.SGBD…
Access Base de Données Base de
Table1

Table2
Données

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 83
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

ACCESS
ACCESS est un Système de Gestion de Bases de Données Relationnelles. (SGBDR)

Les Données contenues dans la base de données peuvent être traitées de 3 manières :
1. à l'aide de commandes SQL stockées dans des Requêtes
génération interactive dans environnement graphique (très simple et très puissant)

2. à l'aide d'actions stockées dans des Macros-programmes :


mode programmation niveau 1 (très simple mais limité en performances)

3. à l'aide d'instructions du langage VISUAL BASIC (VBA) stockées dans des procédures ou
fonctions : mode programmation niveau 2 (très performant mais complexe) VBA NON vu
dans cette
formation
Les produits majeurs de type SGBD sur microordinateur sont :
-Pour petites applications (mono-utilisateur ou moins de 20 utilisateurs simultanément):
ACCESS,
-Pour grosses applications (plus de 20 utilisateurs, performances +, sécurité +, pour le WEB):
ORACLE (la référence), SQL Serveur (MicroSoft), MYSQL (gratuit), PostGreSQL (gratuit),
SYBASE, …
ACCESS gère les éléments suivants :
La Table : elle stocke les Données de l'application.
La Requête : elle stocke des Traitements basés sur les données des tables.
Le Formulaire : il affiche un Ecran à l'utilisateur mis en forme pour gérer les données.
L'Etat : il met en forme les données pour les destiner à l'Imprimante.
La Macro : elle stocke des Actions simples pour définir des traitements.
Le Module : il stocke des Procédures et Fonctions en langage Visual Basic pour
Application (VBA) pour définir des traitements. C'est le mode Programmation.
A. Choix entre Access et Excel pour développer une application ?
Chaque logiciel a des avantages et des inconvénients, utiliser l'un ou l'autre en fonction :
- du contexte : caractéristiques des Données, caractéristiques des Traitements, Partage entre plusieurs
utilisateurs, volonté de guider l'utilisateurs, compatibilité avec d'autres applications.
- de votre niveau de formation : modélisation des Données nécessaire pour Access
Choisir Excel pour :
- sa simplicité, sa rapidité de développement, sa souplesse, ses graphiques, ses outils particuliers
(Solveur), sa grande diffusion, ses nombreuses fonctions prédéfinies de gestion, sa référence en
entreprise.
Mais ne pas oublier qu'Excel :
- gère mal la cohérence des données, ne gère pas le partage d'une application entre plusieurs utilisateurs,
ne gère pas les liens entre différentes populations, est limité dans le nombre et la complexité des données
Choisir Access pour :
- sa accessibilité par rapport aux autres SGBD, son aspect RAD (Développement Rapide d'Application),
sa référence en entreprise, sa grande diffusion, le modèle Relationnel établissant des liens entre les
populations, le partage des données entre plusieurs utilisateurs, le contrôle de la cohérence des données
(intégrité référentielle) , le nombre et la complexité des données gérées,
Mais ne pas oublier qu'Access :
- est limité à environ 15 utilisateurs simultanés en Partage, n'est pas un SGBD strict mais orienté
fichiers, n'est pas client-serveur de base et surtout nécessite d'abord une étape de modélisation des
données avant de développer.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 84
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch14. Correction extension: les Tables


A. Créer la table Categorie
Le produit CAN001 fait référence à la Catégorie Imprimante.
Le produit EPS001 fait référence à la Catégorie Imprimante.
Pour permettre de saisir la Catégorie d'un produit en la choisissant dans une liste, on défini une table
listant les différentes Catégories.
Onglet Créer, Bouton Table, Mode Création, Nom : Catégorie
Nom du Champ Type de données Propriété du champ
Num Catégorie NuméroAuto
Nom Catégorie Texte Taille : 20
Indexé : Oui sans doublons pour interdire de saisir 2 fois
Imprimante par exemple
Null interdit : OUI donc vide interdit donc saisie
obligatoire
Vérifier que vous avez géré la clé primaire sur Num Catégorie.
Relations :
Une catégorie de produit ne pointe pas vers 1 seul Produit ou 1 seul Client ou 1 seule Commande ou
1 seul Produit commandé donc pas de clé étrangère vers 1 clé primaire d'une autre table.
Catégorie n'est pas une table Fils pointant (référant) vers 1 Père mais
Catégorie est une table Père pointée (référée) par plusieurs Fils (plusieurs Produits).
Enregistrer la table : Categorie (Règle : Première lettre de chaque mot en majuscule, sans accent, sans
espace, au singulier) et fermer cette table.
Saisir les données comme dans l'exemple ci-contre.

Créer aussi un formulaire Catégorie par l'assistant.

B. Modifier la table Produit


Un Produit fait référence à 1 seule Catégorie (Fils et son Père).
Produit est une table Fils donc ajouter une clé étrangère
Ref Catégorie pour future Relation avec Num Catégorie :
Type : Numérique, Entier long (compatible avec ).
Null interdit : NON donc vide autorisé donc saisie facultative
(noter éventuellement OUI pour obliger la saisie)
Définir pour Ref Catégorie une liste déroulante pour effectuer les saisies par choix de valeur de Catégorie.

Remarque : Si aucune des 2 tables Catégorie et Produit n'existait, l'ordre de création serait :
D'abord Catégorie car c'est une table Père et les Pères naissent avant leurs Fils.
Ensuite Produit car c'est une table Fils pointant vers un Père et les Fils naissent après leur Père

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 85
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Tirer la relation entre les tables
et penser à cocher Intégrité
référentielle pour activer cette
vérification (?) qui se manifeste
par le 1 et ∞ sur le lien.
Saisir la référence de la Catégorie par la liste déroulante pour tous les produits sauf pour Son002
Saisie facultative : voir
C. Créer la table Fournisseur Null interdit : NON
Onglet Créer, Bouton Table, Mode Création, Nom : Fournisseur
Nom du Champ Type de données Propriété du champ
Num Fournisseur NuméroAuto
Nom Fournisseur Texte Taille : 20
Indexé : Oui sans doublons pour interdire de saisir 2
fois le même fournisseur par exemple
Null interdit : OUI donc vide interdit donc saisie
obligatoire
Ville Fournisseur Texte Taille : 20
Format : > (pour majuscule)

Vérifier que la clé primaire est sur Num Fournisseur.

Relations :
Un fournisseur de produit ne pointe pas vers 1 seul Produit ou 1 seul Client ou 1 seule Commande ou
1 seul Produit commandé ou 1 seule Catégorie donc pas de clé étrangère vers 1 clé primaire d'une autre table.

Enregistrer la table : Fournisseur (Première lettre de chaque mot en majuscule, sans accent, sans espace,
au singulier) et fermer cette table.
Créer aussi un formulaire Fournisseur par l'assistant.
Il suffit d'1 cas pour nous
D. Créer la table Intermédiaire ProdFour obliger à gérer le problème.
Relations :
Un Produit fait référence à (peut être acheté chez) plusieurs Fournisseurs dans certains cas.
Un Fournisseur fait référence à (peut nous vendre) plusieurs Produits.

Nous sommes dans le cas Frères - Sœurs vu précédemment (page 10):


Un Frère peut avoir de 0 à N Sœurs, une Sœur peut avoir de 0 à N Frères FRERE SOEUR
Pour gérer cette relation, on ajoute une nouvelle table intermédiaire avec x x
x x
un champ Ref Frère un champ Ref Soeur D'éventuels champs x x
contenant la valeur de contenant la valeur de dépendants de frère x x
l'identification de Frère l'identification de Sœur ET sœur.

Clé primaire Clé étrangère Clé étrangère Clé primaire


SANS doublon AVEC doublons AVEC doublons SANS doublon
"Père" "Fils" "Fils" "Père"

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 86
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Donc pour nos Produits et Fournisseurs:

Produit Fournisseur
Le produit ACE001 Le fournisseur 2
est fourni fournit
par 1 et 2 ACE001 et ACE002

Cette solution permet : ProdFour


Un Produit fait référence à (peut être acheté chez) plusieurs Fournisseurs.
Un Fournisseur fait référence à (peut nous vendre) plusieurs Produits.
Définitions de la table ProdFour: ce nom intègre les 2 tables croisées : Produit et Fournisseur

 Clé étrangère : Ref Produit et sa liste déroulante

 Clé étrangère : Ref Fournisseur et sa liste déroulante

 Clé primaire composée de Ref Produit + RefProduit

C'est cette clé primaire sur les 2 champs Ref Produit + Ref Fournisseur qui interdit un doublon sur
le couple ACE001 + 1

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 87
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

E. Tirer les Relations avec Intégrité Référentielle:


Tirer les relations entre les tables et penser à cocher Intégrité référentielle pour activer cette
vérification (?) qui se manifeste par le 1 et ∞ sur le lien.

F. Modèle Conceptuel de Données (MCD) à la source du


Modèle Physique Access

MCD Facturation
dessiné avec le logiciel gratuit Looping.

(voir enseignant pour obtenir ce logiciel si besoin)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 88
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch15. Correction extension: les Requêtes


Utiliser le fichier Fac06a2007.accdb pour la suite
A. Requête simple
Consulter les nouvelles tables et leurs données.
Voici la table produit : 14 enregistrements.

Remarque : le produit SON002 n'as pas de valeur pour Ref Catégorie !!!
1) Requête "R16 Produits sélectionnés"
Question : Liste de produits classée par Num Produit et composée de :
a) produits avec "imprimante" n'importe où dans la désignation et dont le prix est inférieur à 1000 €
et
b) produits de la catégorie Livre traitant
d' "access" : attention à ne pas
sélectionner un clavier avec une
désignation " Clavier accessible"

Solution : requête basé sur la table Produit avec 4 critères de sélection.


La sélection pour "Livre" est obtenue par 4 dans Ref Catégorie

B. Requête multitable
1) Requête "R17 Produit et sa Catégorie"
Question : Liste des produits classée par Num Produit avec affichage de tous les champs de produit
(y compris Ref Catégorie) et affichage du nom de la catégorie du produit

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 89
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Solution : requête basé sur les table Produit et Catégorie Liées.

Il n'y a QUE 13 enregistrements !!! SON002 a disparu : pourquoi ?


Solution : SON002 à disparu car le lien Ref Catégorie - Num Catégorie est
sans effet car ce produit stocke (vide) dans Ref catégorie qui ne peut
être retrouvé = par le lien dans NumCatégorie de la table Catégorie.

2) Requête "R18 Produits moyenne prix achat"


Question : Liste des produits classée par Num Produit avec moyenne des prix d'achat des différents
fournisseurs.

Etape 1 : Liste des produits classée par Num Produit avec PLUSIEURS prix d'achat car plusieurs
fournisseurs par produit (pour certains).

17 enregistrements avec 1 doublon et un triplet sur Produit

Etape 2 : Liste des produits classée par Num Produit avec regroupement des mêmes produits et
calcul de la moyenne des prix d'achat des différents fournisseurs.

14 enregistrements seulement
car le doublon est regroupé en 1 enregistrement et le triplet est regroupé en 1 enregistrement.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 90
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch16. Correction extension : Formulaires


A. Formulaire simple
1) Formulaire "Fournisseur"
Onglet Créer, Bouton Plus de formulaire, Assistant
Choisir la table Fournisseur et tous ses champs
Choisiren colonne simple et nommer Fournisseur
Choisir style Access 2007 (ou autres).
Ici, on ne personnalise pas le résultat de l'assistant

B. Formulaire Tabulaire basé sur une requête


1) Formulaire "Produit et sa Catégorie"

Onglet Créer, Bouton Plus de formulaire,


Assistant
Choisir : la requête R17 Produit et sa Catégorie
Choisir : tous ses champs
Choisir : en Tabulaire et
nommer Produit et sa Catégorie.

Ici, on ne personnalise pas le résultat de


l'assistant

C. Formulaire produit à compléter


Ajouter un contrôle pour saisir-choisir la Catégorie du produit.
En mode Création, utiliser dans l'onglet Création le bouton 'Ajouter
des champs existants' puis glisser sur le formulaire
Ref Catégorie.
Passer en mode Affichage, sélectionner le dernier produit par
(SON002) et
saisir sa catégorie 1-Ecran

Fin des extensions à faire sans assistance du document.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 91
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch17. Des erreurs à ne pas faire


 Proposer de modifier la valeur de la clé primaire d'un enregistrement

et surtout pas par liste déroulante proposant les autres numéro d'élève.
On n'identifie pas un enregistrement par l'1 des autres enregistrements !
La valeur de la clé primaire, une fois attribué à un enregistrement et donc pointée par d'autres
enregistrements d'autres tables, n'est généralement JAMAIS modifiée.
(Imaginer, si on changeait votre numéro de Sécurité Sociale, les conséquence qui cela entrainerait !)

 Proposer une liste déroulante NON triée :

Difficile de choisir une personne parmi N si pas trié !

 Ne pas afficher directement des Données brutes de présentation des Tables ou Requêtes
mais plutôt les afficher par l'intermédiaire de Formulaires qui les mettent en FORME.

Mise en forme :

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 92
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch18. Gestion des Images dépendantes


d'Enregistrements d'une Table
L'objectif est d'afficher une image différente dans un Formulaire ou
dans un Etat pour chaque enregistrement d'une Table.
Les 3 solutions proposées vont de la plus simple V1 (et la moins
performante) à la plus complexe V3 (et la plus performante).
Cependant, je propose de sauter ce Chapitre pour voir au Chapitre
suivant une autre technique plus simple pour gérer une image par
enregistrement : Champ de type Pièce jointe

1. Images et Table : Version1 basée


sur Champ OLE Utiliser le fichier
A. Gérer un champ OLE Fac13a2007.accdb
Dans la table Produit, ajouter un champ Photo de type Objet OLE:
Le type Objet OLE permet de stocker un Objet (tel qu'une feuille de
calcul Excel, un document Word, des graphiques, des sons, des images ou
toute autre donnée binaire) dans une table.
Si la définition du champ OLE est facile, la saisie est plus
compliquée :
- En mode Affichage des données de la table
Produit, un clic droit sur le champ Photo du 1°
produit permet de choisir Insérer un objet… puis par la fenêtre de Parcourir de choisir un
fichier image puis OK. Malheureusement, cette procédure génère l'affichage suivant
Package qui ne permettra pas l'affichage de l'image dans le formulaire !!!
Le bon résultat de la saisie doit afficher Image ou Image bitmap dans le champ Photo.
- Pour contourner ce problème (si vous avez une solution, je suis preneur), nous allons
saisir en faisant un Coller dans le champ Photo. Il faut donc une image à copier, plusieurs cas :
- depuis une image du site Google-Image, clic-droit Copier ou voir dossier "Images produit" fourni
- depuis le document Word fourni 3 images pour coller dans access.docx dans lequel on a inséré
des images depuis des fichiers image de nos fichiers de notre disque, clic-droit sur l'image de la
page word, Copier
- Un cas qui ne marche pas : depuis l'explorateur de fichier, sur un de nos fichiers image, clic-
droit Copier NE permettra pas l'affichage dans le formulaire.
Donc, une fois le presse-papier chargé par un Copier, faire un Coller sur le champ Photo en
mode Affichage des données. La photo n'est pas visible, seul le mot Image apparait.
En plus des problèmes de saisie, nous avons des problèmes de taille de l'application Access.
En effet, pour 3 images collées (tailles de ces 3 fichiers : 40ko + 50 ko +50 ko = 140 ko) depuis le
fichier Word, l'application croit de 1.5 Mo soit environ de 500 ko par image.
B. Gérer un contrôle de formulaire pour afficher l'image
Depuis le formulaire Produit en mode Création, cliquer Ajouter des champs existants puis glisser le
champ Photo sur le formulaire. Un contrôle de type 'Cadre d'objet dépendant' (dépendant de chaque
enregistrement) est ajouté. La source du contrôle est le champ Photo de la table. Gérer la propriété
Mode affichage à Zoom ou Echelle. La saisie peut se faire dans la table ou dans le formulaire, en
mode affichage, par clic droit sur la zone d'image puis par Coller (après avoir fait un Copier…).
Limitation de cette version : la manière de saisir et la taille du fichier.accdb qui croit de 500k par
image.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 93
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2. Images et Table : Version 2 basée sur Champ Texte


et Macro d'affectation
Exemple : Formulaire Représentant . Il s'agit encore de gérer une image changeant à chaque
enregistrement d'un formulaire.
Le principe est différent de celui de la version1 car ici on ne stocke pas les
images dans un champ de la Table mais à l'extérieur de l'application
Access dans un dossier nommé 'images' situé sous le dossier 'Access'
contenant l'application 'Facxxa2007.accdb' courante. Dossier 'images' fourni.
Ce dossier termine un chemin de dossiers depuis la racine d'un disque :
exemple : C:\MesDocuments\Access\images.

C'est le nom de l'image qui est


enregistrée dans un champ de type
TEXTE d'une table. (table
'Représentant', champ 'NomPhotoRep').
exemple de contenu : "Dupond alain.jpg"
Table 'Représentant' fournie.
Formulaire 'Représentant' fourni.
L'affichage sur le formulaire est basé sur les 2 données suivantes :
1. le nom de l'image 'Dupond alain.jpg' stocké dans le champ de la Table

2. le fichier-image Dupond alain.jpg stocké dans le dossier 'images'.


L'image est affichée sur le formulaire (ou Etat) par
un contrôle de type Image nommé ici
'ImgPhotoRep'. La propriété 'Image' (le nom de
l'image) n'est pas saisie, normal, ce contrôle ne va
pas afficher toujours la même image.
Le principe consiste, par une macro, à affecter à la
propriété 'Image' du contrôle 'ImgPhotoRep' du
formulaire, un nom d'image stocké dans le champ 'NomPhotoRep' de la table 'Représentant', nom
d'image précédé du chemin de dossiers permettant d'atteindre le fichier stocké dans le dossier 'images'.
exemple du chemin complet et du fichier :
C:\MesDocuments\Access \images\ Dupond alain.jpg

Ce chemin peut être découpé en 2 parties :


1. C:\MesDocuments\Access qui est le dossier où est stockée ' Facxxa2007.accdb'. Cette partie du
chemin peut être déterminée automatiquement Module1 à compléter
par une instruction VBA :
'CurrentProject.Path' signifiant chemin (Path)
de l'application Access courante (CurrentProject).

Seules les 3 lignes de VBA du Module1


ci-contre seront utilisées.
On utilisera une fonction
'CheminApplication()' retournant ce chemin, fonction déclarés dans un Module VBA.
L'intérêt du chemin automatique est que l'application peut être déplacée sur une autre machine,
avec son sous-dossier 'images' et fonctionner correctement.
Pour créer un Module, depuis votre application, utiliser le menu
Créer>dérouler la liste sous Macro > Module ou afficher l'Editeur
Visual Basic par Alt-F11 comme sous Excel. Un module1 est déjà
présent, saisir dans la fenêtre de droite les 3 lignes de code ci-dessus.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 94
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
2. L'autre partie du chemin est : \images\ qui est une constante pour l'organisation que nous avons
choisie (toujours un dossier 'images' sous le dossier de l'application .accdb).

Donc, pour affecter, à la propriété 'Image' du contrôle 'ImgPhotoRep', la valeur


C:\MesDocuments\Access \images\ DupondAlain.JPG écrire 'logiquement' :
[ImgPhotoRep].[Image] = CheminApplication() & "\images\" & [NomPhotoRep]

Hors programmation en VBA, cette affectation est à gérer sous Access par une macro qui utilise l'action
'DéfinirValeur' (= affectation) avec 2 Arguments :
Elément : [ImgPhotoRep].[Image] Affectation '='
Expression : CheminApplication() & "\images\" & [NomPhotoRep]

Attention, pour trouver cette action DéfinirValeur dans la liste déroulante de la macro, il
faut Afficher toutes les actions de cette liste par le bouton ci-contre.
Cette affectation ne doit être faite que si le 'NomPhotoRep' n'est pas Vide,
on utilise donc la partie conditionnelle de la macro avec la condition (voir ce bouton
pour afficher la colonne Condition) : [NomPhotoRep] Est Pas Null Null signifie VIDE

Inversement, si le [NomPhotoRep] est Vide, on utilise aussi la partie conditionnelle de la macro avec :
[NomPhotoRep] Est Null et on affecte le nom d'une image spéciale "Blank.jpg" :
CheminApplication() & "\images\" & "Blank.jpg"

Résume de la macro [Macro incorporée] d'affectation :

Une macro qui effectue un traitement (Quoi faire), c'est bien !


Mais Où (à partir de quel élément Formulaire ou Contrôle) et Quand (à partir de quel évènement de
quel élément) lancer l'exécution de cette macro ?

Cet aspect Où/Quand est parfois plus difficile à déterminer que le Quoi faire.
Nous souhaitons réafficher l'image chaque fois que le
Formulaire active (affiche) un nouvel enregistrement.
C'est à partir du Formulaire et
de l'évènement Sur activation que sera déclenchée la
macro sans nom car [Macro Incorporée].

Donc :
- le Formulaire, par son évènement Sur activation, déclenche
- une Macro [Incorporée] au formulaire qui, suivant que le champ 'NomImageRep' de la table
'Représentant' est Vide ou pas,
- affecte, à la propriété 'Image' du contrôle 'ImgPhotoRep' du Formulaire, la valeur du champ
'NomImageRep' contenant un nom de fichier ou l'image spéciale 'Blank.jpg,
- tout en gérant le chemin de dossiers menant aux fichiers des images
(C:\MesDocuments\Access\images\) grâce à
- la fonction VBA 'CheminApplication()' utilisant l'objet 'CurrentProject' et sa méthode
'Path', fonction stockée dans un module VBA (Module accessible par ALT+F11).

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 95
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
En plus, on pourra Copier-Coller les 2 lignes de la macro et attacher une nouvelle macro [Incorporée] à

l'évènement 'Sur sortie' du contrôle 'NomPhotoRep' pour que suite à la validation


par la touche Entrée de la saisie manuelle du nom du fichier (donc en sortant du contrôle), l'image soit
réaffichée immédiatement (sans attendre l'évènement Sur activation du formulaire).

Les limitations de cette version2 sont :


- Les noms des images doivent être saisis manuellement au clavier dans le contrôle du formulaire.
- Il ne faut pas faire d'erreur de saisie pour que :
la correspondance NomImage du contrôle  NomFichierImage soit parfaite…!

On peut lever les 2 contraintes ci-dessus par l'utilisation de la version3 ci-dessous mais c'est un peu plus
compliqué à générer…

Résumé Graphique de cette version 2 :

Table Représentant

Saisir
dans
Formulaire Représentant
Type de contrôle : Nom : NomPhoto
Zone de texte Source : NomPhotoRep

Type de contrôle : Nom : ImgPhotoRep


Image Image : (aucune !)

Image : C:\MesDocuments\Access\images\DupondAlain.jpg

Macro (incorporée)
Logique : ImgPhotoRep.Image = CheminApplication() & "\images\" & [NomPhotoRep]

Technique :

"Affecter"

Condition d'affichage :
Si [NomPhotoRep] est pas VIDE alors
Affecter l'image du champ [NomPhotoRep] C:\MesDocuments\Access
Sinon
Affecter l'image particulière BLANK.jpg
Fin TD8

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 96
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

3. Images et Table : Version 3 basée sur Champ Texte


et Procédure-VBA d'affectation
En TD, vous ne gérerez pas cette version 3 mais vous avez les explications si besoin.
Exemple : Formulaire Client et photo en version3. Il s'agit encore de gérer une image
changeant à chaque enregistrement d'un formulaire.
Le principe est le même que celui de la version2, on stocke toujours les
images à l'extérieur de l'application Access dans un dossier nommé
'images' situé sous le dossier 'Access' contenant l'application 'Facxxa2007
.accdb'.
L'objectif est ici :
- de ne plus avoir à saisir manuellement au clavier le nom de l'image
dans un contrôle 'NomPhoto' de type texte.
- mais de choisir à la souris un fichier de NOTRE dossier 'images'

Les Ajouts, Modifications et Suppressions sont automatisés via 2 boutons.

PUISSE.jpg
Le contrôle peut ne plus être affiché car ni sa
lecture, ni son écriture manuelle ne sont nécessaires.
L'ajout / Modification, via le bouton, ouvre la fenêtre suivante qui :

 affecte automatiquement le nom


exact du fichier choisi au champ
'NomPhoto' de la table Client.

Cette fenêtre, qui est la caractéristique


principale de cette Version3, est basée
sur l'environnement de programmation
VBA suivant :
Le module

fait
référence à une ressource de Windows
(Définition de la Boite de dialogue
Ouvrir un fichier dans un fichier .dll) et
définit la fonction Function OuvrirUnFichier (…) qui sera appelée dans le module du formulaire Client

par la procédure suivante :


Private Sub BtAjoutModif_Click() associée au Clic du bouton

La logique de traitement, hors fenêtre ci-dessus, est ma même que celle de la version2 mais ici elle est
traitée en VBA avec gestion des erreurs…

ATTENTION : La programmation utilisée nécessite un paramétrage particulier d'Access au niveau de


l'éditeur VBA.

Vous devez ouvrir l'éditeur VBA (ALT+F11), menu OUTILS > Références… et disposer (au moins)
des Références ci-dessous :

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 97
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Si besoin, complétez vos références…

Voir le code VBA commenté sur le fichier.accdb pour explications complémentaires :


Exemple de code commenté pour ajouter ou modifier l'image.
Private Sub BtAjoutModif_Click()
Dim NomFichier As String

' Gestion des erreurs


On Error GoTo Catch01

' récupérer le chemin physique de la photo


' par la boite de dialogue OuvrirUnFichier définie dans le module 'BoiteDialogueOuvrirFichierImage'
NomFichier = OuvrirUnFichier(Me.Hwnd, "Sélectionner une photo :", 2)
'Explication des paramètres
'Handle = le handle de la fenêtre (Me.Hwnd)
'Titre = Titre de la boîte de dialogue
'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction)
'1 = Chemin complet + Nom du fichier
'2 = Nom fichier seulement

' si la boite renvoie un nom de fichier non nul


If Len(NomFichier) > 0 Then
' pour TypeRetour = 1 (Chemin complet + Nom du fichier)
'ranger le chemin + nom du fichier dans le controle i mgPhoto pour afficher la photo
'Me.imgPhoto.Picture = NomFichier

' pour TypeRetour = 2 (Nom fichier seulement)


'ranger le chemin + nom du fichier dans le controle imgPhoto pour afficher la photo
Me.ImgPhoto.Picture = CurrentProject.Path & "\images\" & NomFichier

' affecter au controle NomPhoto (version 1 : Chemin complet + Nom du fichier)


' affecter au controle NomPhoto (version 2 : Nom du fichier)
Me.NomPhoto = NomFichier
End If

RedimentionnerPhoto
Exit Sub

Si vous souhaitez utiliser ce principe, vous pouvez simplement copier le code depuis
le fichier Fac14a2007.accdb de correction et le coller dans votre application sans
maitriser ce code en gardant dans votre application le contrôle Image nommé
ImgPhoto et en gardant le dossier Images.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 98
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

4. Résumé :Saisir, Stocker, Modifier et Supprimer


des images dans des enregistrements de Table.
Le fichier Fac14a2007.accdb présente les 3 solutions pour gérer des images-enregistrement.
1) Images et Table : Version1 basée sur Champ OLE
Table Produit et ses champs:

Formulaire Produit :

Simple sans programmation

Pas Performant avec :


-taille importante de .accdb
-saisie par Coller (pas de
insérer un ficher.)

2) Images et Table : Version 2 basée sur Champ Texte et Macro d'affectation


Table Représentant et ses champs :

Programmation avec
1 Macro de 2 lignes
(donc simple)
Pas Performant avec
saisie clavier du nom
du fichier
Performant avec :
Saisie -taille réduite de .accdb
au clavier Macro [Incorporée] - chemin pour dossier
'images' automatique

3) Images et Table : Version 3 basée sur Champ Texte et Procédure-VBA d'affectation


Table Client et photo en version3 et ses champs:

VBA

Saisie à
la souris

Programmation avec VBA et Boite d'Ouverture de fichier de WINDOWS intégrée en VBA.


Performant : - taille réduite .accdb , - saisie assistée par Boite d'Ouverture de fichier et
-chemin pour dossier 'images' automatique (pas stocké dans champ 'NomPhoto')
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 99
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch19. Les tables avec champs à longueur


variable
Utiliser le fichier Fac14a2007.accdb pour la suite

1. Champ de type Mémo


 Dans la table Client, ajouter un Champ Commentaire de type Mémo.
Le type Mémo est une variante étendue du type Texte. Sa taille s'adapte
dynamiquement à son contenu et Access ajoute la possibilité de mettre en
forme ce texte (gras, italique, couleurs, …) par la Propriété Format du
texte : Texte enrichi.
On peut saisir dans le champ de la table directement ou saisir dans une fenêtre spécifique accessible par
MAJ+F2 pour bénéficier d'un bouton Police… permettant les enrichissements de : Police, Taille, Style
(gras, italique, souligné) et Couleur du texte.
 Dans le formulaire Client, en mode Création, cliquer Ajouter des champs existants puis glisser
le champ Commentaire sur le formulaire. Un contrôle
de type 'Zone de texte' (de longueur infinie) est ajouté.
La source du contrôle est le champ Commentaire de la
table.
On peut saisir dans le contrôle du formulaire directement (et mettre en forme en sélectionnant du texte puis en
déplaçant la souris vers le haut, une barre d'outils flottante apparait) ou saisir dans une fenêtre spécifique accessible
par MAJ+F2 pour bénéficier d'un bouton Police… permettant les enrichissements de : Police, Taille,
Style (gras, italique, souligné) et Couleur du texte.

2. Champ de type Pièce jointe


 Dans la table Client, ajouter un Champ Fichiers joints de type Pièce
jointe.
Le type Pièce jointe est une nouveauté Access. Ce type de champ peut stocker
des documents de types divers (Word, Excel, Image, Pdf, …). Il améliore le
type Objet OLE vu au Chapitre précédent avec plusieurs améliorations : un
seul champ peut contenir PLUSIEURS fichiers et un environnement est
proposé à l'utilisateur pour gérer de manière interactive ces documents
(choisir, ajouter, supprimer, ouvrir, enregistrer sous).
Cependant, les fichiers joints sont réellement incorporés dans le fichier .accdb ce qui peut poser des
problèmes de taille du fichier qui augmente rapidement.
 Dans le formulaire Client, en mode Création, cliquer Ajouter des champs
existants puis glisser le champ Fichiers joints sur le formulaire. Un contrôle de
type 'Pièce jointe' est ajouté. La source du contrôle est le champ Fichiers joints de
la table.
La propriété de formatage Afficher en tant que : Image/Icône permet l'affichage du
fichier si possible (par exemple pour une image).
On peut saisir dans le contrôle par double clic puis Ajouter
On peut aussi ouvrir un document non directement
affichable (fichier pdf ci-dessous).

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 100
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

3. Champ avec plusieurs valeurs


Les Clients parlent plusieurs langues et les Langues sont parlées par plusieurs Clients, gérer cet aspect.

 Voir la table Langue


(donnée dans le fichier Fac14a2007.accdb)
avec Nom Langue : Indexé SANS Doublon
 Dans la table Client, ajouter le Champ Ref Langue (le type serait Numérique en théorie pour être
compatible avec le Num Langue de la table Langue) mais on sélectionne ici directement le type
Assistant liste de choix… pour gérer le type (qui sera Numérique) et la manière de saisir par liste
déroulante avec plusieurs valeurs.
Étapes de l'assistant :
Je veux que la liste recherche (des données) dans une table ou requête Suivant
Table Langue Suivant
>> pour choisir tous les champs (Num Langue, Nom Langue) de la table Langue Suivant
Nom Langue (le nom du champ de la table Langue) pour critère de tri pour avoir une liste triée Suivant
Garder la colonne Nom Langue comme visualisée avec la clé primaire (Num langue) cachée Suivant
Liste des langues comme étiquette du contrôle et cocher Terminé

Message Valider OUI.


Le champ créé par l'assistant est Numérique :
Noter que le nom de champ que nous avions donné Ref Langue a disparu au profit de Liste des langues
qui était simplement annoncé plus haut comme étiquette de contrôle.
Les propriétés de ce champ Liste de langues, générées par les étapes de l'assistant ci-dessus sont :

La saisie est faite par Liste déroulante


C'est la 1° colonne déroulant (Num Langue= numérique) qui est affectée
au champ courant Liste de langues qui est lui aussi Numérique.
La 1° colonne (Num Langue) est masquée (0cm), seule la 2° colonne
(Nom Langue) est montrée (2,54 cm).
Cette liste déroulante peut stocker plusieurs valeurs !

La propriété Autoriser plusieurs valeur est une nouveauté Access.


Ce champ peut donc stocker plusieurs noms de langues.

Il se pose en concurrent de la démarche Classique consistant à dire :


Un Client parle N Langues.
Une Langue est parlée par N Clients
Donc à gérer une table intermédiaire de croisement (solution classique que nous
verrons plus loin sur cet exemple des langues à titre de comparaison)
- Voir et modifier les relations
créées automatiquement :

Double cliquer sur la relation de gauche


pour la modifier et activer l'intégrité
référentielle ce qui donne la présentation
de la relation de droite. (1 et ∞
apparaissent seulement quand
l'Intégrité référentielle est activée).

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 101

- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
Dans le formulaire Client, en mode Création, cliquer Ajouter des champs
existants puis glisser le champ Liste des langues sur le formulaire. Un
contrôle de type Liste déroulante' est ajouté.

Comme on le voit ici en mode Affichage, il permet la multi sélections ce qui est
une nouveauté d'Access. Ce type de contrôle (Liste déroulante) a été défini dans
les propriétés ci-dessus du champ Liste de langues.
La source du contrôle est le champ Liste des langues de la table.
Remarque : un champ multi valeurs est HORS NORME des bases de données
Relationnelles. Ici, Access innove pour simplifier certains développements
simples mais est moins performant dans certains cas que la démanche classique ci-dessous.

Nous allons voir la solution classique pour comparer et avoir des critères de choix entre ces 2 démarches.

A. Démarche Classique Relationnelle


 La table Langue est déjà créée.

 Le formulaire Langue est déjà crée.

Pour gérer Les Clients parlent plusieurs langues et les Langues sont parlées par plusieurs Clients, on
veut créer la table intermédiaire entre Client et Langue et y gérer la propriété Niveau pour connaitre,
par Client et par Langue, le niveau pratiqué.

Rappel de 2 cas de relation N / N : N N


Une Commande vend plusieurs Produits.

Un Produit est vendu dans plusieurs Commandes.


Un Produit est fourni par plusieurs Fournisseurs.

Un Fournisseur fournit plusieurs Produits.

On souhaite que la saisie du niveau soit faite dans une liste de niveaux de référence.

 Créer une table Niveau

 Créer un formulaire Niveau


(menu Créer>Plus de formulaire> Assistant>Table Niveau …)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 102
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

 Créer la table intermédiaire pour le


croisement des Clients et des Langues.
Voir la clé primaire composite
C'est seulement le couple
Ref Client – Ref Langue qui doit être sans
doublon donc clé primaire.

Gérer les propriétés de Choix des 3 champs :

1) Propriétés de Ref Langue pour saisie par liste déroulante.

Ref Langue est


remplacé par la
La 1° colonne est affectée à Ref Langue légende Langue pour
mais elle est masquée (0cm) les affichages
donc c'est la 2° colonne qui est affichée
dans Ref Langue.

Le réel champ Ref Langue… sans sa Légende : Langue.


La réelle valeur stockée … sans la 2° colonne Nom Langue affichée.

2) Propriétés de Ref Client pour saisie par liste déroulante.

La 1° colonne est affectée à Ref Client


mais elle est masquée (0cm)
donc c'est la 2° colonne qui est affichée
dans Ref Client.

Dans la requête pour Contenu, c'est [Nom] & " " & [Prénom] qui affiche DUMANS Benoit.

La clé primaire est basée sur les 2 champs clé étrangère.

3) Propriétés de Ref Niveau pour saisie par liste déroulante.

La 1° colonne est affectée à Ref Niveau


mais elle est masquée (0cm)
donc c'est la 2° colonne qui est affichée
dans Ref Niveau.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 103
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

 Tirer les Relations :

 Créer le formulaire ci-dessous en mode assistant avec :


- la table Client et son Num Client, Nom et Prénom pour simplifier
- la table ClientLangue avec tous ses champs sauf Ref Client (inutile comme pour tout les sous
formulaires de pointer vers le formulaire principal)
- valider l'affichage avec sous–formulaire qui a été détecté d'après les Relations entre les tables.
- disposition Tabulaire (Tabulaire pour les sous formulaire, c'est souvent le mieux !)
- style à choisir (Access )
- enregistrer Client et ses langues FP et Client et ses langues SF.

Comparaison entre la solution Table intermédiaire ClientLangue et Champ Multi-valeurs.


1) Champ Multi-valeurs :
- SIMPLE à générer : un champ
- LIMITE dans la longueur de la liste des Langues lorsque la liste n'est pas déroulée,

- PEU de place prise dans le formulaire :


- PAS de valeur comme le Niveau dépendant du Client et de la Langue (grosse limite).
- Langue et ses Clients (voir page suivante) : Bien en consultation, MAL en saisie (grosse limite).
2) Table intermédiaire ClientLangue :
- COMPLEXE à générer : une table à 2 champs minimum : Ref Client et Ref Langue avec Liste déroulante
- PAS DE LIMITE dans la longueur de la liste des Langues car Sous-formulaire,

- BEAUCOUP de place prise sur le formulaire :


- POSSIBLE valeur comme le Niveau dépendant du Client et de la Langue.
Bilan : Multi-valeur plus simple MAIS moins bien que Table intermédiaire à privilégier.
Nous avons présenté ci-dessus un Client et ses Langues…

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 104
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

On peut aussi présenter Une Langue et ses Clients.


1) Version Champ Multi valeurs :

2) Version Table intermédiaire : Bien en Consultation.


Mauvais en Ajout

4. Formulaire basé sur un modèle de formulaire


A. Créer un modèle de formulaire
Ouvrir le formulaire X Formulaire modèle de forme. Ce formulaire a été créé pour définir un modèle de
formulaire au niveau de la forme (Police, Couleur, Bordure) pour appliquer une charte graphique à des
formulaires existants ou à de nouveaux formulaires. Passer en mode Création. Eventuellement, modifier
la couleur de fond de l'en-tête du formulaire et autres …
Ce formulaire étant défini, le transformer en "Modèle de référence" pour de futurs formulaires :
Menu Organiser > Mise en forme automatique > Assistant format automatique > Options >
Personnaliser > Créer un nouveau format et le nommer 'A mon modèle personnel'.
B. Créer un formulaire basé sur un 'modèle' de formulaire
Créer avec l'assistant un formulaire basé sur la table
Produit puis au niveau de l'étape de l'assistant "Quel style
choisir", sélectionner 'A mon modèle personnel'

Pour appliquer le style à un formulaire existant, ouvrir un formulaire un mode création, ne pas
sélectionner un élément du formulaire puis Menu Organiser> Mise en forme automatique> Assistant
format automatique et choisir 'A mon modèle personnel'.
En plus :
Le formulaire X Formulaire modèle de forme
Tabulaire à été créé comme base pour Créer un
nouveau format (procédure ci-dessus A.) et le
nommer 'A mon modèle personnel Tabulaire'. Il gère
une présentation Tabulaire à appliquer à un
formulaire principal Tabulaire ou pour les sous-formulaires qui sont Tabulaires.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 105
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch20. Les Modes d'utilisation de


l'application
Utiliser le fichier Fac15a2007.accdb pour la suite

1. Mode Utilisateur : configuration du démarrage


1) Options de démarrage

Si l'application est terminée et que l'on doive la confier à un utilisateur débutant, il faut paramétrer
certaines options comme ci-dessous par le Bouton Office (Fichier en V 2010) > Options> Base de
données active pour verrouiller l'application dans la seule UTILISATION sans possibilité de passer en
mode CREATION :
- pas de touches spéciales (comme F7 pour activer le volet de gauche)
- pas de mode Page
- pas de modification de structure des tables
- pas de volet de navigation à gauche
- pas de menu complet
- pas de menu contextuel

Désactiver les options ci-dessous cerclées

Fermer la fenêtre puis fermer l'application.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 106
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
2) Activer les options de démarrage
Redémarrer l'application pour que ces options prennent effet.
Vous êtes maintenant en mode Utilisateur seulement (pas développeur).
Impossible de passer en mode Création sur un formulaire par exemple.

3) Désactiver les options de démarrage


Pour passer outre ces options de démarrage et que le développeur que vous êtes puisse à nouveau
modifier l'application, maintenez enfoncé la touche MAJ pendant que vous ouvrez l'application.
Vous êtes maintenant en mode DEVELOPPEUR complet (pas simple utilisateur).

Ce verrouillage est donc facilement contournable pour qui connaît l'astuce de la touche MAJ .
On peut annuler l'effet de la touche MAJ pour réellement contrôler l'ouverture de l'application. Il faut
dans ce cas programmer un peu de VBA dans des Modules … (hors cadre de ce cours)

Utiliser le fichier Fac15a2007 1 Utilisateur .accdb pour tester le travail ci-dessus

2. Mode Partage de données entre plusieurs


utilisateurs en réseau local

Ouvrir Fac15a2007.accdb si vous disposez d'une application installée sur un


disque réseau partagé pour utiliser l'application
en mode PARTAGE de Données
pour plusieurs utilisateurs (car sur disque-réseau partagé)

TESTER à plusieurs si possible…

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 107
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch21. Les Macros avancées


Utiliser le fichier Fac16a2007 .accdb pour la suite

Un Groupe de macros = une ou plusieurs Macros rassemblées Groupe de macros


Une Macro = une ou plusieurs Actions décrivant la macro Macro
Une Action = un ou plusieurs Arguments précisant l'action Action
Un Argument = une caractéristique de l’action
Argument

1. Tester les évènements déclanchant des macros dans


un formulaire
Depuis le menu de l'application, cliquer le bouton Produits TEST évènements pour visualiser
l'enchaînement des évènements se réalisant sur l'élément [Formulaire] et sur le contrôle zone de texte
[Désignation]. Penser à cliquer sur Désignation.

Consulter dans le formulaire Produit TEST EVENEMENTS en mode création les propriétés
d'évènement du Formulaire et de la Désignation pour comprendre le mécanisme.
Consulter depuis l'onglet Macros le groupe de macros AAGroupeMacro Evenement Produit dans lequel
sont stockées toutes les macros utilisant l'Action BoîteMsg.

Voici ci-dessous les événements disponibles pour ces 2 éléments.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 108
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2. Macro conditionnelle attachée à un événement


Objectif :
Vérifier avant d’enregistrer un enregistrement via le formulaire Client,
que le Code Postal n’est pas vide (Null).
Logique de programme ci-dessous :

Si le contrôle Code Postal est vide (Null) alors


1) Alerter l’utilisateur
par BoîteMessage.

2) Atteindre le contrôle Code Postal pour proposer à l’utilisateur de le saisir car c’est ce
contrôle qui génère le problème.
3) Annuler l’Evénement qui aurait permis la Modification du Formulaire (Mise A Jour) par
passage par exemple à l’enregistrement précédent ou suivant par les boutons du bas du
formulaire.
4) Arrêter Toutes les Macros qui auraient permis la Modification du Formulaire (Mise A Jour)
comme la macro de Recherche d'un client par Liste déroulante
Sinon
1) Prévenir l’utilisateur par BoîteMessage que le Client est validé.
(Message normalement inutile)

Faire un 'Bip' sonore de manière inconditionnelle (BIP normalement inutile mais ici pour aspect technique)

Procédure en Version 2007:


1) Créer la Macro
Puis par le bouton Conditions, ajouter la colonne Condition
Condition Action Arguments de l’action
(utiliser le générateur d’expression) BoîteMessage Message : Vous avez
oublié le Code Postal du client
[Formulaires]![Client]! Bip : Oui
[Code Postal] Est Null Type : Stop
Autre solution basée sur fonction : Titre : Pas si vite
'Est' est un opérateur (comme =) EstNull ([Formulaires]![Client]!
'Null' est une constante (Vide) [Code Postal] ) retourne Vrai ou Faux
Nom du contrôle :
… AtteindreContrôle
Code Postal
... EstNull( ) est
une fonction
AnnulerEvénement
ArrêtToutesMacros
...
Pas BoîteMessage Message : Ce client est validé
EstNull ([Formulaires]!
[Client]![Code Postal] )
Bip Bip est exécuté de manière NON
Pas de Conditionnelle donc Toujours exécuté
condition
Pas : inverse la condition (sinon) :

... signifie 'même condition que la ligne précédente' de la colonne Condition

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 109
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Pour information : comparaison Algorithmique et ACCESS


Actions Conditionnelles
Algorithmique Classique Solution dans ACCESS
Si [Code Postal] = Vide alors
BoîteMessage Si [Code Postal] Est Vide alors BoîteMessage
AtteindreContrôle … alors AtteindreContrôle
AnnulerEvènement … alors AnnulerEvènement
Sinon
BoîteMessage Si [Code Postal] Est Pas Vide alors BoîteMessage
FinSi

Bip Bip

Enregistrer la macro sous le nom :


Formulaire Client, Formulaire, Saisie obligatoire Code Postal

(Nom du formulaire,Nom de l’élément du formulaire,Nom du Traitement) est la règle pour


nommer les Macros
Procédure en Version 2010:
1) Créer la Macro
Puis via l'interface, obtenir ce résultat :

Commentaire

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 110
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2) Attacher cette macro dans le Formulaire 'Client' à l’élément Formulaire (afficher la fenêtre
'Propriétés' puis sélectionner le Formulaire) :

- par le carré gris (à l'intersection des 2 règles graduées)

- par liste déroulante de la feuille de propriétés


puis choisir l'événement 'Avant MAJ' ( Avant Mise à Jour du formulaire donc de l'enregistrement
correspondant)
AvantMAJ signifie avant que les Données du formulaire soient enregistrées dans la table sur disque.

3) Tester cette macro.


- En ajoutant un nouveau client sans Code Postal mais avec un Nom et un Prénom puis tenter de passer
au client précédent par les boutons de navigation en bas de Formulaire.
- En se positionnant sur un client existant, en supprimant le Code Postal puis tenter de changer de client
par la liste déroulante de recherche.

3. Référence des Actions des Macros


Le tableau suivant regroupe les principales actions par catégories, en fonction de leur utilisation.
Le nom entre parenthèses est le nom anglais de l'action pour utilisation dans VBA (Visual Basic pour
Applications) et pour rechercher dans l'AIDE (qui ignore les noms français).

Les noms de certaines actions sont légèrement différents entre les versions 2007 et 2010:
Exemple : BoiteMsg est devenu ZoneMessage, Agrandir est devenu AgrandirFenêtre

Les actions soulignées ci-dessous ont été vues précédemment.


Catégorie Description Action
Données dans les Restreindre les données AppliquerFiltre (ApplyFilter)
formulaires et les
états
Se déplacer dans les TrouverSuivant (FindNext),
données TrouverEnregistrement (FindRecord),
AtteindreContrôle (GoToControl),
AtteindrePage (GoToPage),
AtteindreEnregistrement (GoToRecord)
Exécution Exécuter une commande ExécuterCommande (simuler les menus)
Enregistrer
Exécuter une macro, une OuvrirRequête (OpenQuery),
procédure ou une requête ExécuterCode (RunCode),
ExécuterMacro (RunMacro),
SurErreur (OnError)
ExécuterSQL (RunSQL)
Exécuter une application ExécuterApplication (RunApp)
Arrêter l'exécution AnnulerEvénement (CancelEvent),
Quitter (Quit),
ArrêtToutesMacros (StopAllMacros),
ArrêtMacro (StopMacro)
Importer/ Envoyer des objets CopierVers (OutputTo),
exporter Microsoft Access à EnvoyerObjet (SendObject)
d'autres applications
Transférer des données TransférerBase (TransferDatabase),
entre Microsoft Access et TransférerBaseDeDonneesSQL (TransferDatabase),
d'autres formats de TransférerFeuilleCalcul (TransferSpreadsheet),
TransférerTexte (TransferText)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 111
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
données
Manipulation Copier ou renommer un CopierObjet (CopyObject),
d'objets objet Renommer (Rename)
Supprimer un objet SupprimerObjet (DeleteObject)
Déplacer ou Agrandir (Maximize),
redimensionner une Réduire (Minimize),
fenêtre DéplacerDimensionner (MoveSize),
Restaurer (Restore)
Ouvrir ou fermer un objet Fermer (Close),
base de données OuvrirFormulaire (OpenForm),
OuvrirModule (OpenModule),
OuvrirRequête (OpenQuery),
OuvrirEtat (OpenReport),
OuvrirTable (OpenTable)
Imprimer un objet base de OuvrirFormulaire (OpenForm),
données OuvrirRequête (OpenQuery),
OuvrirEtat (OpenReport),
Imprimer (Print)
Sélectionner un objet SélectionnerObjet (SelectObject)
base de données
Définir la valeur d'un DéfinirValeur (SetValue)
champ, d'un contrôle ou
d'une propriété TRES PUISSANT
Définir et supprimer des DéfinirVarTemp
variables mémoire SupprimerVarTemp PUISSANT
Mettre à jour les données RedessinerObjet (RepaintObject),
ou l'écran Actualiser (Requery),
AfficherTousEnreg (ShowAllRecords)
Divers Afficher des informations Echo (Echo),
à l'écran Sablier (Hourglass),
BoîteMessage (MsgBox),
Avertissements (SetWarnings)
Générer des frappes de EnvoiTouches (SendKeys)
touches
Afficher ou masquer la AfficherBarreOutils (ShowToolbar)
barre d'outils
Emettre une tonalité Bip (Beep)
Il y a des ACTIONS de Macros, elles doivent être la base de votre programmation si
vous n'utilisez pas la programmation en langage VBA.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 112
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch22. Modification des données des tables


Les données des tables peuvent être modifiées manuellement ou automatiquement.

1. Modification manuelle
Cette modification est faite de manière interactive par l'utilisateur : ouvrir le formulaire Client, se
positionner sur le client DURAND Alain :
- soit par les boutons standards en bas de formulaire
- soit par notre liste déroulante de recherche

Saisir 92000 pour modifier le Code Postal du client courant.

Une fois tapé 92000, dans la marge de gauche, indique 'en cours de saisie' donc 92000 non encore
transféré vers la table source du formulaire. On peut abandonner cette saisie par la touche ESC.

Pour valider la saisie, plusieurs solutions :


- Access enregistre automatiquement les données au fur et à mesure de la saisie d'un enregistrement
validé. Pour valider un enregistrement, il suffit de le quitter par :
- passer au suivant par exemple,
- rechercher un autre client par la liste déroulante ou
- fermer le formulaire.
- On peut aussi Enregistrer manuellement et immédiatement l'enregistrement (avant de le quitter) par le
bouton du menu Accueil ce qui transforme en .

On n'utilise généralement pas ce bouton car tout marche très bien en automatique.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 113
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2. Modification automatique par Requête


Pour les Requêtes, nous avons vu :
En Initiation 1) requête Sélection (plusieurs tables, tri, calcul, sélection sur critère)

Nous allons voir :


En Perfectionnement 2) requête Action sur une table
3) requête Action Paramétrée par formulaire
A. La requête action
But : Modifier les prix des seuls produits de marque CANON en les multipliant par 2.
Le numéro de ces produits commence par CAN.
Créer une requête en mode Création sur la seule table Produit avec 2 champs :
- Num produit et Prix HT avec CAN* comme critères pour Num produit
Exécuter la requête puis retour en mode Création
Convertir la requête en requête Mise à jour par le bouton Mise à jour de la zone Type de requête.
Dans la nouvelle ligne ‘Mise à jour’, inscrire dans le champ Prix HT en utilisant le bouton ‘Générateur’
de la barre d’outils et en choisissant dans le générateur: Tables; Produit; Prix HT :
[Produit]![Prix HT] * 2

Enregistrer : R Action Mise à jour Prix et fermer cette requête.

 Consulter dans la table Produit les prix des produits CANON.


 Ouvrir la requête (double-clic sur son nom) pour exécuter la mise à jour des prix (aucun effet à
l’écran sauf éventuellement une alerte mais effet de modification des données sur la table)
 Vérifier les modifications des prix des produits CANON dans la table Produit.

Commentaires : cette requête nous a appris les bases d'une requête Mise à Jour sur une sélection mais
cette requête est peu intéressante car trop spécialisée : sélection figée sur des produits CANON,
MAJ exceptionnelle en multipliant le prix par 2 !

Nous souhaitons créer une requête de portée plus générale, dont les critères (sélection de produits, type
de mise à jour) seront choisis par l'utilisateur de l'application via un formulaire et non pas saisis de
manière figée par le développeur comme ci-dessus.

Remarque : de manière similaire à la requête action de type Mise à jour, il existe la requête de type
Ajout et Suppression d'enregistrement (voir dans le menu Créer en Création de requêtes).

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 114
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. La requête action paramétrée par formulaire


But : permettre la MAJ des prix d’une manière quelconque sur une
catégorie quelconque de produits :  Donc, Paramétrer par saisie dans un formulaire

1) Créer le formulaire de saisie des paramètres

En mode Création (sans assistant), pas de table ou requête pour alimenter en données.

En Mode Affichage

Remarque: un contrôle Zone de texte affiche Indépendant (en mode création) tant que sa propriété
Source contrôle n'est pas définie (par un champ de table ou de requête ou bien par une définition de
calcul).

Gérer les propriétés des 2 contrôles Zone de texte comme ci-dessus.

Conséquence ici pour ces 2 contrôles :


 A l'ouverture du formulaire: la zone est vide (car sans source)

 Après la saisie : seul le contrôle à l’écran est rempli (pas de répercussion de cette saisie dans une
table : Normal on saisit des critères de mise à jour que l'on ne souhaite pas enregistrer)

Enregistrer le formulaire : Saisie variation des prix v1 (saisir précisément ce nom)

Saisir (en mode Affichage) :

LOG dans Choix Marque (pour les produits de marque LOGitech comme LOG001 ou LOG002) et
- 10% dans Choix Coef (pour réduire les prix de 10%) et penser à valider la saisie par ENTREE.

NE PAS fermer ce formulaire


car ses données doivent être utilisées
pour une requête de mise à jour.

Gérer la requête de la page suivante...

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 115
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

2) Créer la requête paramétrée par le formulaire


But : pour cette requête, on veut que les 2 critères de Mise à jour et de Recherche soient déterminés par
les valeurs saisies dans les 2 contrôles du formulaire précédent encore ouvert.

Créer une nouvelle requête en mode Création avec la TABLE Produit , transformer la requête Sélection
en requête Mise à jour par le bouton Mise à jour.
Champ Num produit Prix HT
Table Produit Produit
Mise à jour [Produit]![Prix HT]
*( 1+
[Formulaires]!
[Saisie variation des prix v1]!
[Choix Coef] )
Critères Comme ( [Formulaires]![Saisie variation des prix v1]!
[Choix Marque] & "*" )

ATTENTION : PAS d'espace avant * : * signifie "n'importe quelle chaine"


L'opérateur & permet de juxtaposer (concaténer) plusieurs éléments.
Enregistrer la requête: R Action Mise à jour Prix Paramétrée.
Ne pas fermer la requête.
Consulter les prix des produits dans la table Produit.

Fermer la table produit.

Exécuter la requête par le bouton exécuter (et non par qui affiche seulement la Sélection).
La requête utilise les valeurs saisies dans le formulaire "Saisie variation des prix v1".
Remarque : pas d’écho à l’écran de l’opération mais effet sur disque consultable depuis la Table Produit.

Fermer la requête de mise à jour, le formulaire des paramètres et la table Produit.

Remarque : on peut améliorer la saisie par une liste déroulante présentant les 3 lettres des marques prises
dans Num Produit : la liste est basée sur une requête basée sur la table produit avec une colonne :

Permet d'extraire de
Num Produit
3 caractères à partir de
Voir correction du formulaire Saisie variation des prix V2 et la gauche
de la requête R Action Mise à jour Prix paramétrée V2. Permet de ne garder
On peut aussi améliorer en posant un bouton qui lancera depuis le qu'un seul nom de
marque
formulaire la requête de mise à jour.
www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 116
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

3. Modification automatique par Macro


Objectif : Mises à jour du Stock de Produit depuis la saisie de produits vendus dans la Facture.
Le résultat de cet objectif n'est pas visible car le traitement est effectué sur le champ de la Table
Produit qui n'est pas affiché dans le formulaire.
Utiliser le fichier Fac17a2007 .accdb pour la suite
Mise à Jour du stock par DéfinirVarTemp et DéfinirValeur de macro.

A. Mise à jour Automatique Invisible du stock de Produit sur


événement Saisie de la Quantité commandée
 Table Produit:
- Ajouter un champ : Qté stock de type Numérique, Réel double et
avec la légende Quantité en stock
- Créer une requête de Mise à jour avec Qté stock = 100 unités et l'exécuter
par pour saisir pour tous les Produits une Qté stock pour la future Mise à
Jour (MAJ) du stock de produit lors de la facture. Voir résultats dans Table Produit.

 Table CommandeLigneProduit:
- Modification du champ Quantité (Quantité commandée dans la facture) Valeur par défaut : 0
.Valide si : >=0 , Message si erreur : SVP >=0 ,Null interdit : OUI (pour saisie obligatoire)

 Formulaire Factures et ses produits FP:

Contrôle de type Zone de texte


Formulaire Requête
Contrôle de type SF
Formulaire source du source du
de type FP contrôle de type Formulaire
SF

Ouvrir ce Formulaire en modification pour accéder au Contrôle de type SF puis accéder au


Formulaire de type sous-formulaire Factures et ses produits SF. (Voir démonstration par l'enseignant)
Accéder par la propriété Source du Formulaire (et par ... en fin de ligne) à la requête R26 Facture détail
et y ajouter la colonne Qté stock (pour que cette dernière puisse être MAJ par la future macro) puis
refermer cette requête.

Ne pas Fermer ce Formulaire (SF)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 117
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Utilisation de l’Action DéfinirVarTemp : Définir la valeur


d'une variable mémoire .
Action Équivalente à l'affectation : Variable = Expression
La variable est persistante et continue d'exister après la fin de la macro où elle est crée.
Elle est donc GLOBALE à l'application Access (utilisable partout).
Le nombre de variables est limité à 255.
L'action SupprimerVarTemp détruit la variable.
La variable de macro est une nouveauté de la version d'Access.

La mise à jour de la quantité en stock est définie par :


Qté stock = Qté stock (champ) – Quantité (nouvelle valeur du contrôle Quantité du formulaire)
+ Quantité (valeur existante avant la saisie de la nouvelle valeur du contrôle Quantité si mise à jour)

Il faut donc garder la valeur du contrôle quantité avant la nouvelle saisie lorsque l'on modifie la
quantité existante 4 par la nouvelle valeur 5 : Qté stock = 100 – 5 (saisie) + 4 (avant saisie)
Nous allons utiliser les Variables (mémoire) et l'action DéfinirVarTemp qui permet d'affecter ( = )
une valeur à une variable : QteEnEntrant = 4 (lire QteEnEntrant reçoit 4 par exemple)

1) Macro Sur Entrée dans contrôle Quantité


Objectif : Garder la quantité du contrôle qui existe en entrant dans le contrôle pour la MAJ stock future.
Procédure : Depuis les propriétés du contrôle Quantité, évènement Sur Entrée, … Générateur de
macros puis cliquer sur le bouton Afficher toutes actions et définir la macro suivante :

Action : DéfinirVarTemp (c'est l'action d'affectation Élément reçoit (=) Expression)


Elément : QteEnEntrant (le nom de la variable mémoire est librement choisi)
Expression : … (utiliser le générateur d'expression pour obtenir la ligne ci-dessous)

[Formulaires]![Facture et ses produits FP]![Facture et ses produits SF].[Formulaire]![Quantité]

Action : Bip (pour se rendre compte que la macro s'exécute si le haut parleur est actif)
Action : BoiteMessage (ZoneMessage en V 2010) En Test
Message : ="Valeur en entrant : " & [VarTemp]![QteEnEntrant] seulement
Titre : Mouchard

La future MAJ du stock sera :


stock = stock - nouvelle valeur saisie dans le contrôle Quantité + QteEnEntrant de la variable

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 118
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Utilisation de l’Action DéfinirValeur : Définir la valeur d'un Élément :


un champ de table, ou un contrôle de formulaire ou état ou une propriété de contrôle

Action Équivalente à l'affectation : Elément = Expression


2) Macro Sur Sortie du contrôle Quantité
Depuis les propriétés du contrôle Quantité, évènement Sur Sortie, … Générateur de macros puis
cliquer sur le bouton Afficher toutes actions :
Action : DéfinirValeur
Elément : [Qté stock] (Commentaire : [Qté stock] est le Champ de la table Produit)
Expression : [Qté stock] - [Quantité] + [VarTemp]![QteEnEntrant]

Ici, adresse IMPLICITE pour le Contrôle Pour faire référence à la Variable mémoire, il
(le contrôle est dans le Formulaire courant) faut la préfixer par [VarTemp]!

Action : Bip (En test pour se rendre compte que la macro s'exécute si le haut parleur est actif)

Action : BoiteMessage (ZoneMessage en V 2010)


Message : ="Reste en stock maintenant : " & [Qté stock]
Titre : Gestion de STOCK
Deux macros incorporées ont donc été créé :

- Tester la procédure de mise à jour du stock dans la facture puis


- Vérifier le résultat directement dans la Table Produit (en fermant si ouverte) en ouvrant cette table.

En plus, s'il vous reste du temps, pour tester l'affectation à une propriété de contrôle :

Contrôle : Quantité Evènement : Sur Réception Focus


Action : BoiteMessage (ZoneMessage en V 2010)
Message : Prix Invisible ensuite !
Titre : Evènement : Sur Réception Focus
Action : DéfinirValeur
Elément : [Prix Ht].[Visible]
Expression : Non

Contrôle : Quantité Evènement : Sur Perte Focus


Action : BoiteMessage (ZoneMessage en V 2010)
Message : Prix Visible ensuite !
Titre : Evènement : Sur Perte Focus
Action : DéfinirValeur
Elément : [Prix Ht].[Visible]
Expression : Oui
Tout ceci offre de larges possibilités de traitements …
Voir le fichier Fac18a2007 .accdb pour la correction.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 119
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch23. Traitements de synthèse


1. Formulaire Tableau Croisé Dynamique (TCD)
Objectif : Calculer la Moyenne des Quantités de produit vendues par Client et par Catégorie.

A. Créer la requête source du futur formulaire

Exécuter la requête :

Futur Regroupement des


lignes par TCD :
-pour Durand et
-pour Imprimante
7 + 1 + 3+ 6 = 17
Moyenne :
17 / 4 = 4.25

Enregistrer : R28 Produits vendus pour analyse TCD

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 120
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

B. Créer le formulaire TCD basé sur la requête


Sélectionner la requête R28 Produits vendus pour analyse TCD
Menu Créer / Plus de formulaire / Tableau Croisé Dynamique
Un tableau croisé dynamique vide est proposé avec 4 zones :
- champ de critère de regroupement en colonne
- champ de critère de regroupement en ligne
- champ de critère de filtrage (sélection) en haut
- champ de zone de calculs au centre

Si la fenêtre de la Liste des champs ci-dessous n'est pas affichée,


cliquer sur Liste des champs dans le ruban.

A l'aide de la souris, glisser depuis la fenêtre Liste des champs :


-le champ Nom vers la zone Champ de ligne
-le champ Nom catégorie vers la zone Champ de colonne
-le champ Quantité vers la zone centrale de calcul "Placer les totaux"

Pour l'instant, nous n'obtenons aucun calcul de


synthèse mais seulement la ventilation (la liste)
des quantités de produit commandé :
- par Nom de client et
- par Nom de Catégorie.

Cliquer sur le champ Quantité


puis sur l'icone de calcul automatique
du ruban et choisir : Moyenne

Une nouvelle présentation est proposée:


Nous avons :
- la moyenne des quantités de produits
vendus par client et par catégorie

- la moyenne des quantités de produits


vendus par client (toutes catégories
confondues)

- la moyenne des quantités de produits


vendus par catégorie (tous clients
confondus)

- la moyenne générale des quantités de


produits vendus (tous clients et toutes
catégories confondus)

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 121
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com
On peut cacher la liste des Quantités vendues par Client et par Catégorie :
Cliquer dans le tableau sur le champ Quantité puis sur le bouton du ruban :
Masquer les détails

On peut gérer le format numérique des valeurs affichées:


Cliquer dans le tableau sur le champ Moyenne de Quantité puis sur le bouton du ruban :
Feuille des propriétés Onglet Format / Nombre : Standard (pour 2 décimales)

Résultat final :

Enregistrer ce formulaire : Ventes analysées par TCD

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 122
- ACCESS 2007 – 2010 - Travail dirigé Facturation – www.tifawt.com

Ch24. La base de données finale.

www.tifawt.com
Ensat - Informatique Appliquée - Marc Souques Page 123

Vous aimerez peut-être aussi