OVH Cloud OVH Cloud

repositionnement après un requery

17 réponses
Avatar
Nathalie Lebas
Bonjour à tous,

J'ai un souci avec un formulaire. Celui-ci présente une liste de lignes
(section détail) avec chacune une quantité à saisir. Pour la saisir, je passe
par un second formulaire (celui parce que la requête de mon premier
formulaire est complexe et qu'elle fait un regroupement). Lorsque la saisie
de la quantité est validée, je fais un requery de mon premier formulaire afin
que les données du second formulaire viennent rafraichir celles du premier.
Le problème est que le requery me positionne à chaque fois à la première de
la section détail du premier formulaire. Il faudrait que le programme reste
positionné sur la ligne que l'utilisateur vient de mettre à jour.
Merci à l'avance

--
Nathalie

7 réponses

1 2
Avatar
Nathalie Lebas
Effectivement, j'ai testé celle de Rv mais chez moi cela ne fonctionnait pas
hier soir.
--
Nathalie



Bonjour,

Ce que je t'avais proposé comme solution mettait bien à jour mon premier
formulaire mais la requête source n'était pas bien complexe.
Apparemment, c'était un problème de réactualisation de ta source mais je
ne vois pas trop pourquoi ca marche avec ton ordonnancement et pas avec
celui que je t'avais proposé puisque la méthode Requery ré-interroge la
source.
Tu pourrais remplacer ta commande DoCmd.DoMenuItem ... par
DoCmd.RunCommand acCmdSaveRecord.
As-tu essayé avec la méthode de RV car les signets c'est pas mal non
plus, voire même plus propre ?


Je viens de tester ceci et cela fonctionne.
Dans mon premier formulaire appelé ExpeditionEjoutClo :
memobook = Me.CurrentRecord
DoCmd.OpenForm "ExpeditionModifQte", acNormal, , "[expefg_expe]=" &
Me.expefg_expe & " and [expefg_num]=" & Me.expefg_num & "", acFormEdit
Dans mon second appelé ExpeditionModifQte :
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Forms!ExpeditionAjoutClo.Requery
Forms!ExpeditionAjoutClo.Recordset.AbsolutePosition = memobook - 1
Qu'en pensez-vous ?
Merci à vous deux de votre aide.
a +


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Rv
Pour forcer un rafraîchissement récalcitrant à Me.Requery j'utilise
Me.recordSource = Me.RecordSource. Je pense que Me.Requery travaile avec une
"sorte de cache" alors que recharger la source du formulaire oblige à
réintérroger les données de la base.

A+
Rv

"Nathalie Lebas" a écrit dans le
message de news:
Bonjour,
Voici le code que je viens de tester :
Dans mon premier formulaire :
memobook = Me.CurrentRecord
DoCmd.OpenForm "ExpeditionModifQte", acNormal, , "[expefg_expe]=" &
Me.expefg_expe & " and [expefg_num]=" & Me.expefg_num & "", acFormEdit
Me.Requery
Me.Recordset.AbsolutePosition = memobook - 1
Dans mon second formulaire appelé ExpeditionModifiQté qui permet de saisir
la quantité réellement livrée et de mettre à jour mon premier formulaire
qui

présente la liste des fournitures livrées avec les quantités livrées :
Private Sub Form_Close()
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
End Sub
Avec ce code, le sélecteur se positionne bien (après le requery) sur la
ligne sélectionnée avant la mise à jour mais la mise à jour de la quantité
livrée n'est pas faite.
Merci à vous deux de vos conseils

--
Nathalie



Salut,

Il faudrait préciser la syntaxe car je viens de tester de mon coté
et


cela fonctionne (en access2000 et 2002).
Pouvez vous envoyer le code utilisé dans les formulaires pour
effectuer


ces manips.

A+

Rv


"Nathalie Lebas" a écrit dans
le


message de news:
Je ne dirais pas que tu as été trop bref mais plutôt que je ne connais
pas.

Je pense que mon soucis est plus compliqué que cela :
mon premier formulaire est une liste, mon second, un masque de saisie
d'info.

En réalité, il faut que je mémorise la position dans la section détail
avant

l'ouverture du second formulaire. Lorsque l'utilisateur ouvre le
second



formulaire, il met à jour des données, lorsqu'il le ferme, je fais un
requery

de mon premier formulaire encore ouvert, et c'est à ce moment, je
pense



que
je dois repositionner mon premier formulaire à partir de mon second.
C'est




que je n'y arrive pas.
Suis-je claire ?
Donc j'ai suivi tes instructions, j'ai créé une variable globale de
type



variant (appelée memobook). Juste avant l'ouverture du second
formulaire



(celui de saisie des données), je fais memobook=me.recordset.bookmark,
le



second formulaire s'ouvre. L'utilisateur saisi ses données puis il
ferme



le
second formulaire. A ce moment, je fais le requery et j'essaye de
faire



nom
du premier formulaire.recordset.bookmark = memobook, afin de
repositionner



le
sélecteur du premier formulaire là où il était avant le requery. Mais
cela



ne
marche pas ! j'ai une erreur 424, objet requis
Peux-tu m'aider ?
Merci
A +
--
Nathalie



J'ai été trop bref pardon!
D'une part objBook est une variable de type variant qu'il faut
déclarer.




D'autre part cette variable va servir à stocker un bookmark du
recordset




du
formulaire. C.a.d. un signet sur la ligne sélectionnée dans le
formulaire.



On aurau donc:

Dim objBook as Variant

objBook = me.recordset.bookmark
Me.Requery
Me.recordset.bookmark = objBook

A+

Rv



"Nathalie Lebas" a écrit
dans




le
message de
news:




Salut,
Merci pour ta réponse.
Si je fais ce que tu as écris dans objbook je récupère "??".
Il doit y avoir un problème ?
A+
--
Nathalie



Salut,

Avant le requery:
objBook = me.recordset.bookmark
Apres le requery:
me.recordset.bookmark = objBook

A+

Rv

"Nathalie Lebas" a
écrit






dans
le
message de
news:




Bonjour à tous,

J'ai un souci avec un formulaire. Celui-ci présente une liste
de







lignes
(section détail) avec chacune une quantité à saisir. Pour la
saisir,





je
passe
par un second formulaire (celui parce que la requête de mon
premier





formulaire est complexe et qu'elle fait un regroupement).
Lorsque







la
saisie
de la quantité est validée, je fais un requery de mon premier
formulaire



afin
que les données du second formulaire viennent rafraichir
celles du







premier.
Le problème est que le requery me positionne à chaque fois à
la







première
de
la section détail du premier formulaire. Il faudrait que le
programme





reste
positionné sur la ligne que l'utilisateur vient de mettre à
jour.







Merci à l'avance

--
Nathalie























Avatar
Rv
Salut Eric,

Au fait, puisque je te retrouve dans ce fil un petit HS :
Que penses tu de la méthode que je propose dans le fil auquel tu
participais : "Methode de remplissage avec AddItem" du 26/11. Je demande car
je n'ai pas vu de réponse...

A+

Rv

"Eric" a écrit dans le message de
news:
Bonjour,

Ce que je t'avais proposé comme solution mettait bien à jour mon premier
formulaire mais la requête source n'était pas bien complexe.
Apparemment, c'était un problème de réactualisation de ta source mais je
ne vois pas trop pourquoi ca marche avec ton ordonnancement et pas avec
celui que je t'avais proposé puisque la méthode Requery ré-interroge la
source.
Tu pourrais remplacer ta commande DoCmd.DoMenuItem ... par
DoCmd.RunCommand acCmdSaveRecord.
As-tu essayé avec la méthode de RV car les signets c'est pas mal non
plus, voire même plus propre ?


Je viens de tester ceci et cela fonctionne.
Dans mon premier formulaire appelé ExpeditionEjoutClo :
memobook = Me.CurrentRecord
DoCmd.OpenForm "ExpeditionModifQte", acNormal, , "[expefg_expe]=" &
Me.expefg_expe & " and [expefg_num]=" & Me.expefg_num & "", acFormEdit
Dans mon second appelé ExpeditionModifQte :
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, ,
acMenuVer70


Forms!ExpeditionAjoutClo.Requery
Forms!ExpeditionAjoutClo.Recordset.AbsolutePosition = memobook - 1
Qu'en pensez-vous ?
Merci à vous deux de votre aide.
a +


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Nathalie Lebas
Je ne connaissais pas. Je viens de tester mais dans mon cas cela ne
fonctionne pas. Je pense que cela est dû à deux choses :
- la requête complexe car en vérité composée de requête qui s'imbrique
- deux formulaires : le deuxième venant mettre à jour le premier.
Je conserve donc le code comme je vous l'ai copié ce matin.
Merci encore de votre aide à tous les deux
a +
--
Nathalie



Pour forcer un rafraîchissement récalcitrant à Me.Requery j'utilise
Me.recordSource = Me.RecordSource. Je pense que Me.Requery travaile avec une
"sorte de cache" alors que recharger la source du formulaire oblige à
réintérroger les données de la base.

A+
Rv

"Nathalie Lebas" a écrit dans le
message de news:
Bonjour,
Voici le code que je viens de tester :
Dans mon premier formulaire :
memobook = Me.CurrentRecord
DoCmd.OpenForm "ExpeditionModifQte", acNormal, , "[expefg_expe]=" &
Me.expefg_expe & " and [expefg_num]=" & Me.expefg_num & "", acFormEdit
Me.Requery
Me.Recordset.AbsolutePosition = memobook - 1
Dans mon second formulaire appelé ExpeditionModifiQté qui permet de saisir
la quantité réellement livrée et de mettre à jour mon premier formulaire
qui

présente la liste des fournitures livrées avec les quantités livrées :
Private Sub Form_Close()
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
End Sub
Avec ce code, le sélecteur se positionne bien (après le requery) sur la
ligne sélectionnée avant la mise à jour mais la mise à jour de la quantité
livrée n'est pas faite.
Merci à vous deux de vos conseils

--
Nathalie



Salut,

Il faudrait préciser la syntaxe car je viens de tester de mon coté
et


cela fonctionne (en access2000 et 2002).
Pouvez vous envoyer le code utilisé dans les formulaires pour
effectuer


ces manips.

A+

Rv


"Nathalie Lebas" a écrit dans
le


message de news:
Je ne dirais pas que tu as été trop bref mais plutôt que je ne connais
pas.

Je pense que mon soucis est plus compliqué que cela :
mon premier formulaire est une liste, mon second, un masque de saisie
d'info.

En réalité, il faut que je mémorise la position dans la section détail
avant

l'ouverture du second formulaire. Lorsque l'utilisateur ouvre le
second



formulaire, il met à jour des données, lorsqu'il le ferme, je fais un
requery

de mon premier formulaire encore ouvert, et c'est à ce moment, je
pense



que
je dois repositionner mon premier formulaire à partir de mon second.
C'est




que je n'y arrive pas.
Suis-je claire ?
Donc j'ai suivi tes instructions, j'ai créé une variable globale de
type



variant (appelée memobook). Juste avant l'ouverture du second
formulaire



(celui de saisie des données), je fais memobook=me.recordset.bookmark,
le



second formulaire s'ouvre. L'utilisateur saisi ses données puis il
ferme



le
second formulaire. A ce moment, je fais le requery et j'essaye de
faire



nom
du premier formulaire.recordset.bookmark = memobook, afin de
repositionner



le
sélecteur du premier formulaire là où il était avant le requery. Mais
cela



ne
marche pas ! j'ai une erreur 424, objet requis
Peux-tu m'aider ?
Merci
A +
--
Nathalie



J'ai été trop bref pardon!
D'une part objBook est une variable de type variant qu'il faut
déclarer.




D'autre part cette variable va servir à stocker un bookmark du
recordset




du
formulaire. C.a.d. un signet sur la ligne sélectionnée dans le
formulaire.



On aurau donc:

Dim objBook as Variant

objBook = me.recordset.bookmark
Me.Requery
Me.recordset.bookmark = objBook

A+

Rv



"Nathalie Lebas" a écrit
dans




le
message de
news:




Salut,
Merci pour ta réponse.
Si je fais ce que tu as écris dans objbook je récupère "??".
Il doit y avoir un problème ?
A+
--
Nathalie



Salut,

Avant le requery:
objBook = me.recordset.bookmark
Apres le requery:
me.recordset.bookmark = objBook

A+

Rv

"Nathalie Lebas" a
écrit






dans
le
message de
news:




Bonjour à tous,

J'ai un souci avec un formulaire. Celui-ci présente une liste
de







lignes
(section détail) avec chacune une quantité à saisir. Pour la
saisir,





je
passe
par un second formulaire (celui parce que la requête de mon
premier





formulaire est complexe et qu'elle fait un regroupement).
Lorsque







la
saisie
de la quantité est validée, je fais un requery de mon premier
formulaire



afin
que les données du second formulaire viennent rafraichir
celles du







premier.
Le problème est que le requery me positionne à chaque fois à
la







première
de
la section détail du premier formulaire. Il faudrait que le
programme





reste
positionné sur la ligne que l'utilisateur vient de mettre à
jour.







Merci à l'avance

--
Nathalie




























Avatar
Eric
Bonjour Rv,

Excellente proposition puisque ça répond à la problématique du recordset
qui reste ouvert. Fi des éventuels ralentissements ;-)
Très belle construction du Recordset objRsSourceListe. Va falloir que
j'approfondisse ADO ! En tout cas, je ne connaissais pas ce principe.
Toutefois, j'ai un problème sur la ligne
Set Me.lstTest.Recordset = objRsSourceListe dans la procédure
initialiserListe, une erreur de compilation 'Membre de méthode ou de
données introuvable' (Access2000-SP3) sur la propriété Recordset
Pourrais-tu m'indiquer comment y remédier ? car j'aimerais bien tester
intégralement ta procédure.


Salut Eric,

Au fait, puisque je te retrouve dans ce fil un petit HS :
Que penses tu de la méthode que je propose dans le fil auquel tu
participais : "Methode de remplissage avec AddItem" du 26/11. Je demande car
je n'ai pas vu de réponse...

A+

Rv



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Rv
Zut, j'avais mal testé! Je pensais avor réalisé le test sous access2000 mais
j'ai simplement testé avec Access2002 sur une base au format Access2000.
Du coup j'ai mis à jour le fil.

Merci
A+

Rv

"Eric" a écrit dans le message de
news:%23H$wW$
Bonjour Rv,

Excellente proposition puisque ça répond à la problématique du recordset
qui reste ouvert. Fi des éventuels ralentissements ;-)
Très belle construction du Recordset objRsSourceListe. Va falloir que
j'approfondisse ADO ! En tout cas, je ne connaissais pas ce principe.
Toutefois, j'ai un problème sur la ligne
Set Me.lstTest.Recordset = objRsSourceListe dans la procédure
initialiserListe, une erreur de compilation 'Membre de méthode ou de
données introuvable' (Access2000-SP3) sur la propriété Recordset
Pourrais-tu m'indiquer comment y remédier ? car j'aimerais bien tester
intégralement ta procédure.


Salut Eric,

Au fait, puisque je te retrouve dans ce fil un petit HS :
Que penses tu de la méthode que je propose dans le fil auquel tu
participais : "Methode de remplissage avec AddItem" du 26/11. Je demande
car


je n'ai pas vu de réponse...

A+

Rv



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr



Avatar
Eric
Dommage car j'étais interessé par ta méthode. Bon j'attends d'avoir une
version supérieure à Access2k des fois que ...

Zut, j'avais mal testé! Je pensais avor réalisé le test sous access2000 mais
j'ai simplement testé avec Access2002 sur une base au format Access2000.
Du coup j'ai mis à jour le fil.

Merci
A+




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

1 2