mai
2012
Objectif
On souhaite afficher les activités de personnes sur 1 semainier et on dispose pour cela de 2 tables:
La table « T_Personne » avec le numéro de la personne et son nom :
- NumPersonne : type Entier long (clé)
- NomPersonne : type Texte
Et la table « T_Planning » contenant 10 champs :
- NumPersonne : type Entier long (clé)
- Annee : type Entier (clé)
- NumSemaine : type Entier (clé)
- Lundi : type Texte
- Mardi : type Texte
- Mercredi : type Texte
- Jeudi : type Texte
- Vendredi : type Texte
- Samedi : type Texte
- Dimanche : type Texte
Pour atteindre notre objectif, on va réaliser une requête paramétrée avec en lignes les informations concernant les personnes, en colonnes les jours de la semaine, et à l’intersection les activités.
Cette requête sera alors facilement exploitable comme source d’un formulaire.
Marche à suivre
1) Création de la requête paramétrée
L’étape suivant consiste à créer une requête « R_Plan », basée sur la table « T_Planning », qui affiche les activités des jours de la semaine identifiée par les paramètres [Forms]![F_Planning]![Annee] et [Forms]![F_Planning]![NumSemaine], qui sont en fait des références aux contrôles situés sur le formulaire « F_Planning » :
SELECT NumPersonne, Annee, NumSemaine, Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche
FROM T_Planning
WHERE ((Annee=[Forms]![F_Planning]![Annee]) AND (NumSemaine=[Forms]![F_Planning]![NumSemaine]));
2) Afficher toutes les personnes
Cette étape consiste à afficher toutes les personnes en en-têtes de lignes, y compris celles qui n’ont pas eu d’activité au cours de la période. On crée donc une requête « R_Planning » basée sur la table « T_Personne » et sur la dernière requête « R_Plan » et qui réalise une jointure gauche entre la table « T_Personne » et la requête « R_Plan » sur le champ « NumPersonne » :
FROM T_Personne LEFT JOIN R_Plan ON T_Personne.NumPersonne = R_Plan.NumPersonne
ORDER BY T_Personne.NumPersonne;
3) Création du sous-formulaire « SF_Planning »
Ce formulaire en mode continu ou feuille de données possède comme source la requête « R_Planning ».
Il affiche en ligne les personnes et en colonnes les jours de la semaine.
Il est intégré au formulaire principal.
Pour mettre à jour les champ [Annee] et [NumSemaine] on ajoutera, sur l’évènement Avant MAJ, le code suivant :
[Annee] = Forms!F_Planning!Annee
[NumSemaine] = Forms!F_Planning!NumSemaine
End Sub
4) Création du formulaire principal « F_Planning »
Ce formulaire contiendra, en plus du sous-formulaire, les contrôles (zones de texte ou listes déroulantes) nommés « Annee » pour l’année, et « NumSemaine » pour le numéro de semaine.
On ajoutera une commande pour rafraichir le sous formulaire sur l’évènement Après MAJ des 2 contrôles :
Me!SF_Planning.requery
End Sub
Private Sub NumSemaine_AfterUpdate()
Me!SF_Planning.requery
End Sub
Conclusion
Vous pouvez facilement adapter cet exemple à votre cas en changeant au besoin les noms des champs et des contrôles.
Notez que les données peuvent être directement mise à jour sur le planning.