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

Liste Valeurs et Absence dans Liste

6 réponses
Avatar
barbbu
Salut,

J'ai beau cherch=E9, je ne trouve pas d'explication ni de r=E9ponses qui
fonctionnent sur l'evenement "absence dans liste" quand cette liste
est construite par une liste de valeurs.
Soit ma liste ainsi :
"Pierre";"Paul";"Jean"
Soit le code suivant :

Private Sub Lmed_NotInList(NewMed As String, Response As Integer)
Dim ctl As Control
Set ctl =3D Me!Lmed
If MsgBox("Ajouter =E0 la liste ?", vbOKCancel) =3D vbOK Then
Response =3D acDataErrAdded
ctl.RowSource =3D ctl.RowSource & ";" & NewMed
Else
DoCmd.RunCommand acCmdUndo
R=E9ponse =3D acDataErrContinue
End If
End Sub

Si l'utilisateur veut ajouter la valeur Jacques, il peut le faire,
mais =E0 l'ouverture suivante du formulaire la valeur "Jacques" n'est
pas dans la liste !
Puis-je esperer trouver enfin une reponse ind=E9niable ?
Merci.

6 réponses

Avatar
Franz
barbbu a écrit :
Salut,

J'ai beau cherché, je ne trouve pas d'explication ni de réponses qui
fonctionnent sur l'evenement "absence dans liste" quand cette liste
est construite par une liste de valeurs.
Soit ma liste ainsi :
"Pierre";"Paul";"Jean"
Soit le code suivant :

Private Sub Lmed_NotInList(NewMed As String, Response As Integer)
Dim ctl As Control
Set ctl = Me!Lmed
If MsgBox("Ajouter à la liste ?", vbOKCancel) = vbOK Then
Response = acDataErrAdded
ctl.RowSource = ctl.RowSource & ";" & NewMed
Else
DoCmd.RunCommand acCmdUndo
Réponse = acDataErrContinue
End If
End Sub

Si l'utilisateur veut ajouter la valeur Jacques, il peut le faire,
mais à l'ouverture suivante du formulaire la valeur "Jacques" n'est
pas dans la liste !
Puis-je esperer trouver enfin une reponse indéniable ?
Merci.


Si tu as créé la liste dynamiquement dans le code VBA avec
...add...Pierre ...add...Paul...etc tu n'auras pas Jacques à une
exécution suivante.

Si tu as créé la liste à partir d'une table, alors quand tu vas à
répondre oui à la question: Ajouter à la liste? tu dois exécuter un code
similaire au suivant pour ajouter la nouvelle valeur dans la table.
Attention à la clé.

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

If MsgBox("Message_usager", vbYesNo + vbDefaultButton2 +
vbQuestion, Msg("LBL", 37)) = vbYes Then
Response = acDataErrAdded

Dim DB As DAO.Database
Dim rs As DAO.Recordset
Set DB = CurrentDb
Set rs = DB.OpenRecordset("tblTableType", dbOpenDynaset)
rs.AddNew
rs!strTableTypeDs = NewData <---- Ici la nouvelle valeur
rs.Update

rs.Close
Set rs = Nothing
Set DB = Nothing
End If
End Sub
Avatar
Eric
Bonjour,

Sur l'évènement Libération du formulaire :
Private Sub Form_Unload(Cancel as Integer)
DoCmd.RunCommand acCmdSave
End Sub

force à sauver le formulaire et donc la RowSource de la liste modifiée
devrait être conservée.

PS : je pense que tu peux t'affranchir de la déclaration Dim ctl as
Control suivie du Set ctl= ...

Je mettrai
If MsgBox("Ajouter à la liste ?", vbOKCancel) = vbOK Then
Response = acDataErrAdded
Me!Lmed.RowSource = Me!Lmed.RowSource & ";" & NewMed
Else
DoCmd.RunCommand acCmdUndo ' ou Me.Undo
Réponse = acDataErrContinue
End If


barbbu a écrit :
Salut,

J'ai beau cherché, je ne trouve pas d'explication ni de réponses qui
fonctionnent sur l'evenement "absence dans liste" quand cette liste
est construite par une liste de valeurs.
Soit ma liste ainsi :
"Pierre";"Paul";"Jean"
Soit le code suivant :

Private Sub Lmed_NotInList(NewMed As String, Response As Integer)
Dim ctl As Control
Set ctl = Me!Lmed
If MsgBox("Ajouter à la liste ?", vbOKCancel) = vbOK Then
Response = acDataErrAdded
ctl.RowSource = ctl.RowSource & ";" & NewMed
Else
DoCmd.RunCommand acCmdUndo
Réponse = acDataErrContinue
End If
End Sub

Si l'utilisateur veut ajouter la valeur Jacques, il peut le faire,
mais à l'ouverture suivante du formulaire la valeur "Jacques" n'est
pas dans la liste !
Puis-je esperer trouver enfin une reponse indéniable ?
Merci.



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

On y est presque !
Ce code fonctionne, mais qq. chose me chiffonne :
Quand l'utilisateur ajoute un élément dans la liste (ex : Louis ) et ferme
le formulaire, pas de problème.
Quand on rouvre ce formulaire, l'élément rajouté (Louis) est bien présent
dans la liste déroulante.
Mais ou est donc le problème, me direz-vous ?
Ben quand j'ouvre le Form en mode création, la liste de valeur contient bien
Louis mais sans les guillemets ! ça fait ça :
"Pierre";"Paul";"Jean";Louis
Pi si on ajoute Marc ça fait ça :
"Pierre";"Paul";"Jean";Louis;Marc
Qu'en pensez-vous ? sachant que depuis des lustres Access nous dit qu'il
faut surtout pas oublier les guillemets ! ! !
Merci.


"Eric" a écrit dans le message de news:
uZLEF$
Bonjour,

Sur l'évènement Libération du formulaire :
Private Sub Form_Unload(Cancel as Integer)
DoCmd.RunCommand acCmdSave
End Sub

force à sauver le formulaire et donc la RowSource de la liste modifiée
devrait être conservée.

PS : je pense que tu peux t'affranchir de la déclaration Dim ctl as
Control suivie du Set ctl= ...

Je mettrai
If MsgBox("Ajouter à la liste ?", vbOKCancel) = vbOK Then
Response = acDataErrAdded
Me!Lmed.RowSource = Me!Lmed.RowSource & ";" & NewMed
Else
DoCmd.RunCommand acCmdUndo ' ou Me.Undo
Réponse = acDataErrContinue
End If



Avatar
Eric
Bonjour,

Ca ne pose pas de problème mais si vous tenez aux guillemets, modifiez
le code ainsi :

Me!Lmed.RowSource = Me!Lmed.RowSource & ";""" & NewMed & """"
ce qui aura pour effet d'encadrer la valeur ajoutée de guillemets.



dadpub a écrit :
Salut,

On y est presque !
Ce code fonctionne, mais qq. chose me chiffonne :
Quand l'utilisateur ajoute un élément dans la liste (ex : Louis ) et ferme
le formulaire, pas de problème.
Quand on rouvre ce formulaire, l'élément rajouté (Louis) est bien présent
dans la liste déroulante.
Mais ou est donc le problème, me direz-vous ?
Ben quand j'ouvre le Form en mode création, la liste de valeur contient bien
Louis mais sans les guillemets ! ça fait ça :
"Pierre";"Paul";"Jean";Louis
Pi si on ajoute Marc ça fait ça :
"Pierre";"Paul";"Jean";Louis;Marc
Qu'en pensez-vous ? sachant que depuis des lustres Access nous dit qu'il
faut surtout pas oublier les guillemets ! ! !
Merci.


"Eric" a écrit dans le message de news:
uZLEF$
Bonjour,

Sur l'évènement Libération du formulaire :
Private Sub Form_Unload(Cancel as Integer)
DoCmd.RunCommand acCmdSave
End Sub

force à sauver le formulaire et donc la RowSource de la liste modifiée
devrait être conservée.

PS : je pense que tu peux t'affranchir de la déclaration Dim ctl as
Control suivie du Set ctl= ...

Je mettrai
If MsgBox("Ajouter à la liste ?", vbOKCancel) = vbOK Then
Response = acDataErrAdded
Me!Lmed.RowSource = Me!Lmed.RowSource & ";" & NewMed
Else
DoCmd.RunCommand acCmdUndo ' ou Me.Undo
Réponse = acDataErrContinue
End If








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

En effet, j'avais prévu d'encadrer NewMed par des Chr(34) ...

Malheureusement je dois abandonner l'idée de mettre à jour cette liste
de valeurs, pour 2 raisons :
- Le programme est installé sur 5 postes en réseau (les données sur u n
autre en serveur) et le fait de d'enregistrer une nouvelle liste de
valeurs sur un poste ne résoud pas totalement le problème puisqu'il
faudra refaire la manip sur les autres postes.
- Plus embétant encore : Mes fichiers sont au formats .MDE et là, les
modifications ne sont pas prises en compte !
Laissons tomber...
Merci.


On 3 fév, 09:03, Eric wrote:
Bonjour,

Ca ne pose pas de problème mais si vous tenez aux guillemets, modifiez
le code ainsi :

Me!Lmed.RowSource = Me!Lmed.RowSource & ";""" & NewMed & """"
ce qui aura pour effet d'encadrer la valeur ajoutée de guillemets.

dadpub a écrit :



> Salut,

> On y est presque !
> Ce code fonctionne, mais qq. chose me chiffonne :
> Quand l'utilisateur ajoute un élément dans la liste (ex : Louis ) e t ferme
> le formulaire, pas de problème.
> Quand on rouvre ce formulaire, l'élément rajouté (Louis) est bien présent
> dans la liste déroulante.
> Mais ou est donc le problème, me direz-vous ?
> Ben quand j'ouvre le Form en mode création, la liste de valeur contie nt bien
> Louis mais sans les guillemets ! ça fait ça :
> "Pierre";"Paul";"Jean";Louis
> Pi si on ajoute Marc ça fait ça :
> "Pierre";"Paul";"Jean";Louis;Marc
> Qu'en pensez-vous ? sachant que depuis des lustres Access nous dit qu'i l
> faut surtout pas oublier les guillemets ! ! !
> Merci.

> "Eric" a écrit dans le message de news:
> uZLEF$
>> Bonjour,

>> Sur l'évènement Libération du formulaire :
>> Private Sub Form_Unload(Cancel as Integer)
>> DoCmd.RunCommand acCmdSave
>> End Sub

>> force à sauver le formulaire et donc la RowSource de la liste modifi ée
>> devrait être conservée.

>> PS : je pense que tu peux t'affranchir de la déclaration Dim ctl as
>> Control suivie du Set ctl= ...

>> Je mettrai
>> If MsgBox("Ajouter à la liste ?", vbOKCancel) = vbOK Then
>>    Response = acDataErrAdded
>>    Me!Lmed.RowSource = Me!Lmed.RowSource & ";" & NewMed
>> Else
>>    DoCmd.RunCommand acCmdUndo ' ou Me.Undo
>>    Réponse = acDataErrContinue
>> End If

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


Avatar
TopJB
Bonjour,

Les guillemets permettent également d'éviter les erreurs Access qui
viennent du fait que Access ne sait pas utiliser les espaces dans les
requêtes.

Donc si dans la liste tu as :

"Pierre";"Paul";"Jean";Louis;Marc Antoine

Il y a un risque d'erreur à l'exécution, car Access ne va pas comprendre
'Marc Antoine' comme une seule valeur.

Par contre

"Pierre";"Paul";"Jean";"Louis";"Marc Antoine"

Ne fera pas d'erreur.

Donc conclusion : il vaut mieux mettre des : " surtout quand c'est les
utilisateur qui ajoute des données.

Eric a écrit :
Bonjour,

Ca ne pose pas de problème mais si vous tenez aux guillemets, modifiez
le code ainsi :

Me!Lmed.RowSource = Me!Lmed.RowSource & ";""" & NewMed & """"
ce qui aura pour effet d'encadrer la valeur ajoutée de guillemets.



dadpub a écrit :
Salut,

On y est presque !
Ce code fonctionne, mais qq. chose me chiffonne :
Quand l'utilisateur ajoute un élément dans la liste (ex : Louis ) et
ferme le formulaire, pas de problème.
Quand on rouvre ce formulaire, l'élément rajouté (Louis) est bien
présent dans la liste déroulante.
Mais ou est donc le problème, me direz-vous ?
Ben quand j'ouvre le Form en mode création, la liste de valeur
contient bien Louis mais sans les guillemets ! ça fait ça :
"Pierre";"Paul";"Jean";Louis
Pi si on ajoute Marc ça fait ça :
"Pierre";"Paul";"Jean";Louis;Marc
Qu'en pensez-vous ? sachant que depuis des lustres Access nous dit
qu'il faut surtout pas oublier les guillemets ! ! !
Merci.


"Eric" a écrit dans le message de news:
uZLEF$
Bonjour,

Sur l'évènement Libération du formulaire :
Private Sub Form_Unload(Cancel as Integer)
DoCmd.RunCommand acCmdSave
End Sub

force à sauver le formulaire et donc la RowSource de la liste
modifiée devrait être conservée.

PS : je pense que tu peux t'affranchir de la déclaration Dim ctl as
Control suivie du Set ctl= ...

Je mettrai
If MsgBox("Ajouter à la liste ?", vbOKCancel) = vbOK Then
Response = acDataErrAdded
Me!Lmed.RowSource = Me!Lmed.RowSource & ";" & NewMed
Else
DoCmd.RunCommand acCmdUndo ' ou Me.Undo
Réponse = acDataErrContinue
End If