<Retour Grenier>

Début de page Question

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.

 

Début de page Réponse

Vous voyez ci-dessous un exemple fonctionnel.
Le principe :

 

Début de page 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 :

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

Début de page 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 :

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)