OVH Cloud OVH Cloud

message box avec actions multiples

4 réponses
Avatar
Nelly
bonjour,
merci de bien vouloir aider une débutante à effectuer les actions suivantes
(VBA bienvenu mais sans aucune distance critique):
dans un formulaire Coordonnéesduclient relié à la table du même nom, des
champs Nom et Prénom permettent d'identifier lesdits clients. Je souhaiterais
après MAJ sur Prénom (champs Nom et Prénom complétés), qu'une message box
s'affiche avec vbyesno:
- (vbyes), permettant la saisie d'un homonyme sans effacer les champs Nom
Prénom déjà complétés et en atteignant le prochain champ du formulaire
(Adresse)
-et (vbno), permettant d'atteindre l'enregistrement déjà saisi du client
dans le formulaire actif.
Merci à tous

4 réponses

Avatar
3stone
Salut,

"Nelly"
| dans un formulaire Coordonnéesduclient relié à la table du même nom, des
| champs Nom et Prénom permettent d'identifier lesdits clients. Je souhaiterais
| après MAJ sur Prénom (champs Nom et Prénom complétés), qu'une message box
| s'affiche avec vbyesno:
| - (vbyes), permettant la saisie d'un homonyme sans effacer les champs Nom
| Prénom déjà complétés et en atteignant le prochain champ du formulaire
| (Adresse)
| -et (vbno), permettant d'atteindre l'enregistrement déjà saisi du client
| dans le formulaire actif.


Non, c'est *avant* mise à jour du champ Prenom qu'il faut tester !
(cela n'empêche pas que l'on peut 'sauter' le champ par un coup de tabulateur)

- ensuite, faire un DLookup() sur la table source pour récuperer la clé
de l'enregistrement qui possède des champs identiques
- s'il >0 demander par msgbox ce qu'il y a lieu de faire
- soit rien (permet les doublons)
- soit faire un findfirst sur le recorsetclone en recherchant l'ID mémorisé

Si tu ne sait pas faire, tout cela n'est pas nécessaire si tu présente une
liste déroulante de sélection à tes utilisateurs...
Si le client ne s'y trouve pas, on le crée...


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Nelly
Bonjour,

d'abord merci d'avoir pris le temps d'apporter une réponse.

Encore trois petites sollicitations SVP ?
1. pourquoi tester le doublon avant MAJ Prénom sachant que je sais par
avance que je vais avoir des clients portant le même patronyme ?
2. Voilà ci-dessousl'état de la construction actuelle à partir d'une
lecture assidue du forum (j'ai commencé à apprendre à utiliserAccess il y 5
jours toute seule et je n'ai aucune imagination créative en la matière!).
Comment indiquer d' ouvrir l'enregistrement prééxistant (je ne devrai pas
avoir plus de 2 homonymes au vu de l'utilisation de la base) , je n'arrive
pas à rédiger la fonction?
3. La liste de sélection ferait plus de 500 noms dès la création de la base
? Reste-t-elle la meilleure solution ?

Private Sub Prénom_AfterUpdate()
If Not IsNull(DLookup("Nom", "Coordonnéesduclient", "[Nom] ='" & Me!Nom & "'
AND [Prénom]='" & Me.Prénom & "'")) Then Response = MsgBox("Ce bénéficiaire
semble déjà enregistré. Voulez-vous saisir un HOMONYME ?", vbYesNo +
vbCritical + vbDefaultButton2, "Alerte doublon !")
If Response = vbYes Then ' L'utilisateur a choisi Oui.
Forms!Coordonnéesduclient!Adresse.SetFocus
Else ' L'utilisateur a choisi Non.
???????????????????????????????????????????????????
End If
End Sub

Merci d'avance pour les réponses.
Nelly



Salut,

"Nelly"
| dans un formulaire Coordonnéesduclient relié à la table du même nom, des
| champs Nom et Prénom permettent d'identifier lesdits clients. Je souhaiterais
| après MAJ sur Prénom (champs Nom et Prénom complétés), qu'une message box
| s'affiche avec vbyesno:
| - (vbyes), permettant la saisie d'un homonyme sans effacer les champs Nom
| Prénom déjà complétés et en atteignant le prochain champ du formulaire
| (Adresse)
| -et (vbno), permettant d'atteindre l'enregistrement déjà saisi du client
| dans le formulaire actif.


Non, c'est *avant* mise à jour du champ Prenom qu'il faut tester !
(cela n'empêche pas que l'on peut 'sauter' le champ par un coup de tabulateur)

- ensuite, faire un DLookup() sur la table source pour récuperer la clé
de l'enregistrement qui possède des champs identiques
- s'il >0 demander par msgbox ce qu'il y a lieu de faire
- soit rien (permet les doublons)
- soit faire un findfirst sur le recorsetclone en recherchant l'ID mémorisé

Si tu ne sait pas faire, tout cela n'est pas nécessaire si tu présente une
liste déroulante de sélection à tes utilisateurs...
Si le client ne s'y trouve pas, on le crée...


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/




Avatar
3stone
Bonjour,

"Nelly"
| Encore trois petites sollicitations SVP ?
| 1. pourquoi tester le doublon avant MAJ Prénom sachant que je sais par
| avance que je vais avoir des clients portant le même patronyme ?


cela permet d'annuler la mise à jour et ainsi rester dans le textbox
au lieu d'essayer d'y retourner...


| 2. Voilà ci-dessousl'état de la construction actuelle à partir d'une
| lecture assidue du forum (j'ai commencé à apprendre à utiliserAccess il y 5
| jours toute seule et je n'ai aucune imagination créative en la matière!).
| Comment indiquer d' ouvrir l'enregistrement prééxistant (je ne devrai pas
| avoir plus de 2 homonymes au vu de l'utilisation de la base) , je n'arrive
| pas à rédiger la fonction?


With Me.RecordsetClone
.FindFirst "ID=" & Me.ID
Me.Bookmark = .Bookmark
End With



| 3. La liste de sélection ferait plus de 500 noms dès la création de la base
| ? Reste-t-elle la meilleure solution ?
|
| Private Sub Prénom_AfterUpdate()
| If Not IsNull(DLookup("Nom", "Coordonnéesduclient", "[Nom] ='" & Me!Nom & "'
| AND [Prénom]='" & Me.Prénom & "'")) Then Response = MsgBox("Ce bénéficiaire
| semble déjà enregistré. Voulez-vous saisir un HOMONYME ?", vbYesNo +
| vbCritical + vbDefaultButton2, "Alerte doublon !")
| If Response = vbYes Then ' L'utilisateur a choisi Oui.
| Forms!Coordonnéesduclient!Adresse.SetFocus
| Else ' L'utilisateur a choisi Non.
| ???????????????????????????????????????????????????
'dépendant de ce que tu souhaite faire...
'si erreur de saisie, il faut pouvoir corriger et donc annuler la mise à jour
Cancel = True

'sinon annuler toute la saisie
Me.Undo


| End If
| End Sub
|


En fait, ta question à l'utilisateur n'est pas suffisante.
Il y à 3 possibilités :
- accepter le doublon
- se corriger car erreur de saisie
- annuler toute l'action

donc, modifie la question et utilise vbYesNoCancel

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Nelly
Merci pour tout 3stone