[Access]Problème date pour faire une recherche genre "mois dernier"

Problème date pour faire une recherche genre "mois dernier" [Access] - SQL/NoSQL - Programmation

Marsh Posté le 26-07-2004 à 16:24:49    

Bonjour! J'ai cherché sans réponse..alors je demande aux connaisseurs.
 
Je veux dans un formulaire, lister toutes les interventions faites chez un client sur une période saisie.
 
j'ai pour ça un formulaire de saisie de paramètres avec deux champs (txtdate1 et txtDate2). L'utilisateur clique sur rechercher et ça lance un form basé sur une requete type "select..... where dateInterv >= date1 and dateInterv <= txtDate2" ( pas complexe! )
 
Seulement voilà, pour faciliter les saisies de l'utilisateur, j'ai créé sur le form de saisie, trois boutons : "Intégralité";"Mois en cours"; "Mois Dernier"... quand par exemple l'utilisateur clique sur "Intégralité" , je remplis les champs txtDate1 par une 01/01/2004 et le champ txtDate2 par Date() comme cela ça balaye toutes les dates puisque la base n'a pas de date d'interventions inférieure au mois de juillet 2004.
 
Maintenant, là est ma question, comment faire pour les boutons "mois en cours, mois dernier "??? Ne sachant pas si la fin du mois est un 31 ou un 30 !!
 
Si je clique sur " Mois en Cours " voici mon code :
 
Form_MonForm.txtdate1.value = "01/"& Month(Date) & "/"& Year(Date)
Form_Monform.txtDate2.value = ??????
 
Voilà je sais pas comment faire parce que si je met 31 pour chaque mois ... il bug quand c'est un mois de 30 jours!
 
Si quelqu'un voit une autre façon de faire ou mon erreur? Merci

Reply

Marsh Posté le 26-07-2004 à 16:24:49   

Reply

Marsh Posté le 26-07-2004 à 16:42:20    

il faut pas le faire comme ça ...
Il faut que la traduction de 'mois en cours' ou 'mois dernier' soit dans le code, sous la forme d'une date: YYYYMM (année / mois), et que ta requête soit adaptée (comparaison uniquement sur mois / année).

Reply

Marsh Posté le 26-07-2004 à 18:03:39    

bonjour,
une petite idée que tu pourrais essayer comme ça...
solution 1
date(01&(mois en cours+1)&année en cours) -1 jour ???
 
solution 2  
au lieu de prendre le dernier jour du mois, tu prends le premier jour du mois suivant, avec un inférieur strict...cela revient à la solution de beegee je crois
 
je ne sais pas du tout comment cela peut se traduire avec Access ou VB, je n'ai pas ça a disposition...
 
qu'en penses-tu ?


Message édité par dalcap le 26-07-2004 à 18:05:03
Reply

Marsh Posté le 26-07-2004 à 19:11:21    

ce que je proposais était plus proche de l'apsect fonctionnel, ça revient à comparé les seules infos qu'on souhaite vraiment comparer (mois et année dans le cas du 'mois en cours' par exemple).
 
Mais la solution 1 de dalcap est intéressante, car elle permet de garder la même requête ;)

Reply

Marsh Posté le 27-07-2004 à 08:59:32    

merci ;)
 
reste à savoir ce qui sera le plus facile à mettre en oeuvre dans son programme...
 
bon courage

Reply

Marsh Posté le 27-07-2004 à 09:13:17    

Bonjour à vous deux et un grand merci de vous occuper de mon cas !
 
La solution de Beegee je ne peux pas l'adapter parce qu'ils peuvent avoir à faire des bilans d'interventions sur 15 jrs voir une semaine ! Alors j'ai besoin des jours dans ma requête !  
 
Je vais essayer la solution de dacalp et je vous dis:
 
date(01&(mois en cours+1)&année en cours) -1 jour
 
;) @ tt'
 
 
 
 

Reply

Marsh Posté le 27-07-2004 à 09:15:14    

je viens de penser...  
 
date(01&(mois en cours+1)&année en cours) -1
 
... quand le " mois en cours" ce sera le mois décembre.. -> moisencours +1 ça va donner treize??

Reply

Marsh Posté le 27-07-2004 à 09:54:51    

peut-être faudra-t-il rajouter un modulo, tu as raison,
 
toutefois, il faut tester... si le format date est bien géré, il se peut qu'il mette janvier 2005 au lieu de 13 (pour décembre 2004 +1)...


Message édité par dalcap le 27-07-2004 à 09:55:54
Reply

Marsh Posté le 27-07-2004 à 11:40:48    

y a pas des fonctions Access qui permettent d'ajouter 1 mois à une date ??? plutôt que de faire une concaténation à la main ...

Reply

Marsh Posté le 27-07-2004 à 12:01:37    

alors... j'ai essayé ta solution mais je n'y suis pas arriver parce que je ne vois pas quelle syntaxe utiliser!
 
Alors je me suis fait un module avec une fonction qui quand je lui passe un mois en paramètre me renvoie la fin de ce mois! J'ai géré pour le cas ou on est en janvier (1-1=0) et pour les années bissextiles ( j'aurai pu faire mieux avec les multiples de 4 etc... mais bon) je mets la fonction si ça intéresse quelqu'un...  
 

Citation :


 
 
Public Function finmois(mois As Integer) As String
 
If mois = 0 Then
    mois = 12
End If
    Select Case (mois)
 
        Case 1, 3, 5, 7, 8, 10, 12
            finmois = "31/" & mois
        Case 2
            Select Case Year(Date)
            Case 2008, 2012, 2016, 2020, 2024, 2028, 2032, 2036
                finmois = "29/" & mois
            Case Else
                finmois = "28/" & mois
            End Select
        Case 4, 6, 9, 11
            finmois = "30/" & mois    
    End Select
 
End Function
 
exemple utilisation de la fct ->
Pour savoir le mois dernier :
 
Me.txt.Value = Format(MonModule.finmois(Month(Date) - 1) & "/" & Year(Date), "dd/mm/yyyy" )
 
renvoie " 30/06/2004 "


 
Je n'ai pas la prétention de dire que cette fonction est nikel je ne sais même pas si elle marche pour TOUS les cas mais si elle peut aider ou inspirer quelqu'un tant mieux!
 
Salut  :hello:

Reply

Sujets relatifs:

Leave a Replay

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