Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Synchronisation deux formulaires

7 views
Skip to first unread message

William Kameron

unread,
Apr 24, 2007, 8:38:02 AM4/24/07
to
Bonjour à tous.

Je tente de synchroniser dans un formulaire deux sous formulaires renvoyant
les enregistrements d'une même table dont l'un en liste "mode tabulaire" et
l'autre détaillé en "Mode Colonne".

J'ai tenté sans succès dans l'évènement "Current" l'expression suivante:

Dans Form_Classes_F1
Me.Parent![Classes_F2].Form.RecordsetClone.FindFirst "[RéfClasse] = " &
Me![RéfClasse]
Me.Parent![Classes_F2].Bookmark =
Me.Parent![Classes_F2].RecordsetClone.Bookmark


Dans Form_Classes_F2
Me.Parent![Classes_F1].Form.RecordsetClone.FindFirst "[RéfClasse] = " &
Me![RéfClasse]
Me.Parent![Classes_F1].Bookmark =
Me.Parent![Classes_F1].RecordsetClone.Bookmark


Que faut-il faire ?

William Kameron

unread,
Apr 24, 2007, 11:26:03 AM4/24/07
to
Rebonjour !
Je plante dessus depuis plus de 4 heures !
mon problème se résume en fait à :

Comment afficher des enregistrements entre sous-formulaires non imbriqués en
utilisant :

- Recordsetclone
- bookmark

Merci.

"William Kameron" a écrit :

3stone

unread,
Apr 24, 2007, 3:05:04 PM4/24/07
to
Salut,

"William Kameron" |


| Je tente de synchroniser dans un formulaire deux sous formulaires renvoyant
| les enregistrements d'une même table dont l'un en liste "mode tabulaire" et
| l'autre détaillé en "Mode Colonne".

[...]


Le "mode colonne" est un formulaire simple et le "mode tabulaire" est
un formulaire en mode continu, c'est ca ?

Et que veux tu "synchroniser" ?
Les données ? la position de l'enregistrement actuel ? a quel moment ?

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

William Kameron

unread,
Apr 25, 2007, 4:04:03 AM4/25/07
to
> Le "mode colonne" est un formulaire simple et le "mode tabulaire" est
> un formulaire en mode continu, c'est ca ?

OUI.
En colonne "Formulaires continus", j'ai deux ou trois champs et une
vingtaine d'enregistrements visibles
En continu "Formulaire unique", tous les champs(une vingtaine) et un seul
enregistrement visibles.



> Et que veux tu "synchroniser" ?
> Les données ? la position de l'enregistrement actuel ?

Synchroniser la position de l'enregistrement actuel de l'un vers l'autre.


>a quel moment ?

Chaque fois que je change d'enregistrement dans l'un de ces sous formulaires.
Je veux même me payer le LUXE de voir défiler l'un quand je suis dans
l'autre avec des surbrillances en plus qui "éclaire" ma position dans le mode
tabulaire.


PETIT COMMENTAIRE : Salut "3stone". je me doutais bien que seul un crac
résoudrais mon pb. J'ai toujours cette case qui me manque quelque part.


"3stone" a écrit :

William Kameron

unread,
Apr 25, 2007, 6:58:01 AM4/25/07
to
Salut à tous.

Dans un contrôle Onglet je suis parvenu à un résultat apréciable.
En programmant l'évenement "OnChange" de l'onglet je peux raffraîchir la
page juste avant qu'elle ne s'affiche et retrouver mon enregistrment que j'ai
quitté de l'autre côté.
C'est déjà pas mal. C'est embêtant. Je voulais les deux en vis-à-vis. comme
un "SCROLL"

Mais je crois que mon problème, c'est que je perds les pédalles devant les
"!", ".", "Form", etc. Quand et comment les utiliser pour désigner un
contrôle, une fonction, une méthode ou exécuter une routine dans un sous
formulaire à partir d'un autre sous formulaire qui ne sont pas imbriqués.

C'est une histoire de syntaxe en fait.

Merci à vous tous d'avance.

"William Kameron" a écrit :

Raymond [mvp]

unread,
Apr 25, 2007, 7:06:29 AM4/25/07
to
Bonjour.

pour les résistants du . et du !
http://officesystem.access.free.fr/vba/point.htm

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Le 26 Avril 2007 à 14h assistez à la web TV et faites avancer la recherche
dans votre entreprise
http://www.comscamp.com/Tracker/Redirect.ashx?linkid=44b8ed66-f9f8-456a-bdc8-993dda7415fc


"William Kameron" <William...@discussions.microsoft.com> a écrit dans le
message de news: DA458665-CE3A-40ED...@microsoft.com...
| Salut à tous.

3stone

unread,
Apr 25, 2007, 9:11:44 AM4/25/07
to
Salut tous,

"Raymond [mvp]"


| pour les résistants du . et du !
| http://officesystem.access.free.fr/vba/point.htm


Tu l'as pêché ou, le commentaire de ton texte Raymond ?
Dans l'aide d'Access 2007 ???
"Ils" auraient tout chamboulé alors ???
Je serais interressé par un lien vers la KB ou MSDN, moi !

Car depuis toujours et jusqu'à preuve du contraire, il a toujours été dit et écrit :

<extrait microsoft>
Avec Microsoft Access 2.0, lorsque vous utilisez pour accéder à un champ
le caractère "!" ou le caractère "." les performances sont équivalentes.
Avec Microsoft Access 7.0, il est plus rapide d'utiliser l'opérateur "!".
C'est également plus rapide que d'utiliser les parenthèses.
<fin extrait>

En fait, les guillemets est la façon la plus "simple" d'écrire, mais
également la moins "performante".

...et je pense que rien ni personne n'a démenti cela - a ma connaissance ;-)

Je sais que tu as toujours dit *préférer* écrire Me("champ")
mais de là à prétendre que c'est plus rapide et que de toute façon
Access fait la conversion...


Le soleil fait de ces dégâts... ;-))

Raymond [mvp]

unread,
Apr 25, 2007, 9:25:55 AM4/25/07
to
Salut Pierre.

le texte date de 2000 à la mise en place d'access 2000, alors pour la
référence, je ne vais pas remonter toutes les archives qui sûrement
n'existent plus. si un jour je tombe dessus.....
pour le soleil, nous avons plus de 30° C aujourd'hui, Nous, pas comme chez
vous avec 30° F ! ! ! ! ! ! ! !


--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Le 26 Avril 2007 à 14h assistez à la web TV et faites avancer la recherche
dans votre entreprise
http://www.comscamp.com/Tracker/Redirect.ashx?linkid=44b8ed66-f9f8-456a-bdc8-993dda7415fc


"3stone" <home@sweet_home.be> a écrit dans le message de news:
uJlV5szh...@TK2MSFTNGP05.phx.gbl...

3stone

unread,
Apr 25, 2007, 9:29:09 AM4/25/07
to
Salut,
"William Kameron"

| Dans un contrôle Onglet je suis parvenu à un résultat apréciable.
| En programmant l'évenement "OnChange" de l'onglet je peux raffraîchir la
| page juste avant qu'elle ne s'affiche et retrouver mon enregistrment que j'ai
| quitté de l'autre côté.
| C'est déjà pas mal. C'est embêtant. Je voulais les deux en vis-à-vis. comme
| un "SCROLL"
[...]

Je dois m'absenter... ce sera pour tantôt...

Pour ce qui est du "scroll", cela ne fonctionnera pas avec le mouvement
de l'ascensseur vertical - qui ne produit pas d'événement.

William Kameron

unread,
Apr 25, 2007, 11:24:02 AM4/25/07
to
Bonsoir Pierre.

RDV pris. A tantôt.

Bonsoir Raymond. J'ai lu ta belle prose. Crois-moi de beaux exemples
m'auraient vraiment avancé.

Je continue les recherche autour du thème.

"3stone" a écrit :

3stone

unread,
Apr 28, 2007, 8:31:47 AM4/28/07
to
Salut,

| "William Kameron"
|| Dans un contrôle Onglet je suis parvenu à un résultat apréciable.
|| En programmant l'évenement "OnChange" de l'onglet je peux raffraîchir la
|| page juste avant qu'elle ne s'affiche et retrouver mon enregistrment que j'ai
|| quitté de l'autre côté.
|| C'est déjà pas mal. C'est embêtant. Je voulais les deux en vis-à-vis. comme
|| un "SCROLL"
| [...]
|
| Je dois m'absenter... ce sera pour tantôt...


Le "tantôt" s'est éternisé, désolé...


Bon, pour tes deux sous-formulaire, tu peux mettre dans l'événement
"Sur activation" (form_current) ceci :

'---- sous-form Classes_f2

Dim Ctrl As Control
Set Ctrl = Me.Parent!Ctrl_Classes_F2

With Me.Parent!Ctrl_Classes_F2.Form.RecordsetClone
.FindFirst "NomPK=" & NomPK
Ctrl.Form.Bookmark = .Bookmark
End With

Set Ctrl = Nothing

'---- sous-form Classes_f1

Dim Ctrl As Control
Set Ctrl = Me.Parent!Ctrl_Classes_F1

With Ctrl.Form.RecordsetClone
.FindFirst "NomPK=" & NomPK
Ctrl.Form.Bookmark = .Bookmark
End With

Set Ctrl = Nothing

---------------------------------------

NomPK :
représente le nom de la clé primaire, identique pour les 2 sous-form

Ctrl_Classes_F1 :
représente le control sous-formulaire qui contient le formulaire Classes_F1
(qui n'a pas *forcément* le même nom que le form qu'il contient)

idem pour Ctrl_Classes_F2

A l'ouverture du formulaire "principal", tu risque d'obtenir une errreur
(dû à l'ouverture séquencielle des 2 sous-form ;-( )
tu cliqueras sur ok et cela fonctionnera tout de même...
si tel est bien le cas chez toi - dis le pour adaption


et encore désolé pour le retard et... je repart aussitôt :-(

William Kameron

unread,
Apr 30, 2007, 6:46:01 AM4/30/07
to
Bonjour. Merci 3Stone pour le coup de main.

Nous célébrons chez nous demain le "1er Mai - Fête des travailleurs"
Bonne fête à tous.

Actuellement j'ai toujours mon formulaire qui fonctionne dans un sens : Le
changement d'enregistrement dans sous form F1 (Formulaires continus -
tableau) induit celui de sous form F2 (Formulaire unique). Mais pas dans
l'autre. En fait le challenge est que cela soit réciproque.

Dans sous form F2, en écrivant :
Private Sub Form_Current()
On Error GoTo Err_Current
Dim Ctrl As Control

Set Ctrl = Me.Parent!F1
With Me.Parent!F1.Form.RecordsetClone
.FindFirst "[Réf]= " & Me.Réf


Ctrl.Form.Bookmark = .Bookmark
End With

Exit_Current:
Set Ctrl = Nothing
Exit Sub

Err_Current:
Select Case Err.Number
Case 2465, 2455, 91
Debug.Print Err.Number & " " & Err.Description
Resume Next

Case Else
Debug.Print Err.Number & " " & Err.Description
MsgBox Err.Number & vbCr & Err.Description
Resume Exit_Current
End Select

End Sub

nous avons l'erreur :
"2465 Impossible de trouver le champ 'SousFormF1' auquel il est fait
référence dans votre expression."

Dans F1, malgré ces erreurs, nous avons bel et bien le changement
d'enregistrement dans F2. Dans l'autre, le selecteur s'obstine à ne pas se
déplacer.

Merci encore. Et puis c'est pas trop tard. Je prend mon temps car cela fais
plus d'un bon bout de temps que je sèche sur cette expression.


"3stone" a écrit :

3stone

unread,
May 9, 2007, 6:34:27 PM5/9/07
to
Salut,

"William Kameron"


| Actuellement j'ai toujours mon formulaire qui fonctionne dans un sens : Le
| changement d'enregistrement dans sous form F1 (Formulaires continus -
| tableau) induit celui de sous form F2 (Formulaire unique). Mais pas dans
| l'autre. En fait le challenge est que cela soit réciproque.

[...]


Dans le Form_Current du sous-form2 tu mets :

sFrm_Loaded = True ' (expliqué plus loin...)
Dim Ctrl As Control
Set Ctrl = Me.Parent!CtrlF1
With Me.Parent!CtrlF1.Form.RecordsetClone


.FindFirst "[Réf]= " & Me.Réf
Ctrl.Form.Bookmark = .Bookmark
End With

Dans le Form_Open du sous-form2 tu mets :

sFrm_Loaded = false


Dans le Form_Current du sous-form1 tu mets :

Dim Ctrl As Control
if sFrm_Loaded then ' teste en fait l'autre sous-form
Set Ctrl = Me.Parent!CtrlF2
With Me.Parent!CtrlF2.Form.RecordsetClone


.FindFirst "[Réf]= " & Me.Réf
Ctrl.Form.Bookmark = .Bookmark
End With

end if


Dans un module général, tu déclare la variable :

Public sFrm_Loaded as Boolean


L'explication :
Les sous-formulaires se charge les uns après les autres.
Lorsque le premier sous-form est chargé, il produit également
ses événements (via lesquels on exécute les procédures...)
Or, lorsque le premier sous-form exécure son "OnCurrent", l'autre
sous-form n'est pas encore chargé et possède encore moins
un "recordset" (et à foriori un recordsetclone).
C'est de la que vient l'erreur 2455 :-((
Il faut donc s'arranger pour que le premier sous-formulaire chargé
n'exécute le code sur son "OnCurrent" qu'à partir du moment que
l'autre est "pret"
C'est ce qu'on obtient en positionnant la variable sfm_loaded
sur Vrai dans l'autre sous-formulaire.

Note 1
L'ordre de chargement des sous-formulaires dépend de leur ordre
de création. Il se peut donc parfaitement que tu dois déplacer le test
sur la variable sfrm_loaded dans l'autre sous-form...
Si à l'ouverture du formulaire tu obtiens l'erreur 2455, tu sais que
tu dois déplacer le test dans l'autre sous-form.

Note 2
Tu écrit F1 et F2 pour les sous-formulaires...
Il faut t'assurer que tu t'adresse bien au control qui *contient* le sous
formulaire. Les assistants utilise malheureusement les mêmes noms
pour les deux - le conteneur et le contenu...
C'est pourquoi je préfixe par "Ctrl" et l'on distingue le CtrlF1 qui est
le conteneur de F1 qui est le contenu...

Evites aussi les accentués dans les noms d'objets ;-)

William Kameron

unread,
May 14, 2007, 3:49:02 AM5/14/07
to
BINGO !
Ca marche !

Merci "3Stone"
Je vais généraliser la pratique de cet outil dans le traitement des tables
de paramétrage de mes applications.

Cet outil me permet de naviguer concomitament dans une formulaire de type
"Liste"
et dans un formulaire de type détails dans lequel j'affiche tout le contenu
de la table.

Mille merci.


"3stone" a écrit :

3stone

unread,
May 14, 2007, 9:41:53 AM5/14/07
to
Salut,

"William Kameron"


| BINGO !
| Ca marche !

Si cela te convient et fonctionne comme tu le souhaite, c'est ok ;-)

0 new messages