Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Etat sous forme de tableau croisé

3 réponses
Avatar
Kolele
Bonjour à tous,
Mon problème est simple : faire un Etat joli, sur Access 2002, à partir de
données croisées et non agrégées.

Soit une Base gérant les absences du personnel.
Une table PERSONNEL (CléPersonnel, NomPrénom)
Une table CALENDRIER (CléCalendrier, date)
Une table CATEGORIES ABSENCES (CléCatégorie, LibelléAbsence)
Une table ABSENCES (CléAbsence, CléPersonnel, CléCalendrier, CléCatégorie)

Cette dernière table est en relation avec les 3 premières et forme le côté
plusieurs. Dans la table ABSENCES, un même agent va avoir plusieurs
arrêts-maladie sur plusieurs jours de l'année.

Mon désir : un Etat de synthèse présentant les absences du mois, sous forme
de tableau croisé sans agrégation. En ligne, les noms des agents (Vincent,
François, Paul…) ; en colonne, les jours du mois (01, 02…) ; en donnée
croisée le libellé de l'absence (AT - accident du travail, CMO - congé
maladie ordinaire…). Genre, comme ça :

FEVRIER 2008
1er fév 2 fév 3 fév
Vincent AT AT
François CMO CMO
Paul CMO

J'arrive à un résultat approchant, en passant par une requête analyse
croisée, mais impossible ensuite de passer à un Etat. J'ai essayé d'exporter
sous Excel, mais c'est pire : les données croisées doivent être un agrégat
(compte ou somme). Et le VBA reste pour moi une langue orientale.
Je patine, merci du coup de main !

3 réponses

Avatar
Michel__D
Bonjour,

"Kolele" (pitipasdespam)> a écrit dans le message de news:
Bonjour à tous,
Mon problème est simple : faire un Etat joli, sur Access 2002, à partir de
données croisées et non agrégées.

Soit une Base gérant les absences du personnel.
Une table PERSONNEL (CléPersonnel, NomPrénom)
Une table CALENDRIER (CléCalendrier, date)
Une table CATEGORIES ABSENCES (CléCatégorie, LibelléAbsence)
Une table ABSENCES (CléAbsence, CléPersonnel, CléCalendrier, CléCatégorie)

Cette dernière table est en relation avec les 3 premières et forme le côté
plusieurs. Dans la table ABSENCES, un même agent va avoir plusieurs
arrêts-maladie sur plusieurs jours de l'année.

Mon désir : un Etat de synthèse présentant les absences du mois, sous forme
de tableau croisé sans agrégation. En ligne, les noms des agents (Vincent,
François, Paul…) ; en colonne, les jours du mois (01, 02…) ; en donnée
croisée le libellé de l'absence (AT - accident du travail, CMO - congé
maladie ordinaire…). Genre, comme ça :

FEVRIER 2008
1er fév 2 fév 3 fév
Vincent AT AT
François CMO CMO
Paul CMO

J'arrive à un résultat approchant, en passant par une requête analyse
croisée, mais impossible ensuite de passer à un Etat. J'ai essayé d'exporter
sous Excel, mais c'est pire : les données croisées doivent être un agrégat
(compte ou somme). Et le VBA reste pour moi une langue orientale.
Je patine, merci du coup de main !



Si tu ne fais pas apparaître le mois au niveau de tes colonnes cela devrait marcher.

...
PIVOT Right("0" & Day([DateAbs]),2) In
("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","
27","28","29","30","31");

Et tu rends invisible à l'ouverture de ton état les numéros qui ne sont pas dans le mois.

PS:Elle te sert à quoi la table [CALENDRIER]
Avatar
Kolele
ReSalut Michel,

Merci pour la réponse que tu m'as apportée sur un autre fil. J'ai pu sortir
mon état.
En revanche, l'état est instable : si je change de mois (par un critère dans
la requête) et qu'il n'y a pas d'absence le 2 du mois (alors qu'il y en avait
dans la précédente sélectionne) -> bug : le moteur de la base de données ne
reconnaît pas "02" en tant que nom de champ.
Peut être que ta réponse ici pourrait m'aider mais je ne sais pas comment
l'utiliser : où est-ce que je mets le code que tu indiques ?
PIVOT Right("0" & Day([DateAbs]),2) In
("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","
27","28","29","30","31");

La table CALENDRIER sert à saisir rapidement les absences au jour le jour.
L'utilisateur choisit le mois sur un formulaire (qui renvoie la date du jour
par défaut) et saisit les noms et les types d'absences dans un
sous-formulaire.
Pour dire vrai, c'est la première fois que je manipule le temps (des jours,
des dates, des heures) et je ne sais pas trop comment structurer mes données.
Si tu as des tuyaux, preneur je suis.

Bien à toi, et encore merci (un week-end entier à mouronner là-dessus)
Pierre.


"Michel__D" a écrit :

Bonjour,

"Kolele" (pitipasdespam)> a écrit dans le message de news:
> Bonjour à tous,
> Mon problème est simple : faire un Etat joli, sur Access 2002, à partir de
> données croisées et non agrégées.
>
> Soit une Base gérant les absences du personnel.
> Une table PERSONNEL (CléPersonnel, NomPrénom)
> Une table CALENDRIER (CléCalendrier, date)
> Une table CATEGORIES ABSENCES (CléCatégorie, LibelléAbsence)
> Une table ABSENCES (CléAbsence, CléPersonnel, CléCalendrier, CléCatégorie)
>
> Cette dernière table est en relation avec les 3 premières et forme le côté
> plusieurs. Dans la table ABSENCES, un même agent va avoir plusieurs
> arrêts-maladie sur plusieurs jours de l'année.
>
> Mon désir : un Etat de synthèse présentant les absences du mois, sous forme
> de tableau croisé sans agrégation. En ligne, les noms des agents (Vincent,
> François, Paul…) ; en colonne, les jours du mois (01, 02…) ; en donnée
> croisée le libellé de l'absence (AT - accident du travail, CMO - congé
> maladie ordinaire…). Genre, comme ça :
>
> FEVRIER 2008
> 1er fév 2 fév 3 fév
> Vincent AT AT
> François CMO CMO
> Paul CMO
>
> J'arrive à un résultat approchant, en passant par une requête analyse
> croisée, mais impossible ensuite de passer à un Etat. J'ai essayé d'exporter
> sous Excel, mais c'est pire : les données croisées doivent être un agrégat
> (compte ou somme). Et le VBA reste pour moi une langue orientale.
> Je patine, merci du coup de main !

Si tu ne fais pas apparaître le mois au niveau de tes colonnes cela devrait marcher.

....
PIVOT Right("0" & Day([DateAbs]),2) In
("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","
27","28","29","30","31");

Et tu rends invisible à l'ouverture de ton état les numéros qui ne sont pas dans le mois.

PS:Elle te sert à quoi la table [CALENDRIER]




Avatar
Michel__D
Bonjour,

Hum, bon "PIVOT etc ..." devrait être la fin de ta requête d'analyse croisée
en mode SQL et en rajoutant le "In" tu fige à la fois le nombre de colonne
et leur libellé ce qui te permet ensuite de pouvoir créer un état basé sur
cette requête.

Je te conseille d'utiliser une donnée de type date lorsque tu veux manipuler
une valeur date.


Kolele a écrit :
ReSalut Michel,

Merci pour la réponse que tu m'as apportée sur un autre fil. J'ai pu sortir
mon état.
En revanche, l'état est instable : si je change de mois (par un critère dans
la requête) et qu'il n'y a pas d'absence le 2 du mois (alors qu'il y en avait
dans la précédente sélectionne) -> bug : le moteur de la base de données ne
reconnaît pas "02" en tant que nom de champ.
Peut être que ta réponse ici pourrait m'aider mais je ne sais pas comment
l'utiliser : où est-ce que je mets le code que tu indiques ?
PIVOT Right("0" & Day([DateAbs]),2) In
("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","
27","28","29","30","31");

La table CALENDRIER sert à saisir rapidement les absences au jour le jour.
L'utilisateur choisit le mois sur un formulaire (qui renvoie la date du jour
par défaut) et saisit les noms et les types d'absences dans un
sous-formulaire.
Pour dire vrai, c'est la première fois que je manipule le temps (des jours,
des dates, des heures) et je ne sais pas trop comment structurer mes données.
Si tu as des tuyaux, preneur je suis.

Bien à toi, et encore merci (un week-end entier à mouronner là-dessus)
Pierre.


"Michel__D" a écrit :

Bonjour,

"Kolele" (pitipasdespam)> a écrit dans le message de news:
Bonjour à tous,
Mon problème est simple : faire un Etat joli, sur Access 2002, à partir de
données croisées et non agrégées.

Soit une Base gérant les absences du personnel.
Une table PERSONNEL (CléPersonnel, NomPrénom)
Une table CALENDRIER (CléCalendrier, date)
Une table CATEGORIES ABSENCES (CléCatégorie, LibelléAbsence)
Une table ABSENCES (CléAbsence, CléPersonnel, CléCalendrier, CléCatégorie)

Cette dernière table est en relation avec les 3 premières et forme le côté
plusieurs. Dans la table ABSENCES, un même agent va avoir plusieurs
arrêts-maladie sur plusieurs jours de l'année.

Mon désir : un Etat de synthèse présentant les absences du mois, sous forme
de tableau croisé sans agrégation. En ligne, les noms des agents (Vincent,
François, Paul...) ; en colonne, les jours du mois (01, 02...) ; en donnée
croisée le libellé de l'absence (AT - accident du travail, CMO - congé
maladie ordinaire...). Genre, comme ça :

FEVRIER 2008
1er fév 2 fév 3 fév
Vincent AT AT
François CMO CMO
Paul CMO

J'arrive à un résultat approchant, en passant par une requête analyse
croisée, mais impossible ensuite de passer à un Etat. J'ai essayé d'exporter
sous Excel, mais c'est pire : les données croisées doivent être un agrégat
(compte ou somme). Et le VBA reste pour moi une langue orientale.
Je patine, merci du coup de main !


Si tu ne fais pas apparaître le mois au niveau de tes colonnes cela devrait marcher.

....
PIVOT Right("0" & Day([DateAbs]),2) In
("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","
27","28","29","30","31");

Et tu rends invisible à l'ouverture de ton état les numéros qui ne sont pas dans le mois.

PS:Elle te sert à quoi la table [CALENDRIER]





Hum, bon "PIVOT etc ..." devrait être la fin de ta requête d'analyse croisée
et en rajoutant le "In" tu fige à la fois le nombre de colonne et son libellé
ce qui te permet ensuite de pouvoir créer ton état basé sur cette requête.