Filtrage sur mois() dans ACCESS

Résolu/Fermé
JV-Vierzon - 30 mars 2011 à 18:49
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 - 8 avril 2011 à 10:26
Bonjour,

Sous access, dans une requête, je veux filtrer des dates avec les fonctions Mois() et Année().
J'ai un champ "Date", j'ai créé 2 champs:
- Année: Année([Date]) avec condition de filtrage [Année :]
- Mois: Mois([Date]) avec condition de filtrage <[N° du mois ?]
A l'exécution de cette requête, le filtrage fonctionne pour l'année (enregistrements de l'année entrée à la question [Année:]) mais pas pour le mois: par exemple,en entrant 2 (février), l'affichage me donne les enregistrements de janvier (bon) mais aussi ceux d'ocobre (10), novembre (11) et décembre (12);
Comme si mois() était une valeur alpha-numérique...
Avec [N° du mois ?] (égal), cela fonctionne.
Où est l'erreur ?
Merci d'avance.

4 réponses

Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
30 mars 2011 à 20:21
Bonsoir JV-Vierzon,

En adaptant cette requête, vous travaillerez uniquement sur le champ date.
Et, donc, si vous saisissez :12 en tant que tantième et : 2010 en tant que millésime, vous listerez diredtement les enregistrement de décembre 2010.

SELECT TRANSACTIONS.DateSaisie, TRANSACTIONS.RéfValeur, DatePart("m",[Datesaisie]) AS Mois, DatePart("yyyy",[Datesaisie]) AS Millésime
FROM TRANSACTIONS
WHERE (((DatePart("m",[Datesaisie]))=[ Tantième du mois ? ]) AND ((DatePart("yyyy",[Datesaisie]))=[ Millésime ? ]))
ORDER BY DatePart("m",[Datesaisie]);

Cordialement
0
Bonjour Jean-Jacques

Je vous remercie pour la rapidité de votre réponse.
Mais j'ai toujours le même problème: cette requête fonctionne bien pour rechercher les enregistrements d'un mois donné:

SELECT [26_01_ProduitsColis].N°Annuaire, [26_01_ProduitsColis].Date, DatePart("m",[Date]) AS Mois
FROM 26_01_ProduitsColis
WHERE (((DatePart("m",[Date]))=[ Tantième du mois ? ]) AND ((DatePart("yyyy",[Date]))=[ Millésime ? ]))
ORDER BY DatePart("m",[Date]);

Mais pour filtrer les enregistrements des mois antérieurs:

SELECT [26_01_ProduitsColis].N°Annuaire, [26_01_ProduitsColis].Date, DatePart("m",[Date]) AS Mois
FROM 26_01_ProduitsColis
WHERE (((DatePart("m",[Date]))<[ Tantième du mois ? ]) AND ((DatePart("yyyy",[Date]))=[ Millésime ? ]))
ORDER BY DatePart("m",[Date]);

Pour un millésime de valeur 2 (février), les enregistrements des mois 2 à 9 sont effectivement bloqués mais pas pour les mois 10, 11 et 12.
Hors ces nombres, valeur du mois, sont numériques (?) et 10 à 12 devraient ne pas être considéré comme <2.
Le filtre semble alphabétique en considérant ces valeurs comme chaine de caractère : "2" est effectvement plus grand que "10", "11" et "12" qui commencent par 1.

Merci d'avance pour vos lumières.
Jean
0
Bonjour
Voici un exemple de requete parametre
ou tu indique le choix du mois et de l'année

SELECT TRANSACTIONS.Datesaisie, DatePart("m",[Datesaisie]) AS Mois, DatePart("yyyy",[Datesaisie]) AS Années
FROM TRANSACTIONS
WHERE (((DatePart("m",[Datesaisie]))=[Quel Mois]) AND ((DatePart("yyyy",[Datesaisie]))=[Quelle Année]))
ORDER BY DatePart("m",[Datesaisie]);
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
2 avril 2011 à 16:15
Bonjour JV-Vierzon,

Faute de mieux, voici une solution approchante.
Car il apparait que l'argument <= est strictement respecté, alors que, étrangement, < utilisé seul ne l'est pas......
Je vous laisse apprécier, ou pas...

SELECT TRANSACTIONS.DateSaisie, TRANSACTIONS.RéfValeur, DatePart("m",[Datesaisie]) AS Mois, DatePart("yyyy",[Datesaisie]) AS Millésime
FROM TRANSACTIONS
WHERE (((DatePart("m",[Datesaisie]))<=[ Tantième du mois ? ]) AND ((DatePart("yyyy",[Datesaisie]))=[ Millésime ? ]));

Cordialement
0
Bonjour JV-Vierzon,

Les puristes n'apprécierons que modérémment, mais ... ça fonctionne ...
- En insérant - 1 après -> [ Tantième du mois ? ]-1
La requête liste les enregistrements antérieurs à la valeur du tantième de mois saisi ...


SELECT TRANSACTIONS.DateSaisie, TRANSACTIONS.RéfValeur, DatePart("m",[Datesaisie]) AS Mois, DatePart("yyyy",[Datesaisie]) AS Millésime
FROM TRANSACTIONS
WHERE (((DatePart("m",[Datesaisie]))<=[ Tantième du mois ? ]-1) AND ((DatePart("yyyy",[Datesaisie]))=[ Millésime ? ]))
ORDER BY DatePart("m",[Datesaisie]);

Cordialement
0
Bonjour Jean-Jacques.

Merci pour votre aide qui m'a aidé dans cette recherche. La solution suivante fonctionne:

SELECT [26_01_ProduitsColis].N°Annuaire, [26_01_ProduitsColis].Date, DatePart("m",[Date]) AS Mois, DatePart("yyyy",[Date]) AS Année
FROM 26_01_ProduitsColis
WHERE (((DatePart("m",[Date]))<Val([N° du mois :])) AND ((DatePart("yyyy",[Date]))=[Année :]))
ORDER BY DatePart("m",[Date]);

L'utilisation de la fonction VAL() force la mise ne numérique de mes données dans [N° du mois :].
Je pense que c'est équivalent au -1 proposé (solution que j'ai déjà utilisé dans Excel lors de copier-coller pour forcer les valeurs à être en numérique: Collage spécial/Multiplier dans une colonne remplie de 1).

Ce qui est bizarre, c'est que la valeur, toujours un chiffre, entrée dans la variable [N° du mois :] soit considérée, par défaut, comme une chaîne de caractère par ACCESS et qu'il puisse la comparer à une valeur normalement numérique: Mois().

Mon retour dans les bases de données que j'avais quittées il y a quelques années (DBase sur Amstrad) est bien laborieux.

Par contre, il n'y avait pas à cette époque d'Internet et de forums comme le votre qui sont d'une grande aide.

Merci à ceux qui donne de leur temps pour nous aider.

Amicalement.

JV-Vierzon
0
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
8 avril 2011 à 10:26
Bonjour JV-Vierzon,

Val() : Je m'en veux, c'est tellement évident !

A propos de AMSTRAD, la pédégère de la grande époque, Marion VANNIER, vit à présent de ses rentes(!). Elle évoque dans des reportages les débuts héroïques de la marque ainsi que la fin plutôt discrète de cette entreprise.
J'ai aussi connu DBASE IV. A l'époque, je pensais qu'il n'y aurait jamais mieux .... Tout comme pour AMSTRAD d'ailleurs .....

Conclusion : Nous vivons une époque intéressante

Bonne journée
0