Utilisation dlookup

Fermé
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015 - 2 mars 2015 à 09:48
 Tessel75 - 7 mars 2015 à 16:36
Dans mon formulaire principal, lier à la table [concessionnaires] ayant comme champs ("N° clé" Nom; Prénom; Adresse etc..., je veux afficher la [date expiration] se trouvant dans une autre table [Marques] ayant comme champs(NumMarq; TypeVeh;datEffet;Durée;DatExpiration "
code :
Private Sub Texte141_Click()
Dim dbexpiration As Date
dbexpiration = Nz(DLookup("[datExpiration]", "expiration", "N°=" & N°), "")
Texte141.Value = dbexpiration

Résultat : il m'affiche pour l'ensemble des enregistrements la même date, et même pour les champs non renseignés.
Merci d'avance.
A voir également:

18 réponses

Bonjour,

L'écriture de DLookUp est : DLookUp("Variable","Table", "Critères")
Ton écriture du critère est fautive : " N°= " & N°
En même temps, le critère est souvent embêtant à écrire parce que le paramètre a souvent le même nom que la valeur qu'il doit prendre. Il faut donc écrire un critère sous la forme :
" N°=Forms!NomFormulaire!NomContrôle " (Attention aux guillemets)

Enfin ton "Nz()" ne sert à rien parce qu'il sert à convertir une valeur nulle (null) par une valeur quelconque, le plus souvent 0
Bonne suite
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
2 mars 2015 à 14:44
Bonsoir merci pour la réponse.
effectivement c'est vraiment difficile.
code :
dbexpiration = Nz(DLookup("[datexpiration]", "expiration", "N°=Forms!Marques2!datexpiration ")) 

cette fois-ci message d'erreur est différent :
ne trouve pas le formulaire auquel il fait référence.
merci pour l'aide
0
Il faut que ton formulaire soit ouvert, sinon, évidemment il ne peut pas le trouver!!!
Et aussi, il vaut mieux supprimer tes [ ] qui encombrent plutôt qu'autre chose, et pareil pour ton Nz()
De toutes façons, quand tu as des expressions en chaine à la suite, il faut toujours les entrer une par une pour voir ce qui coince et être sûr que la précédente a bien été comprise par le logiciel.
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
2 mars 2015 à 19:44
Bonsoir merci pour la réponse.
Voilà j'ai fait exactement ce dont vous m'avez conseillé, mais c'est le même problème.
code :Dim dbexpiration As Date
dbexpiration = DLookup("datexpiration", "expiration", "N° = Forms!expiration!datexpiration ")
Texte137.Value = dbexpiration

Aidez moi SVP à régler ce problème.
Merci pour l'aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Envoie un extrait de ta base avec les éléments impliqués via cjooint.com et met le lien donné dans ta réponse
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
3 mars 2015 à 09:46
Bonjour merci pour l'aide.
S'agissant du problème en question, voilà ce j'ai fait :
en fait j'ai 02 tables :
1- tables1, Champs :[N°, clé]; [societe];[Adresse]; [DatEffet]; [Durée]; [type] ;[DatExpiration].
2- marques Champs :[NumMarque, clé]; [marques]; [Type];[DatEffet]; [Durée];[DatExpiration]
requête : expiration

SELECT DISTINCT Table1.Societe, marques.marque, marques.DatEffet, marques.Durée, marques.Datexpiration
FROM Table1 INNER JOIN marques ON Table1.N° = marques.NumC
GROUP BY Table1.Societe, marques.marque, marques.DatEffet, marques.Durée, marques.Datexpiration;

programme :
Dim dbexpiration As Date
dbexpiration = DLookup("datexpiration", "marques", "N°=Forms!marques!datexpiration ")
Texte141.Value = dbexpiration

voilà ce qui a été fait.
merci pour l'aide.
0
Bonjour,
Je t'ai demandé d'envoyer un extrait de ta base par cjoint.com (excuse pour la faute de frappe précédente). La tu envoie la version SQL d'une requête et une expression de variable. Je ne peux rien en faire.
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
3 mars 2015 à 13:46
je pourrais vous envoyer en jpg, j'ai demandé à mon responsable, un refus catégorique, histoire de confidentialité
0
D'abord tu n'avais pas dit que tu étais en stage et que tu avais un supérieur.
Deuxièmement ma question est purement technique et ne concerne absolument pas les données dont je me contrefiche, il suffit de mettre 4 ou 5 lignes avec n'importe quels chiffres, la méthode sera exactement la même qu'avec des vrais chiffres.
3èmement: je ne comprends rien à la liaison que tu fais entre ta requête, ton formulaire "marques", et ton contrôle "datexpiration ". Et je ne vois pas ce que tu veux extraire. Le problème est bien là.
On peut d'aider, mais encore faut-il avoir un minimum de matériel.
0
massiInfo Messages postés 3 Date d'inscription mardi 3 mars 2015 Statut Membre Dernière intervention 5 mars 2015
5 mars 2015 à 11:23
Bonjour, merci pour la réponse
j'ai rien dis de mal, dans la ces contraire je demande pardon.
ma question est : comment utiliser Dlookup, et ce pour pouvoir afficher dans mon formulaire principal un champ d'une requête.
voila comment ma base de données se présente :
en fait j'ai 02 tables :
1- tables1, Champs :[N°, clé]; [societe];[Adresse]; [DatEffet]; [Durée]; [type] ;[DatExpiration].
2- marques Champs :[NumMarque, clé]; [marques]; [Type];[DatEffet]; [Durée];[DatExpiration]
requête : que j'ai nommé "expiration" composé avec les champs de la table 2 : c-à-d, NumMarque, clé]; [marques]; [Type];[DatEffet]; [Durée];[DatExpiration].
maintenant, ma question est comment afficher le champ [datExpiration] dans mon formulaire principal.
ce que j'ai fait :
Private Sub Texte141_Click()
Dim dbexpiration As Date
dbexpiration = DLookup("datexpiration", "expiration", "N°='" & N° & "'")
Texte141.Value = dbexpiration

résultat : il m'affiche le premier enregistrement pour l'ensemble des enregistrements soit "12/02/2015"
voilà, merci et pardon.
je m'exprime mal en français peut être c'est cela qui me joue des tours.
Cordialement.
0
ReBonjour,
Ce que tu ne veux pas comprendre c'est que d'ici on n'a pas accès à ta base et qu'on ne sait pas sur quoi tu travailles et que tu veux obtenir avec ce que tu as déjà fait, donc on ne peut que donner des conseils très ponctuels et très techniques.
La question est alors de savoir ce qu'est ton "" et d'où il sort (ou par où tu vas le rentrer)
Ou alors, je ne peux que te conseiller de faire des tests successifs avec des valeurs que tu rentres toi même pour vérifier que ta fonction est correcte.
Et seulement quand tu es sûr, alors tu rentres ton paramètre.
0
massiInfo Messages postés 3 Date d'inscription mardi 3 mars 2015 Statut Membre Dernière intervention 5 mars 2015
5 mars 2015 à 15:46
Bonsoir je vais vous envoyer la base données.
merci pour votre aide.
je sais pas comment vous envoyer la base de données
merci
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
5 mars 2015 à 18:24
Bonjour, Je vous envoi une partie de la base de données
merci pour l'aide
https://www.cjoint.com/c/ECfsJmqbKDa
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
6 mars 2015 à 17:11
Bonsoir,
il me semble que le lien ne fonctionne pas...!
je pourrais vous l'envoyer de nouveau
merci
0
Bonjour,
Après bien des difficultés j'ai pu ouvrir la base.
Remarque1 : Il est complètement inutile de compacter la base avant l'envoi, cjoint.com supporte très bien des fichiers un peu gros, et celui-là de 470 Ko est très petit. De plus la plupart des objets était masquée, ça n'a pas facilité les choses.

Pour répondre à ta question principale: Il faut que tu retiennes que pas plus l'ordinateur que les internautes susceptibles de te répondre ne sont des devins et ne peuvent pas inventer des données et des paramètres qui ne sont pas indiquées clairement.
Tu écris:
"Dim dbexpiration As Date
dbexpiration = DLookup("datexpiration", "expiration", "N°='" & N° & "'")
Texte141.Value = dbexpiration
"
mais sans indiquer ce qu'est "", ni où aller chercher la valeur à prendre. En plus, il n'existe pas de donnée appelée "" dans la requête "expiration"
Il faut que tu écrives une expression du genre:
"Dim dbexpiration As Date
N°=Me!ContrôleN°
dbexpiration = DLookup("datexpiration", "expiration", "N°='" & N° & "'")
Texte141.Value = dbexpiration
"
Me!... veut dire que la valeur à prendre est à chercher dans le formulaire lui-même
Càd qu'il faut créer un contrôle "" et que tu entres le champ "" dans la requête "expiration"
Après ça tu verras que ça marche.
Bonne suite.
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
6 mars 2015 à 21:57
Bonsoir, merci pour votre réponse.
pardon pour le cassement de tête causé.
svp vous ne pouvez pas corriger sur l'exemple svp.
pour ce qui est du "N°" c'est le champ clé de la table1.
la valeur à prendre c'est la date du champ "DatExpiration" de la requête expiration.
en faite le résultat recherché est d'extraire la date de fin de contrat avec l'opération : DatEffet +durée = DatExpiration.
Merci pour l'aide.
0
Bonjour,
Ci-joint la base corrigée. J'ai été obligé d'apporter qq modifications sur la base elle-même parce qu'elle était verrouillée et mise en ouverture sur un formulaire menu principal.
Il faut donc que tu prennes les corrections apportées comme des modèles dont il faut t'inspirer plus que faire des simples copier/coller.
En particulier à regarder la requête "expiration" et la requête sous-jacente du formulaire "Concessionnaires" qui en plus n'a pas besoin d'un contrôle indépendant "Datexpiration", au contraire.
Et puis enfin tu dois vérifier chaque fois ton code VBA , en le compilant de temps en temps, car il y a beaucoup d'erreurs qui le font fermer de manière intempestive.
Bonne suite
http://cjoint.com/?3ChoE3Sakmf
0
massi112 Messages postés 9 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 7 mars 2015
7 mars 2015 à 15:21
Bonsoir merci pour la réponse.
ça ne fonctionne toujours pas
dbexpiration = DLookup("datexpiration", "expiration", "N°='" & N° & "'")

erreur 3464
merci quand même
0
Je t'ai dit que la syntaxe de l'expression était : DLookup("VariableRecherchée","TableRequête", "[Paramètre]= Valeur ") .
C'est pour ça qu'il est toujours difficile d'aller faire rechercher la valeur sur un paramètre défini quelque part dans le code; il vaut mieux écrire; DLookup("VariableRecherchée","TableRequête", "[Paramètre]= Forms!NomFormulaire!NomContrôle")
ou alors tu écris :
N° = Forms!NomFormulaire!NomContrôle
DLookup("VariableRecherchée","TableRequête",
"[Paramètre]= " & N° & " " )

Tu ne suis pas les conseils et tu t'emmêles dans les guillemets.
0