OVH Cloud OVH Cloud

MAJ après Absence dans liste

18 réponses
Avatar
Sassa01
Bonjour,
J'ai téléchargé depuis le site de Raymond les éléments qui devraient me
permettre de procéder à des ajouts dans une liste modifiable.....mais je n'y
parviens pas même en piochant sur des fils précédents trouvés avec Google.
Pour la création de nouvelles vedettes pour un bd de mes disques, tout
fonctionne parfaitement (ouverture du formulaire de création, ajout de la
vedette,) mais la mise à jour ne se fait pas quand je reviens au formulaire
comportant la liste déroulante. Voici ce que j'ai mis dans la procédure
évènementielle "Après MAJ" de la liste déroulante :

Private Sub Modifiable17_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[Id_Vedette] = " & Str(Nz(Me![Modifiable17], 0))
Me![Vedette01] = Me!Vedette01
Me![Prénom] = Me!Prénom
Me![Instrument] = Me!Instrument

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Dans "Absence dans liste" j'ai mis ceci :
Private Sub Modifiable17_NotInList(NewData As String, Response As Integer)
If MsgBox("cette Vedette n'existe pas, voulez-vous la créer ?", vbYesNo,
"Pas dans la liste") = vbYes Then
Me.Vedette01.Undo
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , , acFormAdd,
acDialog, Me.Name
Me.Vedette01.Requery
Response = acDataErrContinue
Else
Response = acDataErrContinue
End If
End Sub

Quelqu'un peut-il m'aider SVP ? Merci

François

10 réponses

1 2
Avatar
Raymond [mvp]
Bonjour.
<mais la mise à jour ne se fait pas quand je reviens au formulaire
<comportant la liste déroulante.
je pense que tu parles de la liste modifiable ou de l'enregistrement ?
Me.Vedette01.Undo
lors du retour de création la liste modifiable est positionnée sur le

nouveau client dans la liste pour confirmation et la liste en dropdown. le
click ou entrée va placer tous les éléments sur l'enregistrement.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sassa01" a écrit dans le message de
news:c6r1g4$1hp$
Bonjour,
J'ai téléchargé depuis le site de Raymond les éléments qui devraient me
permettre de procéder à des ajouts dans une liste modifiable.....mais je
n'y

parviens pas même en piochant sur des fils précédents trouvés avec Google.
Pour la création de nouvelles vedettes pour un bd de mes disques, tout
fonctionne parfaitement (ouverture du formulaire de création, ajout de la
vedette,) mais la mise à jour ne se fait pas quand je reviens au
formulaire

comportant la liste déroulante. Voici ce que j'ai mis dans la procédure
évènementielle "Après MAJ" de la liste déroulante :

Private Sub Modifiable17_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[Id_Vedette] = " & Str(Nz(Me![Modifiable17], 0))
Me![Vedette01] = Me!Vedette01
Me![Prénom] = Me!Prénom
Me![Instrument] = Me!Instrument

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Dans "Absence dans liste" j'ai mis ceci :
Private Sub Modifiable17_NotInList(NewData As String, Response As Integer)
If MsgBox("cette Vedette n'existe pas, voulez-vous la créer ?", vbYesNo,
"Pas dans la liste") = vbYes Then
Me.Vedette01.Undo
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , , acFormAdd,
acDialog, Me.Name
Me.Vedette01.Requery
Response = acDataErrContinue
Else
Response = acDataErrContinue
End If
End Sub

Quelqu'un peut-il m'aider SVP ? Merci

François




Avatar
Sassa01
Rebonjour
Quand je reviens je suis bien effectivement sur la liste déroulante, ouverte
à son début (commençant par A), en dropdown si je comprends bien ce que tu
me dis. Mais le nouveau nom n'est pas dans la liste : il faut fermer le
formulaire et le réouvrir pour avoir le nouveau nom dans cette liste
déroulante. A ce moment là tout fonctionne normalement : en le saisissant
dans la liste les champs correspondants sont remplis normalement.Merci


"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.
<mais la mise à jour ne se fait pas quand je reviens au formulaire
<comportant la liste déroulante.
je pense que tu parles de la liste modifiable ou de l'enregistrement ?
Me.Vedette01.Undo
lors du retour de création la liste modifiable est positionnée sur le

nouveau client dans la liste pour confirmation et la liste en dropdown. le
click ou entrée va placer tous les éléments sur l'enregistrement.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sassa01" a écrit dans le message de
news:c6r1g4$1hp$
Bonjour,
J'ai téléchargé depuis le site de Raymond les éléments qui devraient me
permettre de procéder à des ajouts dans une liste modifiable.....mais je
n'y

parviens pas même en piochant sur des fils précédents trouvés avec
Google.


Pour la création de nouvelles vedettes pour un bd de mes disques, tout
fonctionne parfaitement (ouverture du formulaire de création, ajout de
la


vedette,) mais la mise à jour ne se fait pas quand je reviens au
formulaire

comportant la liste déroulante. Voici ce que j'ai mis dans la procédure
évènementielle "Après MAJ" de la liste déroulante :

Private Sub Modifiable17_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[Id_Vedette] = " & Str(Nz(Me![Modifiable17], 0))
Me![Vedette01] = Me!Vedette01
Me![Prénom] = Me!Prénom
Me![Instrument] = Me!Instrument

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Dans "Absence dans liste" j'ai mis ceci :
Private Sub Modifiable17_NotInList(NewData As String, Response As
Integer)


If MsgBox("cette Vedette n'existe pas, voulez-vous la créer ?", vbYesNo,
"Pas dans la liste") = vbYes Then
Me.Vedette01.Undo
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , , acFormAdd,
acDialog, Me.Name
Me.Vedette01.Requery
Response = acDataErrContinue
Else
Response = acDataErrContinue
End If
End Sub

Quelqu'un peut-il m'aider SVP ? Merci

François








Avatar
Raymond [mvp]
il doit manquer un requery de la liste à quelque part.
rajoute le ici
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , , acFormAdd,
acDialog, Me.Name
Me.Vedette01.Requery
Me.maliste.Requery




il devrait y en avoir un sur un des deux formulaires.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sassa01" a écrit dans le message de
news:c6r43h$7hb$
Rebonjour
Quand je reviens je suis bien effectivement sur la liste déroulante,
ouverte

à son début (commençant par A), en dropdown si je comprends bien ce que tu
me dis. Mais le nouveau nom n'est pas dans la liste : il faut fermer le
formulaire et le réouvrir pour avoir le nouveau nom dans cette liste
déroulante. A ce moment là tout fonctionne normalement : en le saisissant
dans la liste les champs correspondants sont remplis normalement.Merci






Avatar
Eric
"Sassa01" écrivait
news:c6r1g4$1hp$:

... mais la mise à jour ne
se fait pas quand je reviens au formulaire comportant la liste
déroulante. Voici ce que j'ai mis dans la procédure évènementielle
"Après MAJ" de la liste déroulante :




Dans "Absence dans liste" j'ai mis ceci :
Private Sub Modifiable17_NotInList(NewData As String, Response As
Integer) If MsgBox("cette Vedette n'existe pas, voulez-vous la créer
?", vbYesNo, "Pas dans la liste") = vbYes Then
Me.Vedette01.Undo
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , , acFormAdd,
acDialog, Me.Name
Me.Vedette01.Requery
Response = acDataErrContinue
Else
Response = acDataErrContinue
End If
End Sub

Quelqu'un peut-il m'aider SVP ? Merci

A chacun sa méthode ..., je te propose celle ci, elle n'entrainera que

peu de modifications.

Dans "Absence dans liste" j'ai mis ceci :
Private Sub Modifiable17_NotInList(NewData As String, Response As
Integer)
If MsgBox("cette Vedette n'existe pas, voulez-vous la créer
?", vbYesNo, "Pas dans la liste") = vbYes Then
Response = acDataErrAdded
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , ,

acFormAdd,acDialog,NewData
Else
Response = acDataErrContinue
Me.Modifiable17.Undo
End If

Sur l'évènement Activation de ton formulaire Fl_Saisie nouvelle Vedette
Tu mets ceci:

Private Sub Form_Current()
If Not IsNull(Me.OpenArgs) Then
[Vedette01] = Me.OpenArgs
[Prénom].SetFocus
End If
End Sub

Cette méthode te permet d'utiliser un meme formulaire pour afficher les
stars existantes ou en saisir de nouvelles.

Très important, ta liste déroulante a 2 colonnes, la 1ere c'est
l'Identifiant et la 2ème le nom de la vedette. Donc sur le formulaire de
saisie de la vedette je te positionne directement sur le prénom.
Si c'est pas organisé comme ca, faudrait modifier.

A+
Eric

Avatar
Eric
Oooooops !!!

Viens de voir une cause de ton problème alors que je viens de t'écrire du
code sur mon post précédent.

Tu a mis au cas où tu cliques sur Yes dans ta msgbox
Response = acDataErrContinue
alors qu'il faut mettre
Response = acDataErrAdded
et je le mettrai avant le DoCmd.OpenrForm ...

le Me.Vedette01.Undo sert à rien, par contre dans le else avant
Response = acDataErrContinue tu devrais mettre Me.Modifiable17.Undo

A+
Eric

"Sassa01" écrivait
news:c6r1g4$1hp$:

Bonjour,
J'ai téléchargé depuis le site de Raymond les éléments qui devraient
me permettre de procéder à des ajouts dans une liste
modifiable.....mais je n'y parviens pas même en piochant sur des fils
précédents trouvés avec Google. Pour la création de nouvelles vedettes
pour un bd de mes disques, tout fonctionne parfaitement (ouverture du
formulaire de création, ajout de la vedette,) mais la mise à jour ne
se fait pas quand je reviens au formulaire comportant la liste
déroulante. Voici ce que j'ai mis dans la procédure évènementielle
"Après MAJ" de la liste déroulante :

Private Sub Modifiable17_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[Id_Vedette] = " & Str(Nz(Me![Modifiable17], 0))
Me![Vedette01] = Me!Vedette01
Me![Prénom] = Me!Prénom
Me![Instrument] = Me!Instrument

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Dans "Absence dans liste" j'ai mis ceci :
Private Sub Modifiable17_NotInList(NewData As String, Response As
Integer) If MsgBox("cette Vedette n'existe pas, voulez-vous la créer
?", vbYesNo, "Pas dans la liste") = vbYes Then
Me.Vedette01.Undo
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , , acFormAdd,
acDialog, Me.Name
Me.Vedette01.Requery
Response = acDataErrContinue
Else
Response = acDataErrContinue
End If
End Sub

Quelqu'un peut-il m'aider SVP ? Merci

François




Avatar
Sassa01
Bonjour Eric,
Je viens de suivre tes derniers conseils. Les choses se déroulent à peu près
comme je l'avais décrit précédemment, sinon que le nouveau nom s'affiche
immédiatement dans la liste déroulante, mais sans les champs complétés lors
de la création (Nom de la vedette, son prénom, et son instrument ou
spécialité). A ce moment là, si je fais la sélection pour faire justement
apparaître tous champs correspondant au nouveau nom : "erreur d'exécution
3020" Update ou CancelUpdate effectué sans appeler Addnew ni Edit. Si je
fais le débogage, c'est la ligne Me![Vedette01] = Me!Vedette01 qui est
surligné de jaune. En fermant le formulaire, au bout d'une fois ou 2 le tout
s'affiche normalement ! A suivre...Je te remercie
François


"Eric" a écrit dans le message de
news:
Oooooops !!!

Viens de voir une cause de ton problème alors que je viens de t'écrire du
code sur mon post précédent.

Tu a mis au cas où tu cliques sur Yes dans ta msgbox
Response = acDataErrContinue
alors qu'il faut mettre
Response = acDataErrAdded
et je le mettrai avant le DoCmd.OpenrForm ...

le Me.Vedette01.Undo sert à rien, par contre dans le else avant
Response = acDataErrContinue tu devrais mettre Me.Modifiable17.Undo

A+
Eric

"Sassa01" écrivait
news:c6r1g4$1hp$:

Bonjour,
J'ai téléchargé depuis le site de Raymond les éléments qui devraient
me permettre de procéder à des ajouts dans une liste
modifiable.....mais je n'y parviens pas même en piochant sur des fils
précédents trouvés avec Google. Pour la création de nouvelles vedettes
pour un bd de mes disques, tout fonctionne parfaitement (ouverture du
formulaire de création, ajout de la vedette,) mais la mise à jour ne
se fait pas quand je reviens au formulaire comportant la liste
déroulante. Voici ce que j'ai mis dans la procédure évènementielle
"Après MAJ" de la liste déroulante :

Private Sub Modifiable17_AfterUpdate()
' Rechercher l'enregistrement correspondant au contrôle.
Dim rs As Object

Set rs = Me.Recordset.Clone
rs.FindFirst "[Id_Vedette] = " & Str(Nz(Me![Modifiable17], 0))
Me![Vedette01] = Me!Vedette01
Me![Prénom] = Me!Prénom
Me![Instrument] = Me!Instrument

If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Dans "Absence dans liste" j'ai mis ceci :
Private Sub Modifiable17_NotInList(NewData As String, Response As
Integer) If MsgBox("cette Vedette n'existe pas, voulez-vous la créer
?", vbYesNo, "Pas dans la liste") = vbYes Then
Me.Vedette01.Undo
DoCmd.OpenForm "Fl_Saisie nouvelle Vedette", , , , acFormAdd,
acDialog, Me.Name
Me.Vedette01.Requery
Response = acDataErrContinue
Else
Response = acDataErrContinue
End If
End Sub

Quelqu'un peut-il m'aider SVP ? Merci

François







Avatar
Eric
Bonsoir François

Ne sachant pas comment tu as créé ton formulaire, c'est difficile de
t'orienter. Mais coté procédure Not In List, je ne connais que 2
méthodes (personnellement):
Soit celle utilisant un formulaire basé sur une table secondaire liée à
une table principale, c'est la méthode que je t'ai donnée (Ex: Facture et
Client, et on veut réaliser une facture, le choix du client s'effectuant
dans une liste déroulante ou le créer à la volée)

Soit utiliser un seul formulaire reposant sur une table principale qui
permet, à partir d'une liste déroulante, de visualiser, modifier ou créer
un enregistrement de la table sous-jacente.

J'étais parti sur le 1er cas. Si c'est le 2eme cas, alors le code n'est
pas bon.
Il faudrait que j'ai plus de renseignements.

Si tu veux, tu me mets dans une bd, les tables et tes formulaires
nécessaires au traitement. Tu me fais parvenir cette bd au format RAR ou
ZIP à mon adresse après avoir enlevé les Z.

A+
Eric



"Sassa01" écrivait
news:c6rcjt$j2j$:

Bonjour Eric,
Je viens de suivre tes derniers conseils. Les choses se déroulent à
peu près comme je l'avais décrit précédemment, sinon que le nouveau
nom s'affiche immédiatement dans la liste déroulante, mais sans les
champs complétés lors de la création (Nom de la vedette, son prénom,
et son instrument ou spécialité). A ce moment là, si je fais la
sélection pour faire justement apparaître tous champs correspondant au
nouveau nom : "erreur d'exécution 3020" Update ou CancelUpdate
effectué sans appeler Addnew ni Edit. Si je fais le débogage, c'est la
ligne Me![Vedette01] = Me!Vedette01 qui est surligné de jaune. En
fermant le formulaire, au bout d'une fois ou 2 le tout s'affiche
normalement ! A suivre...Je te remercie François



Avatar
Sassa01
Bonjour,
Merci Eric. Je t'adresse la base comme tu me l'as proposé. Hier, je n'ai pas
répondu à Raymond (hier soir nous dînions à l'extérieur et comme je tardais
je me suis fait houspiller par "Maman"). Donc, c'est Me.Modifiable17.Requery
qui manquait. Une fois ajouté, je reviens au formulaire de modification, le
nom est dans la liste mais, en le sélectionnant, les champs complétés lors
de la création ne s'affichent pas. Il faut fermer le formulaire de
modification puis le réouvrir pour que les choses se déroulent normalement.
Alors peut-être faut-il ajouter acDataAdded (???) pour que l'actualisation
de la liste se fasse. Cet argument peut-il être mis à la fermeture (par
exemple) du formulaire de Création ?...Mais je suis totalement
ignorant..Merci encore et bonne journée.
François

"Eric" a écrit dans le message de
news:
Bonsoir François

Ne sachant pas comment tu as créé ton formulaire, c'est difficile de
t'orienter. Mais coté procédure Not In List, je ne connais que 2
méthodes (personnellement):
Soit celle utilisant un formulaire basé sur une table secondaire liée à
une table principale, c'est la méthode que je t'ai donnée (Ex: Facture et
Client, et on veut réaliser une facture, le choix du client s'effectuant
dans une liste déroulante ou le créer à la volée)

Soit utiliser un seul formulaire reposant sur une table principale qui
permet, à partir d'une liste déroulante, de visualiser, modifier ou créer
un enregistrement de la table sous-jacente.

J'étais parti sur le 1er cas. Si c'est le 2eme cas, alors le code n'est
pas bon.
Il faudrait que j'ai plus de renseignements.

Si tu veux, tu me mets dans une bd, les tables et tes formulaires
nécessaires au traitement. Tu me fais parvenir cette bd au format RAR ou
ZIP à mon adresse après avoir enlevé les Z.

A+
Eric



"Sassa01" écrivait
news:c6rcjt$j2j$:

Bonjour Eric,
Je viens de suivre tes derniers conseils. Les choses se déroulent à
peu près comme je l'avais décrit précédemment, sinon que le nouveau
nom s'affiche immédiatement dans la liste déroulante, mais sans les
champs complétés lors de la création (Nom de la vedette, son prénom,
et son instrument ou spécialité). A ce moment là, si je fais la
sélection pour faire justement apparaître tous champs correspondant au
nouveau nom : "erreur d'exécution 3020" Update ou CancelUpdate
effectué sans appeler Addnew ni Edit. Si je fais le débogage, c'est la
ligne Me![Vedette01] = Me!Vedette01 qui est surligné de jaune. En
fermant le formulaire, au bout d'une fois ou 2 le tout s'affiche
normalement ! A suivre...Je te remercie François





Avatar
Eric
"Sassa01" écrivait

...Je t'adresse la base comme tu me l'as proposé.


Bonjour Sassa01,

Je n'ai pas reçu ta base. Adresse mel :

Eric

Avatar
Raymond [mvp]
Bonjour Eric.

ce n'est pas une erreur, mais une exigence pour cet exemple.
acDataErrContinue a été mis dans les deux sorties pour retourner
automatiquement dans la listemodifiable, afficher le dernier client créé,
mettre la liste en dropdown et pour confirmer que le dernier client ajouté
est bien le bon et surtout pour pouvoir exécuter obligatoirement la
procédure afterupdate de la liste modifiable. Avec acDataErrAdded la
procédure afterupdate est aléatoire et dans le cas précis de l'exemple il ne
faut pas. en ce qui concerne le requery, il faut adapter les noms à son
problème.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Eric" a écrit dans le message de
news:
Oooooops !!!

Viens de voir une cause de ton problème alors que je viens de t'écrire du
code sur mon post précédent.

Tu a mis au cas où tu cliques sur Yes dans ta msgbox
Response = acDataErrContinue
alors qu'il faut mettre
Response = acDataErrAdded
et je le mettrai avant le DoCmd.OpenrForm ...

le Me.Vedette01.Undo sert à rien, par contre dans le else avant
Response = acDataErrContinue tu devrais mettre Me.Modifiable17.Undo

A+
Eric


1 2