OVH Cloud OVH Cloud

Access2000 - Absence dans liste

20 réponses
Avatar
mission
Bonjour tout le monde et bonne année.
Soit une table tblFournisseurs contenant (entre autres) un champ
CodeFournisseur (unique) et un champ Fournisseur (index avec doublons).
Soit un formulaire frmFournisseurs contenant quelques champs de
tblFournisseurs plus une liste modifiable indépendante lstFournisseurs basée
sur la requête SELECT [tblFournisseurs].[Fournisseur], * FROM
tblFournisseurs ORDER BY [tblFournisseurs].[Fournisseur];
Avec le code
Private Sub lstFournisseurs_AfterUpdate()
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[tblFournisseur] = '" & Me.[lstFournisseurs] & "'"
Me.Bookmark = rs.Bookmark
End Sub
je peux choisir mon fournisseur et afficher les éléments le concernant.
Jusque là, tout marche bien.
Par contre, je suis incapable de créer un nouvel enregistrement dans
tblFournisseurs!
Le code (merci http://access.developpez.com/)
Private Sub lstFournisseurs_NotInList(NewData As String, Response As
Integer)
DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) SELECT ""
& NewData & "";"
Response = acDataErrAdded
End Sub
ne fonctionne pas. L'expérience renvoit systématiquement le premier
enregistrement de tblFournisseurs.
Est-ce que quelqu'un(e) saurait m'aider à résoudre mon problème, sachant que
je ne cherche qu'à créer le nouvel enregistrement ? Le but est de ne pas
laisser l'utilisateur bloqué. Il complètera sa fiche Fournisseur par la
suite si besoin est.
Merci d'avance.
PG

10 réponses

1 2
Avatar
3stone
Salut,

"mission"
[...]
| > Tu n'as rien dans la "source controle" de ta liste ?
|
| Non, c'est un contrôle ajouté à la main. Je ne sais plus d'où vient cette
| méthode : sans doute self-access ou office system.
| Je pense que le plus simple est ces 3 images (ensemble 240ko) :
| http://cjoint.com/?bmtaeQ4D0n
| http://cjoint.com/?bmtaHyAzXF
| http://cjoint.com/?bmta3OWQlQ


Puisque tu n'as qu'une colonne, supprime la virgule et l'astérisque dans
la ligne contenu "Select Fournisseur From tblFournisseurs Order By ..."

Et, comment arrive tu à ne pas avoir de "Largeurs colonnes" ?


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
mission
Bonjour 3stone,
J'ai allégé le code, comme tu me le suggères.
Je n'ai pas de réponse à ta question sur la largeur de la colonne... Mais ce
n'est pas mon souci pour l'instant :-)
J'ai créé ce champ avec un nouveau contrôle indépendant ordinaire, que j'ai
modifié en liste modifiable.
Pour l'instant, je ne travaille que sur une micro base bidon juste pour
tester ce bidule.
Je n'ai toujours pas de solutionpour le rafraîchissement de la liste.
Lorsque j'ajoute un nouveau nom avec la propriété NotInList, j'ai le message
d'erreur montré dans un post précédent, mais la table enregistre bien le
nouveau fournisseur.
Par contre, je ne le retrouve dans la liste de choix que si je ferme puis
ouvre à nouveau le formulaire.
Pas cool :-(
Bon week-end.

Dans son message ,
l'honorable 3stone écrivait
Puisque tu n'as qu'une colonne, supprime la virgule et l'astérisque
dans la ligne contenu "Select Fournisseur From tblFournisseurs Order
By ..."

Et, comment arrive tu à ne pas avoir de "Largeurs colonnes" ?


Avatar
3stone
Salut,

"mission"
[...]
| Pour l'instant, je ne travaille que sur une micro base bidon juste pour
| tester ce bidule.


Dans ce cas, colle cela sur http://cjoint.com/


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
mission
Bonsoir,
Je n'aurai jamais osé le proposer moi-même.
Merci pour cette gentillesse.
Le lien : http://cjoint.com/?bnsXEQxgl4 (+/- 160ko)
Mais si vous trouvez, j'aimerai savoir pourquoi....
Bon week-end.
Cordialement.
PG

Dans son message ,
l'honorable 3stone écrivait
Salut,

Dans ce cas, colle cela sur http://cjoint.com/


Avatar
ze Titi
Bonjour mission

Essaie de rajouter un
lstFournisseurs.Value=Null

avant le Requery

Et mets un

lstFournisseurs.value=NewData

juste après.

Dis-nous

Dans ton message du vendredi
Dans son message %,
l'honorable 3stone écrivait

Tu n'as rien dans la "source controle" de ta liste ?


Non, c'est un contrôle ajouté à la main. Je ne sais plus d'où vient cette
méthode : sans doute self-access ou office system.
Je pense que le plus simple est ces 3 images (ensemble 240ko) :
http://cjoint.com/?bmtaeQ4D0n
http://cjoint.com/?bmtaHyAzXF
http://cjoint.com/?bmta3OWQlQ

Merci encore pour ton attention.
A tout hasard, bon week-end.
PG


--
Voilou !
Bon courage !
Cordialement,
ze Titi


Avatar
mission
Bonjour ze Titi,

Je viens de faire ce que tu préconises.
Maintenant, je n'ai plus de message d'erreur.
Après création d'un nouvel item, mon formulaire pointe sur le premier de la
liste (classement alpha selon requête). Le compteur d'enregistrements (je ne
sais pas son nom technique) en bas du formulaire ne montre pas
l'augmentation du nombre d'enregistrements.
Pour explication, si j'entre le 6ème, le 7ème, le 8ème enregistrement, le
compteur reste à 6 alors que la lstFournisseur affiche bien les 8 noms.
Il faut que je ferme le formulaire pour retrouver la totalité de mes
enregistrements.
Maintenant, je suis peut-être parti sur un mauvais type de traitement. Si
c'est le cas, je ne demande qu'à être redirigé vers la bonne voie.
Merci encore pour voatre attention à tous.
PG

Dans son message ,
l'honorable ze Titi écrivait
Essaie de rajouter un
lstFournisseurs.Value=Null
avant le Requery
Et mets un
lstFournisseurs.value=NewData
juste après.


Avatar
ze Titi
Il faut ajouter un

Me.requery

et peut-être un

Me.Refresh

si tu veux que ton formulaire se mette à jour.


Dans ton message du lundi
Bonjour ze Titi,

Je viens de faire ce que tu préconises.
Maintenant, je n'ai plus de message d'erreur.
Après création d'un nouvel item, mon formulaire pointe sur le premier de la
liste (classement alpha selon requête). Le compteur d'enregistrements (je ne
sais pas son nom technique) en bas du formulaire ne montre pas l'augmentation
du nombre d'enregistrements.
Pour explication, si j'entre le 6ème, le 7ème, le 8ème enregistrement, le
compteur reste à 6 alors que la lstFournisseur affiche bien les 8 noms.
Il faut que je ferme le formulaire pour retrouver la totalité de mes
enregistrements.
Maintenant, je suis peut-être parti sur un mauvais type de traitement. Si
c'est le cas, je ne demande qu'à être redirigé vers la bonne voie.
Merci encore pour voatre attention à tous.
PG

Dans son message ,
l'honorable ze Titi écrivait
Essaie de rajouter un
lstFournisseurs.Value=Null
avant le Requery
Et mets un
lstFournisseurs.value=NewData
juste après.



--
Voilou !
Bon courage !
Cordialement,
ze Titi


Avatar
mission
Dans son message ,
l'honorable ze Titi écrivait
Il faut ajouter un
Me.requery


You're the champion !
Merci ze Titi pour ta patience.
Cordialement.
PG

Voici le code qui va bien, dans mon cas :
[code]
Private Sub lstFournisseurs_NotInList(NewData As String, Response As
Integer)
If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des
fournisseurs ?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") =
vbYes Then
DoCmd.RunSQL "INSERT INTO tblFournisseurs ( Fournisseur ) VALUES(" &
Chr(34) & NewData & Chr(34) & ");"
Response = acDataErrAdded
Me.lstFournisseurs.Value = Null ' impératif, sinon ça boucle !
Me.lstFournisseurs.RowSource = "SELECT Fournisseur FROM tblFournisseurs
ORDER BY Fournisseur ;"
Me.Requery ' un Me.Refresh fait boucler le MsgBox
Me.lstFournisseurs =
Me.lstFournisseurs.ItemData(Me.lstFournisseurs.ListCount - 1)
Dim rs As Object ' sans ces 5 lignes, l'affichage des données
sélectionnées ne se remet pas à jour
Set rs = Me.Recordset.Clone
rs.FindFirst "[Fournisseur] = '" & Me.[lstFournisseurs] & "'"
Me.Bookmark = rs.Bookmark
Me.lstFournisseurs = Null
Else
Response = acDataErrContinue
lstFournisseurs.Undo
End If
End Sub
[/code]

Avatar
3stone
Salut,

"mission"


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

If MsgBox("Voulez-vous ajouter " & NewData _
& " à la liste des fournisseurs ?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") = vbYes Then

DoCmd.Execute "INSERT INTO tblFournisseurs ( Fournisseur ) " _
& "VALUES(" & Chr(34) & NewData & Chr(34) & ");"

Response = acDataErrAdded

Else

Response = acDataErrContinue
lstFournisseurs.Undo

End If

End Sub


Comme indiqué ici :
http://www.3stone.be/access/articles.php?lng=fr&pgI


Et *surtout* supprimer la valeur par défaut de la combobox !!!!
C'est une liste de recherche que tu utilise, elle n'a donc pas
de valeur par défaut !

PS: Ne pas donner "en exemple" du code crade que l'on ne
comprend pas sois-même, par pitié pour ceux qui pourrait
te lire et croire avoir trouvé la solution !

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
U)
Avatar
mission
Bonjour 3stone,
Merci pour cette correction, que je vais appliquer après l'avoir comparée à
mon code de débutant, pour tenter d'en comprendre les subtilités.
J'ai donné mon bidule non en exemple, mais par simple politesse envers toi.
Désolé d'avoir failli.
Encore une fois mille mercis, et sans doute à bientôt.
Cordialement
PG

PS : j'en profite pour ajouter ton site à mes favoris Access. Je le
parcourerai très bientôt avec .... avidité.

Dans son message ,
l'honorable 3stone écrivait
Salut,

"mission"


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

If MsgBox("Voulez-vous ajouter " & NewData _
& " à la liste des fournisseurs ?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") > vbYes Then

DoCmd.Execute "INSERT INTO tblFournisseurs ( Fournisseur ) " _
& "VALUES(" & Chr(34) & NewData & Chr(34)
& ");"

Response = acDataErrAdded

Else

Response = acDataErrContinue
lstFournisseurs.Undo

End If

End Sub


Comme indiqué ici :
http://www.3stone.be/access/articles.php?lng=fr&pgI


Et *surtout* supprimer la valeur par défaut de la combobox !!!!
C'est une liste de recherche que tu utilise, elle n'a donc pas
de valeur par défaut !

PS: Ne pas donner "en exemple" du code crade que l'on ne
comprend pas sois-même, par pitié pour ceux qui pourrait
te lire et croire avoir trouvé la solution !


1 2