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

Formulaire en continu avec sous-formulaire

4 réponses
Avatar
blaise cacramp
Bonjour à tous et à toutes,

J'ai deux tables avec une relation de 1 à +. Le côté 1 *doit* être en
continu. Access refuse un sous-form dans un form continu. Pour contourner le
problème, je place le sous-form à côté du form principal. En fait j'ai
utilisé l'assistant pour créer un form attaché. La seule différence est
qu'il est tout le temps affiché.

Ma difficulté réside dans le fait qu'il est obligatoire d'avoir au moins un
enregistrement du côté plus et que les opérateurs qui vont encoder ne
doivent pas utiliser la souris pour basculer d'un form à l'autre.

Du côté 1 (le form principal), j'utilise ce code pour basculer vers le
sous-form s'il n'y a pas d'enregistrement dans le côté plus.

<code>
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Nz(DSum("St_B_Qtite", "Tbl_D_Stock_Besoins", "Cmp_Id=" & Me.Cmp_Id), 0) =
0 Then
Cancel = True
Forms![sFrm_D_Stock_Besoins].SetFocus
End If
End Sub
</code>

Si je ne met pas le Cancel=True, Access passe à l'enregistrement suivant
avant de se postionner sur le sous-form. Mais comme j'ai annulé l'update, le
côté plus ne trouve pas l'enregistrement (alors que l'Id qui sert à la
liaison est connu).

Avez-vous une solution ou dois-je supprimer la relation (et la faire au cas
par cas dans les requêtes) ?

Un grand merci d'avance,

Blaise

4 réponses

Avatar
3stone
Salut,

blaise cacramp wrote:
Bonjour à tous et à toutes,

J'ai deux tables avec une relation de 1 à +.
Le côté 1 *doit* être en continu. Access refuse un sous-form
dans un form continu.



Ben oui... puisque *doit*, je ne sais pas faire ;-)


Pour
contourner le problème, je place le sous-form à côté du form
principal. En fait j'ai utilisé l'assistant pour créer un form
attaché. La seule différence est qu'il est tout le temps affiché.




Non, un sous-formulaire est DANS un formulaire !
Il porte bien son nom, en temps qu'objet, il doit être posé
sur (dans) le formulaire principal pour pouvoir enclancher les
mécanismes que cette configuration offre sans que l'utilisateur
ne s'en occupe. La gestion des clés externes, etc.



Ma difficulté réside dans le fait qu'il est obligatoire d'avoir au
moins un enregistrement du côté plus et que les opérateurs qui vont
encoder ne doivent pas utiliser la souris pour basculer d'un form à
l'autre.



Pourquoi ?
Sans enreistrement, tu est en mode "création" d'enregistrement...


Du côté 1 (le form principal), j'utilise ce code pour basculer vers le
sous-form s'il n'y a pas d'enregistrement dans le côté plus.

<code>
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Nz(DSum("St_B_Qtite", "Tbl_D_Stock_Besoins", "Cmp_Id=" &
Me.Cmp_Id), 0) = 0 Then
Cancel = True
Forms![sFrm_D_Stock_Besoins].SetFocus
End If
End Sub
</code>

Si je ne met pas le Cancel=True, Access passe à l'enregistrement
suivant avant de se postionner sur le sous-form. Mais comme j'ai
annulé l'update, le côté plus ne trouve pas l'enregistrement (alors
que l'Id qui sert à la liaison est connu).



C'est quoi ce truc ??
Tu crées une mise à jour que tu annules ? et tout cela pour "passer"
du coté plusieurs ?


Avez-vous une solution ou dois-je supprimer la relation (et la faire
au cas par cas dans les requêtes) ?



Supprimer les relations (dans les tables) pour les recréer dans les
requêtes, c'est comme marcher sur le tuyau et se demander pourquoi
ca ne coule plus :-/

Pour revenir à ton problème, on peut, si nécessaire, travailler
avec un formulaire lié (ce que tu appelles ton sous-formulaire).

Dans ton formulaire principal (en mode continu), tu utilises
l'événement "Sur activation" (Form_Current) pour récupérer la
valeur de ta clé primaire. A partir de là, tu peux à n'importe quel
moment donner le focus à ton formulaire lié (ton sous-formulaire)
et t'y déplacer sur l'enregistrement qui possède comme clé externe
la valeur de ta clé primaire (RecordsetClone.Bookmark).
Si tu ne trouve pas la valeur recherché, c'est qu'il n'y a pas encore
d'enregistrement "fils" et... tu pars en mode création.

Tout cela, c'est Access qui le fait lorsque tu travailles avec un
formulaire et sous-formulaire, alors qu'ici, c'est toi qui doit
maîtriser Access....

Comme quoi, bien connaître les possibilités d'Access permet
même de faire des choses non conventionnelles ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Blaise
"3stone" a écrit dans le message de news:
4cf10f21$
Salut,

blaise cacramp wrote:
Bonjour à tous et à toutes,

J'ai deux tables avec une relation de 1 à +.
Le côté 1 *doit* être en continu. Access refuse un sous-form
dans un form continu.



Ben oui... puisque *doit*, je ne sais pas faire ;-)




Euh ? comprend pas cette phrase, à moins que ce soit une insulte.


Pour
contourner le problème, je place le sous-form à côté du form
principal. En fait j'ai utilisé l'assistant pour créer un form
attaché. La seule différence est qu'il est tout le temps affiché.




Non, un sous-formulaire est DANS un formulaire !
Il porte bien son nom, en temps qu'objet, il doit être posé
sur (dans) le formulaire principal pour pouvoir enclancher les
mécanismes que cette configuration offre sans que l'utilisateur
ne s'en occupe. La gestion des clés externes, etc.




ok, on a compris le principe. Pour jouer sur les mots : "enclencher", pas
"enclancher"



Ma difficulté réside dans le fait qu'il est obligatoire d'avoir au
moins un enregistrement du côté plus et que les opérateurs qui vont
encoder ne doivent pas utiliser la souris pour basculer d'un form à
l'autre.



Pourquoi ?



Pour l'ergonomie

Sans enreistrement, tu est en mode "création" d'enregistrement...




C'est justement le problème. T'es énervé ou quoi ? : "enreistrement" "tu
est "


Du côté 1 (le form principal), j'utilise ce code pour basculer vers le
sous-form s'il n'y a pas d'enregistrement dans le côté plus.

<code>
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Nz(DSum("St_B_Qtite", "Tbl_D_Stock_Besoins", "Cmp_Id=" &
Me.Cmp_Id), 0) = 0 Then
Cancel = True
Forms![sFrm_D_Stock_Besoins].SetFocus
End If
End Sub
</code>

Si je ne met pas le Cancel=True, Access passe à l'enregistrement
suivant avant de se postionner sur le sous-form. Mais comme j'ai
annulé l'update, le côté plus ne trouve pas l'enregistrement (alors
que l'Id qui sert à la liaison est connu).



C'est quoi ce truc ??
Tu crées une mise à jour que tu annules ? et tout cela pour "passer"
du coté plusieurs ?




Il faut au moins essayer et bien lire avant de critiquer : que se passe t'il
sans annulation ...?... et bien je suis dans le futur nouvel éventuel
record.


Avez-vous une solution ou dois-je supprimer la relation (et la faire
au cas par cas dans les requêtes) ?



Supprimer les relations (dans les tables) pour les recréer dans les
requêtes, c'est comme marcher sur le tuyau et se demander pourquoi
ca ne coule plus :-/

Pour revenir à ton problème, on peut, si nécessaire, travailler
avec un formulaire lié (ce que tu appelles ton sous-formulaire).

Dans ton formulaire principal (en mode continu), tu utilises
l'événement "Sur activation" (Form_Current) pour récupérer la
valeur de ta clé primaire. A partir de là, tu peux à n'importe quel
moment donner le focus à ton formulaire lié (ton sous-formulaire)
et t'y déplacer sur l'enregistrement qui possède comme clé externe
la valeur de ta clé primaire (RecordsetClone.Bookmark).
Si tu ne trouve pas la valeur recherché, c'est qu'il n'y a pas encore
d'enregistrement "fils" et... tu pars en mode création.



??? l'événement "Sur activation" (Form_Current) ... bien connaître les
possibilités d'Access
Bin il y a problème là. (_activate _current)

et puis Current c'est pas un nouveau record
En mode création d'enregistrement, le formulaire attaché ne trouve pas l'ID
du "parent"



Tout cela, c'est Access qui le fait lorsque tu travailles avec un
formulaire et sous-formulaire, alors qu'ici, c'est toi qui doit
maîtriser Access....

Comme quoi, bien connaître les possibilités d'Access permet
même de faire des choses non conventionnelles ;-)




Et bien montre moi un exemple de ce que je désire !

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

Blaise wrote:
Le côté 1 *doit* être en continu. Access refuse un sous-form
dans un form continu.



Ben oui... puisque *doit*, je ne sais pas faire ;-)




Euh ? comprend pas cette phrase, à moins que ce soit une insulte.




Ben, t'es vite insulté toi... :-/

Placer un sous-formulaire continu DANS un formulaire continu, JE ne sais PAS
faire et Access 2010 ne sait pas non plus !!


Donc, si un formulaire n'est pas DANS (ou si tu préfères SUR) un
autre formulaire, ce n'est PAS un sous-formulaire, et donc,
tu ne disposes pas de tous ces avantages liés à cette disposition.


Pour
contourner le problème, je place le sous-form à côté du form
principal. En fait j'ai utilisé l'assistant pour créer un form
attaché. La seule différence est qu'il est tout le temps affiché.




Non, un sous-formulaire est DANS un formulaire !
Il porte bien son nom, en temps qu'objet, il doit être posé
sur (dans) le formulaire principal pour pouvoir enclancher les
mécanismes que cette configuration offre sans que l'utilisateur
ne s'en occupe. La gestion des clés externes, etc.




ok, on a compris le principe. Pour jouer sur les mots :
"enclencher", pas "enclancher"




Si tu cherches des cours de français, regarde sur un autre groupe !




Ma difficulté réside dans le fait qu'il est obligatoire d'avoir au
moins un enregistrement du côté plus et que les opérateurs qui vont
encoder ne doivent pas utiliser la souris pour basculer d'un form à
l'autre.



Pourquoi ?



Pour l'ergonomie




Elle *très* spéciale, ton ergonomie...


Sans enreistrement, tu est en mode "création" d'enregistrement...




C'est justement le problème. T'es énervé ou quoi ? : "enreistrement"
"tu est "



Même remarque que plus heut, mais...

Lorsque quelqu'un prétend connaître Access, se limite à des "me to",
des "+1" et sans jamais donner une réponse qque peu recherchée,
qui de plus a lui-même des exigences à coté de la plaque, je ne suis
peut-être pas énnervé... mais je ne me donne pas la peine de me relire!




Du côté 1 (le form principal), j'utilise ce code pour basculer vers
le sous-form s'il n'y a pas d'enregistrement dans le côté plus.

<code>
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Nz(DSum("St_B_Qtite", "Tbl_D_Stock_Besoins", "Cmp_Id=" &
Me.Cmp_Id), 0) = 0 Then
Cancel = True
Forms![sFrm_D_Stock_Besoins].SetFocus
End If
End Sub
</code>

Si je ne met pas le Cancel=True, Access passe à l'enregistrement
suivant avant de se postionner sur le sous-form. Mais comme j'ai
annulé l'update, le côté plus ne trouve pas l'enregistrement (alors
que l'Id qui sert à la liaison est connu).



C'est quoi ce truc ??
Tu crées une mise à jour que tu annules ? et tout cela pour "passer"
du coté plusieurs ?




Il faut au moins essayer et bien lire avant de critiquer : que se
passe t'il sans annulation ...?... et bien je suis dans le futur
nouvel éventuel record.




Je sais lire... et le BeforeUpdate n'a lieu que lorsque l'on tente
une mise à jour. Le fait de l'annuler, annule la modification qui
vient d'être faite! Tu parles d'ergonomie ?? Pauvre utilisateur...



Avez-vous une solution ou dois-je supprimer la relation (et la faire
au cas par cas dans les requêtes) ?



Supprimer les relations (dans les tables) pour les recréer dans les
requêtes, c'est comme marcher sur le tuyau et se demander pourquoi
ca ne coule plus :-/

Pour revenir à ton problème, on peut, si nécessaire, travailler
avec un formulaire lié (ce que tu appelles ton sous-formulaire).

Dans ton formulaire principal (en mode continu), tu utilises
l'événement "Sur activation" (Form_Current) pour récupérer la
valeur de ta clé primaire. A partir de là, tu peux à n'importe quel
moment donner le focus à ton formulaire lié (ton sous-formulaire)
et t'y déplacer sur l'enregistrement qui possède comme clé externe
la valeur de ta clé primaire (RecordsetClone.Bookmark).
Si tu ne trouve pas la valeur recherché, c'est qu'il n'y a pas encore
d'enregistrement "fils" et... tu pars en mode création.






et j'avais même oublié de dire (mais est-ce utile, puisque tu connais...)
que le mécanisme du sous-formulaire qui n'affiche que les enregistrements
fils de l'enregistrement parent sélectionné, n'est pas disponible non plus.
Il faudra dans ce cas également gérer un filtre pour n'afficher que
les "fils" qui vont bien...



??? l'événement "Sur activation" (Form_Current) ... bien connaître
les possibilités d'Access
Bin il y a problème là. (_activate _current)




Tu es sûr de connaître plus que la création d'une simple table ???
Chez moi, mes formulaires disposent de cet événement et ce,
depuis Access 97 à 2010 !


et puis Current c'est pas un nouveau record
En mode création d'enregistrement, le formulaire attaché ne trouve
pas l'ID du "parent"



Tout cela, c'est Access qui le fait lorsque tu travailles avec un
formulaire et sous-formulaire, alors qu'ici, c'est toi qui doit
maîtriser Access....

Comme quoi, bien connaître les possibilités d'Access permet
même de faire des choses non conventionnelles ;-)




Et bien montre moi un exemple de ce que je désire !



Vu tes connaissances (très) limitées d'Access, commence par l'utiliser
de manière traditionnelle, avec les méthodes qu'il met à disposition.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
remdumdum
On 29 nov, 16:55, "3stone" wrote:
Salut,

Blaise wrote:
>>> Le côté 1 *doit* être en continu. Access refuse un sous-form
>>> dans un form continu.

>> Ben oui... puisque *doit*, je ne sais pas faire ;-)

> Euh ? comprend pas cette phrase, à moins que ce soit une insulte.

Ben, t'es vite insulté toi...   :-/

Placer un sous-formulaire continu DANS un formulaire continu, JE ne sais PAS
faire et Access 2010 ne sait pas non plus !!

Donc, si un formulaire n'est pas DANS (ou si tu préfères SUR) un
autre formulaire, ce n'est PAS un sous-formulaire, et donc,
tu ne disposes pas de tous ces avantages liés à cette disposition.

>>> Pour
>>> contourner le problème, je place le sous-form à côté du form
>>> principal. En fait j'ai utilisé l'assistant pour créer un form
>>> attaché. La seule différence est qu'il est tout le temps affich é.

>> Non, un sous-formulaire est DANS un formulaire !
>> Il porte bien son nom, en temps qu'objet, il doit être posé
>> sur (dans) le formulaire principal pour pouvoir enclancher les
>> mécanismes que cette configuration offre sans que l'utilisateur
>> ne s'en occupe. La gestion des clés externes, etc.

> ok, on a compris le principe.  Pour jouer sur les mots :
> "enclencher", pas "enclancher"

Si tu cherches des cours de français, regarde sur un autre groupe !



>>> Ma difficulté réside dans le fait qu'il est obligatoire d'avoir a u
>>> moins un enregistrement du côté plus et que les opérateurs qui vont
>>> encoder ne doivent pas utiliser la souris pour basculer d'un form à
>>> l'autre.

>> Pourquoi ?

> Pour l'ergonomie

Elle *très* spéciale, ton ergonomie...

>> Sans enreistrement, tu est en mode "création" d'enregistrement...

> C'est justement le problème.  T'es énervé ou quoi ? : "enreistr ement"
> "tu est "

Même remarque que plus heut, mais...

Lorsque quelqu'un prétend connaître Access, se limite à des "me to" ,
des "+1" et sans jamais donner une réponse qque peu recherchée,
qui de plus a lui-même des exigences à coté de la plaque, je ne sui s
peut-être pas énnervé... mais je ne me donne pas la peine de me rel ire!











>>> Du côté 1 (le form principal), j'utilise ce code pour basculer ve rs
>>> le sous-form s'il n'y a pas d'enregistrement dans le côté plus.

>>> <code>
>>> Private Sub Form_BeforeUpdate(Cancel As Integer)
>>> If Nz(DSum("St_B_Qtite", "Tbl_D_Stock_Besoins", "Cmp_Id=" &
>>> Me.Cmp_Id), 0) = 0 Then
>>> Cancel = True
>>> Forms![sFrm_D_Stock_Besoins].SetFocus
>>> End If
>>> End Sub
>>> </code>

>>> Si je ne met pas le Cancel=True, Access passe à l'enregistrement
>>> suivant avant de se postionner sur le sous-form. Mais comme j'ai
>>> annulé l'update, le côté plus ne trouve pas l'enregistrement (a lors
>>> que l'Id qui sert à la liaison est connu).

>> C'est quoi ce truc ??
>> Tu crées une mise à jour que tu annules ?  et tout cela pour "pa sser"
>> du coté plusieurs ?

> Il faut au moins essayer et bien lire avant de critiquer : que se
> passe t'il sans annulation ...?... et bien je suis dans le futur
> nouvel éventuel record.

Je sais lire... et le BeforeUpdate n'a lieu que lorsque l'on tente
une mise à jour. Le fait de l'annuler, annule la modification qui
vient d'être faite! Tu parles d'ergonomie ??  Pauvre utilisateur...











>>> Avez-vous une solution ou dois-je supprimer la relation (et la faire
>>> au cas par cas dans les requêtes) ?

>> Supprimer les relations (dans les tables) pour les recréer dans les
>> requêtes, c'est comme marcher sur le tuyau et se demander pourquoi
>> ca ne coule plus :-/

>> Pour revenir à ton problème, on peut, si nécessaire, travailler
>> avec un formulaire lié (ce que tu appelles ton sous-formulaire).

>> Dans ton formulaire principal (en mode continu), tu utilises
>> l'événement "Sur activation" (Form_Current) pour récupérer la
>> valeur de ta clé primaire. A partir de là, tu peux à n'importe q uel
>> moment donner le focus à ton formulaire lié (ton sous-formulaire)
>> et t'y déplacer sur l'enregistrement qui possède comme clé exter ne
>> la valeur de ta clé primaire (RecordsetClone.Bookmark).
>> Si tu ne trouve pas la valeur recherché, c'est qu'il n'y a pas encor e
>> d'enregistrement "fils" et... tu pars en mode création.

et j'avais même oublié de dire (mais est-ce utile, puisque tu connais ...)
que le mécanisme du sous-formulaire qui n'affiche que les enregistremen ts
fils de l'enregistrement parent sélectionné, n'est pas disponible non plus.
Il faudra dans ce cas également gérer un filtre pour n'afficher que
les "fils" qui vont bien...



> ??? l'événement "Sur activation" (Form_Current)  ... bien conna ître
> les possibilités d'Access
> Bin il y a problème là. (_activate _current)

Tu es sûr de connaître plus que la création d'une simple table ???
Chez moi, mes formulaires disposent de cet événement et ce,
depuis Access 97 à 2010 !











> et puis Current c'est pas un nouveau record
> En mode création d'enregistrement, le formulaire attaché ne trouve
> pas l'ID du "parent"

>> Tout cela, c'est Access qui le fait lorsque tu travailles avec un
>> formulaire et sous-formulaire, alors qu'ici, c'est toi qui doit
>> maîtriser Access....

>> Comme quoi, bien connaître les possibilités d'Access permet
>> même de faire des choses non conventionnelles ;-)

> Et bien montre moi un exemple de ce que je désire !

Vu tes connaissances (très) limitées d'Access, commence par l'utilise r
de manière traditionnelle, avec les méthodes qu'il met à dispositio n.

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



si je peux me permette
je crée des formulaires simple avec sous formulaires, avec assistant
puis je modifie les priorités du formulaire en le mettant en
continu, ...et ça marche !!
mais es bien catholique ??
@+
remdumdum