Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mettre une valeur dans une table à partir d'un form

6 réponses
Avatar
Txl
Bonjour =E0 tous.

Pour faoire des r=E9ceptions de commande j'ai une macro qui cr=E9e une
table temporaire et ensuite un form qui me permet de rentrer des infos
dans cette table avant qu'une requete ne r=E9incorpore le tout dans les
tables principales.

Si j'ai une commande avec plusieurs lignes ca marche nickel mais quand
la commande ne comporte qu'une ligne ca ne marche pas, la valeur du
form n'est pas incluse dans la table temp et donc pas retranscrit dans
la table principale avec la requete de fin de reception de commande.

J'ai voulu mettre un bout de code qui forcerait la mise =E0 jour mais
j'ai une erreur de syntaxe...comme quoi le champ | n'est pas
trouv=E9....


Private Sub reception_AfterUpdate()
Set [tables]![tblrcptcommandefourdetail]![reception] =3D [Forms]!
[frmrcptcommandefourdetail]![reception]
End Sub

Merci de votre aide

Merci d'avance de votre aide

6 réponses

Avatar
Gloops
Bonjour,

Je peux me tromper mais j'ai l'impression qu'on n'en sait pas assez.

On voit une ligne de code VBA et on est invité à corriger une requê te
SQL, alors ça désoriente un peu.

Il faudrait savoir comment est créée la table temp, quels sont ses
champs, comment elle est alimentée, comment sont copiées les
informations et vers où (et donc au passage la structure de la table
cible) ... en apprenant tout ça on risque de reconnaître le rôle de
cette instruction qui a été citée ici.
__________________________________
Txl a écrit, le 11/06/2009 12:08 :
Bonjour à tous.

Pour faoire des réceptions de commande j'ai une macro qui crée une
table temporaire et ensuite un form qui me permet de rentrer des infos
dans cette table avant qu'une requete ne réincorpore le tout dans les
tables principales.

Si j'ai une commande avec plusieurs lignes ca marche nickel mais quand
la commande ne comporte qu'une ligne ca ne marche pas, la valeur du
form n'est pas incluse dans la table temp et donc pas retranscrit dans
la table principale avec la requete de fin de reception de commande.

J'ai voulu mettre un bout de code qui forcerait la mise à jour mais
j'ai une erreur de syntaxe...comme quoi le champ | n'est pas
trouvé....


Private Sub reception_AfterUpdate()
Set [tables]![tblrcptcommandefourdetail]![reception] = [Forms]!
[frmrcptcommandefourdetail]![reception]
End Sub

Merci de votre aide

Merci d'avance de votre aide



Avatar
Txl
OK, alors en avant pour les détails :)

Un premier form me permet de choisir sur quelle commande travailler
dans une liste (ca marche), une validation de ce form me lance une
première macro qui lance 2 requetes :

D'aboird une requete de suppression de table temporaire (au cas ou
elle existerait tjs)

DELETE tblrcptcommandefourdetail.*
FROM tblrcptcommandefourdetail;

Puis une requete de selection des enregistrements que je veux afficher
et de création de table temporaire (ceux de la commande que j'ai
choisie dans le premier form)

SELECT tbldetailcommandefour.liencommande,
tbldetailcommandefour.refarticle, tbldetailcommandefour.qte,
tbldetailcommandefour.puht, tbldetailcommandefour.qterecue, 0 AS
reception INTO tblrcptcommandefourdetail
FROM tbldetailcommandefour
WHERE (((tbldetailcommandefour.liencommande)=[forms]!
[frmrcptcommandefour]![commande]));

Ensuite la macro ouvre un form affichant les enregistrements de la
dernière requete

Dans ce form tous les champs sont vérouillés sauf celui de la quantit é
recue ajourd'hui qu'il faut remplir et un bouton valider execute la
requete de creation de calcul et de mise à jour de la table temporaire
vers la table permanenente

UPDATE (tblrcptcommandefourdetail INNER JOIN tblcomposant ON
tblrcptcommandefourdetail.refarticle = tblcomposant.refcomp) LEFT JOIN
tbldetailcommandefour ON tblcomposant.refcomp =
tbldetailcommandefour.refarticle SET tblcomposant.stk = [stk]+
[reception], tbldetailcommandefour.qterecue =
tblrcptcommandefourdetail!qterecue+[reception];

Ensuite la dernière action de la macro est de relancer la requete de
suppression de table pour laisser la base propre...

En fait que je pense que le problme vient du fait que comme tous les
champs du form de saisie de qte recue sont vérouillés il ne prend pas
en compte le fait qu'on rentre une valeur parce que quand on fait
entrée il n'a aucune case ou aller, donc je me suis dit que j'allais
mettre un bout de code sur la "on update" est c'est le code que j'ai
collé avant, mais ca ne marche pas, on dirait qu'il ne comprend pas de
quel champ [reception] dans la table temp je veux aller pour rentrer
dans la table permanente (le champ s'appele [reception] aussi...

Merci de l'aide




Bonjour,

Je peux me tromper mais j'ai l'impression qu'on n'en sait pas assez.

On voit une ligne de code VBA et on est invité à corriger une requê te
SQL, alors ça désoriente un peu.

Il faudrait savoir comment est créée la table temp, quels sont ses
champs, comment elle est alimentée, comment sont copiées les
informations et vers où (et donc au passage la structure de la table
cible) ... en apprenant tout ça on risque de reconnaître le rôle de
cette instruction qui a été citée ici.
__________________________________
Txl a écrit, le 11/06/2009 12:08 :



> Bonjour à tous.

> Pour faoire des réceptions de commande j'ai une macro qui crée une
> table temporaire et ensuite un form qui me permet de rentrer des infos
> dans cette table avant qu'une requete ne réincorpore le tout dans les
> tables principales.

> Si j'ai une commande avec plusieurs lignes ca marche nickel mais quand
> la commande ne comporte qu'une ligne ca ne marche pas, la valeur du
> form n'est pas incluse dans la table temp et donc pas retranscrit dans
> la table principale avec la requete de fin de reception de commande.

> J'ai voulu mettre un bout de code qui forcerait la mise à jour mais
> j'ai une erreur de syntaxe...comme quoi le champ | n'est pas
> trouvé....

> Private Sub reception_AfterUpdate()
> Set [tables]![tblrcptcommandefourdetail]![reception] = [Forms]!
> [frmrcptcommandefourdetail]![reception]
> End Sub

> Merci de votre aide

> Merci d'avance de votre aide


Avatar
Gloops
Ah, bon, ben on en sait déjà plus :)

A cette heure-ci, je suis juste assez réveillé pour voir qu'il y a un e
réponse. Après, n'ayant en plus pas Access sous la main, comme il va
tout falloir faire de tête, il vaudra mieux être un peu plus réveil lé.



Txl a écrit, le 15/06/2009 16:06 :
OK, alors en avant pour les détails :)

Un premier form me permet de choisir sur quelle commande travailler
dans une liste (ca marche), une validation de ce form me lance une
première macro qui lance 2 requetes :

D'aboird une requete de suppression de table temporaire (au cas ou
elle existerait tjs)

DELETE tblrcptcommandefourdetail.*
FROM tblrcptcommandefourdetail;



Bon, là, on est bien d'accord que ce sont les enregistrements, qu'on
supprime, et non la table ?


Puis une requete de selection des enregistrements que je veux afficher
et de création de table temporaire (ceux de la commande que j'ai
choisie dans le premier form)

SELECT tbldetailcommandefour.liencommande,
tbldetailcommandefour.refarticle, tbldetailcommandefour.qte,
tbldetailcommandefour.puht, tbldetailcommandefour.qterecue, 0 AS
reception INTO tblrcptcommandefourdetail
FROM tbldetailcommandefour
WHERE (((tbldetailcommandefour.liencommande)=[forms]!
[frmrcptcommandefour]![commande]));

Ensuite la macro ouvre un form affichant les enregistrements de la
dernière requete



Un autre formulaire alors ?
La requête fait référence à un champ de formulaire, le formulaire de
sélection donc. On n'affiche pas les résultats dans le même formula ire ?


Dans ce form tous les champs sont vérouillés sauf celui de la quant ité
recue ajourd'hui qu'il faut remplir et un bouton valider execute la
requete de creation de calcul et de mise à jour de la table temporair e
vers la table permanenente

UPDATE (tblrcptcommandefourdetail INNER JOIN tblcomposant ON
tblrcptcommandefourdetail.refarticle = tblcomposant.refcomp) LEFT JOI N
tbldetailcommandefour ON tblcomposant.refcomp =
tbldetailcommandefour.refarticle SET tblcomposant.stk = [stk]+
[reception], tbldetailcommandefour.qterecue =
tblrcptcommandefourdetail!qterecue+[reception];



Ah oui sur une jointure, se rendre compte si tel champ peut être mis à
jour, sans pouvoir tester, ça suppose de se réveiller pour de bon :)


Ensuite la dernière action de la macro est de relancer la requete de
suppression de table pour laisser la base propre...



Si j'ai bien lu c'est
DELETE FROM tblrcptcommandefourdetail
?

En fait que je pense que le problme vient du fait que comme tous les
champs du form de saisie de qte recue sont vérouillés il ne prend p as
en compte le fait qu'on rentre une valeur parce que quand on fait
entrée il n'a aucune case ou aller, donc je me suis dit que j'allais
mettre un bout de code sur la "on update" est c'est le code que j'ai
collé avant, mais ca ne marche pas, on dirait qu'il ne comprend pas d e
quel champ [reception] dans la table temp je veux aller pour rentrer
dans la table permanente (le champ s'appele [reception] aussi...



ça ressemble à une hypothèse assez facile à vérifier. ça me l aisse
perplexe car j'imagine qu'il y a bien un bouton, et si on met un code
sur le bouton, onclick, il n'y a pas de raison que ça ne s'exécute pa s.

Ah les champs qui portent le même nom c'est un piège à éviter, sa uf dans
le cas de clef externes. A priori chaque nom de champ devrait commencer
par un préfixe de trois lettres représentant la table. Avant de cré er
les tables il s'agit donc de créer un tableau de préfixes pour être sûr
d'avoir les idées claires sur quel préfixe représente quelle table.

Ainsi, on n'aura pas de mal à distinguer dcfReception de la table
tblDetailCommandeFour, de txtReception, zone de texte sur le formulaire,
et éventuellement de intReception, variable entière définie en mé moire
dans le code.



Merci de l'aide




Bon là il faut bien dire qu'il n'y a pas de quoi.
Ce sera à relire à tête reposée ...

Et les détails fournis peuvent aussi aider quelqu'un d'autre à répo ndre.
Avatar
Txl
On 16 juin, 01:39, Gloops wrote:
Ah, bon, ben on en sait déjà plus :)



Tu vois, c'est toi qui a voulu en savoir plus, moi quand on me
demande, je fournis :)


A cette heure-ci, je suis juste assez réveillé pour voir qu'il y a un e
réponse. Après, n'ayant en plus pas Access sous la main, comme il va
tout falloir faire de tête, il vaudra mieux être un peu plus réveil lé.

Txl a écrit, le 15/06/2009 16:06 :

> OK, alors en avant pour les détails :)

> Un premier form me permet de choisir sur quelle commande travailler
> dans une liste (ca marche), une validation de ce form me lance une
> première macro qui lance 2 requetes :

> D'aboird une requete de suppression de table temporaire (au cas ou
> elle existerait tjs)

> DELETE tblrcptcommandefourdetail.*
> FROM tblrcptcommandefourdetail;

Bon, là, on est bien d'accord que ce sont les enregistrements, qu'on
supprime, et non la table ?




Oui oui, je me suis mal exprimé



> Puis une requete de selection des enregistrements que je veux afficher
> et de création de table temporaire (ceux de la commande que j'ai
> choisie dans le premier form)

> SELECT tbldetailcommandefour.liencommande,
> tbldetailcommandefour.refarticle, tbldetailcommandefour.qte,
> tbldetailcommandefour.puht, tbldetailcommandefour.qterecue, 0 AS
> reception INTO tblrcptcommandefourdetail
> FROM tbldetailcommandefour
> WHERE (((tbldetailcommandefour.liencommande)=[forms]!
> [frmrcptcommandefour]![commande]));

> Ensuite la macro ouvre un form affichant les enregistrements de la
> dernière requete

Un autre formulaire alors ?
La requête fait référence à un champ de formulaire, le formulaire de
sélection donc. On n'affiche pas les résultats dans le même formula ire ?




Un form de selection de la commande avec une liste deroulante des
commandes dispos (celles qui sont pas archivées) et ensuite ca ouvre
bien un autre form avec les infos specifiques a la commande qu'on a
choisie. je suis pas assez fort pour faire des procédures de recalcul
et tout ca avec un form/sous-form, donc je lance un niuveau form, pas
joli mais ca marche :)




> Dans ce form tous les champs sont vérouillés sauf celui de la quant ité
> recue ajourd'hui qu'il faut remplir et un bouton valider execute la
> requete de creation de calcul et de mise à jour de la table temporair e
> vers la table permanenente

> UPDATE (tblrcptcommandefourdetail INNER JOIN tblcomposant ON
> tblrcptcommandefourdetail.refarticle = tblcomposant.refcomp) LEFT JOI N
> tbldetailcommandefour ON tblcomposant.refcomp =
> tbldetailcommandefour.refarticle SET tblcomposant.stk = [stk]+
> [reception], tbldetailcommandefour.qterecue =
> tblrcptcommandefourdetail!qterecue+[reception];

Ah oui sur une jointure, se rendre compte si tel champ peut être mis à
jour, sans pouvoir tester, ça suppose de se réveiller pour de bon :)



> Ensuite la dernière action de la macro est de relancer la requete de
> suppression de table pour laisser la base propre...

Si j'ai bien lu c'est
DELETE FROM tblrcptcommandefourdetail
?




Oui, ca vire tous les enregistrements de la table que j'appele
temporaire mais dont en fait seul le contenu est effface, c'est la
requete rqcommandefourdetail3 qui supprime ces enregistrements et qui
est lancée par la première macro (tout en haut du post) et aussi à la
fin de la 2° macro




> En fait que je pense que le problme vient du fait que comme tous les
> champs du form de saisie de qte recue sont vérouillés il ne prend p as
> en compte le fait qu'on rentre une valeur parce que quand on fait
> entrée il n'a aucune case ou aller, donc je me suis dit que j'allais
> mettre un bout de code sur la "on update" est c'est le code que j'ai
> collé avant, mais ca ne marche pas, on dirait qu'il ne comprend pas d e
> quel champ [reception] dans la table temp je veux aller pour rentrer
> dans la table permanente (le champ s'appele [reception] aussi...

ça ressemble à une hypothèse assez facile à vérifier. ça me l aisse
perplexe car j'imagine qu'il y a bien un bouton, et si on met un code
sur le bouton, onclick, il n'y a pas de raison que ça ne s'exécute pa s.



Y'a un bouton valider pour l'ensemble du form et pas ligne par ligne

ce qui me tue c'est que si y'a 2 lignes ou plus dans mon form de
detail ca marche nickel, si y'a qu'une ligne ca marche pas....


Ah les champs qui portent le même nom c'est un piège à éviter, sa uf dans
le cas de clef externes. A priori chaque nom de champ devrait commencer
par un préfixe de trois lettres représentant la table. Avant de cré er
les tables il s'agit donc de créer un tableau de préfixes pour être sûr
d'avoir les idées claires sur quel préfixe représente quelle table.

Ainsi, on n'aura pas de mal à distinguer dcfReception de la table
tblDetailCommandeFour, de txtReception, zone de texte sur le formulaire,
et éventuellement de intReception, variable entière définie en mé moire
dans le code.



> Merci de l'aide

Bon là il faut bien dire qu'il n'y a pas de quoi.
Ce sera à relire à tête reposée ...

Et les détails fournis peuvent aussi aider quelqu'un d'autre à répo ndre.


Avatar
Gloops
Txl a écrit, le 11/06/2009 12:08 :
Private Sub reception_AfterUpdate()
Set [tables]![tblrcptcommandefourdetail]![reception] = [Forms]!
[frmrcptcommandefourdetail]![reception]
End Sub





Ah, je lis mieux : c'est le code qui transfère la donnée du formulair e à
la table. ça veut dire que le formulaire n'est pas lié à la table ? Y
a-t-il une raison à ce choix ?
Avatar
Gloops
Txl a écrit, le 16/06/2009 13:58 :
Un form de selection de la commande avec une liste deroulante des
commandes dispos (celles qui sont pas archivées) et ensuite ca ouvre
bien un autre form avec les infos specifiques a la commande qu'on a
choisie. je suis pas assez fort pour faire des procédures de recalcul
et tout ca avec un form/sous-form, donc je lance un niuveau form, pas
joli mais ca marche :)




En réalité, un sous-formulaire lié directement aux données, ce n' est pas
si compliqué que cela. Sa requête peut se terminer par quelque chose
comme "WHERE NumCli = " & Parent.txtNumCli

(en supposant que le sous-formulaire présente des données liées à un
client dont le numéro est numérique sinon on ajoute des séparateur
devant et derrière la clef de client)

Et pour la mise à jour, Form.Refresh -que le formulaire parent
déclenchera par sfmCde.Form.Refresh.
(avec sfmCde étant le nom du sous-formulaire)

J'ai simplifié la structure histoire de m'exprimer plus clairement (du
moins d'essayer), aussi je n'ai pas repris les mêmes noms.