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

Conflit d'écriture / Access 2003

16 réponses
Avatar
William Kameron
Bonjour A tous !

Dans un sous-form, à l'aide d'un menu contextuel, pour modifier un
enregistrement, j'appelle une fonction d'un module général, qui utilise
l'instruction : "DoCmd.RunSQL"

Public Function Formule(G01 as Single) as Boolean
Dim RéfOpération as long, StrSQL as String

If (SysCmd(acSysCmdGetObjectState, acForm, "FPrincipal") _
And acObjStateOpen) <> 0 Then
Set frm = Forms("FPrincipal")
RéfOpération = " & frm.[FSecondaire].Form![FOpérations]!RéfOpération

DoCmd.SetWarnings False
StrSQL = "UPDATE [Opérations] set [OptionG01] = " & G01 & "_
WHERE RéfOpération = " & RéfOpération
DoCmd.RunSQL StrSQL, False
DoCmd.SetWarnings true

End If

End function

Ici, G01 est fournie en entrée dans la fonction sous la forme d'une
constante par une macro apellée par le menu contextuel et RéfOpération pointe
sur l'enregistrement courant du sous-form "FOpérations"

Lorsque j'exécute la commande deux, trois et plusieurs fois de suite, je
recois toujours le message :

CONFLIT D'ECRITURE
Cet enregistrement a été modifié par un autre utilisateur depuis
que vous avez commencé à le modifier....


POURTANT JE SUIS LE SEUL UTILISATEUR DE LA BASE POUR L'INSTANT ! !

Il arrive même que le message apparaisse dans d'autres formulaires.
1° Le problème est-il lié à l'instruction "DoCmd.RunSQL" ?
2° Comment inhiber ce message en assurant les modifications que je voudrais
porter à ma base ?

Je veux bien utiliser une autre méthode mais, je ne vois pas laquelle
d'autant plus que la fonction se trouve dans un module général.

Merci de me consacrer votre temps si précieux !

10 réponses

1 2
Avatar
3stone
Salut,

"William Kameron"
| Dans un sous-form, à l'aide d'un menu contextuel, pour modifier un
| enregistrement, j'appelle une fonction d'un module général, qui utilise
| l'instruction : "DoCmd.RunSQL"
|
| Public Function Formule(G01 as Single) as Boolean
| Dim RéfOpération as long, StrSQL as String
|
| If (SysCmd(acSysCmdGetObjectState, acForm, "FPrincipal") _
| And acObjStateOpen) <> 0 Then
| Set frm = Forms("FPrincipal")
| RéfOpération = " & frm.[FSecondaire].Form![FOpérations]!RéfOpération
|
| DoCmd.SetWarnings False
| StrSQL = "UPDATE [Opérations] set [OptionG01] = " & G01 & "_
| WHERE RéfOpération = " & RéfOpération
| DoCmd.RunSQL StrSQL, False
| DoCmd.SetWarnings true
|
| End If
|
| End function
|
| Ici, G01 est fournie en entrée dans la fonction sous la forme d'une
| constante par une macro apellée par le menu contextuel et RéfOpération pointe
| sur l'enregistrement courant du sous-form "FOpérations"
|
| Lorsque j'exécute la commande deux, trois et plusieurs fois de suite, je
| recois toujours le message :
|
| CONFLIT D'ECRITURE
| Cet enregistrement a été modifié par un autre utilisateur depuis
| que vous avez commencé à le modifier....
|
|
| POURTANT JE SUIS LE SEUL UTILISATEUR DE LA BASE POUR L'INSTANT ! !

Pourquoi tu cries ? ;-)

En fait, cela vient de ton code...
Si un enregistrement est en édition et que par ailleurs tu tape dans la table
sur éventuellement le même enregistrement via ton DoCmd.RunSQL
tu as bien un "autre" utilisateur qui tente d'accéder à l'enregistrement
vérrouillé - car en modif par toi...


| Il arrive même que le message apparaisse dans d'autres formulaires.
| 1° Le problème est-il lié à l'instruction "DoCmd.RunSQL" ?
| 2° Comment inhiber ce message en assurant les modifications que je voudrais
| porter à ma base ?
|
| Je veux bien utiliser une autre méthode mais, je ne vois pas laquelle
| d'autant plus que la fonction se trouve dans un module général.

Puisque tu est dans un sous-formulaire, pourquoi ce détour par
une fonction (pas très élégante ;-) pour juste ajouter une valeur ?

Ou alors, assure toi que ton sous-formulaire ne soit pas en édition.

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

Je veux bien simplifier, mais c'est le problème posé qui lui a été simplifié
car la mise à jour porte sur une douzaine de champ. mais en fait, il s'agit
d'une série d'options que je choisi à l'aide d'un menu contextuel.
Pour l'esthétique je verais plus tard.
Mon problème reste donc entier :
Comment s'assurer que le formulaire n'est pas en mode édition ?

A partir du formulaire j'ai souvent contourné le problème par :

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Mais, çà, c'est quand je suis dans le formulaire.
J'ai l'impression parfois que c'est trop compliqué !
Merci de regarder cela de plus près.

"3stone" a écrit dans le message de news:
evKlki%
Salut,

"William Kameron"
| Dans un sous-form, à l'aide d'un menu contextuel, pour modifier un
| enregistrement, j'appelle une fonction d'un module général, qui utilise
| l'instruction : "DoCmd.RunSQL"
|
| Public Function Formule(G01 as Single) as Boolean
| Dim RéfOpération as long, StrSQL as String
|
| If (SysCmd(acSysCmdGetObjectState, acForm, "FPrincipal") _
| And acObjStateOpen) <> 0 Then
| Set frm = Forms("FPrincipal")
| RéfOpération = " &
frm.[FSecondaire].Form![FOpérations]!RéfOpération
|
| DoCmd.SetWarnings False
| StrSQL = "UPDATE [Opérations] set [OptionG01] = " & G01 & "_
| WHERE RéfOpération = " & RéfOpération
| DoCmd.RunSQL StrSQL, False
| DoCmd.SetWarnings true
|
| End If
|
| End function
|
| Ici, G01 est fournie en entrée dans la fonction sous la forme d'une
| constante par une macro apellée par le menu contextuel et RéfOpération
pointe
| sur l'enregistrement courant du sous-form "FOpérations"
|
| Lorsque j'exécute la commande deux, trois et plusieurs fois de suite, je
| recois toujours le message :
|
| CONFLIT D'ECRITURE
| Cet enregistrement a été modifié par un autre utilisateur depuis
| que vous avez commencé à le modifier....
|
|
| POURTANT JE SUIS LE SEUL UTILISATEUR DE LA BASE POUR L'INSTANT ! !

Pourquoi tu cries ? ;-)

En fait, cela vient de ton code...
Si un enregistrement est en édition et que par ailleurs tu tape dans la
table
sur éventuellement le même enregistrement via ton DoCmd.RunSQL
tu as bien un "autre" utilisateur qui tente d'accéder à l'enregistrement
vérrouillé - car en modif par toi...


| Il arrive même que le message apparaisse dans d'autres formulaires.
| 1° Le problème est-il lié à l'instruction "DoCmd.RunSQL" ?
| 2° Comment inhiber ce message en assurant les modifications que je
voudrais
| porter à ma base ?
|
| Je veux bien utiliser une autre méthode mais, je ne vois pas laquelle
| d'autant plus que la fonction se trouve dans un module général.

Puisque tu est dans un sous-formulaire, pourquoi ce détour par
une fonction (pas très élégante ;-) pour juste ajouter une valeur ?

Ou alors, assure toi que ton sous-formulaire ne soit pas en édition.

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



Avatar
jerome crevecoeur
Je pense que tu essayes de mettre à jour des champs qui sont dans ton
formulaire principal.
L'enregistrement est donc déjà ouvert.
Le mieux serait de mettre à jour les zones de textes elle-meme du
formulaire principal du style:

Forms("FPrincipal")("OptionG01")="G01"

Cordialement

Bonjour "3stone"

Je veux bien simplifier, mais c'est le problème posé qui lui a ét é simplifié
car la mise à jour porte sur une douzaine de champ. mais en fait, il s'agit
d'une série d'options que je choisi à l'aide d'un menu contextuel.
Pour l'esthétique je verais plus tard.
Mon problème reste donc entier :
Comment s'assurer que le formulaire n'est pas en mode édition ?

A partir du formulaire j'ai souvent contourné le problème par :

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVe r70

Mais, çà, c'est quand je suis dans le formulaire.
J'ai l'impression parfois que c'est trop compliqué !
Merci de regarder cela de plus près.

"3stone" a écrit dans le message de news:
evKlki%
Salut,

"William Kameron"
| Dans un sous-form, à l'aide d'un menu contextuel, pour modifier un
| enregistrement, j'appelle une fonction d'un module général, qui utilise
| l'instruction : "DoCmd.RunSQL"
|
| Public Function Formule(G01 as Single) as Boolean
| Dim RéfOpération as long, StrSQL as String
|
| If (SysCmd(acSysCmdGetObjectState, acForm, "FPrincipal") _
| And acObjStateOpen) <> 0 Then
| Set frm = Forms("FPrincipal")
| RéfOpération = " &
frm.[FSecondaire].Form![FOpérations]!RéfOpération
|
| DoCmd.SetWarnings False
| StrSQL = "UPDATE [Opérations] set [OptionG01] = " & G01 & "_
| WHERE RéfOpération = " & RéfOpération
| DoCmd.RunSQL StrSQL, False
| DoCmd.SetWarnings true
|
| End If
|
| End function
|
| Ici, G01 est fournie en entrée dans la fonction sous la forme d'un e
| constante par une macro apellée par le menu contextuel et RéfOpé ration
pointe
| sur l'enregistrement courant du sous-form "FOpérations"
|
| Lorsque j'exécute la commande deux, trois et plusieurs fois de sui te, je
| recois toujours le message :
|
| CONFLIT D'ECRITURE
| Cet enregistrement a été modifié par un autre utilisateur d epuis
| que vous avez commencé à le modifier....
|
|
| POURTANT JE SUIS LE SEUL UTILISATEUR DE LA BASE POUR L'INSTANT ! !

Pourquoi tu cries ? ;-)

En fait, cela vient de ton code...
Si un enregistrement est en édition et que par ailleurs tu tape dans la
table
sur éventuellement le même enregistrement via ton DoCmd.RunSQL
tu as bien un "autre" utilisateur qui tente d'accéder à l'enregist rement
vérrouillé - car en modif par toi...


| Il arrive même que le message apparaisse dans d'autres formulaires .
| 1° Le problème est-il lié à l'instruction "DoCmd.RunSQL" ?
| 2° Comment inhiber ce message en assurant les modifications que je
voudrais
| porter à ma base ?
|
| Je veux bien utiliser une autre méthode mais, je ne vois pas laque lle
| d'autant plus que la fonction se trouve dans un module général.

Puisque tu est dans un sous-formulaire, pourquoi ce détour par
une fonction (pas très élégante ;-) pour juste ajouter une valeu r ?

Ou alors, assure toi que ton sous-formulaire ne soit pas en édition.

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







Avatar
William Kameron
Voilà qui est fait. Merci Jérome. Je n'y avait pas pensé.
Mais pour enregistrer je fait comment ?
??? "DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70"
La suite du traitement dépend plutot du contenu de l'enregistrement pas de
l'enrgistrement mais pas du formulaire.


"jerome crevecoeur"
a écrit dans le message de news: %
Je pense que tu essayes de mettre à jour des champs qui sont dans ton
formulaire principal.
L'enregistrement est donc déjà ouvert.
Le mieux serait de mettre à jour les zones de textes elle-meme du
formulaire principal du style:

Forms("FPrincipal")("OptionG01")="G01"

Cordialement

Bonjour "3stone"

Je veux bien simplifier, mais c'est le problème posé qui lui a été
simplifié car la mise à jour porte sur une douzaine de champ. mais en
fait, il s'agit d'une série d'options que je choisi à l'aide d'un menu
contextuel.
Pour l'esthétique je verais plus tard.
Mon problème reste donc entier :
Comment s'assurer que le formulaire n'est pas en mode édition ?

A partir du formulaire j'ai souvent contourné le problème par :

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Mais, çà, c'est quand je suis dans le formulaire.
J'ai l'impression parfois que c'est trop compliqué !
Merci de regarder cela de plus près.

"3stone" a écrit dans le message de news:
evKlki%
Salut,

"William Kameron"
| Dans un sous-form, à l'aide d'un menu contextuel, pour modifier un
| enregistrement, j'appelle une fonction d'un module général, qui utilise
| l'instruction : "DoCmd.RunSQL"
|
| Public Function Formule(G01 as Single) as Boolean
| Dim RéfOpération as long, StrSQL as String
|
| If (SysCmd(acSysCmdGetObjectState, acForm, "FPrincipal") _
| And acObjStateOpen) <> 0 Then
| Set frm = Forms("FPrincipal")
| RéfOpération = " &
frm.[FSecondaire].Form![FOpérations]!RéfOpération
|
| DoCmd.SetWarnings False
| StrSQL = "UPDATE [Opérations] set [OptionG01] = " & G01 & "_
| WHERE RéfOpération = " & RéfOpération
| DoCmd.RunSQL StrSQL, False
| DoCmd.SetWarnings true
|
| End If
|
| End function
|
| Ici, G01 est fournie en entrée dans la fonction sous la forme d'une
| constante par une macro apellée par le menu contextuel et RéfOpération
pointe
| sur l'enregistrement courant du sous-form "FOpérations"
|
| Lorsque j'exécute la commande deux, trois et plusieurs fois de suite,
je
| recois toujours le message :
|
| CONFLIT D'ECRITURE
| Cet enregistrement a été modifié par un autre utilisateur depuis
| que vous avez commencé à le modifier....
|
|
| POURTANT JE SUIS LE SEUL UTILISATEUR DE LA BASE POUR L'INSTANT ! !

Pourquoi tu cries ? ;-)

En fait, cela vient de ton code...
Si un enregistrement est en édition et que par ailleurs tu tape dans la
table
sur éventuellement le même enregistrement via ton DoCmd.RunSQL
tu as bien un "autre" utilisateur qui tente d'accéder à l'enregistrement
vérrouillé - car en modif par toi...


| Il arrive même que le message apparaisse dans d'autres formulaires.
| 1° Le problème est-il lié à l'instruction "DoCmd.RunSQL" ?
| 2° Comment inhiber ce message en assurant les modifications que je
voudrais
| porter à ma base ?
|
| Je veux bien utiliser une autre méthode mais, je ne vois pas laquelle
| d'autant plus que la fonction se trouve dans un module général.

Puisque tu est dans un sous-formulaire, pourquoi ce détour par
une fonction (pas très élégante ;-) pour juste ajouter une valeur ?

Ou alors, assure toi que ton sous-formulaire ne soit pas en édition.

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







Avatar
jerome crevecoeur
Il faudrait savoir ce que tu souhaites faire comme traitement par la suit e.
Si l'utilisateur n'appuie pas sur echap , les modifications seront
modifiées.
Sinon il faudrait peut être faire un docmd.select objet de ton
formulaire principale puis la ligne de code pour enregistrer.


cordialement

Voilà qui est fait. Merci Jérome. Je n'y avait pas pensé.
Mais pour enregistrer je fait comment ?
??? "DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70"
La suite du traitement dépend plutot du contenu de l'enregistrement p as de
l'enrgistrement mais pas du formulaire.


"jerome crevecoeur" o.fr>
a écrit dans le message de news: % gbl...
Je pense que tu essayes de mettre à jour des champs qui sont dans ton
formulaire principal.
L'enregistrement est donc déjà ouvert.
Le mieux serait de mettre à jour les zones de textes elle-meme du
formulaire principal du style:

Forms("FPrincipal")("OptionG01")="G01"

Cordialement

Bonjour "3stone"

Je veux bien simplifier, mais c'est le problème posé qui lui a é té
simplifié car la mise à jour porte sur une douzaine de champ. mais en
fait, il s'agit d'une série d'options que je choisi à l'aide d'un menu
contextuel.
Pour l'esthétique je verais plus tard.
Mon problème reste donc entier :
Comment s'assurer que le formulaire n'est pas en mode édition ?

A partir du formulaire j'ai souvent contourné le problème par :

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuV er70

Mais, çà, c'est quand je suis dans le formulaire.
J'ai l'impression parfois que c'est trop compliqué !
Merci de regarder cela de plus près.

"3stone" a écrit dans le message de news:
evKlki%
Salut,

"William Kameron"
| Dans un sous-form, à l'aide d'un menu contextuel, pour modifier u n
| enregistrement, j'appelle une fonction d'un module général, qui utilise
| l'instruction : "DoCmd.RunSQL"
|
| Public Function Formule(G01 as Single) as Boolean
| Dim RéfOpération as long, StrSQL as String
|
| If (SysCmd(acSysCmdGetObjectState, acForm, "FPrincipal") _
| And acObjStateOpen) <> 0 Then
| Set frm = Forms("FPrincipal")
| RéfOpération = " &
frm.[FSecondaire].Form![FOpérations]!RéfOpération
|
| DoCmd.SetWarnings False
| StrSQL = "UPDATE [Opérations] set [OptionG01] = " & G0 1 & "_
| WHERE RéfOpération = " & RéfOpération
| DoCmd.RunSQL StrSQL, False
| DoCmd.SetWarnings true
|
| End If
|
| End function
|
| Ici, G01 est fournie en entrée dans la fonction sous la forme d'u ne
| constante par une macro apellée par le menu contextuel et RéfOp ération
pointe
| sur l'enregistrement courant du sous-form "FOpérations"
|
| Lorsque j'exécute la commande deux, trois et plusieurs fois de su ite,
je
| recois toujours le message :
|
| CONFLIT D'ECRITURE
| Cet enregistrement a été modifié par un autre utilisateur depuis
| que vous avez commencé à le modifier....
|
|
| POURTANT JE SUIS LE SEUL UTILISATEUR DE LA BASE POUR L'INSTANT ! !

Pourquoi tu cries ? ;-)

En fait, cela vient de ton code...
Si un enregistrement est en édition et que par ailleurs tu tape dan s la
table
sur éventuellement le même enregistrement via ton DoCmd.RunSQL
tu as bien un "autre" utilisateur qui tente d'accéder à l'enregis trement
vérrouillé - car en modif par toi...


| Il arrive même que le message apparaisse dans d'autres formulaire s.
| 1° Le problème est-il lié à l'instruction "DoCmd.RunSQL" ?
| 2° Comment inhiber ce message en assurant les modifications que j e
voudrais
| porter à ma base ?
|
| Je veux bien utiliser une autre méthode mais, je ne vois pas laqu elle
| d'autant plus que la fonction se trouve dans un module général.

Puisque tu est dans un sous-formulaire, pourquoi ce détour par
une fonction (pas très élégante ;-) pour juste ajouter une vale ur ?

Ou alors, assure toi que ton sous-formulaire ne soit pas en édition .

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










Avatar
William Kameron
Vous avez dit :

docmd.select objet ..... pour enregistrer ???

Oui. C'est peut-être là qu'il faut regarder. En fonction de ce que je
souhaite, il est impératif de sauvegarder d'abord. Mais comme le traitement
se trouve dans un module général, j'ai des difficultés à imaginer comment
réaliser une sauvegarde d'un enregistrement modifié par cette syntaxe que tu
m'as communiquée.

En dehors de cela, toutes les modifications sont reportées sans problème.
Autant de fois que l'on veut, cela fonctionne.
Mais j'ai dû ihiber la mise à jour qui suit pour tester. En effet il des
valeurs complexes qui sont calculée par la suite en fontions de tous les
champs Gxx de mon form.


"jerome crevecoeur"
a écrit dans le message de news:
Il faudrait savoir ce que tu souhaites faire comme traitement par la suite.
Si l'utilisateur n'appuie pas sur echap , les modifications seront
modifiées.
Sinon il faudrait peut être faire un docmd.select objet de ton
formulaire principale puis la ligne de code pour enregistrer.


cordialement

Voilà qui est fait. Merci Jérome. Je n'y avait pas pensé.
Mais pour enregistrer je fait comment ?
??? "DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70"
La suite du traitement dépend plutot du contenu de l'enregistrement pas de
l'enrgistrement mais pas du formulaire.


"jerome crevecoeur"
a écrit dans le
message de news: %
Je pense que tu essayes de mettre à jour des champs qui sont dans ton
formulaire principal.
L'enregistrement est donc déjà ouvert.
Le mieux serait de mettre à jour les zones de textes elle-meme du
formulaire principal du style:

Forms("FPrincipal")("OptionG01")="G01"

Cordialement

Bonjour "3stone"

Je veux bien simplifier, mais c'est le problème posé qui lui a été
simplifié car la mise à jour porte sur une douzaine de champ. mais en
fait, il s'agit d'une série d'options que je choisi à l'aide d'un menu
contextuel.
Pour l'esthétique je verais plus tard.
Mon problème reste donc entier :
Comment s'assurer que le formulaire n'est pas en mode édition ?

A partir du formulaire j'ai souvent contourné le problème par :

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70

Mais, çà, c'est quand je suis dans le formulaire.
J'ai l'impression parfois que c'est trop compliqué !
Merci de regarder cela de plus près.

"3stone" a écrit dans le message de news:
evKlki%
Salut,

"William Kameron"
| Dans un sous-form, à l'aide d'un menu contextuel, pour modifier un
| enregistrement, j'appelle une fonction d'un module général, qui
utilise
| l'instruction : "DoCmd.RunSQL"
|
| Public Function Formule(G01 as Single) as Boolean
| Dim RéfOpération as long, StrSQL as String
|
| If (SysCmd(acSysCmdGetObjectState, acForm, "FPrincipal") _
| And acObjStateOpen) <> 0 Then
| Set frm = Forms("FPrincipal")
| RéfOpération = " &
frm.[FSecondaire].Form![FOpérations]!RéfOpération
|
| DoCmd.SetWarnings False
| StrSQL = "UPDATE [Opérations] set [OptionG01] = " & G01 & "_
| WHERE RéfOpération = " & RéfOpération
| DoCmd.RunSQL StrSQL, False
| DoCmd.SetWarnings true
|
| End If
|
| End function
|
| Ici, G01 est fournie en entrée dans la fonction sous la forme d'une
| constante par une macro apellée par le menu contextuel et RéfOpération
pointe
| sur l'enregistrement courant du sous-form "FOpérations"
|
| Lorsque j'exécute la commande deux, trois et plusieurs fois de suite,
je
| recois toujours le message :
|
| CONFLIT D'ECRITURE
| Cet enregistrement a été modifié par un autre utilisateur depuis
| que vous avez commencé à le modifier....
|
|
| POURTANT JE SUIS LE SEUL UTILISATEUR DE LA BASE POUR L'INSTANT ! !

Pourquoi tu cries ? ;-)

En fait, cela vient de ton code...
Si un enregistrement est en édition et que par ailleurs tu tape dans la
table
sur éventuellement le même enregistrement via ton DoCmd.RunSQL
tu as bien un "autre" utilisateur qui tente d'accéder à l'enregistrement
vérrouillé - car en modif par toi...


| Il arrive même que le message apparaisse dans d'autres formulaires.
| 1° Le problème est-il lié à l'instruction "DoCmd.RunSQL" ?
| 2° Comment inhiber ce message en assurant les modifications que je
voudrais
| porter à ma base ?
|
| Je veux bien utiliser une autre méthode mais, je ne vois pas laquelle
| d'autant plus que la fonction se trouve dans un module général.

Puisque tu est dans un sous-formulaire, pourquoi ce détour par
une fonction (pas très élégante ;-) pour juste ajouter une valeur ?

Ou alors, assure toi que ton sous-formulaire ne soit pas en édition.

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










Avatar
3stone
Salut,

"William Kameron"
| Vous avez dit :
|
| docmd.select objet ..... pour enregistrer ???
|


Pour enregistrer le formulaire en cours, un simple

Me.Dirty = False

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
William Kameron
Bonjour à tous. J'apprécie vos efforts. C'est toujours rassurant de savoir
que les gens prennents nos problèmes très à coeur. Mais.c'est bizarre cette
fois mais j'ai l'impression d'être incompris.

Le tuyau que ma filé Jerome est très bon.
Seulement juste après il me faut enregistrer les modifications portées par
les différentes instructions de mise à jour d'une table nommée "Opération".

Public Function ChoisirFormule(G01,G02,G03,... G12 as Single) as Boolean
'****** ChoisirFormule est une fonction dans un module global qui renvoie la
valeur Vrai quand les combinaisons G01,G02,G03,... G12 sont possible
Dim RéfOpération as long, StrSQL as String, Résultat as Boolean

Etape1:
'****** Mise à jours des variables
frm.[FSecondaire].Form![FOpérations]!OptionG01 = G01
frm.[FSecondaire].Form![FOpérations]!OptionG03 = G02
frm.[FSecondaire].Form![FOpérations]!OptionG03 = G03
...
...
...
frm.[FSecondaire].Form![FOpérations]!OptionG12 = G12

Etape2:
'****** Ici, il me faut enregistrer tout ce qui précède car le calcul
qui suit,
'****** prélèvera les informations directement de la table Opérations

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Etape3:
'****** Appel d'une fonction qui calcule de une valeur en fonction des
options
'****** le résultat est stocké dans la table Opérations
Résultat = CalculeValeurs (
frm.[FSecondaire].Form![FOpérations]!RéfOpération)

Etape4:
'***** Afichage du résultat
frm.[FSecondaire].Form![FOpérations].Form.Requery

Etape5:
ChoisirFormule = Résultat
End Function

Pourquoi je passe par une fonction ?
1° C'est parceque les options sont choisies à l'aide d'un menu contextuel
qui présente les différentes combinaisons possibles.
2° La fonction qui calcule le résutat est valable même pour d'autres cas.
3° Cette fonction CalculeValeurs est appelée dans tous les modules de calcul
de l'application

Sans la nécessité de calculer les valeurs le problème serait clos depuis
logntemps car résolu.
En effet dès si j'inhibe Etape4, je n'ai pas Résultat et je ne puis savoir
si les combinaison son possible entre les différentes options G01, G02, G03,
... G12.

Quel est mon problème ?
A l'étape 2, comment enregistrer les modifications opérées lors du choix des
options ?
C'est-à dire remplacer les points d'interrogations par l'instruction idoine.
Voilà !C'est bête je me dis !
Je pense m'être exprimé



"3stone" a écrit dans le message de news:

Salut,

"William Kameron"
| Vous avez dit :
|
| docmd.select objet ..... pour enregistrer ???
|


Pour enregistrer le formulaire en cours, un simple

Me.Dirty = False

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



Avatar
jerome crevecoeur
Etape 4:

Sur l'événement aprés MAJ du champ

(en adaptant aux champs et formulaires)
Forms("Entete")("G01") = "G01"
DoCmd.SelectObject acForm, "Entete"
DoCmd.RunCommand acCmdSaveRecord




ça devrait se rapprocher de la vérité non?



Bonjour à tous. J'apprécie vos efforts. C'est toujours rassurant de savoir
que les gens prennents nos problèmes très à coeur. Mais.c'est biz arre cette
fois mais j'ai l'impression d'être incompris.

Le tuyau que ma filé Jerome est très bon.
Seulement juste après il me faut enregistrer les modifications porté es par
les différentes instructions de mise à jour d'une table nommée "O pération".

Public Function ChoisirFormule(G01,G02,G03,... G12 as Single) as Boolea n
'****** ChoisirFormule est une fonction dans un module global qui renvo ie la
valeur Vrai quand les combinaisons G01,G02,G03,... G12 sont possible
Dim RéfOpération as long, StrSQL as String, Résultat as Boolean

Etape1:
'****** Mise à jours des variables
frm.[FSecondaire].Form![FOpérations]!OptionG01 = G01
frm.[FSecondaire].Form![FOpérations]!OptionG03 = G02
frm.[FSecondaire].Form![FOpérations]!OptionG03 = G03
...
...
...
frm.[FSecondaire].Form![FOpérations]!OptionG12 = G12

Etape2:
'****** Ici, il me faut enregistrer tout ce qui précède car le calcul
qui suit,
'****** prélèvera les informations directement de la table Opé rations

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Etape3:
'****** Appel d'une fonction qui calcule de une valeur en fonction des
options
'****** le résultat est stocké dans la table Opérations
Résultat = CalculeValeurs (
frm.[FSecondaire].Form![FOpérations]!RéfOpération)

Etape4:
'***** Afichage du résultat
frm.[FSecondaire].Form![FOpérations].Form.Requery

Etape5:
ChoisirFormule = Résultat
End Function

Pourquoi je passe par une fonction ?
1° C'est parceque les options sont choisies à l'aide d'un menu cont extuel
qui présente les différentes combinaisons possibles.
2° La fonction qui calcule le résutat est valable même pour d'aut res cas.
3° Cette fonction CalculeValeurs est appelée dans tous les modules de calcul
de l'application

Sans la nécessité de calculer les valeurs le problème serait clos depuis
logntemps car résolu.
En effet dès si j'inhibe Etape4, je n'ai pas Résultat et je ne puis savoir
si les combinaison son possible entre les différentes options G01, G0 2, G03,
... G12.

Quel est mon problème ?
A l'étape 2, comment enregistrer les modifications opérées lors d u choix des
options ?
C'est-à dire remplacer les points d'interrogations par l'instruction idoine.
Voilà !C'est bête je me dis !
Je pense m'être exprimé



"3stone" a écrit dans le message de news:

Salut,

"William Kameron"
| Vous avez dit :
|
| docmd.select objet ..... pour enregistrer ???
|


Pour enregistrer le formulaire en cours, un simple

Me.Dirty = False

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







Avatar
William Kameron
Bonjour Jérome

Problème de syntaxe

"Entete" veut bien dire "[FSecondaire].Form![FOpérations]" ?



"jerome crevecoeur"
a écrit dans le message de news:
Etape 4:

Sur l'événement aprés MAJ du champ

(en adaptant aux champs et formulaires)
Forms("Entete")("G01") = "G01"
DoCmd.SelectObject acForm, "Entete"
DoCmd.RunCommand acCmdSaveRecord




ça devrait se rapprocher de la vérité non?



Bonjour à tous. J'apprécie vos efforts. C'est toujours rassurant de savoir
que les gens prennents nos problèmes très à coeur. Mais.c'est bizarre
cette fois mais j'ai l'impression d'être incompris.

Le tuyau que ma filé Jerome est très bon.
Seulement juste après il me faut enregistrer les modifications portées par
les différentes instructions de mise à jour d'une table nommée
"Opération".

Public Function ChoisirFormule(G01,G02,G03,... G12 as Single) as Boolean
'****** ChoisirFormule est une fonction dans un module global qui renvoie
la valeur Vrai quand les combinaisons G01,G02,G03,... G12 sont possible
Dim RéfOpération as long, StrSQL as String, Résultat as Boolean

Etape1:
'****** Mise à jours des variables
frm.[FSecondaire].Form![FOpérations]!OptionG01 = G01
frm.[FSecondaire].Form![FOpérations]!OptionG03 = G02
frm.[FSecondaire].Form![FOpérations]!OptionG03 = G03
...
...
...
frm.[FSecondaire].Form![FOpérations]!OptionG12 = G12

Etape2:
'****** Ici, il me faut enregistrer tout ce qui précède car le calcul
qui suit,
'****** prélèvera les informations directement de la table Opérations

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Etape3:
'****** Appel d'une fonction qui calcule de une valeur en fonction des
options
'****** le résultat est stocké dans la table Opérations
Résultat = CalculeValeurs (
frm.[FSecondaire].Form![FOpérations]!RéfOpération)

Etape4:
'***** Afichage du résultat
frm.[FSecondaire].Form![FOpérations].Form.Requery

Etape5:
ChoisirFormule = Résultat
End Function

Pourquoi je passe par une fonction ?
1° C'est parceque les options sont choisies à l'aide d'un menu contextuel
qui présente les différentes combinaisons possibles.
2° La fonction qui calcule le résutat est valable même pour d'autres cas.
3° Cette fonction CalculeValeurs est appelée dans tous les modules de
calcul de l'application

Sans la nécessité de calculer les valeurs le problème serait clos depuis
logntemps car résolu.
En effet dès si j'inhibe Etape4, je n'ai pas Résultat et je ne puis savoir
si les combinaison son possible entre les différentes options G01, G02,
G03, ... G12.

Quel est mon problème ?
A l'étape 2, comment enregistrer les modifications opérées lors du choix
des options ?
C'est-à dire remplacer les points d'interrogations par l'instruction
idoine.
Voilà !C'est bête je me dis !
Je pense m'être exprimé



"3stone" a écrit dans le message de news:

Salut,

"William Kameron"
| Vous avez dit :
|
| docmd.select objet ..... pour enregistrer ???
|


Pour enregistrer le formulaire en cours, un simple

Me.Dirty = False

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







1 2