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 ?
Comment afficher des enregistrements entre sous-formulaires non imbriqués en
utilisant :
- Recordsetclone
- bookmark
Merci.
"William Kameron" a écrit :
"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)
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 :
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 :
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.
"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... ;-))
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...
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.
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 :
| "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 :-(
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 :
"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 ;-)
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 :
"William Kameron"
| BINGO !
| Ca marche !
Si cela te convient et fonctionne comme tu le souhaite, c'est ok ;-)