Filtrage sur mois() dans ACCESS [Résolu/Fermé]

Signaler
-
Messages postés
1045
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 mars 2014
-
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

Messages postés
1045
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 mars 2014
108
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
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
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]);
Messages postés
1045
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 mars 2014
108
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
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
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
Messages postés
1045
Date d'inscription
mercredi 30 avril 2008
Statut
Membre
Dernière intervention
5 mars 2014
108
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