Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb de syntaxte pour afficher une valeur dans un sous-formulaire

11 réponses
Avatar
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)

10 réponses

1 2
Avatar
Pierre REIT
C'est aussi peut être dans ce code associé au champ DATE du sous-formulaire
que j'ai un problème :

Private Sub Madate_DblClick(Cancel As Integer)
DoCmd.OpenForm "calendrier"
Forms("calendrier").Caption = Me.Name & "!" & Me.Madate.Name
End Sub
Avatar
Eric
Bonsoir Pierre,

Si j'ai bien compris ton problème, tu n'arrives pas à envoyer la date du
calendrier dans le controle date du sous-formulaire lorsque celui-ci(le
sous-form) est affiché *dans* le formulaire principal.
Il faut pour cela que tu modifies les 2 procédures de Raymond.

- La procédure d'appel du calendrier que tu as écrite sur l'évènement
dble_clic du champ date: tu dois passer *aussi* le nom du formulaire
principal (le Parent)

Private Sub Madate_DblClick(Cancel As Integer)
DoCmd.OpenForm "calendrier"
Forms("calendrier").Caption = Me.Parent.Name & "!" & Me.Name & "!"
& Me.Madate.Name
End Sub

- La procédure clic sur Calendar0:
Private Sub Calendar0_Click()
Dim frm As String, frmPere As String
Dim ctl As String
Dim sep1 As Integer, sep2 As Integer
On Error GoTo Err_Args
sep1 = InStr(1, Me.Caption, "!") ' 1er !
sep2 = InStrRev(Me.Caption, "!") ' 2eme !
frmPere = Mid(Me.Caption, 1, sep1 - 1) ' nom formulaire ppal
frm = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ' nom du sous-frm
ctl = Mid(Me.Caption, sep2 + 1) ' nom du controle
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo
Err_Args
Forms(frmPere)(frm)(ctl) = Me.Calendar0 ' affectation de la valeur
Err_Args:
End Sub



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)




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Pierre REIT
Bonjour Eric
Je ne suis pas sur de bien utiliser le code, j'ai fait ça :

Sur mon sous-formulaire (je pense que la ca va) :

Private Sub Date_Next_Action_BeforeUpdate(Cancel As Integer)
End Sub
Private Sub Date_Next_Action_DblClick(Cancel As Integer)
DoCmd.OpenForm "calendrier"
Forms("calendrier").Caption = Me.Parent.Name & "!" & Me.Name & "!" &
Me.Date_Next_Action.Name
End Sub


Sur Calendar(0) :

Private Sub Calendar0_Click()
Dim frm As String, frmPere As String
Dim ctl As String
Dim sep1 As Integer, sep2 As Integer
On Error GoTo Err_Args
sep1 = InStr(1, Me.Caption, "!") ' 1er !
sep2 = InStrRev(Me.Caption, "!") ' 2eme !
FormulaireProspects = Mid(Me.Caption, 1, sep1 - 1) ' nom formulaire ppal
SousformulaireAction = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ' nom
du sous-frm
Date_Next_Action = Mid(Me.Caption, sep2 + 1) ' nom du controle
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo
Err_Args
Forms(FormulaireProspects)(SousformulaireAction)(Date_Next_Action) =
Me.Calendar0 ' affectation de la valeur
Err_Args:
End Sub

Le deboggeur oindique une erreur de compilation/syntaxe sur cette ligne
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo
Err_Args

Merci pour ton aide
PierreR



Bonsoir Pierre,

Si j'ai bien compris ton problème, tu n'arrives pas à envoyer la date du
calendrier dans le controle date du sous-formulaire lorsque celui-ci(le
sous-form) est affiché *dans* le formulaire principal.
Il faut pour cela que tu modifies les 2 procédures de Raymond.

- La procédure d'appel du calendrier que tu as écrite sur l'évènement
dble_clic du champ date: tu dois passer *aussi* le nom du formulaire
principal (le Parent)

Private Sub Madate_DblClick(Cancel As Integer)
DoCmd.OpenForm "calendrier"
Forms("calendrier").Caption = Me.Parent.Name & "!" & Me.Name & "!"
& Me.Madate.Name
End Sub

- La procédure clic sur Calendar0:
Private Sub Calendar0_Click()
Dim frm As String, frmPere As String
Dim ctl As String
Dim sep1 As Integer, sep2 As Integer
On Error GoTo Err_Args
sep1 = InStr(1, Me.Caption, "!") ' 1er !
sep2 = InStrRev(Me.Caption, "!") ' 2eme !
frmPere = Mid(Me.Caption, 1, sep1 - 1) ' nom formulaire ppal
frm = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ' nom du sous-frm
ctl = Mid(Me.Caption, sep2 + 1) ' nom du controle
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo
Err_Args
Forms(frmPere)(frm)(ctl) = Me.Calendar0 ' affectation de la valeur
Err_Args:
End Sub



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)




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Eric
Bonsoir Pierre,

Au lieu de :
FormulaireProspects = Mid(Me.Caption, 1, sep1 - 1) ' nom formulaire ppal
SousformulaireAction = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ' nom
du sous-frm
Date_Next_Action = Mid(Me.Caption, sep2 + 1) ' nom du controle


et :
Forms(FormulaireProspects)(SousformulaireAction)(Date_Next_Action) =
Me.Calendar0


il faut que tu mettes :
frmPere = Mid(Me.Caption, 1, sep1 - 1) ' nom formulaire ppal
frm = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ' nom du sous-frm
ctl = Mid(Me.Caption, sep2 + 1) ' nom du controle
puis :
Forms(frmPere)(frm)(ctl) = Me.Calendar0

Les remarques, en bout de chacune des lignes, avaient pour but de
t'indiquer ce que recevaient les variables frmPere, frm et ctl.
Tu as, hélas, remplacé ces variables par tes noms à toi, ce qui fait que
ces variables ne sont plus définies et donc génère une erreur.
J'avais voulu être clair mais ça n'a pas été le cas ;-)


Bonjour Eric
Je ne suis pas sur de bien utiliser le code, j'ai fait ça :

Sur mon sous-formulaire (je pense que la ca va) :

Private Sub Date_Next_Action_BeforeUpdate(Cancel As Integer)
End Sub
Private Sub Date_Next_Action_DblClick(Cancel As Integer)
DoCmd.OpenForm "calendrier"
Forms("calendrier").Caption = Me.Parent.Name & "!" & Me.Name & "!" &
Me.Date_Next_Action.Name
End Sub


Sur Calendar(0) :

Private Sub Calendar0_Click()
Dim frm As String, frmPere As String
Dim ctl As String
Dim sep1 As Integer, sep2 As Integer
On Error GoTo Err_Args
sep1 = InStr(1, Me.Caption, "!") ' 1er !
sep2 = InStrRev(Me.Caption, "!") ' 2eme !
FormulaireProspects = Mid(Me.Caption, 1, sep1 - 1) ' nom formulaire ppal
SousformulaireAction = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ' nom
du sous-frm
Date_Next_Action = Mid(Me.Caption, sep2 + 1) ' nom du controle
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo
Err_Args
Forms(FormulaireProspects)(SousformulaireAction)(Date_Next_Action) =
Me.Calendar0 ' affectation de la valeur
Err_Args:
End Sub

Le deboggeur oindique une erreur de compilation/syntaxe sur cette ligne
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo
Err_Args

Merci pour ton aide
PierreR




Bonsoir Pierre,

Si j'ai bien compris ton problème, tu n'arrives pas à envoyer la date du
calendrier dans le controle date du sous-formulaire lorsque celui-ci(le
sous-form) est affiché *dans* le formulaire principal.
Il faut pour cela que tu modifies les 2 procédures de Raymond.

- La procédure d'appel du calendrier que tu as écrite sur l'évènement
dble_clic du champ date: tu dois passer *aussi* le nom du formulaire
principal (le Parent)

Private Sub Madate_DblClick(Cancel As Integer)
DoCmd.OpenForm "calendrier"
Forms("calendrier").Caption = Me.Parent.Name & "!" & Me.Name & "!"
& Me.Madate.Name
End Sub

- La procédure clic sur Calendar0:
Private Sub Calendar0_Click()
Dim frm As String, frmPere As String
Dim ctl As String
Dim sep1 As Integer, sep2 As Integer
On Error GoTo Err_Args
sep1 = InStr(1, Me.Caption, "!") ' 1er !
sep2 = InStrRev(Me.Caption, "!") ' 2eme !
frmPere = Mid(Me.Caption, 1, sep1 - 1) ' nom formulaire ppal
frm = Mid(Me.Caption, sep1 + 1, sep2 - sep1 - 1) ' nom du sous-frm
ctl = Mid(Me.Caption, sep2 + 1) ' nom du controle
If IsNull(frm) Or frm = "" Or IsNull(ctl) Or ctl = "" Then GoTo
Err_Args
Forms(frmPere)(frm)(ctl) = Me.Calendar0 ' affectation de la valeur
Err_Args:
End Sub





--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr


Avatar
Pierre REIT
Bonjour Eric
Maintenant, ca fonctionne bien.
Merci pour les compélements d'information.
En fait, un retour chariot malencontreux s'était inséré dans ton code et
faisait une erreur sur la ligne If IsNull(frm)...
Par ailleurs saurait tu faire en sorte qu'à l'affichage, le calendrier
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
Avatar
Eric
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 ton code et
faisait une erreur sur la ligne If IsNull(frm)...
Par ailleurs saurait tu faire en sorte qu'à l'affichage, le calendrier
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

Avatar
Pierre REIT
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 ton code et
faisait une erreur sur la ligne If IsNull(frm)...
Par ailleurs saurait tu faire en sorte qu'à l'affichage, le calendrier
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




Avatar
Jacques
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






Avatar
Eric
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 Calendrier:

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 ton code et
faisait une erreur sur la ligne If IsNull(frm)...
Par ailleurs saurait tu faire en sorte qu'à l'affichage, le calendrier
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




Avatar
Jacques
Bonsoir Eric,

Merci pour ton aide, je prend note de ton code.

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






1 2