OVH Cloud OVH Cloud

fonction rechdom

5 réponses
Avatar
Clément
Bonjour, je suis complètement débutant mais j'ai déjà réussi à faire des
tables et des requêtes et des liaisons et des calculs mais je ne touche pas
aux lignes de code (pour vous situer mon niveau).
J'ai un formulaire qui renseigne une table A. Pour éviter une double saisie
(mais je vous passe les détails), je veux qu'une de mes cellules dans ce
formulaire aille chercher une valeur appelée "moyenne" dans une table B
automatiquement quand je rentre dans ce formulaire une cellule "projet" qui
lui est associée. Cette valeur sera donc ensuite intégrée dans la table B.
J'ai essayé un code que j'avais pour une autre base en l'adaptant à la
mienne, cela n'a pas marché. J'ai donc fait appel à des aides sur des forums
mais ça ne marchait pas. Peut-être car j'ai un pb de relation ou de
construction de mes tables mais le reste marche bien.
Soit il ne m'affiche rien, soit il m'affiche "error".
Merci de toute l'aide que vous pourrez me donner. Si vous avez besoin de
précisions, n'hésitez pas.
Clément.

5 réponses

Avatar
3stone
Salut,

| J'ai un formulaire qui renseigne une table A. Pour éviter une double saisie
| (mais je vous passe les détails), je veux qu'une de mes cellules dans ce
| formulaire aille chercher une valeur appelée "moyenne" dans une table B
| automatiquement quand je rentre dans ce formulaire une cellule "projet" qui
| lui est associée. Cette valeur sera donc ensuite intégrée dans la table B.


Tu vas chercher la "moyenne" dans la table B...
... sera ensuite intégré dans la table B ???

Il y a peut être une erreur de saisie... dans la table A, peut-être ?

Bref :
Evite les redondances de l'information...
Ne mets pas de "résultats" de calcul dans les tables
- cela se recalcule dans une requête...
N'oublie pas que dans un formulaire, on peut afficher les
information qui viennent de plusieures tables grâce à une
requete source, au lieu d'une table source...

Pour allez chercher un valeur par un DLookup (RechDom)
tu mets comme source d'une zone de texte:

pour un champ numérique:
= DLookup("[LeChamp]";"[LaTable]";"[ChampDeTable]=" & [ContrôleDuFormulaire] )

pour un champ texte:
= DLookup("[LeChamp]";"[LaTable]";"[ChampDeTable]='" & [ContrôleDuFormulaire] & "'" )

Va également regarder ceci :
http://www.mvps.org/accessfr/general/gen0018.htm

et fait un tour dans le lien de ma signature...


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
Clément
Non, je me suis trompé à la fin, il fallait bien-sûr
comprendre table A.
Merci.
Mais j'essaye ton code (et c'est celle que j'avais en
simplifiée) mais cela ne marche toujours pas, je ne
comprends pas. Qu'entends-tu par "[ChampDeTable]"? Et peux-
tu me donner un exemple?
Moi, par exemple, j'ai créé deux tables pour faire un
essai: NOM et AGE
la table NOM contient les champs Nom et Prénom; la table
AGE contient les champs Age et Nom. Je crée un formulaire
avec les champs Nom et prénom et je rajoute une zone de
texte qui doit aller me chercher le champ age dans la
table age. Que dois-je taper? Moi, je tape:
=DLookup("[age]";"[Table AGE]";"[Nom]="&[nom])
-----Message d'origine-----
Salut,

| J'ai un formulaire qui renseigne une table A. Pour
éviter une double saisie

| (mais je vous passe les détails), je veux qu'une de mes
cellules dans ce

| formulaire aille chercher une valeur appelée "moyenne"
dans une table B

| automatiquement quand je rentre dans ce formulaire une
cellule "projet" qui

| lui est associée. Cette valeur sera donc ensuite
intégrée dans la table B.



Tu vas chercher la "moyenne" dans la table B...
.... sera ensuite intégré dans la table B ???

Il y a peut être une erreur de saisie... dans la table A,
peut-être ?


Bref :
Evite les redondances de l'information...
Ne mets pas de "résultats" de calcul dans les tables
- cela se recalcule dans une requête...
N'oublie pas que dans un formulaire, on peut afficher les
information qui viennent de plusieures tables grâce à une
requete source, au lieu d'une table source...

Pour allez chercher un valeur par un DLookup (RechDom)
tu mets comme source d'une zone de texte:

pour un champ numérique:
= DLookup("[LeChamp]";"[LaTable]";"[ChampDeTable]=" &
[ContrôleDuFormulaire] )


pour un champ texte:
= DLookup("[LeChamp]";"[LaTable]";"[ChampDeTable]='" &
[ContrôleDuFormulaire] & "'" )


Va également regarder ceci :
http://www.mvps.org/accessfr/general/gen0018.htm

et fait un tour dans le lien de ma signature...


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.



Avatar
3stone
Salut,

Mais j'essaye ton code (et c'est celle que j'avais en
simplifiée) mais cela ne marche toujours pas,

meuuuh si ;-)


je ne comprends pas. Qu'entends-tu par "[ChampDeTable]"? Et peux-
tu me donner un exemple?
Moi, par exemple, j'ai créé deux tables pour faire un essai: NOM et AGE
la table NOM contient les champs Nom et Prénom; la table
AGE contient les champs Age et Nom. Je crée un formulaire
avec les champs Nom et prénom et je rajoute une zone de
texte qui doit aller me chercher le champ age dans la
table age. Que dois-je taper? Moi, je tape:
=DLookup("[age]";"[Table AGE]";"[Nom]="&[nom])


Ton exemple est très mal choisi...

Pour faire cela, tu devrais créer une relation entre :

le champ [Nom] de la table "Nom" et le champ [Nom] de la table "Age"
ensuite, tu crée une requête qui reprend les champs :
[Nom], [Prénom] de la table "Nom" et [Age] de la table "Age"

Grâce à la relation, les [Age] vont correspondrent avec les bonnes personnes.

Mais STOP !!!!!!!!!
- Ne pas appeller un champ [Nom] plutôt [NomFamille] ou [LastName]
- Ne pas utiliser un nom dans une relation... que fais tu lorsque tu saisi un second "Durant" ?
- Ne pas mettre l'age dans une "autre" table... l'age étant propre à la personne, il doit se trouvé
dans la même table que son nom, prénom, adresse...

Bon, je sais, ce n'était qu'un exemple... mais, très mal choisi ;-))

Revenons à la fonction DLookup...
Ce n'est pas à utiliser dans une table bien sûr... il faut considérer que les tables
ne sont que des "récipients" où l'on place les données (des amoires ou étagères... quoi ;)

Le travail sur les données se fait dans les formulaires, la saisie dans les tables est réservé
au test ou autre intervention.

Donc :
Table "Noms", champ [Nom], [Prénom]
Table "Ages", champ [Nom] , [Age]

Tu crée donc un formulaire basé, dans ton exemple, sur la table "Noms"
Dans ce formulaire, tu crée deux zones de texte dépendantes, [Nom] et [Prénom]
et une troisième, indépendante, qui aura comme source :

= DLookup("[Age]";"[Ages]";"[Nom]='" & Me![Nom] & "'")

Je répète que l'exemple est crado comme pas possible ;-)))
C'est vraiment juste pour l'exemple, hein ???

Va aussi regarder le lien que j'avais mis...

Sinon, un minimum de formation, auto-formation, lecture sera utile !

--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------
Avatar
clément
OK, merci, je vais aller voir le lien. Mon exemple,
c'était juste comme ça. Effectivement, il était mal choisi
et il était inutile d'utiliser rechdom mais plutôt une
requête ou surtout une table avec nom/prénom/age. Sinon,
c'est quoi le Me??? Il n'y était pas dans la formule que
tu m'avais donnée? (il faut tout me dire à moi). Et je
croyais que la formule n'était pas celle-là pour les
numériques?
Sinon, j'ai essayé et il me met dans la case: #Nom?
-----Message d'origine-----
Salut,

Mais j'essaye ton code (et c'est celle que j'avais en
simplifiée) mais cela ne marche toujours pas,

meuuuh si ;-)


je ne comprends pas. Qu'entends-tu par "[ChampDeTable]"?
Et peux-

tu me donner un exemple?
Moi, par exemple, j'ai créé deux tables pour faire un
essai: NOM et AGE

la table NOM contient les champs Nom et Prénom; la table
AGE contient les champs Age et Nom. Je crée un formulaire
avec les champs Nom et prénom et je rajoute une zone de
texte qui doit aller me chercher le champ age dans la
table age. Que dois-je taper? Moi, je tape:
=DLookup("[age]";"[Table AGE]";"[Nom]="&[nom])


Ton exemple est très mal choisi...

Pour faire cela, tu devrais créer une relation entre :

le champ [Nom] de la table "Nom" et le champ [Nom]
de la table "Age"

ensuite, tu crée une requête qui reprend les champs :
[Nom], [Prénom] de la table "Nom" et [Age] de la
table "Age"


Grâce à la relation, les [Age] vont correspondrent
avec les bonnes personnes.


Mais STOP !!!!!!!!!
- Ne pas appeller un champ [Nom] plutôt [NomFamille]
ou [LastName]

- Ne pas utiliser un nom dans une relation... que
fais tu lorsque tu saisi un second "Durant" ?

- Ne pas mettre l'age dans une "autre" table... l'age
étant propre à la personne, il doit se trouvé

dans la même table que son nom, prénom, adresse...

Bon, je sais, ce n'était qu'un exemple... mais, très
mal choisi ;-))


Revenons à la fonction DLookup...
Ce n'est pas à utiliser dans une table bien sûr... il
faut considérer que les tables

ne sont que des "récipients" où l'on place les
données (des amoires ou étagères... quoi ;)


Le travail sur les données se fait dans les
formulaires, la saisie dans les tables est réservé

au test ou autre intervention.

Donc :
Table "Noms", champ [Nom], [Prénom]
Table "Ages", champ [Nom] , [Age]

Tu crée donc un formulaire basé, dans ton exemple,
sur la table "Noms"

Dans ce formulaire, tu crée deux zones de texte
dépendantes, [Nom] et [Prénom]

et une troisième, indépendante, qui aura comme
source :


= DLookup("[Age]";"[Ages]";"[Nom]='" & Me![Nom] & "'")

Je répète que l'exemple est crado comme pas
possible ;-)))

C'est vraiment juste pour l'exemple, hein ???

Va aussi regarder le lien que j'avais mis...

Sinon, un minimum de formation, auto-formation,
lecture sera utile !


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------



.



Avatar
3stone
Salut,

Sinon, c'est quoi le Me??? Il n'y était pas dans la formule que
tu m'avais donnée? (il faut tout me dire à moi).


Me désigne l'objet, formulaire ou état, dans lequel s'exécute le code.

En quelque sorte, un raccourci pour dire: Formulaires!FrmClient!MonContrôle....

Si le code est dans ce formulaire "FrmClient", il suffit décrire Me!MonContrôle
et donc sans nommer le formulaire.



Et je croyais que la formule n'était pas celle-là pour les numériques?
Sinon, j'ai essayé et il me met dans la case: #Nom?


S'il y à des apostrophes qui "entourent" le champ, c'est pour le texte.
Le numérique se concatène sans ces fameuses apostrophes!

Et, si tu as "#Nom" comme résultat... tu as certainement un erreur de saisie.


--
A+
Pierre (3stone) Access MVP
-------------------------------------------------------
Bien démarrer ? c'est ici http://users.skynet.be/mpfa/
( Je ne réponds pas aux emails qui concernent Access )
-------------------------------------------------------