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

Déplacement de contrôle dans un formulaire

9 réponses
Avatar
Papyto94
Bonjour
Est il possible de déplacer par VBA un contrôle de la section détail
d'un formulaire à l'entête de ce même formulaire et comment.
Merci

9 réponses

Avatar
Blaise Cacramp
Bjr,

Il y a moyen de créer des formulaires en VBA et donc de les modifier. J'ai
un ancien projet (qui fonctionne toujours) qui fait cela. J'y ajoute même du
code VBA. Mais le côté dynamique à ses limites, je ne me souviens trop plus
pourquoi, mais (en mode runtime,) je suis obligé de redémarrer
l'application.

Dim db_monito As DAO.Database
Dim Mdl As Module
Dim Lng As Long
Dim Code$
Dim Ctl_Label As Control, Ctl_Text As Control
Dim Gauche As Integer, Haut As Integer
Dim Largeur As Integer, Hauteur As Integer
...
On Error Resume Next
DoCmd.DeleteObject acForm, "Frm_Formulaire"
On Error GoTo 0
DoCmd.CopyObject , "Frm_Modele", acForm, "Frm_Formulaire"
DoCmd.OpenForm "Frm_Formulaire", acDesign
Set Mdl = Forms![Frm_Formulaire].Module
...
Set Ctl_Text = CreateControl("Frm_Formulaire", acTextBox, acDetail, , ,
Gauche, Haut, Largeur, Hauteur)
With Ctl_Text
...

End With
'
' Coding ...
'
Lng = Mdl.CreateEventProc("BeforeUpdate", Ctl_Text.Name)
Code$ = "" _
& vbCrLf & " If isnull(" & Ctl_Text.Name & ".Value) Then " _
& vbCrLf & " exit sub" _
& vbCrLf & " end If" _
& vbCrLf & " If Not isnumeric(" & Ctl_Text.Name & ".Value)
Then " _
& vbCrLf & " Cancel = True" _
& vbCrLf & " Me!" & Ctl_Text.Name & ".Undo" _
& vbCrLf & " End If"
Mdl.InsertLines Lng + 1, Code$


Il est donc impossible de créer un formulaire "à la volée" suivant les
circonstances rencontrées.
Il faut donc prévoir des contrôles en suffisance et utiliser les propriétés
.top, .visible & Cie en mode exécution.

Cdt, Blaise

"Papyto94" a écrit dans le message de news:
4be01fd7$0$10158$
Bonjour
Est il possible de déplacer par VBA un contrôle de la section détail d'un
formulaire à l'entête de ce même formulaire et comment.
Merci
Avatar
Papyto94
Le 04/05/2010 18:57, Blaise Cacramp a écrit :
Bjr,

Il y a moyen de créer des formulaires en VBA et donc de les modifier. J'ai
un ancien projet (qui fonctionne toujours) qui fait cela. J'y ajoute même du
code VBA. Mais le côté dynamique à ses limites, je ne me souviens trop plus
pourquoi, mais (en mode runtime,) je suis obligé de redémarrer
l'application.

Dim db_monito As DAO.Database
Dim Mdl As Module
Dim Lng As Long
Dim Code$
Dim Ctl_Label As Control, Ctl_Text As Control
Dim Gauche As Integer, Haut As Integer
Dim Largeur As Integer, Hauteur As Integer
...
On Error Resume Next
DoCmd.DeleteObject acForm, "Frm_Formulaire"
On Error GoTo 0
DoCmd.CopyObject , "Frm_Modele", acForm, "Frm_Formulaire"
DoCmd.OpenForm "Frm_Formulaire", acDesign
Set Mdl = Forms![Frm_Formulaire].Module
...
Set Ctl_Text = CreateControl("Frm_Formulaire", acTextBox, acDetail, , ,
Gauche, Haut, Largeur, Hauteur)
With Ctl_Text
...

End With
'
' Coding ...
'
Lng = Mdl.CreateEventProc("BeforeUpdate", Ctl_Text.Name)
Code$ = "" _
& vbCrLf& " If isnull("& Ctl_Text.Name& ".Value) Then " _
& vbCrLf& " exit sub" _
& vbCrLf& " end If" _
& vbCrLf& " If Not isnumeric("& Ctl_Text.Name& ".Value)
Then " _
& vbCrLf& " Cancel = True" _
& vbCrLf& " Me!"& Ctl_Text.Name& ".Undo" _
& vbCrLf& " End If"
Mdl.InsertLines Lng + 1, Code$


Il est donc impossible de créer un formulaire "à la volée" suivant les
circonstances rencontrées.
Il faut donc prévoir des contrôles en suffisance et utiliser les propriétés
.top, .visible& Cie en mode exécution.

Cdt, Blaise

"Papyto94" a écrit dans le message de news:
4be01fd7$0$10158$
Bonjour
Est il possible de déplacer par VBA un contrôle de la section détail d'un
formulaire à l'entête de ce même formulaire et comment.
Merci






La propriété Top m'irait bien mais avec je ne peut pas placer le
controle sur l'entête, il ne le fait que sur le top de la section détail
Avatar
Gloops
Bonjour,

Le 04/05/2010 19:31, Papyto94 a écrit :
La propriété Top m'irait bien mais avec je ne peut pas placer le
controle sur l'entête, il ne le fait que sur le top de la section dé tail

Set Ctl_Text = CreateControl("Frm_Formulaire", acTextBox, acDetail,, ,





Que crois-tu donc que signifie acDetail ?
Regarde bien l'aide de CreateControl

Gauche, Haut, Largeur, Hauteur)
Avatar
Papyto94
Le 04/05/2010 20:36, Gloops a écrit :
Bonjour,

Le 04/05/2010 19:31, Papyto94 a écrit :
La propriété Top m'irait bien mais avec je ne peut pas placer le
controle sur l'entête, il ne le fait que sur le top de la section détail



Set Ctl_Text = CreateControl("Frm_Formulaire", acTextBox, acDetail,,,





Que crois-tu donc que signifie acDetail ?
Regarde bien l'aide de CreateControl

Gauche, Haut, Largeur, Hauteur)









Merci
Mais je pense que CreateControl va me créer un contrôle mais pas
déplacer le mien que je devrai dans ce cas rendre invisible.
Avatar
Gloops
Le 04/05/2010 21:00, Papyto94 a écrit :
Merci
Mais je pense que CreateControl va me créer un contrôle mais pas
déplacer le mien que je devrai dans ce cas rendre invisible.



Ah effectivement si tu veux changer de section ça risque d'être beauc oup
plus simple d'en créer un nouveau, de lui affecter toutes les proprié tés
de l'ancien, et puis l'ancien ensuite si on n'en veut plus on le
supprime (à moins qu'on préfère le rendre invisible).

Bien garder une copie de la base. Un contrôle créé dynamiquement ne se
retrouve pas en mode création. Quand à savoir si un contrôle suppri mé
par code se retrouve en mode création, il faut vérifier.
Avatar
jero
Salut,
Peut-être plus simple :
Tu crées 2 contrôles identiques un dans la section détail, l'autre dans
l'entête (avec évidemment 2 noms différents)
Ex : tNomMachinDétail et tNomMachinEnTête avec tNomMachinDétail visible et
tNomMachinEnTête non visible
Sur un événement quelconque du formulaire tu fais :
Me.tNomMachinDétail.Visible=Not Me.tNomMachinDétail.Visible
Me.tNomMachinEnTête.Visible=Not Me.tNomMachinEnTête.Visible
A+
"Gloops" a écrit dans le message de news:

Le 04/05/2010 21:00, Papyto94 a écrit :
Merci
Mais je pense que CreateControl va me créer un contrôle mais pas
déplacer le mien que je devrai dans ce cas rendre invisible.



Ah effectivement si tu veux changer de section ça risque d'être beaucoup
plus simple d'en créer un nouveau, de lui affecter toutes les propriétés
de l'ancien, et puis l'ancien ensuite si on n'en veut plus on le
supprime (à moins qu'on préfère le rendre invisible).

Bien garder une copie de la base. Un contrôle créé dynamiquement ne se
retrouve pas en mode création. Quand à savoir si un contrôle supprimé
par code se retrouve en mode création, il faut vérifier.
Avatar
Papyto94
Le 05/05/2010 06:12, jero a écrit :
Salut,
Peut-être plus simple :
Tu crées 2 contrôles identiques un dans la section détail, l'autre dans
l'entête (avec évidemment 2 noms différents)
Ex : tNomMachinDétail et tNomMachinEnTête avec tNomMachinDétail visible et
tNomMachinEnTête non visible
Sur un événement quelconque du formulaire tu fais :
Me.tNomMachinDétail.Visible=Not Me.tNomMachinDétail.Visible
Me.tNomMachinEnTête.Visible=Not Me.tNomMachinEnTête.Visible
A+
"Gloops" a écrit dans le message de news:




Merci
C'est ce que je vais faire mais que je pensais pouvoir éviter
Bonne journée.
Le 04/05/2010 21:00, Papyto94 a écrit :
Merci
Mais je pense que CreateControl va me créer un contrôle mais pas
déplacer le mien que je devrai dans ce cas rendre invisible.



Ah effectivement si tu veux changer de section ça risque d'être beaucoup
plus simple d'en créer un nouveau, de lui affecter toutes les propriétés
de l'ancien, et puis l'ancien ensuite si on n'en veut plus on le
supprime (à moins qu'on préfère le rendre invisible).

Bien garder une copie de la base. Un contrôle créé dynamiquement ne se
retrouve pas en mode création. Quand à savoir si un contrôle supprimé
par code se retrouve en mode création, il faut vérifier.


Avatar
Blaise Cacramp
Comme tu sais que tu vas (éventuellement ?) devoir passer d'un containeur à
un autre, tu crées un contrôle dans les deux et tu joues sur leurs
propriétés. Je disais dans mon message originel : «Il faut donc prévoir des
contrôles en suffisance et utiliser les propriétés ...» Soit copier les
propriétés nécéssaires de l'un vers l'autre.

Bon amusement !

"Papyto94" a écrit dans le message de news:
4be06ee5$0$18006$
Le 04/05/2010 20:36, Gloops a écrit :
Bonjour,

Le 04/05/2010 19:31, Papyto94 a écrit :
La propriété Top m'irait bien mais avec je ne peut pas placer le
controle sur l'entête, il ne le fait que sur le top de la section détail



Set Ctl_Text = CreateControl("Frm_Formulaire", acTextBox, acDetail,,,





Que crois-tu donc que signifie acDetail ?
Regarde bien l'aide de CreateControl

Gauche, Haut, Largeur, Hauteur)









Merci
Mais je pense que CreateControl va me créer un contrôle mais pas déplacer
le mien que je devrai dans ce cas rendre invisible.
Avatar
Papyto94
Le 05/05/2010 19:13, Blaise Cacramp a écrit :
Comme tu sais que tu vas (éventuellement ?) devoir passer d'un containeur à
un autre, tu crées un contrôle dans les deux et tu joues sur leurs
propriétés. Je disais dans mon message originel : «Il faut donc prévoir des
contrôles en suffisance et utiliser les propriétés ...» Soit copier les
propriétés nécéssaires de l'un vers l'autre.

Bon amusement !


Merci cela a été mon jeu de la journée. Heureusement que c'est fini
Bonne soirée
"Papyto94" a écrit dans le message de news:
4be06ee5$0$18006$
Le 04/05/2010 20:36, Gloops a écrit :
Bonjour,

Le 04/05/2010 19:31, Papyto94 a écrit :
La propriété Top m'irait bien mais avec je ne peut pas placer le
controle sur l'entête, il ne le fait que sur le top de la section détail



Set Ctl_Text = CreateControl("Frm_Formulaire", acTextBox, acDetail,,,





Que crois-tu donc que signifie acDetail ?
Regarde bien l'aide de CreateControl

Gauche, Haut, Largeur, Hauteur)









Merci
Mais je pense que CreateControl va me créer un contrôle mais pas déplacer
le mien que je devrai dans ce cas rendre invisible.