Ajout d'éléments ds une liste modifiable en mode formulaire
4 réponses
Régis
Bonjour,
Lorsque je suis dans un formulaire, je souhaiterais que dans une zone de
liste modifiable, lorsque j'ajoute un nouvel élément qui n'est pas dans la
liste, celui-ci soit automatiquement ajouté à la liste et puisse être
réutilisé dans les fiches suivantes.
En gros, comment faire une list modifiable qui puisse évoluer et se
compléter au fur et à mesure
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
machin
Bonjour,
Régis wrote: | Bonjour, | | Lorsque je suis dans un formulaire, je souhaiterais que dans une zone | de liste modifiable, lorsque j'ajoute un nouvel élément qui n'est pas | dans la liste, celui-ci soit automatiquement ajouté à la liste et | puisse être réutilisé dans les fiches suivantes. | | En gros, comment faire une list modifiable qui puisse évoluer et se | compléter au fur et à mesure | | Merci de votre aide
Tu as une zone de liste qui prend ses données dans une table, via une requête source Propriétés de la zone de liste concernées : Origine Source Table/Requête Contenu : SELECT les champs FROM la table
L'une des colonnes de cette liste est liée à un champ de la table ou de la requête source du formulaire.
Ainsi, lorsque tu choisis une valeur dans la zone de liste, c'est celle de la colonne liée qui est prise en compte,
Tu peux autoriser la saisie de valeurs qui ne figurent pas dans la table : Propriété Limiter à Liste = NON
Dans ce cas il ne se passe rien, la saisie est prise en compte, mais comme il ne se passe rien, la liste n'est pas mise à jour.
Tu peux interdire la saisie de valeurs qui ne sont pas dans la liste : Propriété Limiter à Liste = OUI Si tu ne fais rien de plus, tu auras le message standard d'access qui interdit la saisie de valeurs nouvelles
Tu peux autoriser la saisie de valeurs qui ne sont pas dans la liste après une confirmation. C'est tout là l'astuce : Propriété Limiter à Liste = OUI Un événement se déclenche, c'est l'événement sur absence dans liste
Private Sub CboClient_NotInList(NewData As String, Response As Integer)
Et c'est dans cet événement qu'on va gérer tout ce qu'on veut faire :
1 - demander si on veut vraiment ajouter une nouvelle valeur
If MsgBox("Voulez-vous vraiment ajouter le client " & NewData & " ?", vbQuestion + vbYesNo, "Client inexistant") = vbYes Then
2 - si la réponse est NON on inhibe le message d'erreur standard qui arrive quand la valeur n'est pas dans la liste :
Response = acDataErrContinue
et on interrompt la saisie en cours pour revenir où on en était : Me!CboClient.Undo puis Exit Sub
3 - si la réponse est OUI on rajoute d'abord la nouvelle valeur dans la table source de la liste :
La valeur est dans la table source, mais l'ajout étant réalisé de manière indépendante, la zone de liste n'est toujours pas rafraîchie donc on risque avoir un message comme quoi la valeur n'a pas été trouvée dans la zone de liste.
Il faudrait donc : a- mémoriser la nouvelle valeur (c'est justement newdata) b - mettre à blanc la zone de liste me.CboClient.value = "" c- rafraichir la zone de liste me.cboclient.requery d - remettre la valeur mémorisée : me.CdoClient.value = newdata e- inhiber le message d'erreur : response = acdataerrcontinue
Eh bien tout celà, c'est ce qu'on arrive à faire en une seule ligne
Response = acDataErrAdded
Conclusion : regarde l'exemple issu de http://memoaccess.free.fr/forms.htm#NotInList
Private Sub Combo0_NotInList(NewData As String, Response As Integer)
If msgbox("Voulez-vous ajouter la valeur " & NewData & " ?", _ vbYesNo + vbQuestion) = vbYes Then
Régis wrote:
| Bonjour,
|
| Lorsque je suis dans un formulaire, je souhaiterais que dans une zone
| de liste modifiable, lorsque j'ajoute un nouvel élément qui n'est pas
| dans la liste, celui-ci soit automatiquement ajouté à la liste et
| puisse être réutilisé dans les fiches suivantes.
|
| En gros, comment faire une list modifiable qui puisse évoluer et se
| compléter au fur et à mesure
|
| Merci de votre aide
Tu as une zone de liste qui prend ses données dans une table, via une
requête source
Propriétés de la zone de liste concernées :
Origine Source Table/Requête
Contenu : SELECT les champs FROM la table
L'une des colonnes de cette liste est liée à un champ de la table ou de la
requête source du formulaire.
Ainsi, lorsque tu choisis une valeur dans la zone de liste, c'est celle de
la colonne liée qui est prise en compte,
Tu peux autoriser la saisie de valeurs qui ne figurent pas dans la table :
Propriété Limiter à Liste = NON
Dans ce cas il ne se passe rien, la saisie est prise en compte, mais comme
il ne se passe rien, la liste n'est pas mise à jour.
Tu peux interdire la saisie de valeurs qui ne sont pas dans la liste :
Propriété Limiter à Liste = OUI
Si tu ne fais rien de plus, tu auras le message standard d'access qui
interdit la saisie de valeurs nouvelles
Tu peux autoriser la saisie de valeurs qui ne sont pas dans la liste après
une confirmation. C'est tout là l'astuce :
Propriété Limiter à Liste = OUI
Un événement se déclenche, c'est l'événement sur absence dans liste
Private Sub CboClient_NotInList(NewData As String, Response As Integer)
Et c'est dans cet événement qu'on va gérer tout ce qu'on veut faire :
1 - demander si on veut vraiment ajouter une nouvelle valeur
If MsgBox("Voulez-vous vraiment ajouter le client " & NewData & " ?",
vbQuestion + vbYesNo, "Client inexistant") = vbYes Then
2 - si la réponse est NON on inhibe le message d'erreur standard qui arrive
quand la valeur n'est pas dans la liste :
Response = acDataErrContinue
et on interrompt la saisie en cours pour revenir où on en était :
Me!CboClient.Undo puis Exit Sub
3 - si la réponse est OUI on rajoute d'abord la nouvelle valeur dans la
table source de la liste :
La valeur est dans la table source, mais l'ajout étant réalisé de manière
indépendante, la zone de liste n'est toujours pas rafraîchie donc on risque avoir un
message comme quoi la valeur n'a pas été trouvée dans la zone de liste.
Il faudrait donc :
a- mémoriser la nouvelle valeur (c'est justement newdata)
b - mettre à blanc la zone de liste me.CboClient.value = ""
c- rafraichir la zone de liste me.cboclient.requery
d - remettre la valeur mémorisée : me.CdoClient.value = newdata
e- inhiber le message d'erreur : response = acdataerrcontinue
Eh bien tout celà, c'est ce qu'on arrive à faire en une seule ligne
Response = acDataErrAdded
Conclusion : regarde l'exemple issu de http://memoaccess.free.fr/forms.htm#NotInList
Private Sub Combo0_NotInList(NewData As String, Response As Integer)
If msgbox("Voulez-vous ajouter la valeur " & NewData & " ?", _
vbYesNo + vbQuestion) = vbYes Then
Régis wrote: | Bonjour, | | Lorsque je suis dans un formulaire, je souhaiterais que dans une zone | de liste modifiable, lorsque j'ajoute un nouvel élément qui n'est pas | dans la liste, celui-ci soit automatiquement ajouté à la liste et | puisse être réutilisé dans les fiches suivantes. | | En gros, comment faire une list modifiable qui puisse évoluer et se | compléter au fur et à mesure | | Merci de votre aide
Tu as une zone de liste qui prend ses données dans une table, via une requête source Propriétés de la zone de liste concernées : Origine Source Table/Requête Contenu : SELECT les champs FROM la table
L'une des colonnes de cette liste est liée à un champ de la table ou de la requête source du formulaire.
Ainsi, lorsque tu choisis une valeur dans la zone de liste, c'est celle de la colonne liée qui est prise en compte,
Tu peux autoriser la saisie de valeurs qui ne figurent pas dans la table : Propriété Limiter à Liste = NON
Dans ce cas il ne se passe rien, la saisie est prise en compte, mais comme il ne se passe rien, la liste n'est pas mise à jour.
Tu peux interdire la saisie de valeurs qui ne sont pas dans la liste : Propriété Limiter à Liste = OUI Si tu ne fais rien de plus, tu auras le message standard d'access qui interdit la saisie de valeurs nouvelles
Tu peux autoriser la saisie de valeurs qui ne sont pas dans la liste après une confirmation. C'est tout là l'astuce : Propriété Limiter à Liste = OUI Un événement se déclenche, c'est l'événement sur absence dans liste
Private Sub CboClient_NotInList(NewData As String, Response As Integer)
Et c'est dans cet événement qu'on va gérer tout ce qu'on veut faire :
1 - demander si on veut vraiment ajouter une nouvelle valeur
If MsgBox("Voulez-vous vraiment ajouter le client " & NewData & " ?", vbQuestion + vbYesNo, "Client inexistant") = vbYes Then
2 - si la réponse est NON on inhibe le message d'erreur standard qui arrive quand la valeur n'est pas dans la liste :
Response = acDataErrContinue
et on interrompt la saisie en cours pour revenir où on en était : Me!CboClient.Undo puis Exit Sub
3 - si la réponse est OUI on rajoute d'abord la nouvelle valeur dans la table source de la liste :
La valeur est dans la table source, mais l'ajout étant réalisé de manière indépendante, la zone de liste n'est toujours pas rafraîchie donc on risque avoir un message comme quoi la valeur n'a pas été trouvée dans la zone de liste.
Il faudrait donc : a- mémoriser la nouvelle valeur (c'est justement newdata) b - mettre à blanc la zone de liste me.CboClient.value = "" c- rafraichir la zone de liste me.cboclient.requery d - remettre la valeur mémorisée : me.CdoClient.value = newdata e- inhiber le message d'erreur : response = acdataerrcontinue
Eh bien tout celà, c'est ce qu'on arrive à faire en une seule ligne
Response = acDataErrAdded
Conclusion : regarde l'exemple issu de http://memoaccess.free.fr/forms.htm#NotInList
Private Sub Combo0_NotInList(NewData As String, Response As Integer)
If msgbox("Voulez-vous ajouter la valeur " & NewData & " ?", _ vbYesNo + vbQuestion) = vbYes Then
Lorsque je suis dans un formulaire, je souhaiterais que dans une zone de liste modifiable, lorsque j'ajoute un nouvel élément qui n'est pas dans la liste, celui-ci soit automatiquement ajouté à la liste et puisse être réutilisé dans les fiches suivantes.
En gros, comment faire une list modifiable qui puisse évoluer et se compléter au fur et à mesure
-- A+ Pierre (3stone) Access MVP ----------------------------- http://users.skynet.be/mpfa -----------------------------
Salut,
"Régis"
Lorsque je suis dans un formulaire, je souhaiterais que dans une zone de
liste modifiable, lorsque j'ajoute un nouvel élément qui n'est pas dans la
liste, celui-ci soit automatiquement ajouté à la liste et puisse être
réutilisé dans les fiches suivantes.
En gros, comment faire une list modifiable qui puisse évoluer et se
compléter au fur et à mesure
Lorsque je suis dans un formulaire, je souhaiterais que dans une zone de liste modifiable, lorsque j'ajoute un nouvel élément qui n'est pas dans la liste, celui-ci soit automatiquement ajouté à la liste et puisse être réutilisé dans les fiches suivantes.
En gros, comment faire une list modifiable qui puisse évoluer et se compléter au fur et à mesure