Valeur correspondante avec DLookup dans un évènement

Le
Roland Miller
Bonjour,

Je n'arrive pas à formuler correctement le code visual basic pour obtenir
une valeur correspondante dans un formulaire. J'ai inséré 2 champs dans mon
formulaire provenant d'une table "Bulletin"; "NumClient" et "Nom du client".
J'entre le Nom du client dans le formulaire et je souhaite que le
NumeroClient s'affiche suite à un évènement.

J'ai une table "Clients" avec 2 champs; "NomClient" et "NumeroClient". Que
dois-je modifier dans le code ici-bas ou quel doit être le bon code? J'ai
actuellement un message à l'effet que le champ n'est pas reconnu.

NumClient.Value = DLookup([NumeroClient], [Clients], [NomClient] =
Nom_du_client.Value)

Merci.

Roland
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gloops
Le #6345461
Bonsoir,

D'après ce que tu dis, c'est normal que le champ ne soit pas reconnu :
tu le désignes par NumeroClient, alors qu'il s'appelle NumClient. De
plus, il faut mettre le nom du champ entre guillemets, de même que c elui
de la table. Au demeurant, la clause WHERE de la requête, pour un ch amp
de type texte (NomClient), doit comporter, autour de la valeur visée ,
des délimiteurs de type accolade valant guillemets (pour simplifier
puisqu'il y a déjà des guillemets autour -enfin en tout cas il doit y en
avoir).

Ainsi ça devrait mieux marcher, sous réserve que le nom du clie nt ne
comporte pas de faute de frappe (c'est justement pour l'éviter que
d'habitude on fait la requête dans l'autre sens :) :

DLookup("NumClient", "Clients", "NomClient = '" &
Replace([Nom_du_client].Value, "'", "''") & "'")

(tout ça sur la même ligne bien sûr)

Note que j'ai pris soin de doubler les apostrophes dans le nom du
client, sinon pour Monsieur de Bois d'Enghien, ou Emilie L'Epure, tu
vas avoir un beau message d'erreur qui va planter l'exécution de ton code.

La chose qui reste à faire avec ça, maintenant, c'est le tester sous
Access :)

Ne pas oublier de faire des tests avec des noms comportant des
apostrophes, ça craint plus.
____________________________________________
Roland Miller a écrit, le 27/01/2008 18:43 :
Bonjour,

Je n'arrive pas à formuler correctement le code visual basic pour obtenir
une valeur correspondante dans un formulaire. J'ai inséré 2 c hamps dans mon
formulaire provenant d'une table "Bulletin"; "NumClient" et "Nom du cli ent".
J'entre le Nom du client dans le formulaire et je souhaite que le
NumeroClient s'affiche suite à un évènement.

J'ai une table "Clients" avec 2 champs; "NomClient" et "NumeroClient". Que
dois-je modifier dans le code ici-bas ou quel doit être le bon cod e? J'ai
actuellement un message à l'effet que le champ n'est pas reconnu.

NumClient.Value = DLookup([NumeroClient], [Clients], [NomClient] =
Nom_du_client.Value)

Merci.

Roland




Roland Miller
Le #6345411
Bonjour,

J'ai essayé le code que tu m'as remis et cela amène aucun valeur. J'ai aussi
essayé quelques modifications et rien ne s'affiche. J'ai entres autres essayé
les 2 lignes de code ici-bas. Je sais que c'est le critère qui ne fonctionne
pas. Quoi faire ou quoi essayer?

NumClient.Value = DLookup("NumClient", "Clients", "NomClient = '" &
Replace([Nom_du_client].Value, "'", "''") & "'")

NumClient.Value = DLookup("NumeroClient", "Clients", "NomClient = '" &
Replace([Nom_du_client].Value, "'", "''") & "'")

Merci.

Roland


Bonsoir,

D'après ce que tu dis, c'est normal que le champ ne soit pas reconnu :
tu le désignes par NumeroClient, alors qu'il s'appelle NumClient. De
plus, il faut mettre le nom du champ entre guillemets, de même que celui
de la table. Au demeurant, la clause WHERE de la requête, pour un champ
de type texte (NomClient), doit comporter, autour de la valeur visée,
des délimiteurs de type accolade valant guillemets (pour simplifier
puisqu'il y a déjà des guillemets autour -enfin en tout cas il doit y en
avoir).

Ainsi ça devrait mieux marcher, sous réserve que le nom du client ne
comporte pas de faute de frappe (c'est justement pour l'éviter que
d'habitude on fait la requête dans l'autre sens :) :

DLookup("NumClient", "Clients", "NomClient = '" &
Replace([Nom_du_client].Value, "'", "''") & "'")

(tout ça sur la même ligne bien sûr)

Note que j'ai pris soin de doubler les apostrophes dans le nom du
client, sinon pour Monsieur de Bois d'Enghien, ou Emilie L'Epure, tu
vas avoir un beau message d'erreur qui va planter l'exécution de ton code.

La chose qui reste à faire avec ça, maintenant, c'est le tester sous
Access :)

Ne pas oublier de faire des tests avec des noms comportant des
apostrophes, ça craint plus.
____________________________________________
Roland Miller a écrit, le 27/01/2008 18:43 :
Bonjour,

Je n'arrive pas à formuler correctement le code visual basic pour obtenir
une valeur correspondante dans un formulaire. J'ai inséré 2 champs dans mon
formulaire provenant d'une table "Bulletin"; "NumClient" et "Nom du client".
J'entre le Nom du client dans le formulaire et je souhaite que le
NumeroClient s'affiche suite à un évènement.

J'ai une table "Clients" avec 2 champs; "NomClient" et "NumeroClient". Que
dois-je modifier dans le code ici-bas ou quel doit être le bon code? J'ai
actuellement un message à l'effet que le champ n'est pas reconnu.

NumClient.Value = DLookup([NumeroClient], [Clients], [NomClient] =
Nom_du_client.Value)

Merci.

Roland









3stone
Le #6345291
Salut,

"Roland Miller"
| Je n'arrive pas à formuler correctement le code visual basic pour obtenir
| une valeur correspondante dans un formulaire. J'ai inséré 2 champs dans mon
| formulaire provenant d'une table "Bulletin"; "NumClient" et "Nom du client".
| J'entre le Nom du client dans le formulaire et je souhaite que le
| NumeroClient s'affiche suite à un évènement.
|
| J'ai une table "Clients" avec 2 champs; "NomClient" et "NumeroClient". Que
| dois-je modifier dans le code ici-bas ou quel doit être le bon code? J'ai
| actuellement un message à l'effet que le champ n'est pas reconnu.
|
| NumClient.Value = DLookup([NumeroClient], [Clients], [NomClient] | Nom_du_client.Value)


Pourquoi ne crées tu pas simplement une liste déroulante, dans le haut
de ton formulaire, qui a comme source le numéro et nom du client ?

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Gloops
Le #6345141
Bonsoir,

Il pourrait bien y avoir une faute de frappe, dans le nom d'un des
champs, ou de plusieurs, ou dans le nom du contrôle Nom_du_client.

Ce contrôle est-il bien sur le même formulaire à propos ?

L'assistant (générer une fonction, je cite de mémoire ; en général on
ouvre ça à partir des points de suspension qui apparaissent à   droite de
la propriété ControlSource, quand on la sélectionne dans l a fenêtre des
propriétés), peut aider à mettre les noms de champs sans s e tromper.

Ne pas être trop à cheval sur les intitulés : je cite tout de mémoire,
depuis une machine où il n'y a pas Access.

La commande Outils / Documentation peut permettre d'avoir le cœur ne t
sur l'orthographe des champs.

____________________________________________
Roland Miller a écrit, le 28/01/2008 05:51 :
Bonjour,

J'ai essayé le code que tu m'as remis et cela amène aucun val eur. J'ai aussi
essayé quelques modifications et rien ne s'affiche. J'ai entres au tres essayé
les 2 lignes de code ici-bas. Je sais que c'est le critère qui ne fonctionne
pas. Quoi faire ou quoi essayer?

NumClient.Value = DLookup("NumClient", "Clients", "NomClient = '" &
Replace([Nom_du_client].Value, "'", "''") & "'")

NumClient.Value = DLookup("NumeroClient", "Clients", "NomClient = ' " &
Replace([Nom_du_client].Value, "'", "''") & "'")

Merci.

Roland



Roland Miller
Le #6345081
Bonjour,

Merci pour l'aide. J'ai trouvé ma solution. Ici-bas le code que j'ai inscrit;

DLookup("[NumeroClient]", "Clients", "[NomClient] = Nom_du_client.Text")

Rolly


Bonsoir,

Il pourrait bien y avoir une faute de frappe, dans le nom d'un des
champs, ou de plusieurs, ou dans le nom du contrôle Nom_du_client.

Ce contrôle est-il bien sur le même formulaire à propos ?

L'assistant (générer une fonction, je cite de mémoire ; en général on
ouvre ça à partir des points de suspension qui apparaissent à droite de
la propriété ControlSource, quand on la sélectionne dans la fenêtre des
propriétés), peut aider à mettre les noms de champs sans se tromper.

Ne pas être trop à cheval sur les intitulés : je cite tout de mémoire,
depuis une machine où il n'y a pas Access.

La commande Outils / Documentation peut permettre d'avoir le cœur net
sur l'orthographe des champs.

____________________________________________
Roland Miller a écrit, le 28/01/2008 05:51 :
Bonjour,

J'ai essayé le code que tu m'as remis et cela amène aucun valeur. J'ai aussi
essayé quelques modifications et rien ne s'affiche. J'ai entres autres essayé
les 2 lignes de code ici-bas. Je sais que c'est le critère qui ne fonctionne
pas. Quoi faire ou quoi essayer?

NumClient.Value = DLookup("NumClient", "Clients", "NomClient = '" &
Replace([Nom_du_client].Value, "'", "''") & "'")

NumClient.Value = DLookup("NumeroClient", "Clients", "NomClient = '" &
Replace([Nom_du_client].Value, "'", "''") & "'")

Merci.

Roland






Gloops
Le #6344541
Roland Miller a écrit, le 29/01/2008 01:57 :
Bonjour,

Merci pour l'aide. J'ai trouvé ma solution. Ici-bas le code que j' ai inscrit;

DLookup("[NumeroClient]", "Clients", "[NomClient] = Nom_du_client.Tex t")


Ah ça c'est intéressant.
J'essaie demain.

3stone
Le #6344431
Salut,

Roland Miller a écrit:
Merci pour l'aide. J'ai trouvé ma solution. Ici-bas le code que j'ai inscrit;

DLookup("[NumeroClient]", "Clients", "[NomClient] = Nom_du_client.Text")



"Gloops"
Ah ça c'est intéressant.
-------

Bof, non, pas vraiment... ;-)

C'est tout simplement parce qu'il utilise le mauvais événement pour
lire le contenu de son "Nom_du_client" !

S'il utilisait l'événement "après mise à jour", il n'y aurait pas eu de problème.
Mais, j'ai peur qu'il utilise dirty ou change - la valeur n'étant pas commise,
l'usage de la propriété "Text" au lieu de "Value" devient nécessaire.

Mais cela ne corrige pas le mauvais usage ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)

Gloops
Le #6344211
3stone a écrit, le 30/01/2008 23:28 :
DLookup("[NumeroClient]", "Clients", "[NomClient] = Nom_du_client.Te xt")
Ah ça c'est intéressant.

Bof, non, pas vraiment... ;-)

C'est tout simplement parce qu'il utilise le mauvais événemen t pour
lire le contenu de son "Nom_du_client" !



Oui, tu parles de l'emploi de Text plutôt que Value ?

S'il utilisait l'événement "après mise à jour", il n'y aurait pas eu de problème.
Mais, j'ai peur qu'il utilise dirty ou change - la valeur n'étant pas commise,
l'usage de la propriété "Text" au lieu de "Value" devient nà ©cessaire.


Qu'est-ce que j'ai eu déjà comme problème avec Text ? Ah o ui que le
contrôle devait être sélectionné. En changeant de ver sion d'Access ma
fonction de conversion en texte donnait des signes de faiblesse alors
j'ai eu recours à des trucs un peu louches.


Mais cela ne corrige pas le mauvais usage ;-)



Ce que j'ai trouvé intéressant, c'est de mettre le nom du contr ôle à
l'intérieur des guillemets, sans séparateur autour, ce qui simp lifie
grandement la syntaxe. Vu tout ce qu'on s'est embêté pour gé rer deux
jeux de séparateurs différents, et gérer le cas où le deuxième est
contenu dans la chaîne de caractères à passer (voir ma pro position plus
haut dans ce fil), ça vaut le coup de vérifier que ça marc he (je ne l'ai
pas fait aujourd'hui mais ça va bien arriver).


Publicité
Poster une réponse
Anonyme