OVH Cloud OVH Cloud

Liste déroulante

2 réponses
Avatar
Jean-Marc
Salut à tous,

Comme bcp j'ai des listes dans lesquelles j'ajoute des valeurs. Jusque là
tout va bien.
Je sais, je sais, on trouve ce genre de code un peu partout, mais je n'ai
pas réussi à en adapter un à ma bdd.
Ben oui, faut savoir reconnaître ses limites, même si elle sont TRES
limitées.
Avec la liste principale, celle du nom des clients, j'ai un pbl : Une fois
le nouveau nom ajouté, je n'arrive pas à aller sur ce record. J'ai le
nouveau nom, mais les données du client qui était affiché lors de l'ajout.
Pourtant il y a effectivement une nouvelle ligne dans la table contact, avec
un RéfContact (numeroauto) correct. Mais je n'arrive pas à y aller.

J'utilise la procédure :

Private Sub ListeNomFamille_NotInList(NewData As String, Response As
Integer)
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

CurrentDb.Execute "INSERT INTO Clients(NomFamille) " _
& "SELECT """ & NomPropre(NewData) & """ ;"
Response = acDataErrAdded

Else

Response = acDataErrContinue
Me!ListeNomFamille.Undo

End If

End Sub



Ceci est la procédure d'ajout d'un nouveau nom dans la liste. Cela
fonctionne. Mais dès que j'ajoute qqch dans le if then, j'ai des messages
d'erreur. Donc ce que j'essaye ne correspond pas, mais que dois-je faire
pour atteindre ce nouveau record ?

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

JM

2 réponses

Avatar
Eric
Bonsoir JM

Avec ton sql tu enregistres dans le meilleur des cas que
le nom du client.
le sql doit être :
CurrentDb.Execute "INSERT INTO Clients(NomFamille) " _
& "VALUES(""" & NomPropre(NewData) & """) ;" mais il te
permet uniquement d'enregistrer les infos du nom du client
et pas les infos associées comme l'adresse ...

Je te propose la solution suivante:
Tu crées un formulaire de saisie de client, mis en Entrée
de données à vrai.

Dans ta proc Private Sub MaListe_NotInList(NewData As
String, Response As Integer)

sur le test
if msgbox("...",vbYesNo+vbDefaultButton2+vbInformation) =
vbYes then
Response= acDataErrAdded
Docmd.Openform "Saisie nouveau client"acNormal, , ,
acFormAdd, acDialog, NewData
le reste est ok

Sur le form "Saisie d'un nouveau client", sur la propriété
Current
tu mets :
NomClient = Me.Openargs pour récupérer le contenu de NewDat
Ce formulaire a un bouton Sauver enregistrement et
derriere la commande :
DoCmd.DoMenuItem acFormBar, acRecordsMenu,
acSaveRecord, , acMenuVer70
tu ajoutes :DoCmd.Close

Ca te permet de saisir toutes les infos de ton nouveau
client et tu reviens sur ton formulaire initial ou il y a
la liste.
Et le tour est joué.

A+
Eric

-----Message d'origine-----
Salut à tous,

Comme bcp j'ai des listes dans lesquelles j'ajoute des
valeurs. Jusque là

tout va bien.
Je sais, je sais, on trouve ce genre de code un peu
partout, mais je n'ai

pas réussi à en adapter un à ma bdd.
Ben oui, faut savoir reconnaître ses limites, même si
elle sont TRES

limitées.
Avec la liste principale, celle du nom des clients, j'ai
un pbl : Une fois

le nouveau nom ajouté, je n'arrive pas à aller sur ce
record. J'ai le

nouveau nom, mais les données du client qui était affiché
lors de l'ajout.

Pourtant il y a effectivement une nouvelle ligne dans la
table contact, avec

un RéfContact (numeroauto) correct. Mais je n'arrive pas
à y aller.


J'utilise la procédure :

Private Sub ListeNomFamille_NotInList(NewData As String,
Response As

Integer)
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


Else

Response = acDataErrContinue
Me!ListeNomFamille.Undo

End If

End Sub



Ceci est la procédure d'ajout d'un nouveau nom dans la
liste. Cela

fonctionne. Mais dès que j'ajoute qqch dans le if then,
j'ai des messages

d'erreur. Donc ce que j'essaye ne correspond pas, mais
que dois-je faire

pour atteindre ce nouveau record ?

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

JM


.




Avatar
Jean-Marc
Merci de ton aide, Eric, mais j'aimerais éviter de devoir ouvrir un
formulaire qui serait en fait exactement le même formulaire.
C'est le formulaire que j'utilise tant pour la consultation que pour
l'ajout.
J'ai mis une liste déroulante sur le nom du client, pas de pbl, mais si le
nom n'existe pas, je voudrais pouvoir encoder ses données.
Actuellement j'ai la liste et si la liste ne trouve pas le nom entré,
j'envois un message signalant qu'il faut cliquer 2 fois sur la liste pour
introduire un nouveau client. La procédure sur le double clic est :
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

Mais je reste persuadé qu'il y a moyen d'obtenir le même résultat avec le
message de confirmation de nouveau nom, que le nouveau nom (NewData) se
mette dans le champs NomFamille et que les autres champs soient vides. Bref,
que je sois sur le nouvel enregistrement.

En fait, si on clique ok au message de confirmation d'ajout, il se produise
la proc du double clic et que [NomFamille]=NewData

Comme je disais, je reste persuadé que c'est possible, mais je ne suis pas
assez doué pour le faire seul.

Merci de votre aide,

JM

"Eric" a écrit dans le message de
news:ed3f01c3f1ab$ec7f4050$
Bonsoir JM

Avec ton sql tu enregistres dans le meilleur des cas que
le nom du client.
le sql doit être :
CurrentDb.Execute "INSERT INTO Clients(NomFamille) " _
& "VALUES(""" & NomPropre(NewData) & """) ;" mais il te
permet uniquement d'enregistrer les infos du nom du client
et pas les infos associées comme l'adresse ...

Je te propose la solution suivante:
Tu crées un formulaire de saisie de client, mis en Entrée
de données à vrai.

Dans ta proc Private Sub MaListe_NotInList(NewData As
String, Response As Integer)

sur le test
if msgbox("...",vbYesNo+vbDefaultButton2+vbInformation) vbYes then
Response= acDataErrAdded
Docmd.Openform "Saisie nouveau client"acNormal, , ,
acFormAdd, acDialog, NewData
le reste est ok

Sur le form "Saisie d'un nouveau client", sur la propriété
Current
tu mets :
NomClient = Me.Openargs pour récupérer le contenu de NewDat
Ce formulaire a un bouton Sauver enregistrement et
derriere la commande :
DoCmd.DoMenuItem acFormBar, acRecordsMenu,
acSaveRecord, , acMenuVer70
tu ajoutes :DoCmd.Close

Ca te permet de saisir toutes les infos de ton nouveau
client et tu reviens sur ton formulaire initial ou il y a
la liste.
Et le tour est joué.

A+
Eric

-----Message d'origine-----
Salut à tous,

Comme bcp j'ai des listes dans lesquelles j'ajoute des
valeurs. Jusque là

tout va bien.
Je sais, je sais, on trouve ce genre de code un peu
partout, mais je n'ai

pas réussi à en adapter un à ma bdd.
Ben oui, faut savoir reconnaître ses limites, même si
elle sont TRES

limitées.
Avec la liste principale, celle du nom des clients, j'ai
un pbl : Une fois

le nouveau nom ajouté, je n'arrive pas à aller sur ce
record. J'ai le

nouveau nom, mais les données du client qui était affiché
lors de l'ajout.

Pourtant il y a effectivement une nouvelle ligne dans la
table contact, avec

un RéfContact (numeroauto) correct. Mais je n'arrive pas
à y aller.


J'utilise la procédure :

Private Sub ListeNomFamille_NotInList(NewData As String,
Response As

Integer)
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


Else

Response = acDataErrContinue
Me!ListeNomFamille.Undo

End If

End Sub



Ceci est la procédure d'ajout d'un nouveau nom dans la
liste. Cela

fonctionne. Mais dès que j'ajoute qqch dans le if then,
j'ai des messages

d'erreur. Donc ce que j'essaye ne correspond pas, mais
que dois-je faire

pour atteindre ce nouveau record ?

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

JM


.