Afficher tous les mois entre 2 dates

Résolu
langenbrunner Messages postés 5 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 23 décembre 2005 - 21 juil. 2005 à 15:30
langenbrunner Messages postés 5 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 23 décembre 2005 - 25 juil. 2005 à 12:06
Bonjour,

J'utilise Access et j'aimerais faire une requete qui m'affiche tous les mois compris entre 2 dates saisies dans un formulaire.
Ce n'est pas Datediff() mais je pense que cette fonction pourrait etre utile.
Que dois je mettre dans le VBA ?
Quelqu'un peut m'aider ?

6 réponses

langenbrunner Messages postés 5 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 23 décembre 2005
25 juil. 2005 à 12:06
J'ai trouvé la solution. Il suffisait d'aller dans le menu option/paramètres et de saisir le format.

Ca prouve bien que Access, des fois, c'est bien de la merde.

Merci pour vos conseils qui m'ont bien aiguillés
3
cs_David_wklw Messages postés 48 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 24 mars 2006
21 juil. 2005 à 15:39
Es-tu sur de devoir utiliser du VBA ? A^s-tu essayé avec plusieurs critères dans ta requête en prenant garde de mettre les arguments de type date entre # comme #10/2/2005#.

Je ne saisis pas exactement ce que tu entends par afficher tous les mois entre deux dates. As-tu des mois en type texte dans une table ?
0
langenbrunner Messages postés 5 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 23 décembre 2005
21 juil. 2005 à 15:49
En fait depuis un formulaire ACCESS, il y a 2 zones de texte.
Tu saisis une date dans chacune des zones du type jj/mm/aaaa.

Tu cliques sur un bouton lance une requete faisant apparaitre tous les mois compris entre ces 2 dates.
exemple : 01/01/2000 et 30/05/2000 me fasse apparaitre janv - fev - mars- avril - mai.

Tu disais une table avec des mois en texte. Le truc est : est-ce qu'il va comprendre que fév - mars - avril sont compris entre janv et mai ?
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
21 juil. 2005 à 16:57
Tu pourrais sans doute faire quelque chose de simple.
Tes dates sont toujours du format jj/mm/aaaa ?
Tu récupères dans une variable Début le "mm" de ta date
Dans une variable Fin le "mm" de la date
avec la commande Mid(Date, 4,2)

Tu aurais donc par exemple : Début 01 et Fin 05

Tu crées une table toute simple avec un numéro auto et le mois en face :
Num - Mois
01 - Janv
02 - Fév
...

IL ne te reste plus qu'à créer une petite requête pour afficher le mois en fonction des numéros ...
ZoneTexte.text = ""
For x= Début to Fin step 1
'Tu ouvres un recordset avec une requête de ce style :
"SELECT Mois FROM Table WHERE Num=" & x
ZoneTexte.text = ZoneTexte.text & " - " & Rcdset.Fields("Mois")
Next
Rcdset.close

Ca devrait fonctionner, mais je n'ai pas le temps (ni le courage je l'avoue) de tester ça tout de suite :p

Molenn
0

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

Posez votre question
langenbrunner Messages postés 5 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 23 décembre 2005
22 juil. 2005 à 10:14
Bon j'y suis arrivé en créant une nouvelle table mois :

SELECT [mois].[le_mois]
FROM mois
WHERE ((([mois].[id_mois]) Between Formulaires!STATS_PAR_DATE!mois_deb And Formulaires!STATS_PAR_DATE!mois_fin));

Le truc maintenant est de rajouter ça dans ma requête d'analyse croisée.
A la base j'ai ça qui marche mais qui affiche tous les mois de l'année :



TRANSFORM Nz(Sum([AC_origine_union].[Total]),"") AS SommeDeTotal
SELECT [AC_origine_union].[MODE_RECEPTION] AS ORIGINE, Nz(Sum([AC_origine_union].[Total]),"0") AS [Total colonne]
FROM AC_origine_union
GROUP BY [AC_origine_union].[MODE_RECEPTION], [AC_origine_union].[ORDRE]
ORDER BY [AC_origine_union].[ORDRE]
PIVOT Format([DATE_RECL],"mmm") In ("janv","févr","mars","avr","mai","juin","juil","août","sept","oct","nov","déc");

et si je remplace la dernière ligne par ça ! bien sur ça marche pas :



PIVOT Format([DATE_RECL],"mmm") In (SELECT le_mois FROM mois WHERE mois.id_mois Between [AC_origine_union].[date_debut] And [AC_origine_union].[date_fin]);

J'ai droit à "entetes de colonnes fixes non valide"
0
vinkaa Messages postés 3 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 22 juillet 2005
22 juil. 2005 à 18:55
Bonjour,

Une solution pourrait être de traiter la requête d’analyse croisée sous forme de texte.




Ensuite, il est possible soit de créer une requête, soit d’exécuter directement la phrase SQL.







'Création d'une requête Access
'Les dates "01/02/2005" & "01/05/2005" peut être facilement remplacées
'par les valeurs du formulaire
Public Function CreateXQuery() As Boolean


On Error GoTo Err_Label


Dim dbs As DAO.Database, qdf As DAO.QueryDef


Dim strSQL As String





strSQL = RequeteX("01/02/2005", "01/05/2005")


If Len(strSQL) > 0 Then


Set dbs = Application.CurrentDb


Set qdf = dbs.CreateQueryDef("RAC_MyQuery", strSQL)


CreateXQuery = True


End If





Exit_Label:


Set qdf = Nothing


Set dbs = Nothing


Exit Function





Err_Label:


CreateXQuery = False


Resume Exit_Label


End Function





'Création de l'ensemble des mois à partir de deux dates
Public Function MonthsSet(ByVal dtmStartDate As Date, ByVal dtmEndDate As Date) As String


On Error GoTo Err_Label


Dim lngMonth As Long





For lngMonth = Month(dtmStartDate) To Month(dtmEndDate)


If Len(MonthsSet) > 0 Then MonthsSet = MonthsSet & ","


Debug.Print MonthName(lngMonth, True)


MonthsSet = MonthsSet & Chr$(34) & MonthName(lngMonth, True) & Chr$(34)


Next lngMonth





Exit_Label:


Exit Function





Err_Label:


MonthsSet = ""


Resume Exit_Label


End Function



'Création de la phrase SQL


Public Function RequeteX(ByVal dtmStartDate As Date, ByVal dtmEndDate As Date) As String


On Error GoTo Err_Label


Dim strMonthsSet As String





strMonthsSet = MonthsSet(dtmStartDate, dtmEndDate)


If Len(strMonthsSet) > 0 Then


RequeteX = "TRANSFORM Nz(Sum([AC_origine_union].[Total]),"") AS SommeDeTotal " & _


"SELECT [AC_origine_union].[MODE_RECEPTION] AS ORIGINE, " & _


"Nz(Sum([AC_origine_union].[Total]),'0') AS [Total colonne] " & _


"FROM AC_origine_union " & _


"GROUP BY [AC_origine_union].[MODE_RECEPTION], [AC_origine_union].[ORDRE] " & _


"ORDER BY [AC_origine_union].[ORDRE] " & _


"PIVOT Format([DATE_RECL],'mmm') " & _


"IN (" & strMonthsSet & ");"


End If





Exit_Label:


Exit Function





Err_Label:


RequeteX = ""


Resume Exit_Label


End Function

Vinkaa...
0
Rejoignez-nous