Pb de syntaxte pour afficher une valeur dans un sous-formulaire
11 réponses
Pierre REIT
Bonjour à tous,
J'ai un formulaire F contenant un sous-formulaire SF.
Dans le sous-formulaire j'essaye de récupérer la date issue d'un calendrier
(source ici http://officesystem.access.free.fr/ex_calendrier1.htm.)
Quand je sélectionne une date sur le calendrier en ouvrant le
sous-formulaire SF ça fonctionne bien, quand je sélectionne la date à partir
du formulaire F ça ne fonctionne pas, rien ne s'affiche.
Je pense que j'ai un problème de syntaxte dans le code ci-dessous pour
indiquer que la date doit arriver dans le champ date du sous-formulaire SF :
Private Sub Calendar0_Click()
Dim frm As String
Dim ctl As String
On Error GoTo Err_Args
frm = Mid(Me.Caption, 1, InStr(1, Me.Caption, "!") - 1)
ctl = Mid(Me.Caption, InStr(1, Me.Caption, "!") + 1)
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo Err_Args
Forms(frm)(ctl) = Me.Calendar0
Err_Args:
End Sub
Merci pour votre aide.
PierreR (Débutant, en progrès mais peu mieux faire)
Toutes mes excuses pour ne pas d'avoir remercié plus tôt pour ton code qui fonctionne correctement.
Seulement comme j'ai plusieurs champs dates à renseigner je voudrais savoir si l'on peut faire une fonction, pour ne pas mettre le code à chaque contrôle, et comment le faire ?
Pa railleur sur un champ je voudrais mettre le mois et l'année seulement « nov-2006 » est-ce possible ?
Merci pour ton aide.
Salutations
Bonjour Jacques,
(A améliorer)
Soit un formulaire Form1 contenant un sous-formulaire Form2 et un formulaire calendrier avec un controle nommé Calendar0. Pour pouvoir utiliser le calendrier aussi bien avec le formulaire Form1 incluant le sous-form Form2 et avec Form2 utilisé seul, le code pourrait être le suivant:
1-Sur l'évènement Double-clic du champ de type Date présent (ici DateFacture) dans form2 (mis en sous-formulaire ou autonome):
Private Sub DateFacture_DblClick(Cancel As Integer) On Error GoTo Err_Calendrier ' gestion d'erreur simplifiée DoCmd.OpenForm "calendrier" Forms("calendrier").Caption = Me.Parent.Name & _ "!" & Me.Name & "!" & Me.DateFacture.Name Exit Sub Err_Calendrier: If Err.Number = 2452 Then Forms("calendrier").Caption = Me.Name & _ "!" & Me.DateFacture.Name Else Forms("calendrier").Caption = Me.Parent.Name & _ "!" & Me.Name & "!" & Me.DateFacture.Name End If Resume Next End Sub
2-Sur l'évènement clic du contrôle Calendar0 du formulaire Calendri er:
Private Sub Calendar0_Click() Dim frm As String, frmPere As String Dim ctl As String Dim sep1 As Integer, sep2 As Integer sep1 = InStr(1, Me.Caption, "!") sep2 = InStrRev(Me.Caption, "!") If sep1 <> sep2 Then frmPere = Mid(Me.Caption, 1, sep1 - 1) frm = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ctl = Mid(Me.Caption, sep2 + 1) Forms(frmPere)(frm)(ctl) = Me.Calendar0 Else frm = Mid(Me.Caption, 1, sep1 - 1) ctl = Mid(Me.Caption, sep1 + 1) Forms(frm)(ctl) = Me.Calendar0 End If DoCmd.Close End Sub
(PS: En partant du principe que Form2 ne contient pas, à son tour, un sous-formulaire avec un champ de type Date)
Bonsoir,
Je me permet d'utiliser ce fil pour poser une question,
Comment faire pour grouper les deux procédures ( l'une avec un formulaire seulement, et l'autre avec un formulaire et un sous formulaire) afin de ne pas utiliser deux calendriers lorsqu'on à les deux cas dans son application.
Salutations
Genial ! Merci beaucoup PierreR
Bonjour Pierre,
Sur l'évènement Chargement du formulaire calendrier: Private Sub Form_Load() Me.Calendar0.Value = Date End Sub
Bonjour Eric Maintenant, ca fonctionne bien. Merci pour les compélements d'information. En fait, un retour chariot malencontreux s'était inséré dans to n code et faisait une erreur sur la ligne If IsNull(frm)... Par ailleurs saurait tu faire en sorte qu'à l'affichage, le calendr ier affiche la date du jour ? J'ai cherché, mais je n'ai pas trouvé. Il faut dire que la logique d'Access ne m'est vraiment pas familière. Merci encore. PierreR
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl =fr
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl= fr
Bonjour Eric,
Toutes mes excuses pour ne pas d'avoir remercié plus tôt pour ton
code qui fonctionne correctement.
Seulement comme j'ai plusieurs champs dates à renseigner je voudrais
savoir si l'on peut faire une fonction, pour ne pas mettre le code à
chaque contrôle, et comment le faire ?
Pa railleur sur un champ je voudrais mettre le mois et l'année
seulement « nov-2006 » est-ce possible ?
Merci pour ton aide.
Salutations
Bonjour Jacques,
(A améliorer)
Soit un formulaire Form1 contenant un sous-formulaire Form2 et un
formulaire calendrier avec un controle nommé Calendar0.
Pour pouvoir utiliser le calendrier aussi bien avec le formulaire Form1
incluant le sous-form Form2 et avec Form2 utilisé seul, le code pourrait
être le suivant:
1-Sur l'évènement Double-clic du champ de type Date présent (ici
DateFacture) dans form2 (mis en sous-formulaire ou autonome):
Private Sub DateFacture_DblClick(Cancel As Integer)
On Error GoTo Err_Calendrier ' gestion d'erreur simplifiée
DoCmd.OpenForm "calendrier"
Forms("calendrier").Caption = Me.Parent.Name & _
"!" & Me.Name & "!" & Me.DateFacture.Name
Exit Sub
Err_Calendrier:
If Err.Number = 2452 Then
Forms("calendrier").Caption = Me.Name & _
"!" & Me.DateFacture.Name
Else
Forms("calendrier").Caption = Me.Parent.Name & _
"!" & Me.Name & "!" & Me.DateFacture.Name
End If
Resume Next
End Sub
2-Sur l'évènement clic du contrôle Calendar0 du formulaire Calendri er:
Private Sub Calendar0_Click()
Dim frm As String, frmPere As String
Dim ctl As String
Dim sep1 As Integer, sep2 As Integer
sep1 = InStr(1, Me.Caption, "!")
sep2 = InStrRev(Me.Caption, "!")
If sep1 <> sep2 Then
frmPere = Mid(Me.Caption, 1, sep1 - 1)
frm = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1)
ctl = Mid(Me.Caption, sep2 + 1)
Forms(frmPere)(frm)(ctl) = Me.Calendar0
Else
frm = Mid(Me.Caption, 1, sep1 - 1)
ctl = Mid(Me.Caption, sep1 + 1)
Forms(frm)(ctl) = Me.Calendar0
End If
DoCmd.Close
End Sub
(PS: En partant du principe que Form2 ne contient pas, à son tour, un
sous-formulaire avec un champ de type Date)
Bonsoir,
Je me permet d'utiliser ce fil pour poser une question,
Comment faire pour grouper les deux procédures ( l'une avec un
formulaire seulement, et l'autre avec un formulaire et un sous
formulaire) afin de ne pas utiliser deux calendriers lorsqu'on à les
deux cas dans son application.
Salutations
Genial !
Merci beaucoup
PierreR
Bonjour Pierre,
Sur l'évènement Chargement du formulaire calendrier:
Private Sub Form_Load()
Me.Calendar0.Value = Date
End Sub
Bonjour Eric
Maintenant, ca fonctionne bien.
Merci pour les compélements d'information.
En fait, un retour chariot malencontreux s'était inséré dans to n code et
faisait une erreur sur la ligne If IsNull(frm)...
Par ailleurs saurait tu faire en sorte qu'à l'affichage, le calendr ier
affiche la date du jour ? J'ai cherché, mais je n'ai pas trouvé. Il faut dire
que la logique d'Access ne m'est vraiment pas familière.
Merci encore.
PierreR
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl =fr
--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl= fr
Toutes mes excuses pour ne pas d'avoir remercié plus tôt pour ton code qui fonctionne correctement.
Seulement comme j'ai plusieurs champs dates à renseigner je voudrais savoir si l'on peut faire une fonction, pour ne pas mettre le code à chaque contrôle, et comment le faire ?
Pa railleur sur un champ je voudrais mettre le mois et l'année seulement « nov-2006 » est-ce possible ?
Merci pour ton aide.
Salutations
Bonjour Jacques,
(A améliorer)
Soit un formulaire Form1 contenant un sous-formulaire Form2 et un formulaire calendrier avec un controle nommé Calendar0. Pour pouvoir utiliser le calendrier aussi bien avec le formulaire Form1 incluant le sous-form Form2 et avec Form2 utilisé seul, le code pourrait être le suivant:
1-Sur l'évènement Double-clic du champ de type Date présent (ici DateFacture) dans form2 (mis en sous-formulaire ou autonome):
Private Sub DateFacture_DblClick(Cancel As Integer) On Error GoTo Err_Calendrier ' gestion d'erreur simplifiée DoCmd.OpenForm "calendrier" Forms("calendrier").Caption = Me.Parent.Name & _ "!" & Me.Name & "!" & Me.DateFacture.Name Exit Sub Err_Calendrier: If Err.Number = 2452 Then Forms("calendrier").Caption = Me.Name & _ "!" & Me.DateFacture.Name Else Forms("calendrier").Caption = Me.Parent.Name & _ "!" & Me.Name & "!" & Me.DateFacture.Name End If Resume Next End Sub
2-Sur l'évènement clic du contrôle Calendar0 du formulaire Calendri er:
Private Sub Calendar0_Click() Dim frm As String, frmPere As String Dim ctl As String Dim sep1 As Integer, sep2 As Integer sep1 = InStr(1, Me.Caption, "!") sep2 = InStrRev(Me.Caption, "!") If sep1 <> sep2 Then frmPere = Mid(Me.Caption, 1, sep1 - 1) frm = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ctl = Mid(Me.Caption, sep2 + 1) Forms(frmPere)(frm)(ctl) = Me.Calendar0 Else frm = Mid(Me.Caption, 1, sep1 - 1) ctl = Mid(Me.Caption, sep1 + 1) Forms(frm)(ctl) = Me.Calendar0 End If DoCmd.Close End Sub
(PS: En partant du principe que Form2 ne contient pas, à son tour, un sous-formulaire avec un champ de type Date)
Bonsoir,
Je me permet d'utiliser ce fil pour poser une question,
Comment faire pour grouper les deux procédures ( l'une avec un formulaire seulement, et l'autre avec un formulaire et un sous formulaire) afin de ne pas utiliser deux calendriers lorsqu'on à les deux cas dans son application.
Salutations
Genial ! Merci beaucoup PierreR
Bonjour Pierre,
Sur l'évènement Chargement du formulaire calendrier: Private Sub Form_Load() Me.Calendar0.Value = Date End Sub
Bonjour Eric Maintenant, ca fonctionne bien. Merci pour les compélements d'information. En fait, un retour chariot malencontreux s'était inséré dans to n code et faisait une erreur sur la ligne If IsNull(frm)... Par ailleurs saurait tu faire en sorte qu'à l'affichage, le calendr ier affiche la date du jour ? J'ai cherché, mais je n'ai pas trouvé. Il faut dire que la logique d'Access ne m'est vraiment pas familière. Merci encore. PierreR
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl =fr
-- A+ Eric http://www.mpfa.info/ Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl= fr