{Access} La date et le jour de la semaine

Fermé
Burgerdash - 9 janv. 2010 à 12:32
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 - 13 janv. 2010 à 20:04
Bonjour,
j'ai déjà fait appel à votre aide dans ce thread (https://forums.commentcamarche.net/forum/affich-16037923-access-tri-de-doublons Ayant un peu progressé, je suis confronté à de nouveaux ennuis, et je me suis dit qu'il valait mieux créer une nouveau thread car le problème n'est pas le même. Aurais-je du poster à la suite ?

J'ai dans ma base de données Access 2003 un champ "Date" où je saisis une date dans le format jj/mm/aaaa, et où elle apparaît ensuite sous le format "Nomdujour jj mois aaaa". Par nom du jour, j'entends lundi, mardi, mercredi... Impeccable, j'ai justement besoin de savoir combien de clients sont venus des lundis, combien des mardis, combien des mercredis... Malheureusement, le nom du jour s'affiche à l'écran sans être utilisable par la base de données ! En effet, je ne peux classer mes données dans une requête que par ordre bêtement chronologique, mais non les rassembler par jour de la semaine. Je ne sais pas si je suis vraiment clair. Dans le doute, rien ne vaut un bon exemple. Voici ce que je saisis dans ma table :

Clients | Date d'achat
Client 1 | 07/01/10
Client 2 | 08/01/10
Client 3 | 14/01/10
Client 4 | 16/01/10
Client 5 | 16/01/10

Voici ce qui s'affiche quand mon curseur sort du champ "Date d'achat" :

Clients | Date d'achat
Client 1 | samedi 7 janvier 2010
Client 2 | dimanche 8 janvier 2010
Client 3 | samedi 14 janvier 2010
Client 4 | lundi 16 janvier 2010
Client 5 | lundi 16 janvier 2010

Voici le type d'infos que je souhaiterais obtenir :

Lundi : 2 clients
Mardi : 0 client
Mercredi : 0 client
Jeudi : 0 client
Vendredi : 0 client
Samedi : 2 clients
Dimanche : 1 client
(dans un joli graphique bien sûr, mais ça après je sais faire)

Voici ce que j'arrive actuellement à obtenir :
Janvier : 5 clients
OU
07/01/10 : 1 client
08/01/10 : 1 client
14/01/10 : 1 client
16/01/10 : 2 clients

J'ai tenté une vieille tactique de sioux consistant à ajouter un champ "jour semaine" en regard de la date, où je recopie simplement le nom du jour de la semaine qui est affiché à côté. Mais :
1. c'est fastidieux à l'usage
2. j'ai l'impression d'utiliser un marteau pour ouvrir un oeuf Kinder (il existe certainement une fonction permettant d'éviter ces tracas... Hein ?)
3. mes données se retrouvent classées par ordre alphabétique du jour (Dimanche, jeudi, lundi...), et c'est moche.

... Est-ce que quelqu'un pourrait m'aider ? :x

32 réponses

blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 12:38
Salut,

regarde la fonction datepart, elle te permet d'extraire ce que tu veux d'une date...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 12:38
bonjour

1° tu as bien fais d'ouvrir un new post a chaque poste son probleme

alors pr ton probleme tu veux la somme de toute les personne venu un lundi pour un mois ?
ou
toutes les personnes venu un lundi en particulier?
0
blux, comment je "regarde la fonction datepart" ?

moiced59, en fait je veux avoir la somme de toutes les personnes venues un lundi depuis l'ouverture de ma base de données, pareil pour le mardi, le mercredi...

Jean-Jacques, je vais essayer ça tout de suite :) Merci pour votre aide.
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
9 janv. 2010 à 13:35
Bonjour Burgerdash,


Voici la syntaxe pour obtenir la valeur littérale de <Champ_date> :

Jour littéral : Format([<Champ_date>];"\ dddd")

- A saisir dans 'champ' de l'interface graphique .
- Ceci, combiné avec un regroupement, vous permettra d'obtenir le résultat recherché.

Cordialement
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 13:46
[Sorry pour le message au-dessus, manipulation foireuse... :x]

Blux, comment je "regarde la fonction datepart" ?

moiced59, en fait je veux avoir la somme de toutes les personnes venues un lundi depuis l'ouverture de ma base de données, pareil pour le mardi, le mercredi...

Jean-Jacques, je vais essayer ça tout de suite :) Merci pour votre aide.
0
blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 13:51
La fonction datepart est accessible dans l'aide...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 15:45
Blux, j'ai créé une requête contenant le champ "Date" avec l'opération Regroupement et le critère "DatePart(sem, date, vbMonday)", et un champ "Nombre de factures créées" avec l'opération Compte. D'une part je pense que je dois mettre quelque chose à la place de "date", mais je ne comprends pas quoi, et d'autre part Access m'oppose le message d'erreur suivant qui m'empêche d'enregistrer la requête : "L'expression entrée comporte une fonction dont le nombre d'arguments n'est pas correct."

Jean_Jacques, dois-je 1. créer une nouvelle requête en mode création
2. écrire cette formule dans la case en haut à gauche
3. remplacer <champ_date> par le nom du champ contenant les dates de création de factures
4. choisir l'opération "Regroupement" ?
Car si je fais ça, Access me rétorque que je fais une erreur de syntaxe...
0
blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 15:47
Il faut remplacer les paramètres de datepart par ceux que tu souhaites, c'est-à-dire la date sur laquelle tu veux que ce soit appliqué et le type de données que tu veux extraire (jour, mois, semaine...).
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
9 janv. 2010 à 16:36
burgerdash,

En effet, il faut remplacer <Champ_date> par le nom du champ qui contient l'information 'date'.
Je pensais cette convention connue ... Désolé.

Nota : Il faut copier l'intégralité de la ligne ci-dessous ! Et ce, quel que soit le mode, création ou modification ..
Jour littéral : Format([<Champ_date>];"\ dddd")

A+
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 15:49
Le top ca serais que tu creer un nouveau champ avec le nom du jour ex: jour et ensuite faire :

select count(client)
from ...
group by jour
0
blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 15:57
C'est pas recommandé dans une base relationnelle...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 16:03
baah meme avec des relations ca ne posera pas de pb je trouve ca simple a appliquer et cela servira tjs
0
blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 16:06
Si tu as une base avec 2 millionns de lignes, tu vas rajouter 2 millions de jours !
Quel gâchis, alors qu'on peut le recalculer quand on en a besoin...
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 16:30
Blux je suis désolé mais je comprends pas tes explications. Apparemment dans mon cas, dans "DatePart(intervalle, date [, premierjoursem] [, premièresemainean] )" je dois remplacer "intervalle" par "sem" pour solliciter un jour de la semaine, et "premierjoursem" par "vbMonday" car je veux que Lundi soit le premier jour de la semaine. La première semaine de l'année je m'en fous, et ce critère est facultatif. Ensuite, voici ce que me dit l'aide à propos de "date" :
"Argument date obligatoire. Variant (Date) à évaluer."
Ça vous paraît clair, vous ? Je soupçonne Microsoft d'avoir écrit sa documentation de manière à ce que seuls ceux qui savent déjà se servir du programme comprennent ^^
Concrètement, je dois remplacer "date" par "Nomdelatable_Nomduchamp" à traiter ?

Ced, c'est ce que j'ai tenté au début mais ça obligeait à recopier le nom du jour alors qu'il est affiché dans le champ voisin ! C'est bête, je suis sûr qu'Access peut faire ça tout seul !
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 16:47
Je ne vois pas a quoi va te servir le datepart ?
0
blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 17:08
Moi non plus, je me suis emmêlé les pinceaux depuis le début... :-)

C'est bien format qu'il faut utiliser, comme le disait Jean-Jacques, avec une nuance : comme nous sommes en SQL, il faut la version anglaise :

SELECT format(champ_date,"dddd") FROM ...

pour la date d'aujourd'hui, ça renvoie samedi.

Désolé de vous avoir enduits avec de l'erreur :-(
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112 > blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024
9 janv. 2010 à 17:42
Pour information,

Voici le copié/collé (adapté) de mon test SQL.
Il fonctionne correstement sous ma version Access 2000.

SELECT Month([<champ_date>]) AS N°, Format([<champ_date>],"\ dddd") AS [Jour littéral]
FROM <table> GROUP BY Month([<champ_date>]), Format([<champ_date>],"\ dddd");

A+
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 17:23
Ced, ben c'est sur les conseils de blux que j'essaye de l'utiliser... Le but est d'obtenir dans une requête des données classées par période de la semaine sans avoir à modifier les données de la table (car j'ai besoin de la date complète pour d'autres requêtes, et je veux éviter la redondance d'informations du genre

Date | Jour
samedi 7 janvier 2010 | Samedi

(qui est chiante pour le type qui doit saisir les informations au jour le jour, et qui prend de la place sur le serveur))
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 17:34
Ah d'accord XD Merci Ced d'avoir insisté, et merci blux d'avoir persévéré.

Bon, donc je ponds une colonne Date | Facture | Regroupement | SELECT format(Date,"dddd") FROM ... dans ma requête ?
Réaction d'Access : "Cette expression comporte une sous-requête erronée. Placez la sous-requête entre parenthèses."
Suis-je supposé remplacer les dddd ou ... par quelque chose ?
0
blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 17:37
Non, tu mets simplement format(la_date_que_tu_veux,"dddd") comme colonne.

Ce que j'ai donné était un simple exemple...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 17:46
re

je comprend plus rien avec le format du champ tu va obtenir le jour la ok mais ca il la deja apparement?
0
blux Messages postés 26299 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 19 septembre 2024 3 300
9 janv. 2010 à 17:49
D'après ce que j'ai compris, il n'a qu'une date complète, donc autant de pivots pour un group by...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 17:55
ah ok je croyais que ca date etait o format samedi 9 janvier 2010
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 18:04
Par contre j'ai testé mais le sql d'access ne supporte pas le Format
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 18:12
re

G rien dis ca marche j avais une reference manquante c pr ca que ca n'allais pas dsl!!!
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 18:17
https://www.imagup.com

à gauche, mes données de test dans la table Facture (il y a d'autres champs mais je les ai masqués pour aller à l'essentiel) ; à droite, ce que je voudrais obtenir dans une requête, pour ensuite peut-être, dans un monde parfait, en tirer un joli graphique.
Le champ entouré en orange est celui que je suis en train d'éditer. Voilà comment j'entre les données, voici comment elles s'affichent. Oki ?

Le fichier a été créé sous 2003, mais là je suis sur 2007 pour le week-end.
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 18:21
SELECT Count(lundi.nom) AS total, Format(date,'dddd') AS Expr1
FROM lundi
GROUP BY Format(date,'dddd')

tien cette requete fonctionne

adapte la a tes champ

le probleme c le order by !!!!! c trié par ordre alphabetique!!!
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 18:24
Ced, je ne sais pas utiliser SQL. J'écris quoi où, dans l'outil graphique de création de requête ?

Merci des efforts que vous faites pour m'aider, j'espère pouvoir prochainement vous renvoyer l'ascenseur.
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 18:25
donc ton champ date etait deja bien au format samedi 9 janvier 2009
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 18:27
Oui, mais en l'état je ne sais pas comment utiliser dans une requête ce "samedi" qui s'affiche. C'est là tout le trou du cul du problème, si vous me permettez.
0