Déplacement de contrôle dans un formulaire

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Blaise Cacramp
Le #21681321
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" 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
Papyto94
Le #21681491
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" 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
Gloops
Le #21681751
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)
Papyto94
Le #21681811
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.
Gloops
Le #21682731
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.
jero
Le #21683381
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"
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.
Papyto94
Le #21683421
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"



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.


Blaise Cacramp
Le #21687571
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" 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.
Papyto94
Le #21688661
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" 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.




Publicité
Poster une réponse
Anonyme