Afficher tous les mois entre 2 dates [Résolu]

langenbrunner 5 Messages postés mardi 14 juin 2005Date d'inscription 23 décembre 2005 Dernière intervention - 21 juil. 2005 à 15:30 - Dernière réponse : langenbrunner 5 Messages postés mardi 14 juin 2005Date d'inscription 23 décembre 2005 Dernière intervention
- 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 ?
Afficher la suite 

6 réponses

langenbrunner 5 Messages postés mardi 14 juin 2005Date d'inscription 23 décembre 2005 Dernière intervention - 25 juil. 2005 à 12:06
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
cs_David_wklw 48 Messages postés samedi 18 novembre 2000Date d'inscription 24 mars 2006 Dernière intervention - 21 juil. 2005 à 15:39
0
Utile
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 ?
langenbrunner 5 Messages postés mardi 14 juin 2005Date d'inscription 23 décembre 2005 Dernière intervention - 21 juil. 2005 à 15:49
0
Utile
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 ?
Molenn 797 Messages postés mardi 7 juin 2005Date d'inscription 23 février 2011 Dernière intervention - 21 juil. 2005 à 16:57
0
Utile
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
langenbrunner 5 Messages postés mardi 14 juin 2005Date d'inscription 23 décembre 2005 Dernière intervention - 22 juil. 2005 à 10:14
0
Utile
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"
vinkaa 3 Messages postés mardi 19 août 2003Date d'inscription 22 juillet 2005 Dernière intervention - 22 juil. 2005 à 18:55
0
Utile
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...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.