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

Manipulation des données dans un sous-formulaire

5 réponses
Avatar
Karim
Bonjour à tous,

J'ai un formulaire F1, avec un sous-formulaire SF2 (j'ai beaucoup
d'imagination).

SF2 est un formulaire en mode continu, qui affiche une liste d'éléments.
Je souhaite à partir d'un bouton se trouvant dans F1, passer sur tous
les éléments de la liste contenu dans SF2.

Je mets ce code là:

DoCmd.GotoRecord acForm,"SF2",acFirst
Do While not Forms!F1!SF2.Form.Recordset.EOF
'Action
DoCmd.GotoRecord acForm,"SF2",acNext
Loop
DoCmd.GotoRecord acForm,"SF2",acFirst

Malheureusement, Access m'indique que SF2 n'est pas ouvert...
Quelqu'un a-t-il une méthode?

Merci d'avance

Karim

5 réponses

Avatar
Ilan
Bonjour
essaie Docmd.GotoRecord acForm,F1!SF2.Form,acFirst
Docmd.GotoRecord acForm,F1!SF2.Form,acNext



Bonjour à tous,

J'ai un formulaire F1, avec un sous-formulaire SF2 (j'ai beaucoup
d'imagination).

SF2 est un formulaire en mode continu, qui affiche une liste d'éléments.
Je souhaite à partir d'un bouton se trouvant dans F1, passer sur tous
les éléments de la liste contenu dans SF2.

Je mets ce code là:

Do While not Forms!F1!SF2.Form.Recordset.EOF
'Action

DoCmd.GotoRecord acForm,"SF2",acNext
Loop
DoCmd.GotoRecord acForm,"SF2",acFirst

Malheureusement, Access m'indique que SF2 n'est pas ouvert...
Quelqu'un a-t-il une méthode?

Merci d'avance

Karim




Avatar
Karim
Merci, j'essaie...



Bonjour
essaie Docmd.GotoRecord acForm,F1!SF2.Form,acFirst
Docmd.GotoRecord acForm,F1!SF2.Form,acNext




Bonjour à tous,

J'ai un formulaire F1, avec un sous-formulaire SF2 (j'ai beaucoup
d'imagination).

SF2 est un formulaire en mode continu, qui affiche une liste d'éléments.
Je souhaite à partir d'un bouton se trouvant dans F1, passer sur tous
les éléments de la liste contenu dans SF2.

Je mets ce code là:


Do While not Forms!F1!SF2.Form.Recordset.EOF


'Action
DoCmd.GotoRecord acForm,"SF2",acNext
Loop
DoCmd.GotoRecord acForm,"SF2",acFirst

Malheureusement, Access m'indique que SF2 n'est pas ouvert...
Quelqu'un a-t-il une méthode?

Merci d'avance

Karim






Avatar
Raymond [mvp]
Bonjour.

tu as 2 solutions simples:
1_ par docmd sur le formulaire
Me.SF2.SetFocus
DoCmd.GoToRecord , , acFirst
DoCmd.GoToRecord , , acNext
etc etc.......
cette méthode impose de mettre le focus sur le sous-formulaire et
ensuite de naviguer par GoToRecord

2_ par un recordset

Dim Rs As DAO.Recordset
Set Rs = Me.SF2.Form.Recordset
If Rs.BOF Then Exit Sub
Do Until Rs.EOF
' ici le traitement des données
Rs.MoveNext
Loop
Set Rs = Nothing

La solution 2 étant préférable parceque plus simple.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Karim" a écrit dans le message de news:

Bonjour à tous,

J'ai un formulaire F1, avec un sous-formulaire SF2 (j'ai beaucoup
d'imagination).

SF2 est un formulaire en mode continu, qui affiche une liste d'éléments.
Je souhaite à partir d'un bouton se trouvant dans F1, passer sur tous les
éléments de la liste contenu dans SF2.

Je mets ce code là:

DoCmd.GotoRecord acForm,"SF2",acFirst
Do While not Forms!F1!SF2.Form.Recordset.EOF
'Action
DoCmd.GotoRecord acForm,"SF2",acNext
Loop
DoCmd.GotoRecord acForm,"SF2",acFirst

Malheureusement, Access m'indique que SF2 n'est pas ouvert...
Quelqu'un a-t-il une méthode?

Merci d'avance

Karim


Avatar
Karim
J'ai un peu changé mon fusil d'épaule...
J'ai tenté la solution 1, dans une fonction publique se trouvant dans le
sous-formulaire SF2.

J'ai mis le code suivant:
DoCmd.GoToRecord ,,acFirst

Do While not Me.Recordset.EOF
'Actions
DoCmd.GoToRecord ,, acNext
Loop

Mon soucis, est que sur le premier Next, il me sort une erreur 2105
(Impossible d'atteindre l'enregistrement spécifié)...

Je ne pense pas que la solution 2 marche dans mon cas, car dans mes actions,
j'utilise les champs présentés dans SF2. (J'ai donc besoin que SF2 se
positionne sur chaque ligne)

Merci pour vos lumières ;)





Bonjour.

tu as 2 solutions simples:
1_ par docmd sur le formulaire
Me.SF2.SetFocus
DoCmd.GoToRecord , , acFirst
DoCmd.GoToRecord , , acNext
etc etc.......
cette méthode impose de mettre le focus sur le sous-formulaire et
ensuite de naviguer par GoToRecord

2_ par un recordset

Dim Rs As DAO.Recordset
Set Rs = Me.SF2.Form.Recordset
If Rs.BOF Then Exit Sub
Do Until Rs.EOF
' ici le traitement des données
Rs.MoveNext
Loop
Set Rs = Nothing

La solution 2 étant préférable parceque plus simple.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Karim" a écrit dans le message de news:

Bonjour à tous,

J'ai un formulaire F1, avec un sous-formulaire SF2 (j'ai beaucoup
d'imagination).

SF2 est un formulaire en mode continu, qui affiche une liste d'éléments.
Je souhaite à partir d'un bouton se trouvant dans F1, passer sur tous les
éléments de la liste contenu dans SF2.

Je mets ce code là:

DoCmd.GotoRecord acForm,"SF2",acFirst
Do While not Forms!F1!SF2.Form.Recordset.EOF
'Action
DoCmd.GotoRecord acForm,"SF2",acNext
Loop
DoCmd.GotoRecord acForm,"SF2",acFirst

Malheureusement, Access m'indique que SF2 n'est pas ouvert...
Quelqu'un a-t-il une méthode?

Merci d'avance

Karim







Avatar
Raymond [mvp]
dans la 2e solution, c'est pareil car c'est le même recordset, on voit le
déplacement sur l'écran.

pour l'autre,
le Docmd s'applique à l'objet ayant le focus, ce qui n'est pas le cas du
SF2. il faut lui donner le focus comme je te l'avais indiqué, par
Forms("F1")("SF2").SetFocus ou Forms!F1!SF2.Form.SetFocus
je pense que c'est ça.


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Karim" a écrit dans le message de news:

J'ai un peu changé mon fusil d'épaule...
J'ai tenté la solution 1, dans une fonction publique se trouvant dans le
sous-formulaire SF2.

J'ai mis le code suivant:
DoCmd.GoToRecord ,,acFirst

Do While not Me.Recordset.EOF
'Actions
DoCmd.GoToRecord ,, acNext
Loop

Mon soucis, est que sur le premier Next, il me sort une erreur 2105
(Impossible d'atteindre l'enregistrement spécifié)...

Je ne pense pas que la solution 2 marche dans mon cas, car dans mes
actions,
j'utilise les champs présentés dans SF2. (J'ai donc besoin que SF2 se
positionne sur chaque ligne)

Merci pour vos lumières ;)





Bonjour.

tu as 2 solutions simples:
1_ par docmd sur le formulaire
Me.SF2.SetFocus
DoCmd.GoToRecord , , acFirst
DoCmd.GoToRecord , , acNext
etc etc.......
cette méthode impose de mettre le focus sur le sous-formulaire et
ensuite de naviguer par GoToRecord

2_ par un recordset

Dim Rs As DAO.Recordset
Set Rs = Me.SF2.Form.Recordset
If Rs.BOF Then Exit Sub
Do Until Rs.EOF
' ici le traitement des données
Rs.MoveNext
Loop
Set Rs = Nothing

La solution 2 étant préférable parceque plus simple.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Karim" a écrit dans le message de news:

Bonjour à tous,

J'ai un formulaire F1, avec un sous-formulaire SF2 (j'ai beaucoup
d'imagination).

SF2 est un formulaire en mode continu, qui affiche une liste
d'éléments.
Je souhaite à partir d'un bouton se trouvant dans F1, passer sur tous
les
éléments de la liste contenu dans SF2.

Je mets ce code là:

DoCmd.GotoRecord acForm,"SF2",acFirst
Do While not Forms!F1!SF2.Form.Recordset.EOF
'Action
DoCmd.GotoRecord acForm,"SF2",acNext
Loop
DoCmd.GotoRecord acForm,"SF2",acFirst

Malheureusement, Access m'indique que SF2 n'est pas ouvert...
Quelqu'un a-t-il une méthode?

Merci d'avance

Karim