Access - Expression pour requête

Access - Expression pour requête - Logiciels - Windows & Software

Marsh Posté le 26-03-2009 à 15:41:37    

Bonjour
Dans une requête Access, je dois sélectionner les dates inférieures au permier jour du mois en cours (par ex. <01/04/2009). C'est une requête qui doit être faite tous les mois.
Quelle expression employer, autre que par ex. <#01/04/09#, afin qu'elle soit établie une fois pour toute.
Merci d'avance pour vos réponses.
 :sarcastic:

Reply

Marsh Posté le 26-03-2009 à 15:41:37   

Reply

Marsh Posté le 27-03-2009 à 10:57:48    

Bonjour
 
<cdate("01/" & Mois(date()) & "/" & année(date()))
 
Cordialement


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-03-2009 à 12:15:30    

SuppotDeSaTante a écrit :

Bonjour
 
<cdate("01/" & Mois(date()) & "/" & année(date()))
 
Cordialement


 
 
Bonjour
OK merci beaucoup
 :)

Reply

Marsh Posté le 28-03-2009 à 10:24:54    

SuppotDeSaTante a écrit :

Bonjour
 
<cdate("01/" & Mois(date()) & "/" & année(date()))
 
Cordialement


 
Bonjour
 
N'ayant eu qu'une formation très basique d'ACCESS, je vais encore faire appel à tes connaissances pour me traduire une expression. Je dois sélectionner les enregistrements dont les dates sont supérieures au dernier jour du mois précédent (ex. >28/02/2009) ou nulle. Comment exprimer cette requête autrement que par :
Est Null Ou >#28/02/2009#
afin qu'elle soit établie une fois pour toute.
Peux-tu m'expliquer ce que signifie dans l'expression que tu m'as donnée précédemment : "01/" et "/"
 
Merci d'avance
Cordialement

Reply

Marsh Posté le 29-03-2009 à 20:31:23    

Bonjour
 
Pour le dernier jour du mois, c'est un peu plus compliqué. Le plus simple etant d'oter 1 au premier jour du mois (suivant, en cours, peu importe), histoire de tomber sur le 31, le 30, le 29 ou le 28 en fonction du mois.
 
En fait ce que je fais, c'est que je construit la date. Le "&" sert a concatener des valeurs. Le CDate() transforme une variable en variable de date (obligatoire pour filtrer sur des valeurs de type date)
Donc :
- Date() = la date du jour.
- Mois(Date()) = Le mois de la date du jour. Renvoie 3
- Année(Date()) = L'annee de la date du jour. Renvoie 2009
Si tu concatene tout ca avec "&" :
- "01/" & Mois(date()) & "/" & année(date()) = 01/3/2009
Mais cela reste sous forme de chaine. Pour le transformer en date, tu mets un CDate() devant :  
- cdate("01/" & Mois(date()) & "/" & année(date())) = 01/03/2009 en date.
 
Je te laisse regarder l'aide sur la fonction AjDate() qui, normalement, te permettra de repondre a ta question sur le dernier jour du mois. Je te donne pas la soluce direct, le but etant qd meme que tu piges ce que tu fais. Mais avec les indices que je t'ai donnés plus haut, tu devrais t'en sortir sans trop de mal.
Si tu as des questions, no soucy.
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 29-03-2009 à 20:32:04

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 11:47:03    

SuppotDeSaTante a écrit :

Bonjour
 
Pour le dernier jour du mois, c'est un peu plus compliqué. Le plus simple etant d'oter 1 au premier jour du mois (suivant, en cours, peu importe), histoire de tomber sur le 31, le 30, le 29 ou le 28 en fonction du mois.
 
En fait ce que je fais, c'est que je construit la date. Le "&" sert a concatener des valeurs. Le CDate() transforme une variable en variable de date (obligatoire pour filtrer sur des valeurs de type date)
Donc :
- Date() = la date du jour.
- Mois(Date()) = Le mois de la date du jour. Renvoie 3
- Année(Date()) = L'annee de la date du jour. Renvoie 2009
Si tu concatene tout ca avec "&" :
- "01/" & Mois(date()) & "/" & année(date()) = 01/3/2009
Mais cela reste sous forme de chaine. Pour le transformer en date, tu mets un CDate() devant :  
- cdate("01/" & Mois(date()) & "/" & année(date())) = 01/03/2009 en date.
 
Je te laisse regarder l'aide sur la fonction AjDate() qui, normalement, te permettra de repondre a ta question sur le dernier jour du mois. Je te donne pas la soluce direct, le but etant qd meme que tu piges ce que tu fais. Mais avec les indices que je t'ai donnés plus haut, tu devrais t'en sortir sans trop de mal.
Si tu as des questions, no soucy.
 
Cordialement


 
 
Bonjour,
 
J'ai écrit ceci :
Est Null Ou >CDate("01/" & Mois(Date()) & "/" & Année(Date()))-1
apparemment ça fonctionne.
Es-tu d'accord avec cette formule ? c'était obligatoire d'utiliser AjDate ??
 
Cordialement
 :)  

Reply

Marsh Posté le 31-03-2009 à 11:54:01    

Non pas de souci, c'etait juste interressant de regarder comment fonctionne les operations sur les dates ;)
La tu enleves un jour, c'est 'facile', maintenant si tu voulais enlever un mois...


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 14:16:01    

SuppotDeSaTante a écrit :

Non pas de souci, c'etait juste interressant de regarder comment fonctionne les operations sur les dates ;)
La tu enleves un jour, c'est 'facile', maintenant si tu voulais enlever un mois...


 
 
 
J'ai réécrit la formule avec AjDate :
 
Est Null Ou >AjDate("d";-1;("01/" & Mois(Date()) & "/" & Année(Date())))
 
Pour enlever un mois j'écrirais :
AjDate("m";-1;("01/" & Mois(Date()) & "/" & Année(Date())))
 
J'ai fait un autre essai :
Pour les dates supérieures au 28/02/2008 : >AjDate("yyyy";-1;("01/" & Mois(Date()) & "/" & Année(Date())))
 
Est-ce que tout cela est correct ?
 
 

Reply

Marsh Posté le 31-03-2009 à 14:34:57    

Oui et non.
 
Déjà, par reflexe, je mets un Cdate devant ma construction de date, mais bon, Access le tolere...
 
Ensuite, pour les dates superieures au 28/02/2008 euh... Bah la ta formule marche seulement jusqu'a demain hein, car on est Mars... Et encore, il aurait fallu mettre >= pour ca soit vrai. Car ta formule, pour aujourd'hui 31/03/2009 renvoie >01/03/2008, et donc pour etre >28/02/2008 il faudrait dire >=29/02/2008 (année bisextile ;) ) ou dans l'absolu (etant un exemple tu n'as pas du voir que c'etait une année bisextile) : >=01/03/2008
La ce que tu fais, c'est non pas les dates superieures au 28/02/2008 mais toutes les dates qui sont superieurs au 1er du mois en cours de l'annee d'avant celle en cours.

Message cité 1 fois
Message édité par SuppotDeSaTante le 31-03-2009 à 14:37:26

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 16:04:17    

SuppotDeSaTante a écrit :

Oui et non.
 
Déjà, par reflexe, je mets un Cdate devant ma construction de date, mais bon, Access le tolere...
 
Ensuite, pour les dates superieures au 28/02/2008 euh... Bah la ta formule marche seulement jusqu'a demain hein, car on est Mars... Et encore, il aurait fallu mettre >= pour ca soit vrai. Car ta formule, pour aujourd'hui 31/03/2009 renvoie >01/03/2008, et donc pour etre >28/02/2008 il faudrait dire >=29/02/2008 (année bisextile ;) ) ou dans l'absolu (etant un exemple tu n'as pas du voir que c'etait une année bisextile) : >=01/03/2008
La ce que tu fais, c'est non pas les dates superieures au 28/02/2008 mais toutes les dates qui sont superieurs au 1er du mois en cours de l'annee d'avant celle en cours.


 
 
C'est vrai effectivement en 2008 il y avait 29 jours en février.
En fait, ce que je dois faire tous les mois c'est : sélectionner les dates > au dernier jour du mois précédent moins 1 an (ex. en mars 2009 : les dates > au 29/02/2008, en avril 2009 : les dates > au 31/03/2008)
est-ce que    >=AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date())))  convient ??   :sarcastic:  

Reply

Marsh Posté le 31-03-2009 à 16:04:17   

Reply

Marsh Posté le 31-03-2009 à 16:14:57    

Tu n'es pas logique (sans reproche aucun hein)
 
Si je reprends ton expression :
AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date())))
 

  • CDate("01/" & Mois(Date()) & "/" & Année(Date())) renvoie : 01/03/2009
  • AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date()))) renvoie donc : 01/03/2008


Tout a l'heure tu as vu que pour enlever un jour un '-1' suffisait. Il faut donc enlever 1 à ton expression :
>=AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date())))-1
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 31-03-2009 à 16:18:17

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 01-04-2009 à 12:21:51    

SuppotDeSaTante a écrit :

Tu n'es pas logique (sans reproche aucun hein)
 
Si je reprends ton expression :
AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date())))
 

  • CDate("01/" & Mois(Date()) & "/" & Année(Date())) renvoie : 01/03/2009
  • AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date()))) renvoie donc : 01/03/2008


Tout a l'heure tu as vu que pour enlever un jour un '-1' suffisait. Il faut donc enlever 1 à ton expression :
>=AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date())))-1
 
Cordialement


 
 
Bonjour,  
 
Si je comprends bien, ce qui n'est pas du tout sûr !! ;) , aujourd'hui (le 1er avril 2009) >=AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date())))-1 signifie >ou = au 31/03/2008 mais je ne veux pas que le 31/03/2008 soit inclus, donc j'écris >AjDate("yyyy";-1;CDate("01/" & Mois(Date()) & "/" & Année(Date())))-1, ce qui signifie, je pense >au 31/03/2008. C'est ça ou je n'ai encore rien compris ??
Désolée de te solliciter aussi souvent, mais franchement je m'y perds dans toutes ces formules…
 

Reply

Marsh Posté le 01-04-2009 à 15:22:23    

T'inquietes aucun souci.
 
Et pour ta question : C'est exactement ca :jap:
 
Tu vois que tu t'en sors ;)


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 01-04-2009 à 16:00:36    

SuppotDeSaTante a écrit :

T'inquietes aucun souci.
 
Et pour ta question : C'est exactement ca :jap:
 
Tu vois que tu t'en sors ;)


 
 
OK Merci
à un de ces jours peut-être...... :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed