Microsoft 365 - Conseils pour la structuration d'une base de données -

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour à tous,

J'utilise Excel 365 FR. Je rencontre un problème concernant la structure d'une base de données (i.e. la manière de présenter les données pour permettre leur analyse plus tard). J'espère trouver ici des conseils de personnes bien plus expérimentées que moi pour m'aider à y voir plus clair.

Je mets en pièce jointe un fichier Excel pour illustrer mon propos. Pour faire simple, supposons que j'étudie l'exemple d'une base de données, dans laquelle j'ai des cours (Maths, Méca, Physique, etc.), des durées (2h, 4h, etc.), des étudiants (Groupe1, Groupe2, etc.), des profs (Marc, Julie, Jean, etc.), des salles (Salle1, Salle2, Salle3, etc.). Intuitivement, je propose une base de données avec une colonne cours, étudiants, prof, salle. Jusque-là tout va bien et je peux analyser mes données via Tableau Croisé Dynamique (TCD) comme je l'entends. Par exemple, je peux connaître le nombre heures qui est assuré par un prof, le taux de charge d'une salle, vérifier si les groupes d'étudiants ont eu le même nombre d'heures de cours, présenter une maquette des cours avec les heures associées, etc.

Le problème se pose lorsque pour un même cours (de Maths par exemple), j'ai plusieurs données associées (comme plusieurs groupes d'étudiants qui assistent à ce cours, ou bien plusieurs profs qui donnent le cours, ou encore plusieurs salles nécessaires pour assurer ce cours). Dans ce cas de figure, mon TCD ne dissocie pas les données (ce qui me semble normal). Par conséquent, je n'arrive pas avoir la bonne granulométrie dans mon analyse. Je n'arrive plus à connaitre le nombre d'heures qui est assuré par un prof, puisque je vais avoir les heures réalisées par le groupe de profs. Même chose pour les autres colonnes. Du coup, je suis perdu.

La solution que je retiens à ce stade est de dupliquer ma base de données initiale autant de fois qu'il y a de colonnes qui présentent des données liées. Dans mon exemple précédent, les colonnes Elève, Prof et Salle contiennent toutes les 3 des données liées. Je vais donc dupliquer ma base initiale 3 fois. Ce qui donne les feuilles Excel "Table Elève", "Table Prof" et "Table Salle". Pour chaque nouvelle base de données, je m'occupe uniquement d'une seule colonne contenant des données liées. Les autres colonnes contenant des données liées ne changent pas dans cette feuille, mais dans les autres. Et donc je vais ajouter autant de nouvelles lignes qu'il y a de données liées.

Par exemple, la feuille "Table Elève" s'occupe de la colonne Elève. Le cours de physique est réalisé par le groupe1 et le groupe 2 (Groupe1, Groupe2). Je vais donc copier coller cette ligne. Une ligne contiendra Groupe1, l'autre ligne contiendra Groupe2. Je pourrais ainsi analyser cette colonne Elève finement. Je fais pareil pour les autres feuilles. C'est une macro VBA qui s'occupera de créer les bases de données "Slave" contenant des données non-liées, à partir de la base de donnée initiale "Master" contenant toutes les données éventuellement liées.

Cette méthode est loin d'être parfaite mais elle me permet de répondre à mon besoin : analyser finement des données qui se retrouvent liées dans un tableau Excel.

Si certains ont des conseils pour faire mieux (car dupliquer des bases de données, multiplier des données, augmenter le stockage, augmenter le risque d'erreurs, complexifier la structure de données, augmenter les temps de calculs, complexifier la maintenance, etc.). Autant d'arguments pour ne pas utiliser cette approche.


Un grand merci d'avance à ceux que ça inspire !
 

Pièces jointes

  • classeur1.xlsx
    403.7 KB · Affichages: 21
Solution
Bonjour le forum, bonjour CroCroCro qui ne doit pas être bien loin je pense ;),

Je viens clôturer ce sujet ouvert depuis quelques semaines déjà. Bonne nouvelle : je considère mon problème initial résolu !

Grâce aux conseils du forum, et en particulier à CroCroCro qui a été formidable (incroyable je dirais même !), j'ai pu expérimenter, apprendre et comprendre par moi-même tout un tas d'approches que je ne connaissais pas. Je suis parti d'une demande initiale, formulée comme je "savais" à l'époque, et qui a bien évolué tout au long des posts ici. Mais finalement, le forum m'a aidé à répondre correctement à ma question !

Aujourd’hui :
  • Je suis capable de saisir mes données...

crocrocro

XLDnaute Impliqué
Bonjour Sérieux et Cool,
si on raisonne en Base Relationnelle constituée de Tables et de Relations entre Tables , il y aurait :
- Une table Professeurs (Mon du professeur ...)
- Une table Groupes d'étudiants (Nom du Groupe ...)
- Une table Matières (Nom de la matière ...)
- Une table Salles (Nom de la salle ...)
- Une table Cours (Date, Durée ...)
La Table Cours est reliée à toutes les autres tables
de manière unique avec (Professeurs, Salles, Matières) et non unique avec la Table Groupes).
Dans la Feuille Table Prof, le cours de Méca est donné dans la même salle même heure par Marc et Julie. Est-ce une erreur ou bien un même cours peut être donné par 2 professeurs (en binôme donc) ?
Avez-vous une base déjà établie avec donc, l'ensemble des informations de l'année scolaire ?
D'où proviennent-elles ?
Sinon, comment prévoyez-vous d'en faire la saisie (Excel, Importation de données ...) ?
Je ne peux en dire plus pour le moment.
 
Dernière édition:

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour Sérieux et Cool,
si on raisonne en Base Relationnelle constituée de Tables et de Relations entre Tables , il y aurait :
- Une table Professeurs (Mon du professeur ...)
- Une table Groupes d'étudiants (Nom du Groupe ...)
- Une table Matières (Nom de la matière ...)
- Une table Salles (Nom de la salle ...)
- Une table Cours (Date, Durée ...)
La Table Cours est reliée à toutes les autres tables
de manière unique avec (Professeurs, Salles, Matières) et non unique avec la Table Groupes).
Dans la Feuille Table Prof, le cours de Méca est donné dans la même salle même heure par Marc et Julie. Est-ce une erreur ou bien un même cours peut être donné par 2 professeurs (en binôme donc) ?
Avez-vous une base déjà établie avec donc, l'ensemble des informations de l'année scolaire ?
D'où proviennent-elles ?
Sinon, comment prévoyez-vous d'en faire la saisie (Excel, Importation de données ...) ?
Je ne peux en dire plus pour le moment.
Bonjour CroCroCro,

Tout d'abord merci de m'accorder un peu de ton temps.

Voici quelques éléments de réponses à tes questions :
Dans la Feuille Table Prof, le cours de Méca est donné dans la même salle même heure par Marc et Julie. Est-ce une erreur ou bien un même cours peut être donné par 2 professeurs (en binôme donc) ?
Un même cours (de Méca par exemple) peut être donné à plusieurs groupes d'étudiants (Groupe1 et Groupe2, Groupe 3 par exemple), par plusieurs professeurs (en binôme, et plus, comme Marc et Julie par exemple) et/ou dans plusieurs salles (Salle3, Salle4 et Salle5 par exemple). On peut aussi avoir 1 seul groupe d'étudiants, 1 seul professeur et 1 seule salle bien sûr. Mais il arrive qu'il y ait plusieurs items de ces catégories (ce qui me pose bien des soucis justement).

Avez-vous une base déjà établie avec donc, l'ensemble des informations de l'année scolaire ?
A ce stade, je construis mon modèle et j'aimerais l'éprouver sur un jeu de données fictives pour être convaincu et convainquant. Il y aura toute une partie VBA par la suite pour faire des traitements. Donc je ne suis pas encore prêt pour récolter les données réelles.

D'où proviennent-elles ?
Les données qui seront récoltées pour alimenter la base de données seront saisie à la main, en allant voir directement les personnes concernées. Je pose la question à la personne, j'alimente la base de données avec la réponse de la personne. C'est du mano mano pour le moment.

Sinon, comment prévoyez-vous d'en faire la saisie (Excel, Importation de données ...) ?
Plus tard, si ce projet avance bien et répond au besoin, j'envisagerai de récupérer les données qui sont saisies informatiquement quelque part, sous un format que je ne connais pas, et dont je pense qu'il me sera bien difficile d'y avoir accès de toute façon. Donc la saisie manuelle reste encore l'option la plus probable à ce stade. Ce sera l'après, après, après^^

En synthèse : j'ai des données, que je dois saisir manuellement dans un tableur Excel de préférence (que je connais assez bien mais qui n'est sans doute pas le bon outil), je cherche la meilleure façon de stoker/agencer ces données pour pouvoir les analyser convenablement. Surtout quand certaines colonnes peuvent contenir plusieurs informations liées.

En espérant que cela aide un peu et donne des idées pour m'orienter.
 

crocrocro

XLDnaute Impliqué
Bonjour Sérieux et Cool,
c'est clair.
Un cours est donc une Matière enseignée à une date/heure donnée, dans une salle donnée, par 1 ou plusieurs Professeurs à 1 ou plusieurs Groupes et ce, pour une durée donnée.
Pour permettre une analyse par professeur et/ou Groupe, le Tableau des Cours ne peut pas correspondre à une ligne par Cours.
Un cours doit être décomposé en autant de lignes que d'associations de Groupes et Professeurs pour un même Cours.
Par exemple pour un cours de Physique donné à le 01/06/2024 de 8h à 10h dans la Salle 3 conjointement par Anne et Julie aux Groupes 3 et 4, le Cours sera décomposé dans le Tableau en 4 lignes :
Physique le 01/06/2024 de 8h à 10h par Anne au Groupe 3
Physique le 01/06/2024 de 8h à 10h par Anne au Groupe 4
Physique le 01/06/2024 de 8h à 10h par Julie au Groupe 3
Physique le 01/06/2024 de 8h à 10h par Julie au Groupe 4.


Une proposition en PJ.

J'ai ajouté quelques feuilles aux feuilles existantes :
- Feuille Tables (contient toutes les Tables de référence (Matières, Groupes ...) elles permettent la saisie dans le tableau de cours par sélection dans une liste déroulante
- Feuille Cours avec le tableau des cours à saisir (niveau le plus fin)
Pour l'exemple donné plus haut, il faudra lors de la saisie dupliquer la ligne autant de fois que nécessaire et remplacer le Groupe ou Professeur dans les lignes dupliquées (peut être facilité par une macro,par exemple en saisissant uniquement sur la ligne qui suit la 1ère, le 2ème Groupe, la macro ajoutant les autres infos de la ligne qui précède).
- Feuille Cours Agrégé avec le tableau des cours à saisir (niveau correspondant à la définition du cours)
Cette feuille peut (doit ?) être automatiquement mise à jour par une macro (voir l'algorithme décrit dans la feuille). Je pourrai vous écrire la macro.
- Feuille TCD avec, pour l'exemple 3 TCD basiques et graphiques associés, les 2 premiers basés sur la feuille Cours, le 3ème sur la feuille Cours Agrégé.

Si vous avez des questions ...
 

Pièces jointes

  • BD Cours crocrocro.xlsx
    441.5 KB · Affichages: 11

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour CroCroCro,

A nouveau merci de vous intéresser à mon sujet.

A la lecture de votre réponse, je peux affirmer que vous cernez bien ma problématique. Ce qui est déjà franchement bien. Vous allez voir qu'il y a encore quelques subtilités je pense.

La solution que vous proposez, c'est-à-dire de décomposer les colonnes qui contiennent des informations liées -> en autant de lignes que nécessaire pour n'avoir que des lignes contenant une seule et unique information, a été essayée de mon côté. En effet, j'ai bien compris qu'avoir des données liées posait un problème. Alors j'ai essayé de les "dégrouper" tout comme vous le faite ici.

Pourquoi je n'ai pas été satisfait de cette approche ?
Dans votre feuille Excel nommée "TCD", la dernière donc :
  • Votre premier TCD indique que le Groupe1 a eu 9h de cours (ors il n'a eu que 7h si je ne me trompe pas : 2h Maths + 2h Physique + 1h Méca + 1h Anglais + 1h Méca sur un autre créneau horaire).
  • Votre deuxième TCD indique que Jean a eu 4h de cours (ors il n'a eu que 2h si je ne me trompe pas : 1h Méca + 1h Méca sur un autre créneau horaire).
  • Votre troisième TCD, qui compte le nombre d'heure des matières me semble bon quant à lui.
  • A noter : je pense que le champ des salles importe autant que le champ des groupes et des professeurs car il peut y avoir plusieurs salles utilisées en même temps pour une matière unique. Mais pour l'exemple, plusieurs profs et plusieurs groupes sont déjà suffisant pour comprendre les choses de manière plus simple.

En conclusion, avec cette approche, il me semble que le décompte des heures est faux. On compte plus d'heures qu'il n'en a été réalisé par l'étudiant, par le prof ou par la salle (il s'agit des 3 champs pouvant contenir des données liées).

Voilà pourquoi je continue de tourner en rond sur ce sujet.
 

crocrocro

XLDnaute Impliqué
Je me donne mentalement 3 coups de règles sur les doigts 🥶
Je rétropédale donc et vous fait une nouvelle proposition (dans un 1er temps sans fichier joint) :

La saisie se fait dans un tableau avec Matière - Date - Durée - Salle.
Une colonne Id Cours calculé automatiquement (incrémenté à partir de 1) permettra de faire le liens vers d'autres Tables.
2 colonnes (Professeurs - Groupes) simplement en affichage.
2 listes déroulantes glissantes au niveau de chaque ligne pour la sélection respectivement d'un Professeur / Groupe. A chaque nouvelle sélection dans la liste, 1 professeur / Groupe est ajouté dans la ligne/colonne concernée. Option pour vider la Colonne - Ligne si erreur dans la sélection.
A chaque mise à jour d'une ligne, dans une feuille Groupe protégée, par macro on alimente un tableau avec les colonnes suivantes
Id Cours - Matière - Date - Durée - Salle (ces 4 infos facultatives) - Groupe (unique) - Professeurs (même valeur que la colonne de la feuille Cours.
Même procédure pour la feuille Professeur
Si les infos facultatives sont reprises,
pour les TCD basés sur le niveau Groupe, à créer à partir du tableau de la Feuille Groupe
sinon,
créer une relation entre le Tableau de la feuille Cours et celui de la feuille Groupe avec clé = Id Cours et baser le TCD sur la Relation.
Même procédure pour la feuille Professeur .

Votre avis ?

Il existe peut-être une solution plus simple avec Power Query.
 

crocrocro

XLDnaute Impliqué
2 colonnes (Professeurs - Groupes) simplement en affichage.
2 listes déroulantes glissantes au niveau de chaque ligne pour la sélection respectivement d'un Professeur / Groupe. A chaque nouvelle sélection dans la liste, 1 professeur / Groupe est ajouté dans la ligne/colonne concernée. Option pour vider la Colonne - Ligne si erreur dans la sélection.
Plus simple, si toutefois les Groupes et professeurs en association ne sont pas trop nombreux :
Créer une Table Association de Groupes ( avec x lignes du type Groupe1 Groupe1 - Groupe2 Groupe1 - Groupe2 - Groupe3 ...)
Idem pour les professeurs.
La saisie dans les colonnes Groupes / Professeurs se fait par sélection dans la liste déroulante directement dans la colonne.

On peut prévoir un bouton qui actualise les feuilles Groupe et Professeur plutôt que de faire les actualisations à chaque modification de la feuille Cours (ce serait plus simple).
 

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour CroCroCro,

J'essaie de me projeter sur l'approche que vous proposez. Tout n'est pas clair pour moi mais j'imagine que ça l'est de votre côté. Un fichier d'illustration du principe pourrait aider je pense.

Pour avancer un peu :
Pour quelle(s) raison(s) proposez-vous de mettre la colonne salle sur un autre niveau que les colonnes professeurs et groupes ?
  • Matière - Date - Durée = je comprends (avec Groupes, Professeurs et Salles multiples)
  • Matière - Date - Durée - Salle = je ne comprends pas (avec seulement Groupes et Professeurs multiples)
Je réponds à votre question "Plus simple, si toutefois les Groupes et professeurs en association ne sont pas trop nombreux :". Je peux avoir un cours pour lequel 24 groupes d'étudiants peuvent participer, 1 à 4 professeurs peuvent être présents en même temps pour ce cours, et utiliser 1 à 4 salles en simultané pour un même cours. En termes d'associations...ça commence à faire un paquet de combinaisons possibles. Parfois, ce sera 24 groupes d'étudiants, 1 professeur et 1 salle. Parfois ce sera 10 groupes d'étudiants, 2 professeur et 4 salles par exemple.

Je dois regarder du côté de PowerQuery si ce serait plus simple à traiter. J'ai encore trop peu d'expérience pour mesurer le potentiel de cet outil, et s'il pourrait m'aider. Je n'arrive déjà pas à présenter mes données de manière simple et structurée pour entrevoir leur analyse plus tard. Je dois creuser ce sujet.
 

Cousinhub

XLDnaute Barbatruc
Inactif
Bonjour,
Je dois regarder du côté de PowerQuery si ce serait plus simple à traiter.
A partir de ton fichier du #1
Voici, en quelques clics, ce qu'on pourrait obtenir - Ici, une seule base, mais on pourrait très bien, en interne, en faire une par type, avec les infos voulues
1720189328121.png

Comme tu peux le voir, en lignes 6 et 7, ID3 (donc cours de Physique), il y a bien les 2 groupes, avec leur durée respective ainsi que les 2 salles concernées (lignes 14 et 15)
Si cela peut t'intéresser.
(Peut-être pas ce soir, Groβe soirée de fuβball....)
 

crocrocro

XLDnaute Impliqué
Je reviens sur la partie saisie des cours avec la problématique multi-Groupes-Professeurs-Salles.
Je peux avoir un cours pour lequel 24 groupes d'étudiants peuvent participer, 1 à 4 professeurs peuvent être présents en même temps pour ce cours, et utiliser 1 à 4 salles en simultané pour un même cours. En termes d'associations...ça commence à faire un paquet de combinaisons possibles. Parfois, ce sera 24 groupes d'étudiants, 1 professeur et 1 salle. Parfois ce sera 10 groupes d'étudiants, 2 professeur et 4 salles par exemple.
J'abandonne donc ma suggestion du post #8.
Nouvelle proposition uniquement pour la saisie des cours , dans le fichier joint :
Voir explications directement dans la feuille Cours.
La colonne Id Cours n'est peut-être pas utile, mais c'est un détail
j'ai supprimé les feuilles TCD ainsi que la feuille avec le niveau 1 Groupe 1 Professeur.
A voir la proposition de CousinHub avec Power Query pour générer le niveau de détail permettant d'avoir des TCD niveau 1 Groupe 1 Professeur 1 Salle.
Je pourrai ajouter une macro (assez simple) qui génère les 3 feuilles de cours :
niveau 1 Groupe
niveau 1 Professeur
niveau 1 Salle.
En attendant, bonne fin de semaine à tous les deux et bon match à CousinHub.
1720201874153.png
 

Pièces jointes

  • BD Cours crocrocro3.xlsm
    694.5 KB · Affichages: 5

crocrocro

XLDnaute Impliqué
Bonsoir Sérieux et Cool, CousinHub,
Je pourrai ajouter une macro (assez simple) qui génère les 3 feuilles de cours :
niveau 1 Groupe
niveau 1 Professeur
niveau 1 Salle.
en pj, une nouvelle version avec la macro, activée par le Bouton Regénérer ... de la Feuille Cours.
Je n'ai pas créé de TCDs.
CousinHub, normalement, l'anomalie que tu as signalée est corrigée. En attendant ta version par Power Query après la 3ème mi-temps.
 

Pièces jointes

  • BD Cours crocrocro3.xlsm
    714.2 KB · Affichages: 7

SERIEUXETCOOL

XLDnaute Occasionnel
Bonsoir à tous,

Merci CroCroCro et CousinHub pour vos conseils.

@crocrocro
Merci pour cette version du code qui fonctionne maintenant chez moi aussi 👍
Vous proposez 2 méthodes dans votre fichier :
  • Une méthode pour faciliter la saisie des données initiales :
    • En particulier, lorsque qu'il faut saisir plusieurs groupes d'étudiants, plusieurs professeurs, plusieurs salles.
    • J'ai déjà travaillé cette partie du problème et suis capable de saisir ces données. J'ai utilisé une approche similaire à la vôtre. Je passe par des tableaux contenant l'ensemble des groupes, l'ensemble des professeurs, l'ensemble des salles. Lorsque je souhaite alimenter ma base de données initiale, je clique sur une cellule groupe, professeur ou salle comme vous. Une zone de liste à sélection multiple contenant des cases à cocher s'ouvre et me permet la sélection multiple et rapide. C'est la même approche que vous, sauf que j'ai bien galéré pour produire le même résultat que vous !
  • Une méthode pour générer 3 bases de données distinctes :
    • Chacune de ces 3 nouvelles bases contient un champ de données non-liées (Groupe, puis Professeur, puis Salle).
    • Sauf erreur de ma part, c'est exactement l'approche que j'avais proposé dans mon post #1. Sauf qu'ici, vous générez ces 3 bases de manière automatique, via VBA, à partir de la base de données initiale (celle qui contient toutes les données liées entre elles).
    • J'avais prévu d'utiliser VBA pour faire comme vous. Votre code me sera donc bien utile pour y parvenir.
En conclusion, les parties saisies des données initiales liées + génération des 3 bases de données déliées sont sous mon contrôle. Je trouve ça surprenant de devoir recréer 3 nouvelles bases de données supplémentaires pour parvenir à analyser les données initiales. C'est pour cette raison que je suis venu chercher ici des conseils, pour voir les choses autrement que la solution que je proposais et qui me semble bricolée.
Mon problème se situe toujours au même niveau : comment organiser et/ou structurer ces données initiales de sorte que je puisse les analyser convenablement.

@Cousinhub
Je trouve ta proposition très intéressante, mais la pertinence reste à confirmer. Je m'explique :
  • Intéressante :
    • Je n'avais pas encore envisagé de présenter mes données initiales sous la forme que tu proposes. Donc merci car ça m'a fait réfléchir et me montre qu'il y a bien d'autres manières d'analyser ce problème. C'est tout l'intérêt de demander conseils à des personnes plus expérimentées que moi.
  • Pertinence :
    • Cette approche créé une nouvelle base de données déliées à partir de la base de données initiale contenant des données liées, contre 3 nouvelles bases de données déliées dans l'approche citée en début de post.
    • L'analyse de cette nouvelle base de données est simple et permet de connaitre le nombre d'heures réalisé par un Cours, Elève, Prof, Salle. Si en plus, on peut utiliser PowerQuery pour la générer facilement à partir de la base de données initiale, c'est top. Par ailleurs, le compte des heures est bon.
    • En revanche, ce qui est dommage avec cette approche, c'est qu'il m'est impossible d'accéder au détail des heures. Par exemple :
      • Approche CousinHub avec 1 nouvelle base de données déliées :
        • Je sais que le prof Marc a fait 4h (mais je ne sais rien de plus).
      • Approche CroCroCro avec 3 nouvelles bases de données déliées :
        • Je sais que le prof Marc a fait 4h
          • Dont 2h en Méca, avec le Groupe2, en Salle2
          • Dont 2h en Physique, avec le Groupe1 et Groupe 2, en Salle3 et Salle4
Faut-il nécessairement recréer 3 nouvelles bases de données quasi identiques pour avoir ce type de rapport pour un Elève, un Prof, une Salle ?

CousinHub, tu disais "Voici, en quelques clics, ce qu'on pourrait obtenir - Ici, une seule base, mais on pourrait très bien, en interne, en faire une par type, avec les infos voulues". Que voulais-tu dire ? Puis-je avoir un exemple pour mieux comprendre ? Peut-être que ça pourrait répondre à ma question de niveau de précision.
 
Dernière édition:

crocrocro

XLDnaute Impliqué
Bonjour Sérieux et Cool, CousinHub,
J'ai déjà travaillé cette partie du problème et suis capable de saisir ces données. J'ai utilisé une approche similaire à la vôtre. Je passe par des tableaux contenant l'ensemble des groupes, l'ensemble des professeurs, l'ensemble des salles.
C'est vrai, ce n'était pas dans votre demande initiale et vous êtes très précis dans vos présentations.

c'est exactement l'approche que j'avais proposé dans mon post #1. Sauf qu'ici, vous générez ces 3 bases de manière automatique, via VBA, à partir de la base de données initiale (celle qui contient toutes les données liées entre elles).
Je reprends et rectifie ce que j'ai écrit dans le post #2
si on raisonne en Base Relationnelle constituée de Tables et de Relations entre Tables , il y aurait :

au niveau Conceptuel

- Une Entité Professeurs (Nom du professeur ...)
- Une Entité Groupes d'étudiants (Nom du Groupe ...)
- Une Entité Matières (Nom de la matière ...)
- Une Entité Salles (Nom de la salle ...)
- Une Entité Cours (Date, Durée )

L'Entité Cours est reliée à toutes les autres Entités de manière
unique avec l'Entité Matières (Relation 1 - 1)
non unique avec les Entités Professeurs, Salles et Groupes (Relation 1 - n).

Au niveau Physique (c'est à dire ce qui est à créer dans Excel),

pour les Tables Professeurs, Salles, Groupes et Matières, rien ne change par rapport aux Entités.
On pourrait ajouter un identifiant (la clé) pour chaque (par exemple un n° d'ordre). Ce qui permettrait de modifier, par exemple le nom d'une matière sans "casser" la base de données puisque les relations entre les tables se ferait par les n° d'ordre. Ici, restons simple, c'est le nom qui sert d'identifiant pour ces tables.

Pour la Table Cours, elle contient
- ses informations propres (Date, Durée) et
- les identifiants des Tables auxquelles elle est reliée (au niveau conceptuel) par une Relation 1 - 1.
Ici cela concerne uniquement la table Matières.
Pour les autres tables (Relation 1 - n) , normalement, il faudrait créer autant de tables que de Relation 1 - n, ces tables (de liens) contenant uniquement les identifiants des 2 tables reliées par la Relation 1 - n (par exemple pour la Table Cours - Professeurs, l'identifiant du cours (id Cours) et l'identifiant du Professeur (Nom Professeur).
Dans Excel, par le Biais de la fonction Relations, on précise toutes les relations entre ces tables.

Dans votre cas, on déroge à ces règles, en "bricolant" la table Cours pour les Professeurs, Salles, Groupes où on agrège les identifiants qui sont normalement dans les tables de liens.
Cela facilite la saisie des cours et l'analyse par TCD si on ne s'intéresse pas aux informations Professeur, Salle ou Groupe mais créé des problèmes de comptage (de durées par exemple) quand on attaque le niveau Professeur, Salle ou Groupe.
Il faut selon moi, d'une manière ou d'une autre, récupérer la "structure non bricolée" :
- Statique : en regénérant les 3 Tableaux comme ce qui est fait par ma macro après mise à jour des Cours
- Dynamique : avec si j'ai bien compris, les requêtes Power Query de CousinHub.

J'espère ne pas avoir été trop confus.
 

crocrocro

XLDnaute Impliqué
En utilisant le même principe que CousinHub, c'est à dire attribuer un type d'enregistrement pour chaque niveau (global, Professeur, Salle ou Groupe), on peut obtenir un tableau unique utilisable quelque soit le niveau.
CousinHub le produit à partir de Power Query.
Par macro, en complétant celle de mon fichier précédent on peut arriver à ce résultat où
Type 1 = Niveau Global, 2 = Salle, 3 = Groupe, 4 = Professeur (on pourrait, pour plus de lisibilité remplacer le n° par Global, Salle ...).
C'est une simple agrégation des 4 tableaux avec simplement l'ajout de l'information Type Enreg.
Les 3 Tableaux intermédiaires (Professeur, Salle et Groupe) ne sont plus nécessaires.

1720269112211.png
 

Discussions similaires

Réponses
27
Affichages
1 K

Statistiques des forums

Discussions
315 084
Messages
2 116 057
Membres
112 644
dernier inscrit
wad