Malheureusement tu n'as pas le choix de faire du VBA pour atteindre le but que tu t'es fixé.
Voici une
partie d'une solution que j'utilise régulèrement. Il s'agit d'ouvrir un formulaire dans l'évennement (cancellable) Report_Open du rapport.
Donc tu créer un formulaire (nommé frmPickDates) avec deux champs indépendants (txtDateDebut, txtDateFin) formatés pour recevoir une date (genre aaaa-mm-jj), un bouton OK (cmdOk) et un Annuler (cmdAnnuler). En formatant les champs tu bénéficies de la gestion d'erreur d'Access empêchant l'usager d'entrer autre chose qu'une date.
Voici le code à mettre dans le formulaire:
Code :
Private m_bCancel As Boolean
Option Compare Database
Option Explicit
Public Property Get UserCancelled() As Boolean
UserCancelled = m_bCancel
End Property
Private Sub cmdAnnuler_Click()
m_bCancel = True
Me.Visible = False
End Sub
Private Sub cmdOk_Click()
m_bCancel = False
Me.Visible = False
End Sub
Private Sub Form_Activate()
m_bCancel = True 'Au cas où le formulaire serait fermé par ALT-F4
End Sub
Voici le code à mettre dans le rapport:
Code :
Option Compare Database
Option Explicit
Private Sub Report_Open(Cancel As Integer)
Const FRM_PICK As String = "frmPickDates"
DoCmd.OpenForm FRM_PICK, , , , , acDialog
If CurrentProject.AllForms(FRM_PICK).IsLoaded Then
If Forms(FRM_PICK).UserCancelled = True Then
Cancel = True
End If
Else
Cancel = True
End If
End Sub
Tu dois baser les requêtes de tes rapports sur les champs du formulaire de cette façon:
Code :
SELECT ... WHERE MonChampDate BETWEEN Forms("frmPickDates")!txtDateDebut AND Forms("frmPickDates")!txtDateFin
Note: en SQL pure sous Access les dates doivent être formattées mm-jj-aaaa. Cependant je pense que le constructeur de requêtes le fait pour toi. Ça reste à vérifier.
Étant donnée que le formulaire n'est jamais fermé (il est simplement rendu invisible), les dates sélectionnées par ton usager son toujours là. En VB c'est mal de laisser un formulaire ainsi puisque tu risques que l'application ne se termine pas sans utiliser la commande End (c'est mal d'utiliser cette commande pour terminer un programme VB). Sous Access ce n'est pas grave puisqu'il le ferme pour toi en fermant la BD.
_________________
HTH

This posting is provided "AS IS" with no warranties, and confers no rights cr*sse!