Calendrier paramétrable
Est-il possible d’utiliser le contrôle Calendrier Access (MSCal) pour renseigner automatiquement des dates dans un autre formulaire ?
Vous voyez ci-dessous un exemple fonctionnel.
Le principe :
- L’utilisateur doit saisir une date (dans le formulaire Test Calendrier). Il la tape directement ou peut cliquer sur le bouton « … » qui ouvre le second formulaire (Calendrier).
- Dans ce formulaire, on clique sur une date, puis sur le bouton OK pour valider. La date du calendrier est alors attribuée au champ du 1er formulaire.
Le formulaire de test
Ce formulaire s’appelle frmTestCalendrier
et comporte 4 objets, qui sont :
Objet | Nom de l’objet dans la fenêtre de Propriétés |
---|---|
un champ pour la saisie de la date de début | txtDebut |
un champ pour la saisie de la date de fin | txtFin |
un bouton pour ouvrir le calendrier et renseigner la date de début | btnDebut |
un bouton pour ouvrir le calendrier et renseigner la date de fin | btnFin |
Le problème est : comment le calendrier identifiera le formulaire de test, ainsi que le champ à remplir ? On suppose pour cela que les boutons btnDebut
et btnFin
transmettent ces informations au calendrier, via le paramètre OpenArg
.
Le code Sur clic
du bouton btnDebut
est donc :
1 2 3 |
Private Sub btnDebut_Click() DoCmd.OpenForm "frmCalendrier", acNormal, , , , , "frmTestCalendrier!txtDebut" End Sub |
Le code Sur clic
du bouton btnFin
est très proche :
1 2 3 |
Private Sub btnFin_Click() DoCmd.OpenForm "frmCalendrier", acNormal, , , , , "frmTestCalendrier!txtFin" End Sub |
Le formulaire Calendrier
Ce formulaire s’appelle frmCalendrier
et comporte 3 objets :
Objet | Nom de l’objet dans la fenêtre de Propriétés |
---|---|
un contrôle Calendrier (obtenu par le menu Insertion / Contrôle ActiveX) | Calendrier |
un bouton OK | btnOK |
un bouton Annuler | btnAnnuler |
C’est le code Visual Basic du bouton OK qui gère le transfert de la date choisie sur le formulaire de départ.
Dans les grandes lignes, il s’agit d’identifier le nom du formulaire de départ et le nom du champ de départ. Ces informations figurent dans la propriété OpenArg
(suite aux appels OpenForm
plus haut), et on suppose que les 2 noms (formulaire et champ) sont séparés par un point d’exclamation (pourquoi pas ?).
D’où le code du bouton btnOk
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Private Sub btnOK_Click() Dim strForm As String, strChamp As String Dim intI As Integer If Not IsNull(Me.OpenArgs) Then ' Identifier les champs intI = InStr(1, Me.OpenArgs, "!", vbTextCompare) If intI <> 0 Then strForm = Left(Me.OpenArgs, intI - 1) strChamp = Mid(Me.OpenArgs, intI + 1) ' Affecter la date au champ passé en argument Forms(strForm)(strChamp) = Me!Calendrier.Value End If End If ' Fermer le formulaire DoCmd.Close End Sub |
Vous souhaitez tester ça tout de suite ? Cliquez sur le titre de l’article puis téléchargez la base exemple, en annexe.
on felicite de cet site pour donner des instruction à nos debutant en programmation,je remercie beaucoup
egg1 > Il y a 2 solutions (au moins) :
Entre Forms[frmTestCalendrier]![txtDebut] Et Forms![frmTestCalendrier]![txtFin]
DoCmd.OpenForm
avec une condition WHERE. Du genre :DoCmd.OpenForm "le formulaire", acNormal, , "[La date du formulaire] BETWEEN " & DateUS(Me![txtDebut]) & " AND " & DateUS(Me![txtFin])
DateUs() est une fonction de conversion des dates que tu trouveras sur cette page.
ça marche bien le formulaire frmcalendrier et frmtestcalendrier mais que faut-il faire ensuite pour passer ces deux dates txtdebut txtfin à une requete de style Entre [Saisir la date de Début] Et [Saisir la date de Fin]
(je voudrais enlever cette requete moche par un beau formulaire comme frmtestcalendrier et envoyer ces critères de requete pour ouvrir le formulaire résultat.
J’ai créé un bouton sur frmtestcalendrier qui doit envoyer les critères à la requete ou au formulaire résultat ?
PS : J’ai ACCESS 2003 SP3
Bonjour et merci pour tous ces tuyaux biens précieux quand on démarre sur Access.
Ce billet sur les calendriers répond en partie à ma recherche mais pas complètement…
J’ai un formulaire qui gère des rendez-vous et un formulaire de menu sur lequel je souhaite insérer un contrôle Calendrier. Je voudrais que les dates occupées soient identifiées par une couleur spécifique dans le calendrier et que un double clic sur une date ouvre soit l’enregistrement du formulaire rendez-vous qui a la même date, soit le formulaire rendez-vous sur un nouvel enregistrement si la date est libre…
J’espère que mes explications ne sont pas trop confuses et surtout que quelqu’un pourra m’aider sur ce coup là…
D’avance merci beaucoup.
Laurent