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 :

Le code Sur clic du bouton btnFin est très proche :

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 :

Vous souhaitez tester ça tout de suite ? Cliquez sur le titre de l’article puis téléchargez la base exemple, en annexe.

Info
Cette procédure devient inutile avec Access 2007 : dans cette version, tout champ de table de type Date/Heure est automatiquement associé à un calendrier. Il n’y a rien de spécial à faire. Cool !

Vous aimerez aussi...

4 réponses

  1. kenn dit :

    on felicite de cet site pour donner des instruction à nos debutant en programmation,je remercie beaucoup

  2. Hervé Inisan dit :

    egg1 > Il y a 2 solutions (au moins) :

    1. Garder la requête, et remplacer les paramètres par Entre Forms[frmTestCalendrier]![txtDebut] Et Forms![frmTestCalendrier]![txtFin]
    2. Garder la requête, enlever son critère sur les dates, et ouvrir le formulaire (celui à filtrer) par un 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.

  3. egg91 dit :

    ç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

  4. laurent dit :

    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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *