Est-il possible d'utiliser le contrôle Calendrier Access (MSCAL.Calendrier.7 ou 8) pour renseigner automatiquement des dates dans un autre formulaire ?
Pour utiliser ce qui suit, vous avez besoin de savoir taper du code Visual Basic dans
un module Access, compiler du code, et exécuter du code.
D'autre part, si le contrôle Calendrier n'est pas disponible sur votre machine,
relancez l'installation d'Access.
Vous voyez ci-dessous un exemple fonctionnel.
Le principe :
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 :
Private Sub btnDebut_Click() DoCmd.OpenForm "frmCalendrier", acNormal, , , , , "frmTestCalendrier!txtDebut" End Sub
Le code "Sur clic" du bouton btnFin est très proche :
Private Sub btnFin_Click() DoCmd.OpenForm "frmCalendrier", acNormal, , , , , "frmTestCalendrier!txtFin" End Sub
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 :
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 ?
Téléchargez la base d'exemple ! (20 Ko)