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

Update valeur d'un champ de formulaire = Erreur 438

14 réponses
Avatar
Bear76
Bonjour à la communauté,

Dans l'évènement Current_Form j'ai inséré une ligne afin de pouvoir
mettre à jour la valeur d'un champ (numérique), mais à chaque fois que
j'ouvre mon form j'ai une "erreur d'exécution 438 (propriété ou
méthode non géré par cet objet)".

Champ1.Value = Champ de mon current_form que je souhaite mettre à jour
Champ2.value = Champ de mon current_form que j'utilise dans le calcul
Champ3.value = Champ du pied de mon sous-formulaire SF0

Tous mes champs sont au format numérique. Et le Champ3 calcule la somme
d'un champ numérique de mon SF0

Private_Sub Form_Current()
Champ1.Value = (Champ2.value + SF0.[Formulaire]![Champ3].value)
End Sub

Si quelqu'un(e) avait une idée.
Merci d'avance.

PS : Je suis sous Access 2007

10 réponses

1 2
Avatar
Argyronet
Bonjour,

C'est une histoire de syntaxe...

Quand vous voulez exploiter la valeur issue d'un sous-formulaire, il est
recommandé de crééer un champ indépendant caché qui prend la valeur de ce
dernier (en général situé dans le pied de formulaire) par le biais de la
fonction :
SousFormName!ControlName

SousFormName = au nom du sous-formulaire défini dans le formulaire parent
ControlName = au nom du champ défini dans le sous-formulaire

Après il est aisé de récupérer cette valeur pour un usage ultérieur...
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)



"Bear76" a écrit :

Bonjour à la communauté,

Dans l'évènement Current_Form j'ai inséré une ligne afin de pouvoir
mettre à jour la valeur d'un champ (numérique), mais à chaque fois que
j'ouvre mon form j'ai une "erreur d'exécution 438 (propriété ou
méthode non géré par cet objet)".

Champ1.Value = Champ de mon current_form que je souhaite mettre à jour
Champ2.value = Champ de mon current_form que j'utilise dans le calcul
Champ3.value = Champ du pied de mon sous-formulaire SF0

Tous mes champs sont au format numérique. Et le Champ3 calcule la somme
d'un champ numérique de mon SF0

Private_Sub Form_Current()
Champ1.Value = (Champ2.value + SF0.[Formulaire]![Champ3].value)
End Sub

Si quelqu'un(e) avait une idée.
Merci d'avance.

PS : Je suis sous Access 2007





Avatar
Bear76
Bonjour Argy

Ce lien pour visualiser le Form http://cjoint.com/?khmSwPsOGT
"Total commandé" est ma zone de texte indépendante qui va donc
rechercher la valeur calculée dans le pied de mon SForm. Le résultat
700 est juste.

Je voudrais mettre à jour ma zone de texte "Qté stock virtuel", qui
elle n'est pas indépendante, en additionnant donc la valeur de la zone
de texte "Total commandé" avec la valeur de la zone de texte "Qté stock
initial" qui elle n'est pas indépendante non plus.

Me.QTESTOCKVIRT.Value = Me.QTESTOCKINIT.Value + Me.TOTAL_CMDE.Value
Soit la syntaxe ci-dessus n'est pas bonne soit il y a un truc. Lequel ?
...
Merci

Argyronet a pensé très fort :
Bonjour,

C'est une histoire de syntaxe...

Quand vous voulez exploiter la valeur issue d'un sous-formulaire, il est
recommandé de crééer un champ indépendant caché qui prend la valeur de ce
dernier (en général situé dans le pied de formulaire) par le biais de la
fonction :
SousFormName!ControlName

SousFormName = au nom du sous-formulaire défini dans le formulaire parent
ControlName = au nom du champ défini dans le sous-formulaire

Après il est aisé de récupérer cette valeur pour un usage ultérieur...
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)


Avatar
Argyronet
Eh bien sur l'événement Current() du formulaire, vous pouvez écrire :
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock initial]

Je ne vois pas où est le problème :o
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)



"Bear76" a écrit :

Bonjour Argy

Ce lien pour visualiser le Form http://cjoint.com/?khmSwPsOGT
"Total commandé" est ma zone de texte indépendante qui va donc
rechercher la valeur calculée dans le pied de mon SForm. Le résultat
700 est juste.

Je voudrais mettre à jour ma zone de texte "Qté stock virtuel", qui
elle n'est pas indépendante, en additionnant donc la valeur de la zone
de texte "Total commandé" avec la valeur de la zone de texte "Qté stock
initial" qui elle n'est pas indépendante non plus.

Me.QTESTOCKVIRT.Value = Me.QTESTOCKINIT.Value + Me.TOTAL_CMDE.Value
Soit la syntaxe ci-dessus n'est pas bonne soit il y a un truc. Lequel ?
....
Merci

Argyronet a pensé très fort :
> Bonjour,
>
> C'est une histoire de syntaxe...
>
> Quand vous voulez exploiter la valeur issue d'un sous-formulaire, il est
> recommandé de crééer un champ indépendant caché qui prend la valeur de ce
> dernier (en général situé dans le pied de formulaire) par le biais de la
> fonction :
> SousFormName!ControlName
> où
> SousFormName = au nom du sous-formulaire défini dans le formulaire parent
> ControlName = au nom du champ défini dans le sous-formulaire
>
> Après il est aisé de récupérer cette valeur pour un usage ultérieur...
> --
> Argy
> http://argyronet.developpez.com/
> Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
> VBA pour Office 2007 (ISBN 2742983910)





Avatar
Bear76
Bonsoir Argy,
J'ai repris à la lettre votre syntaxe et cela ne marche malheureusement
pas ! Il refuse de prendre en compte la valeur du champ [Total
commandé]. Je reste couac !
Merci

Argyronet avait soumis l'idée :
Eh bien sur l'événement Current() du formulaire, vous pouvez écrire :
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock initial]

Je ne vois pas où est le problème :o
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)


Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

Il faut bien entendu transposer l'idée de Argyronet à ton application, comme
"Me![Qté stock virtuel]" (lisible) à "Me.QTESTOCKVIRT" (fort peu lisible).
Argyronet t'as donné une solution et une leçon (bien que j'évite les
accents et remplace les espaces par un _ ).

Cdt, Blaise
---- ---- ----


"Bear76" a écrit dans le message de news:

Bonsoir Argy,
J'ai repris à la lettre votre syntaxe et cela ne marche malheureusement
pas ! Il refuse de prendre en compte la valeur du champ [Total commandé].
Je reste couac !
Merci

Argyronet avait soumis l'idée :
Eh bien sur l'événement Current() du formulaire, vous pouvez écrire :
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]

Je ne vois pas où est le problème :o
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)






Avatar
Bear76
Bonjour Blaise,

Lors de mes études après bac, notre prof nous avait conseillé de
toujours rédiger les noms de champ des tables en majuscules (préfixe du
nom de la table plus contraction du nom du champ), ceci pour éviter des
problèmes de syntaxe dans la rédaction de requêtes, procédures et
autres.

Pour lever le doute sur mon problème, j'ai créé un évènement sur
Click() sur mon fameux champ [Qté stock virtuel]

Private Sub Qté_stock_virtuel_Click()
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]
End Sub

Et là ça marche Le temps que le formulaire est ouvert. Mais lorsque je
le referme pour l'ouvrir ensuite la valeur n'est pas maintenue !!!

Pourquoi la même expression ne veut-elle pas fonctionner sur
l'évènement Form_Current()?

Private Sub Form_Current()
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]
End Sub

Par contre, j'ai remarqué que mon champ [Total commandé] met 1 sec pour
afficher la valeur. Ne serait-ce point ça le problème ?

Je dois vous avouer que je suis un peu perdu
Merci



Blaise Cacramp a formulé la demande :
Selon : Bonjour ou bonsoir

Il faut bien entendu transposer l'idée de Argyronet à ton application, comme
"Me![Qté stock virtuel]" (lisible) à "Me.QTESTOCKVIRT" (fort peu lisible).
Argyronet t'as donné une solution et une leçon (bien que j'évite les
accents et remplace les espaces par un _ ).

Cdt, Blaise
---- ---- ----


"Bear76" a écrit dans le message de news:

Bonsoir Argy,
J'ai repris à la lettre votre syntaxe et cela ne marche malheureusement pas
! Il refuse de prendre en compte la valeur du champ [Total commandé]. Je
reste couac !
Merci

Argyronet avait soumis l'idée :
Eh bien sur l'événement Current() du formulaire, vous pouvez écrire :
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]

Je ne vois pas où est le problème :o
-- Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)








Avatar
Argyronet
Le noms des contrôles, des champs doivent être rédigés sans caractères
spéciaux ni accentués...
Lire cet article que j'ai écrit dans ce sens :
http://argyronet.developpez.com/office/vba/convention/

De par mon expérience et de ma fénéantise intrinsèque, mettre des [] pour
stipuler un nom de champ, de formulaire ou d'un contrôle lorsque j'écris du
code me soulerait au plus haut point...

il n'y a pas de règle réelle mais il existe des conventions de base et
celles que je propose et j'applique pour mon compte permettent une lisibilité
accrue et une relecture aisée du code plusieurs années après... surtout pour
autrui.

Malheureusement une grande partie des profs sont restés avec leur méthode
Merise et leur acquis des bases comme GCOS7 ou celles des AS400 et autre
systèmes comme les HP3000 !!! Ce qu'on leur a appris en quelque sorte sans
jamais se remettre en question (et pas seulement pour l'informatique)
C'est grave d'enseigner des infos comme telles à l'heure de l'UML et ses
accolytes ;o)

Votre champ [Qté stock virtuel] aurait du être nommé QteStockVirtuel et vous
n'auriez pas eu d'erreur.
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)



"Bear76" a écrit :

Bonjour Blaise,

Lors de mes études après bac, notre prof nous avait conseillé de
toujours rédiger les noms de champ des tables en majuscules (préfixe du
nom de la table plus contraction du nom du champ), ceci pour éviter des
problèmes de syntaxe dans la rédaction de requêtes, procédures et
autres.

Pour lever le doute sur mon problème, j'ai créé un évènement sur
Click() sur mon fameux champ [Qté stock virtuel]

Private Sub Qté_stock_virtuel_Click()
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]
End Sub

Et là ça marche Le temps que le formulaire est ouvert. Mais lorsque je
le referme pour l'ouvrir ensuite la valeur n'est pas maintenue !!!

Pourquoi la même expression ne veut-elle pas fonctionner sur
l'évènement Form_Current()?

Private Sub Form_Current()
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]
End Sub

Par contre, j'ai remarqué que mon champ [Total commandé] met 1 sec pour
afficher la valeur. Ne serait-ce point ça le problème ?

Je dois vous avouer que je suis un peu perdu
Merci



Blaise Cacramp a formulé la demande :
> Selon : Bonjour ou bonsoir
>
> Il faut bien entendu transposer l'idée de Argyronet à ton application, comme
> "Me![Qté stock virtuel]" (lisible) à "Me.QTESTOCKVIRT" (fort peu lisible).
> Argyronet t'as donné une solution et une leçon (bien que j'évite les
> accents et remplace les espaces par un _ ).
>
> Cdt, Blaise
> ---- ---- ----
>
>
> "Bear76" a écrit dans le message de news:
>
>> Bonsoir Argy,
>> J'ai repris à la lettre votre syntaxe et cela ne marche malheureusement pas
>> ! Il refuse de prendre en compte la valeur du champ [Total commandé]. Je
>> reste couac !
>> Merci
>>
>> Argyronet avait soumis l'idée :
>>> Eh bien sur l'événement Current() du formulaire, vous pouvez écrire :
>>> Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
>>> initial]
>>>
>>> Je ne vois pas où est le problème :o
>>> -- Argy
>>> http://argyronet.developpez.com/
>>> Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
>>> VBA pour Office 2007 (ISBN 2742983910)
>>
>>





Avatar
Bear76
Bonjour Argy,
Je n'ai fait que reprendre votre formulation, pour éviter, je ne sais
pas, toute incompréhension.
Dans votre réponse précédente vous avez rédigé la suntaxe suivante :
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial] que je remets nullement en cause.
Moi, j'ai suivi ce que mon prof m'avait enseigné (lui d'après ce que je
sais n'a pas fait le circuit classique Bac + Fac + Iufm) pour retrouver
en face de soi des "enseignants" qui n'ont aucune expérience
professionnelle et qui n'y connaissent rien à l'entreprise. Et je suis
pas là pour faire l'apologie du corps enseignant.

Ma syntaxe est :
Me!QTESTOCK = Me.TOTALCMDE.Value + Me!QTEINIT
Je pense que ma syntaxe est hautement lisible.

Sur le Form_Current() ça ne marche pas, sur Click() ça marche !
Cela m'a pris tellement la tête que j'ai rédigé 2 requête sql. Le
résultat est là.

Merci pour votre aide et votre patience.

Il se trouve que Argyronet a formulé :
Le noms des contrôles, des champs doivent être rédigés sans caractères
spéciaux ni accentués...
Lire cet article que j'ai écrit dans ce sens :
http://argyronet.developpez.com/office/vba/convention/

De par mon expérience et de ma fénéantise intrinsèque, mettre des [] pour
stipuler un nom de champ, de formulaire ou d'un contrôle lorsque j'écris du
code me soulerait au plus haut point...

il n'y a pas de règle réelle mais il existe des conventions de base et
celles que je propose et j'applique pour mon compte permettent une lisibilité
accrue et une relecture aisée du code plusieurs années après... surtout pour
autrui.

Malheureusement une grande partie des profs sont restés avec leur méthode
Merise et leur acquis des bases comme GCOS7 ou celles des AS400 et autre
systèmes comme les HP3000 !!! Ce qu'on leur a appris en quelque sorte sans
jamais se remettre en question (et pas seulement pour l'informatique)
C'est grave d'enseigner des infos comme telles à l'heure de l'UML et ses
accolytes ;o)

Votre champ [Qté stock virtuel] aurait du être nommé QteStockVirtuel et vous
n'auriez pas eu d'erreur.
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)


Avatar
Argyronet
Humm, oui, mais si ça ne marche toujours pas, c'est que l'événement ne
correspond pas à ce que vous effectuez comme tâche...
De fait, l'événement Current() n'est jamais déclenché et il faut que vous
trouviez la parade, si je puis dire.
En d'autres termes, par exemple, forcer la MAJ du champ depuis le
sous-formulaire à l'aide de la propriété Parent.
Par exemple :
Private Sub QteCommandee_AfterUpdate()
Me.Parent.QTESTOCK.Value = Me.Parent.TOTALCMDE.Value +
Me.Parent.QTEINIT.Value
End Sub

En fait, ce phénomène de non MAJ comme vous le rencontrez est souvent du à
un problème de modélisation initiale et où, notamment, la relation Père-Fils
n'est pas correctement définie entre les fomulaires.
Access est conçu pour détecter et proposer directement l'affectation de
cette propriété à partir du moment où vos relations sont logiques et
correctement définies.
Dans ce cas, pas besoin de gymnastique bricolée comme celles que vous avez
paradée.
--
Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)



"Bear76" a écrit :

Bonjour Argy,
Je n'ai fait que reprendre votre formulation, pour éviter, je ne sais
pas, toute incompréhension.
Dans votre réponse précédente vous avez rédigé la suntaxe suivante :
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial] que je remets nullement en cause.
Moi, j'ai suivi ce que mon prof m'avait enseigné (lui d'après ce que je
sais n'a pas fait le circuit classique Bac + Fac + Iufm) pour retrouver
en face de soi des "enseignants" qui n'ont aucune expérience
professionnelle et qui n'y connaissent rien à l'entreprise. Et je suis
pas là pour faire l'apologie du corps enseignant.

Ma syntaxe est :
Me!QTESTOCK = Me.TOTALCMDE.Value + Me!QTEINIT
Je pense que ma syntaxe est hautement lisible.

Sur le Form_Current() ça ne marche pas, sur Click() ça marche !
Cela m'a pris tellement la tête que j'ai rédigé 2 requête sql. Le
résultat est là.

Merci pour votre aide et votre patience.

Il se trouve que Argyronet a formulé :
> Le noms des contrôles, des champs doivent être rédigés sans caractères
> spéciaux ni accentués...
> Lire cet article que j'ai écrit dans ce sens :
> http://argyronet.developpez.com/office/vba/convention/
>
> De par mon expérience et de ma fénéantise intrinsèque, mettre des [] pour
> stipuler un nom de champ, de formulaire ou d'un contrôle lorsque j'écris du
> code me soulerait au plus haut point...
>
> il n'y a pas de règle réelle mais il existe des conventions de base et
> celles que je propose et j'applique pour mon compte permettent une lisibilité
> accrue et une relecture aisée du code plusieurs années après... surtout pour
> autrui.
>
> Malheureusement une grande partie des profs sont restés avec leur méthode
> Merise et leur acquis des bases comme GCOS7 ou celles des AS400 et autre
> systèmes comme les HP3000 !!! Ce qu'on leur a appris en quelque sorte sans
> jamais se remettre en question (et pas seulement pour l'informatique)
> C'est grave d'enseigner des infos comme telles à l'heure de l'UML et ses
> accolytes ;o)
>
> Votre champ [Qté stock virtuel] aurait du être nommé QteStockVirtuel et vous
> n'auriez pas eu d'erreur.
> --
> Argy
> http://argyronet.developpez.com/
> Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
> VBA pour Office 2007 (ISBN 2742983910)





Avatar
Blaise Cacramp
Selon : Bonjour ou bonsoir

Lors de mes études après bac, notre prof nous avait conseillé de toujours
rédiger les noms de champ des tables en majuscules (préfixe du



C'est du passé, l'informatique est, il me semble, une matière qui évolue
mensuellement.
J'ai moi même du mal à tenir le rythme.


Cdt, Blaise
---- ---- ----


"Bear76" a écrit dans le message de news:

Bonjour Blaise,

Lors de mes études après bac, notre prof nous avait conseillé de toujours
rédiger les noms de champ des tables en majuscules (préfixe du nom de la
table plus contraction du nom du champ), ceci pour éviter des problèmes de
syntaxe dans la rédaction de requêtes, procédures et autres.

Pour lever le doute sur mon problème, j'ai créé un évènement sur Click()
sur mon fameux champ [Qté stock virtuel]

Private Sub Qté_stock_virtuel_Click()
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]
End Sub

Et là ça marche Le temps que le formulaire est ouvert. Mais lorsque je le
referme pour l'ouvrir ensuite la valeur n'est pas maintenue !!!

Pourquoi la même expression ne veut-elle pas fonctionner sur l'évènement
Form_Current()?

Private Sub Form_Current()
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]
End Sub

Par contre, j'ai remarqué que mon champ [Total commandé] met 1 sec pour
afficher la valeur. Ne serait-ce point ça le problème ?

Je dois vous avouer que je suis un peu perdu
Merci



Blaise Cacramp a formulé la demande :
Selon : Bonjour ou bonsoir

Il faut bien entendu transposer l'idée de Argyronet à ton application,
comme "Me![Qté stock virtuel]" (lisible) à "Me.QTESTOCKVIRT" (fort peu
lisible).
Argyronet t'as donné une solution et une leçon (bien que j'évite les
accents et remplace les espaces par un _ ).

Cdt, Blaise
---- ---- ----


"Bear76" a écrit dans le message de news:

Bonsoir Argy,
J'ai repris à la lettre votre syntaxe et cela ne marche malheureusement
pas ! Il refuse de prendre en compte la valeur du champ [Total
commandé]. Je reste couac !
Merci

Argyronet avait soumis l'idée :
Eh bien sur l'événement Current() du formulaire, vous pouvez écrire :
Me![Qté stock virtuel] = Me.[Total commandé].Value + Me![Qté stock
initial]

Je ne vois pas où est le problème :o
-- Argy
http://argyronet.developpez.com/
Créez des programmes avec Microsoft Access 2007 (ISBN 2742982442)
VBA pour Office 2007 (ISBN 2742983910)












1 2