OVH Cloud OVH Cloud

Liste déroulante

5 réponses
Avatar
Jean-Marc
Tout d'abord merci à Eric et à Raymond pour leur aide.

Toute fois ce que je cherche n'est pas tout à fait ça. Soit je me suis mal
exprimé, soit je n'ai pas donné assez d'info (soit les2. Lol).

Pour mémoire, j'ai un form avec mes clients. J'ai une liste déroulante sur
le nom du client. Lorsque j'ajoute la proc classique sur NotInList, il
ajoute effectivement le nouveau nom, mais reste sur l'enregistrement sur
lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les données du nouveau
client. Le pbl c'est que je suis déjà dans le form, puisque c'est le même
qui me sert pour consulter et pour encoder.
Avant, sur NotInList j'envoyais un message signalant que ce nom n'existant
pas et qu'il fallait cliquer 2 fois sur le champs pour encoder un nouveau
client.
Sur le double clic j'avais :
Private Sub ListeNomFamille_DblClick(Cancel As Integer)
On Error GoTo Err_ListeNomFamille_Click

Me![Liste_Etats_Anglais] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Prénom"

Exit_ListeNomFamille_Click:
Exit Sub

Err_ListeNomFamille_Click:
MsgBox Err.Description
Resume Exit_ListeNomFamille_Click

End Sub


Ca fonctionne bien, la question n'est pas là, mais je trouve que ce serait
plus "propre" s'il notait le nom inconnu dans la liste dans le champs
nomFamille.
En fait, ce que je cherche, c'est à ce que ma proc (ou en tout cas son
résultat) de double clic se fasse dans le NotInList, après acceptation du
message de confirmation et que [NomFamille]=NewData.
Le problème c'est que je n'y arrive pas seul.

Merci de vos z'avis z'avisés,

JM

5 réponses

Avatar
Eric
Bonsoir JM,

Je crois que tu veux tout faire à la fois.
J'ai une sol à te proposer mais suis pas sûr que ca te
convienne.
Faut abandonner la proc évènementielle Not_In_List.
Donc donnes moi exactement ce que tu veux faire avec ton
form(j'ai vu que tu avais mis une autre combo pour les
pays !!!)


A++
Eric

-----Message d'origine-----
Tout d'abord merci à Eric et à Raymond pour leur aide.

Toute fois ce que je cherche n'est pas tout à fait ça.
Soit je me suis mal

exprimé, soit je n'ai pas donné assez d'info (soit les2.
Lol).


Pour mémoire, j'ai un form avec mes clients. J'ai une
liste déroulante sur

le nom du client. Lorsque j'ajoute la proc classique sur
NotInList, il

ajoute effectivement le nouveau nom, mais reste sur
l'enregistrement sur

lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les
données du nouveau

client. Le pbl c'est que je suis déjà dans le form,
puisque c'est le même

qui me sert pour consulter et pour encoder.
Avant, sur NotInList j'envoyais un message signalant que
ce nom n'existant

pas et qu'il fallait cliquer 2 fois sur le champs pour
encoder un nouveau

client.
Sur le double clic j'avais :
Private Sub ListeNomFamille_DblClick(Cancel As Integer)
On Error GoTo Err_ListeNomFamille_Click

Me![Liste_Etats_Anglais] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Prénom"

Exit_ListeNomFamille_Click:
Exit Sub

Err_ListeNomFamille_Click:
MsgBox Err.Description
Resume Exit_ListeNomFamille_Click

End Sub


Ca fonctionne bien, la question n'est pas là, mais je
trouve que ce serait

plus "propre" s'il notait le nom inconnu dans la liste
dans le champs

nomFamille.
En fait, ce que je cherche, c'est à ce que ma proc (ou en
tout cas son

résultat) de double clic se fasse dans le NotInList,
après acceptation du

message de confirmation et que [NomFamille]=NewData.
Le problème c'est que je n'y arrive pas seul.

Merci de vos z'avis z'avisés,

JM


.



Avatar
Jean-Marc
J'ai eu des pbl avec le serveur il semble.
Je te renvois ce que j'ai essayé d'envoyer aujourd'hui :

Tout d'abord merci à Eric et à Raymond pour leur aide.

Toute fois ce que je cherche n'est pas tout à fait ça. Soit je me suis mal
exprimé, soit je n'ai pas donné assez d'info (soit les2. Lol).

Pour mémoire, j'ai un form avec mes clients. J'ai une liste déroulante sur
le nom du client. Lorsque j'ajoute la proc classique sur NotInList, il
ajoute effectivement le nouveau nom, mais reste sur l'enregistrement sur
lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les données du nouveau
client. Le pbl c'est que je suis déjà dans le form, puisque c'est le même
qui me sert pour consulter et pour encoder.
Avant, sur NotInList j'envoyais un message signalant que ce nom n'existant
pas et qu'il fallait cliquer 2 fois sur le champs pour encoder un nouveau
client.
Sur le double clic j'avais :
Private Sub ListeNomFamille_DblClick(Cancel As Integer)
On Error GoTo Err_ListeNomFamille_Click

Me![ListeNomFamille] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Prénom"

Exit_ListeNomFamille_Click:
Exit Sub

Err_ListeNomFamille_Click:
MsgBox Err.Description
Resume Exit_ListeNomFamille_Click

End Sub


Ca fonctionne bien, la question n'est pas là, et je compte garder ce bouton
pour le cas d'un autre client avec le même nom, mais je trouve que ce serait
plus "propre" s'il notait le nom inconnu dans la liste dans le champs
nomFamille.
En fait, ce que je cherche, c'est à ce que ma proc (ou en tout cas son
résultat) de double clic se fasse dans le NotInList, après acceptation du
message de confirmation et que [NomFamille]=NewData.

J'ai mis ceci sur le NotInList :

Private Sub ListeNomFamille_NotInList(NewData As String, Response As
Integer)
On Error Resume Next
Dim NouveauNom
If MsgBox("Le contact '" & NewData & "' n'existe pas dans la base de
données." & Chr(10) & Chr(13) & "Voulez-vous l'ajouter à la liste ?", _
vbYesNo + vbQuestion, "Valeur inconnue") = vbYes Then

Response = acDataErrAdded
ListeNomFamille.RowSource = ListNomFamille.RowSource & ";" &
NomPropre(NewData)
NouveauNom = NomPropre(Me.[ListeNomFamille].Text)
Me.[ListeNomFamille] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToPage 1
DoCmd.GoToControl "Prénom"
[NomFamille] = NouveauNom
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acNext
NomFamille.TabStop = False
Me.ListeNomFamille.Requery

Else

Response = acDataErrContinue
Me!ListeNomFamille.Undo

End If

' MsgBox "Ce nom n'existe pas dans la liste." & Chr(10) & Chr(13) &
"Cliquez deux fois sur ce champ pour ajouter un nouveau contact.",
vbExclamation, "Nom inexistant"
' Response = acDataErrContinue

End Sub


Théoriquement, avec le Response = acDataErrAdded il est sencé ne plus
m'envoyer le message me signalant que le nom n'est pas dans la liste.
Seulement il continue de l'envoyer (Pourquoi ?).
De même, le ListeNomFamille.RowSource = ListNomFamille.RowSource & ";" &
NomPropre(NewData) est sencé ajouté le nouveau nom à la liste, mais il ne
le fait pas plus.

Pour éviter le message d'absence dans la liste, je dois le faire reculer
d'un record puis le faire avancer d'un record. Ce n'est pas propre comme
méthode. Comment je fais proprement ?
Pour finir, que je le fasse revenir en arrière ou pas, il me met la
RéfClient (Le champs lié à la liste) dans le champs prénom. Pas pratique non
plus.

Je suis sur qu'il y a moyen de faire tout ça plus proprement. Mais comment
??

Merci de vos z'avis z'avisés,

JM


"Eric" a écrit dans le message de
news:1040601c3f272$68621dc0$
Bonsoir JM,

Je crois que tu veux tout faire à la fois.
J'ai une sol à te proposer mais suis pas sûr que ca te
convienne.
Faut abandonner la proc évènementielle Not_In_List.
Donc donnes moi exactement ce que tu veux faire avec ton
form(j'ai vu que tu avais mis une autre combo pour les
pays !!!)


A++
Eric

-----Message d'origine-----
Tout d'abord merci à Eric et à Raymond pour leur aide.

Toute fois ce que je cherche n'est pas tout à fait ça.
Soit je me suis mal

exprimé, soit je n'ai pas donné assez d'info (soit les2.
Lol).


Pour mémoire, j'ai un form avec mes clients. J'ai une
liste déroulante sur

le nom du client. Lorsque j'ajoute la proc classique sur
NotInList, il

ajoute effectivement le nouveau nom, mais reste sur
l'enregistrement sur

lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les
données du nouveau

client. Le pbl c'est que je suis déjà dans le form,
puisque c'est le même

qui me sert pour consulter et pour encoder.
Avant, sur NotInList j'envoyais un message signalant que
ce nom n'existant

pas et qu'il fallait cliquer 2 fois sur le champs pour
encoder un nouveau

client.
Sur le double clic j'avais :
Private Sub ListeNomFamille_DblClick(Cancel As Integer)
On Error GoTo Err_ListeNomFamille_Click

Me![Liste_Etats_Anglais] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Prénom"

Exit_ListeNomFamille_Click:
Exit Sub

Err_ListeNomFamille_Click:
MsgBox Err.Description
Resume Exit_ListeNomFamille_Click

End Sub


Ca fonctionne bien, la question n'est pas là, mais je
trouve que ce serait

plus "propre" s'il notait le nom inconnu dans la liste
dans le champs

nomFamille.
En fait, ce que je cherche, c'est à ce que ma proc (ou en
tout cas son

résultat) de double clic se fasse dans le NotInList,
après acceptation du

message de confirmation et que [NomFamille]=NewData.
Le problème c'est que je n'y arrive pas seul.

Merci de vos z'avis z'avisés,

JM


.



Avatar
Eric
re,
je te donne la solution en partant du principe que le N°
du client est un NuméroAuto

Tu crées ton formulaire d'affichage/saisie comme d'habitude
Tu mets une Liste Deroulante SANS l'Assistant(j'insiste
SANS l'ASSISTANT), dans l'en-tête du form, dont les infos
seront fournies par une requête contenant la liste des
NOMS des clients en 1er(fondamental)- tu peux la créer par
le Générateur de requête dans les propriétés de ta liste
déroulante, onglet Données, Contenu) puis les autres
champs dans l'ordre de leur saisie et enfin l'Id_client
qui est un numéroAuto donc t'as pas a t'en inquiéter. Tu
paramètres sa propriété Limitée à Liste à NON, c'est tres
important, colonne liée : 1, nb de colonnes :1 seule.

A la fin de ton formulaire tu mets un bouton de commande
qui permet de sauver l'enregistrement(Name : cmdSauver)
dont la propriété Visible est définie à FAUX ( suivant que
tu ajoutes ou non, on le rendra Visible) et la proc
evenementielle sera :
DoCmd.DoMenuItem acFormBar, acRecordsMenu,
acSaveRecord, , acMenuVer70
Me.TaListeClient.SetFocus ' à remplacer par ton nom de
liste
Me.cmdSauver.Visible = False

C'est tout pour le Bouton de commande.

Enfin sur la proc evènementielle de
TaListeClient_AfterUpdate() le code suivant (à saisir et
pas via l'Assistant d'Access, je me répète):

Private Sub TaListeClient_AfterUpdate()
Dim sql As String
sql = "Select * from TaTable where Nom='" &
Me.TaListeClient & "';"
Me.RecordSource = sql
If Me.Recordset.RecordCount = 0 Then
Me.Nom = Me.TaListeClient
Me.ActiveControl.Requery
Me.Ville.SetFocus
Me.cmdSauver.Visible = True
End If
Me.Refresh
End Sub


Et ouala, le formulaire pourra visualiser les clients déja
inscrits et pourra te permettre d'en saisir de nouveaux
sans faire appel à un autre formulaire. C'est ce que tu
voulais.


PS : c'est avec le modèle DAO 3.x donc à vérifier tes
reférences du projet.

A++
Eric

-----Message d'origine-----

Toute fois ce que je cherche n'est pas tout à fait ça.
Soit je me suis mal

exprimé, soit je n'ai pas donné assez d'info (soit les2.
Lol).


Pour mémoire, j'ai un form avec mes clients. J'ai une
liste déroulante sur

le nom du client. Lorsque j'ajoute la proc classique sur
NotInList, il

ajoute effectivement le nouveau nom, mais reste sur
l'enregistrement sur

lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les
données du nouveau

client. Le pbl c'est que je suis déjà dans le form,
puisque c'est le même

qui me sert pour consulter et pour encoder.


Avatar
Eric
re,
je viens de te poster une solution assez détaillée.

Jettes un oeil
A+
Eric
-----Message d'origine-----
J'ai eu des pbl avec le serveur il semble.
Je te renvois ce que j'ai essayé d'envoyer aujourd'hui :

Tout d'abord merci à Eric et à Raymond pour leur aide.

Toute fois ce que je cherche n'est pas tout à fait ça.
Soit je me suis mal

exprimé, soit je n'ai pas donné assez d'info (soit les2.
Lol).


Pour mémoire, j'ai un form avec mes clients. J'ai une
liste déroulante sur

le nom du client. Lorsque j'ajoute la proc classique sur
NotInList, il

ajoute effectivement le nouveau nom, mais reste sur
l'enregistrement sur

lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les
données du nouveau

client. Le pbl c'est que je suis déjà dans le form,
puisque c'est le même

qui me sert pour consulter et pour encoder.
Avant, sur NotInList j'envoyais un message signalant que
ce nom n'existant

pas et qu'il fallait cliquer 2 fois sur le champs pour
encoder un nouveau

client.
Sur le double clic j'avais :
Private Sub ListeNomFamille_DblClick(Cancel As Integer)
On Error GoTo Err_ListeNomFamille_Click

Me![ListeNomFamille] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Prénom"

Exit_ListeNomFamille_Click:
Exit Sub

Err_ListeNomFamille_Click:
MsgBox Err.Description
Resume Exit_ListeNomFamille_Click

End Sub


Ca fonctionne bien, la question n'est pas là, et je
compte garder ce bouton

pour le cas d'un autre client avec le même nom, mais je
trouve que ce serait

plus "propre" s'il notait le nom inconnu dans la liste
dans le champs

nomFamille.
En fait, ce que je cherche, c'est à ce que ma proc (ou en
tout cas son

résultat) de double clic se fasse dans le NotInList,
après acceptation du

message de confirmation et que [NomFamille]=NewData.

J'ai mis ceci sur le NotInList :

Private Sub ListeNomFamille_NotInList(NewData As String,
Response As

Integer)
On Error Resume Next
Dim NouveauNom
If MsgBox("Le contact '" & NewData & "' n'existe pas
dans la base de

données." & Chr(10) & Chr(13) & "Voulez-vous l'ajouter à
la liste ?", _

vbYesNo + vbQuestion, "Valeur inconnue") = vbYes
Then


Response = acDataErrAdded
ListeNomFamille.RowSource =
ListNomFamille.RowSource & ";" &

NomPropre(NewData)
NouveauNom = NomPropre(Me.[ListeNomFamille].Text)
Me.[ListeNomFamille] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToPage 1
DoCmd.GoToControl "Prénom"
[NomFamille] = NouveauNom
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acNext
NomFamille.TabStop = False
Me.ListeNomFamille.Requery

Else

Response = acDataErrContinue
Me!ListeNomFamille.Undo

End If

' MsgBox "Ce nom n'existe pas dans la liste." & Chr
(10) & Chr(13) &

"Cliquez deux fois sur ce champ pour ajouter un nouveau
contact.",

vbExclamation, "Nom inexistant"
' Response = acDataErrContinue

End Sub


Théoriquement, avec le Response = acDataErrAdded il est
sencé ne plus

m'envoyer le message me signalant que le nom n'est pas
dans la liste.

Seulement il continue de l'envoyer (Pourquoi ?).
De même, le ListeNomFamille.RowSource =
ListNomFamille.RowSource & ";" &

NomPropre(NewData) est sencé ajouté le nouveau nom à la
liste, mais il ne

le fait pas plus.

Pour éviter le message d'absence dans la liste, je dois
le faire reculer

d'un record puis le faire avancer d'un record. Ce n'est
pas propre comme

méthode. Comment je fais proprement ?
Pour finir, que je le fasse revenir en arrière ou pas, il
me met la

RéfClient (Le champs lié à la liste) dans le champs
prénom. Pas pratique non

plus.

Je suis sur qu'il y a moyen de faire tout ça plus
proprement. Mais comment

??

Merci de vos z'avis z'avisés,

JM


"Eric" a écrit dans le message de
news:1040601c3f272$68621dc0$
Bonsoir JM,

Je crois que tu veux tout faire à la fois.
J'ai une sol à te proposer mais suis pas sûr que ca te
convienne.
Faut abandonner la proc évènementielle Not_In_List.
Donc donnes moi exactement ce que tu veux faire avec ton
form(j'ai vu que tu avais mis une autre combo pour les
pays !!!)


A++
Eric

-----Message d'origine-----
Tout d'abord merci à Eric et à Raymond pour leur aide.

Toute fois ce que je cherche n'est pas tout à fait ça.
Soit je me suis mal

exprimé, soit je n'ai pas donné assez d'info (soit les2.
Lol).


Pour mémoire, j'ai un form avec mes clients. J'ai une
liste déroulante sur

le nom du client. Lorsque j'ajoute la proc classique sur
NotInList, il

ajoute effectivement le nouveau nom, mais reste sur
l'enregistrement sur

lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les
données du nouveau

client. Le pbl c'est que je suis déjà dans le form,
puisque c'est le même

qui me sert pour consulter et pour encoder.
Avant, sur NotInList j'envoyais un message signalant que
ce nom n'existant

pas et qu'il fallait cliquer 2 fois sur le champs pour
encoder un nouveau

client.
Sur le double clic j'avais :
Private Sub ListeNomFamille_DblClick(Cancel As Integer)
On Error GoTo Err_ListeNomFamille_Click

Me![Liste_Etats_Anglais] = ""
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "Prénom"

Exit_ListeNomFamille_Click:
Exit Sub

Err_ListeNomFamille_Click:
MsgBox Err.Description
Resume Exit_ListeNomFamille_Click

End Sub


Ca fonctionne bien, la question n'est pas là, mais je
trouve que ce serait

plus "propre" s'il notait le nom inconnu dans la liste
dans le champs

nomFamille.
En fait, ce que je cherche, c'est à ce que ma proc (ou en
tout cas son

résultat) de double clic se fasse dans le NotInList,
après acceptation du

message de confirmation et que [NomFamille]=NewData.
Le problème c'est que je n'y arrive pas seul.

Merci de vos z'avis z'avisés,

JM


.




.




Avatar
Jean-Marc
Merci de ton aide, Eric.

Toutefois, j'ai combiné mon ancienne méthode avec des infos que tu m'as
apportées (personnellement, je trouvais ça plus simple).
Je te transmets ce que j'ai fait. On ne sait jamais, ça pourrait servir à
qqn d'autre :

Private Sub ListeNomFamille_NotInList(NewData As String, Response As
Integer)
On Error Resume Next
Dim NouveauNom
If MsgBox("Le contact '" & NewData & "' n'existe pas dans la base de
données." & Chr(10) & Chr(13) & "Voulez-vous l'ajouter à la liste ?", _
vbYesNo + vbQuestion, "Valeur inconnue") = vbYes Then

Response = acDataErrAdded
ListeNomFamille.RowSource = ListNomFamille.RowSource & ";" &
NomPropre(NewData)
NouveauNom = NomPropre(Me.[ListeNomFamille].Text)
Me.[ListeNomFamille] = ""
DoCmd.GoToRecord , , acNewRec
[NomFamille] = NouveauNom
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70
DoCmd.GoToPage 1
Me.ListeNomFamille = RéfContact
SendKeys "{TAB}"

Else

Response = acDataErrContinue
Me!ListeNomFamille.Undo

End If
End Sub


Tu constateras le sendkeys qui a pour but de passer au champs prénom. En
effet, si j'utilise le dcmd.gotocontrol il me marque le numéro ID du client
dans le prénom. J'ai même essayé de passer par un autre controle avant, pour
essayer de comprendre ce qu'il se passe, mais le résultat était le même.
J'ai donc contourné le pbl de cette sorte, puisque le tabstop de mon champs
prénom suit celui de ma liste de sélection.

Encore une fois merci de ton aide qui m'a été précieuse, même je ne l'ai pas
utilisée au complet.

JM
"Eric" a écrit dans le message de
news:f6f201c3f279$f1a20e40$
re,
je te donne la solution en partant du principe que le N°
du client est un NuméroAuto

Tu crées ton formulaire d'affichage/saisie comme d'habitude
Tu mets une Liste Deroulante SANS l'Assistant(j'insiste
SANS l'ASSISTANT), dans l'en-tête du form, dont les infos
seront fournies par une requête contenant la liste des
NOMS des clients en 1er(fondamental)- tu peux la créer par
le Générateur de requête dans les propriétés de ta liste
déroulante, onglet Données, Contenu) puis les autres
champs dans l'ordre de leur saisie et enfin l'Id_client
qui est un numéroAuto donc t'as pas a t'en inquiéter. Tu
paramètres sa propriété Limitée à Liste à NON, c'est tres
important, colonne liée : 1, nb de colonnes :1 seule.

A la fin de ton formulaire tu mets un bouton de commande
qui permet de sauver l'enregistrement(Name : cmdSauver)
dont la propriété Visible est définie à FAUX ( suivant que
tu ajoutes ou non, on le rendra Visible) et la proc
evenementielle sera :
DoCmd.DoMenuItem acFormBar, acRecordsMenu,
acSaveRecord, , acMenuVer70
Me.TaListeClient.SetFocus ' à remplacer par ton nom de
liste
Me.cmdSauver.Visible = False

C'est tout pour le Bouton de commande.

Enfin sur la proc evènementielle de
TaListeClient_AfterUpdate() le code suivant (à saisir et
pas via l'Assistant d'Access, je me répète):

Private Sub TaListeClient_AfterUpdate()
Dim sql As String
sql = "Select * from TaTable where Nom='" &
Me.TaListeClient & "';"
Me.RecordSource = sql
If Me.Recordset.RecordCount = 0 Then
Me.Nom = Me.TaListeClient
Me.ActiveControl.Requery
Me.Ville.SetFocus
Me.cmdSauver.Visible = True
End If
Me.Refresh
End Sub


Et ouala, le formulaire pourra visualiser les clients déja
inscrits et pourra te permettre d'en saisir de nouveaux
sans faire appel à un autre formulaire. C'est ce que tu
voulais.


PS : c'est avec le modèle DAO 3.x donc à vérifier tes
reférences du projet.

A++
Eric

-----Message d'origine-----

Toute fois ce que je cherche n'est pas tout à fait ça.
Soit je me suis mal

exprimé, soit je n'ai pas donné assez d'info (soit les2.
Lol).


Pour mémoire, j'ai un form avec mes clients. J'ai une
liste déroulante sur

le nom du client. Lorsque j'ajoute la proc classique sur
NotInList, il

ajoute effectivement le nouveau nom, mais reste sur
l'enregistrement sur

lequel il était.
Eric m'a proposé d'ouvrir un autre form pour encoder les
données du nouveau

client. Le pbl c'est que je suis déjà dans le form,
puisque c'est le même

qui me sert pour consulter et pour encoder.