OVH Cloud OVH Cloud

OnNotInList

4 réponses
Avatar
papou
Bonjour à toutes et à tous
Je souhaite utiliser cet évènement dans une liste modifiable d'un formulaire
afin d'autoriser la saisie de nouvelles données dans une table.
J'ai bien trouvé de l'aide et compris le principe, mais dans l'exemple il
est question d'une liste indépendante.
La saisie d'une nouvelle donnée doit être accompagnée d'informations à
fournir pour d'autres champs dans la table, il faut donc l'intégrer dans cet
évènement ou peut-être dans une procédure séparée de mon formulaire.
Quid du numéro de l'enregistrement qui est une clé primaire et qui doit
s'incrémenter pour chaque nouvelle entrée ?
Quelqu'un peut-il m'aider ?
Merci
Cordialement
Pascal

4 réponses

Avatar
Damien Mermoz
Salut c'est pas très clair,
en gros tu as deux façon de gérer l'absence dans liste
-soit tu ajoutes la nouvelle entrée via recordset : (c'est dans le cas où
seul l'information ajoutée est nécessaire)
-soit tu ouvres un formulaire pour que l'utilisateur saisisse les
informations nécessaire puis tu mets à jour ta liste.

Si j'ai bien compris t'es dans le deuxième cas
je te donne un exemple d'une de mes bases :

Private Sub ref_demandeur_NotInList(NewData As String, Response As Integer)
On Error GoTo notinlist_err
'Gestion de l'absence dans liste

Dim strnval As String
strnval = NewData

'Vérifier que l'utilisateur ne s'est pas planté et qu'il veut bien ajouter
une entrée
If MsgBox("[" & NewData & "]" & Chr(32) & "n'a pas été rentré dans cette
base de donnée" & vbCrLf & _
"Voulez vous l'enregistrer ?", vbInformation + vbYesNo, "CRMG
database") = vbYes Then

'Ouverture du formulaire en transmettant la nouvelle valeur,
'bloquage du code par acdialog (un bonheur cette propriété)
DoCmd.OpenForm "F_demandeur", , , , , acDialog, strnval

'reprise du code, Vérifier que l'utilisateur n'a pas eut la riche idée
de modifier le nom du demandeur au passage
If Not IsNull(DLookup("Nom_demandeur", "T_demandeur", "[Nom_demandeur] """ & NewData & """")) Then
Response = acDataErrAdded
Else
Response = acDataErrContinue
Me.ref_demandeur.Undo
Me.ref_demandeur.Requery
End If

Else
Response = acDataErrDisplay
Me.ref_demandeur.Undo
End If

notinlist_exit:
Exit Sub

notinlist_err:
MsgBox err.Number & vbCrLf & vbCrLf & err.Description
Resume notinlist_exit

End Sub


Voilà donc au moment où j'ouvre le formulaire, mon code se bloque car
j'utilise la propriété acdialog, je transmets la nouvelle donnée en
utilisant l'argument openargs de l'action openform
voici ce qui se passe dans le formulaire que j'ouvre.

Private Sub Form_Load()
'récupération de la nouvelle donnée provenant du formulaire principal
' et attribution de cette donné à la zone de texte Nom_demandeur

Dim strtest As String

If Not IsNothing(Me.OpenArgs) Then
DoCmd.GoToRecord , , acNewRec
strtest = Me.OpenArgs
Me.Nom_demandeur.Value = strtest
End If

End Sub

donc sur l'événement chargement je récupère la nouvelle donnée afin que
l'utilisateur n'ait pas à la resaisir.
L'utilisateur complete le formulaire de saisie et une fois que j'ai les
informations requises pour ma table l'utilisateur ferme le formulaire de
saisie et là le code du formulaire d'appel reprend et je met à jour la liste
modifiable et je supprime les message d'access.
Pour ce qui est du numéro identifiant qui doit s'incrémenter, ce n'est pas
un problème si tu utilises les numéro auto d'access car c'est automatique,
sinon il faut que tu rappelles ta procédure qui incrémente le numéro id.

En espèrant que ça t'aide.
A +
Damien.

----- Original Message -----
From: "papou" <nspm>
Newsgroups: microsoft.public.fr.access
Sent: Thursday, October 16, 2003 9:57 AM
Subject: OnNotInList


Bonjour à toutes et à tous
Je souhaite utiliser cet évènement dans une liste modifiable d'un
formulaire

afin d'autoriser la saisie de nouvelles données dans une table.
J'ai bien trouvé de l'aide et compris le principe, mais dans l'exemple il
est question d'une liste indépendante.
La saisie d'une nouvelle donnée doit être accompagnée d'informations à
fournir pour d'autres champs dans la table, il faut donc l'intégrer dans
cet

évènement ou peut-être dans une procédure séparée de mon formulaire.
Quid du numéro de l'enregistrement qui est une clé primaire et qui doit
s'incrémenter pour chaque nouvelle entrée ?
Quelqu'un peut-il m'aider ?
Merci
Cordialement
Pascal





"papou" <nspm> a écrit dans le message news:

Bonjour à toutes et à tous
Je souhaite utiliser cet évènement dans une liste modifiable d'un
formulaire

afin d'autoriser la saisie de nouvelles données dans une table.
J'ai bien trouvé de l'aide et compris le principe, mais dans l'exemple il
est question d'une liste indépendante.
La saisie d'une nouvelle donnée doit être accompagnée d'informations à
fournir pour d'autres champs dans la table, il faut donc l'intégrer dans
cet

évènement ou peut-être dans une procédure séparée de mon formulaire.
Quid du numéro de l'enregistrement qui est une clé primaire et qui doit
s'incrémenter pour chaque nouvelle entrée ?
Quelqu'un peut-il m'aider ?
Merci
Cordialement
Pascal





Avatar
papou
Bonjour Damien
C'est très sympa de ta part :-))
Je vais regarder ton exemple de très près.
Merci beaucoup pour ton aide
Cordialement
Pascal

"Damien Mermoz" a écrit dans le message de
news:
Salut c'est pas très clair,
en gros tu as deux façon de gérer l'absence dans liste
-soit tu ajoutes la nouvelle entrée via recordset : (c'est dans le cas où
seul l'information ajoutée est nécessaire)
-soit tu ouvres un formulaire pour que l'utilisateur saisisse les
informations nécessaire puis tu mets à jour ta liste.

Si j'ai bien compris t'es dans le deuxième cas
je te donne un exemple d'une de mes bases :

Private Sub ref_demandeur_NotInList(NewData As String, Response As
Integer)

On Error GoTo notinlist_err
'Gestion de l'absence dans liste

Dim strnval As String
strnval = NewData

'Vérifier que l'utilisateur ne s'est pas planté et qu'il veut bien ajouter
une entrée
If MsgBox("[" & NewData & "]" & Chr(32) & "n'a pas été rentré dans cette
base de donnée" & vbCrLf & _
"Voulez vous l'enregistrer ?", vbInformation + vbYesNo, "CRMG
database") = vbYes Then

'Ouverture du formulaire en transmettant la nouvelle valeur,
'bloquage du code par acdialog (un bonheur cette propriété)
DoCmd.OpenForm "F_demandeur", , , , , acDialog, strnval

'reprise du code, Vérifier que l'utilisateur n'a pas eut la riche idée
de modifier le nom du demandeur au passage
If Not IsNull(DLookup("Nom_demandeur", "T_demandeur", "[Nom_demandeur]
""" & NewData & """")) Then
Response = acDataErrAdded
Else
Response = acDataErrContinue
Me.ref_demandeur.Undo
Me.ref_demandeur.Requery
End If

Else
Response = acDataErrDisplay
Me.ref_demandeur.Undo
End If

notinlist_exit:
Exit Sub

notinlist_err:
MsgBox err.Number & vbCrLf & vbCrLf & err.Description
Resume notinlist_exit

End Sub


Voilà donc au moment où j'ouvre le formulaire, mon code se bloque car
j'utilise la propriété acdialog, je transmets la nouvelle donnée en
utilisant l'argument openargs de l'action openform
voici ce qui se passe dans le formulaire que j'ouvre.

Private Sub Form_Load()
'récupération de la nouvelle donnée provenant du formulaire principal
' et attribution de cette donné à la zone de texte Nom_demandeur

Dim strtest As String

If Not IsNothing(Me.OpenArgs) Then
DoCmd.GoToRecord , , acNewRec
strtest = Me.OpenArgs
Me.Nom_demandeur.Value = strtest
End If

End Sub

donc sur l'événement chargement je récupère la nouvelle donnée afin que
l'utilisateur n'ait pas à la resaisir.
L'utilisateur complete le formulaire de saisie et une fois que j'ai les
informations requises pour ma table l'utilisateur ferme le formulaire de
saisie et là le code du formulaire d'appel reprend et je met à jour la
liste

modifiable et je supprime les message d'access.
Pour ce qui est du numéro identifiant qui doit s'incrémenter, ce n'est pas
un problème si tu utilises les numéro auto d'access car c'est automatique,
sinon il faut que tu rappelles ta procédure qui incrémente le numéro id.

En espèrant que ça t'aide.
A +
Damien.

----- Original Message -----
From: "papou" <nspm>
Newsgroups: microsoft.public.fr.access
Sent: Thursday, October 16, 2003 9:57 AM
Subject: OnNotInList


Bonjour à toutes et à tous
Je souhaite utiliser cet évènement dans une liste modifiable d'un
formulaire

afin d'autoriser la saisie de nouvelles données dans une table.
J'ai bien trouvé de l'aide et compris le principe, mais dans l'exemple
il


est question d'une liste indépendante.
La saisie d'une nouvelle donnée doit être accompagnée d'informations à
fournir pour d'autres champs dans la table, il faut donc l'intégrer dans
cet

évènement ou peut-être dans une procédure séparée de mon formulaire.
Quid du numéro de l'enregistrement qui est une clé primaire et qui doit
s'incrémenter pour chaque nouvelle entrée ?
Quelqu'un peut-il m'aider ?
Merci
Cordialement
Pascal





"papou" <nspm> a écrit dans le message news:

Bonjour à toutes et à tous
Je souhaite utiliser cet évènement dans une liste modifiable d'un
formulaire

afin d'autoriser la saisie de nouvelles données dans une table.
J'ai bien trouvé de l'aide et compris le principe, mais dans l'exemple
il


est question d'une liste indépendante.
La saisie d'une nouvelle donnée doit être accompagnée d'informations à
fournir pour d'autres champs dans la table, il faut donc l'intégrer dans
cet

évènement ou peut-être dans une procédure séparée de mon formulaire.
Quid du numéro de l'enregistrement qui est une clé primaire et qui doit
s'incrémenter pour chaque nouvelle entrée ?
Quelqu'un peut-il m'aider ?
Merci
Cordialement
Pascal









Avatar
Kostro
Damien Mermoz wrote:


If MsgBox("[" & NewData & "]" & Chr(32) & "n'a pas été rentré dans
cette base de donnée" & vbCrLf & _

"Voulez vous l'enregistrer ?", vbInformation + vbYesNo,
"CRMG database") = vbYes Then

If Not IsNull(DLookup("Nom_demandeur", "T_demandeur",
"[Nom_demandeur] = """ & NewData & """")) Then



Bonjour,
J'ai tenté d'intégrer ta solution de gestion des enregistrements nouveaux
dans une liste. Les lignes IF Msgbox et IFNOt IsNull (rappelées ci-dessus)
me donnent des erreurs de syntaxe . Je ne suis pas assez calé en
concaténation pour dénicher le problème. Peux-tu m'orienter ?

Merci
Bien cordialement
Kostro


Avatar
papou
Bonjour Kostro
Fais attention aux retours à la ligne :
Lorsque tu as un retour à la ligne qui n'est précédé de _ (underscore), il
faut supprimer ce retour à la ligne
Cordialement
Pascal
"Kostro" a écrit dans le
message de news:3f8ea0b4$0$27048$
Damien Mermoz wrote:


If MsgBox("[" & NewData & "]" & Chr(32) & "n'a pas été rentré dans
cette base de donnée" & vbCrLf & _

"Voulez vous l'enregistrer ?", vbInformation + vbYesNo,
"CRMG database") = vbYes Then

If Not IsNull(DLookup("Nom_demandeur", "T_demandeur",
"[Nom_demandeur] = """ & NewData & """")) Then



Bonjour,
J'ai tenté d'intégrer ta solution de gestion des enregistrements nouveaux
dans une liste. Les lignes IF Msgbox et IFNOt IsNull (rappelées ci-dessus)
me donnent des erreurs de syntaxe . Je ne suis pas assez calé en
concaténation pour dénicher le problème. Peux-tu m'orienter ?

Merci
Bien cordialement
Kostro