[Résolu][Base]faire apparaitre un sous-formulaire par case à cocher

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
margot666
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 22 mai 2023 19:29

[Résolu][Base]faire apparaitre un sous-formulaire par case à cocher

Message par margot666 »

Bonjour à tous
Je découvre petit à petit l'utilisation des macros.
Je suis encore perdue, et j'attends avec impatience le livre bible commandé !!
Mais, cet apprentissage est un long processus ! et je ne suis pas rapide......

Voici mon problème du jour.
Je tente de créer un outils pour saisir et consulter des adhérents d'une association de musiciens.
Quand l'adhérent est mineur, je souhaite qu'un sous-formulaire s'affiche pour enregistrer les donner des parents.
Grâce à ce forum (merci @Dude : viewtopic.php?p=392160#p392160), j'ai pu créer une vue dans laquelle l'âge est calculé, et une case "mineur" est cochée en fonction de l'âge.
J'ai ensuite crée une macro, toujours en suivant plusieurs fils du forum comme par exemple : ftopic5452.html. (merci @Pierre-Yves Samyn)
Elle est presque fonctionnelle ! tout est dans le presque, évidemment.....
Je crois que mon problème réside dans l'assignation (à quel "objet" l'assigner, et lors de quelle action ????)

Code : Tout sélectionner

Sub NePasAfficher

dim PysDoc as object, PysForm as object, PysForm2 as object, PysForm3 as object, PysView as object, PysCtrl1 as object, PysCtrl2 as object
dim PysViewCtrl as object, PysRadio as object

PysDoc=thiscomponent											'le document courant
PysView=PysDoc.currentcontroller()								'en gros la fenêtre dans laquelle se trouve le document
PysForm=PysDoc.drawpage.getforms().getbyname("MainForm")		'pointe sur le formulaire principal dans ce document
PysForm2=PysForm.getbyname("Parents")
PysForm3=PysForm.getbyname("Age")
PysRadio=PysForm3.getbyname("chkMineur") 						'si cheké, mineur
PysCtrl1=PysForm2.getbyname("txtPrénomParent")					'le contrôle prénom dans le sous-formulaire
PysCtrl2=PysForm2.getbyname("lblPrénomParent")

if PysRadio.state = 1 then 
		PysViewCtrl=PysView.getcontrol(PysCtrl1) 					'en gros l'affichage du contrôle 
		PysViewCtrl.setVisible(True)  								'afficher le contrôle
		PysViewCtrl=PysView.getcontrol(PysCtrl2) 					'en gros l'affichage du contrôle 
		PysViewCtrl.setVisible(True)  	  							
	else
		PysViewCtrl=PysView.getcontrol(PysCtrl1)					
		PysViewCtrl.setVisible(False)  	
		PysViewCtrl=PysView.getcontrol(PysCtrl2) 					'en gros l'affichage du contrôle 
		PysViewCtrl.setVisible(False) 							
  								
	end if
End Sub
Auriez-vous quelques conseils à me donner ??

PS : je joins la bdd (avec des choses inutiles dans certaines tables, et des boutons qui ne servent à rien, mais chaque chose en son temps !!)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par margot666 le 27 oct. 2025 22:32, modifié 1 fois.
Margot
Libreoffice 25.8.1
Ubuntu 25.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26078
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]faire apparaitre un sous-formulaire par case à cocher

Message par Dude »

Salut,

Pour masquer/afficher un formulaire, il est plus simple d'utiliser une section.
C'est l'objet de ce tutoriel et c'est comme cela que fonctionne GestOOck
margot666
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 22 mai 2023 19:29

Re: [Base]faire apparaitre un sous-formulaire par case à cocher

Message par margot666 »

Bonjour !
Merci de l'indication, je vais étudier tout cela
belle journée
Margot
Libreoffice 25.8.1
Ubuntu 25.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17196
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Base]faire apparaitre un sous-formulaire par case à cocher

Message par jeanmimi »

Bonjour,
La Macro de Pierre-Yves SAMYN ne doit pas être tout à fait adaptée, car le contrôle qu'elle utilise est un bouton radio :

Code : Tout sélectionner

if PysRadio.state = 1 then 
alors que tu veux que ce soit l'état d'une case qui soit testé par la Macro pour ouvrir le formulaire F_PARENTS_MINEUR lorsque l'état de ce contrôle est modifié.
Mais je n'ai pas compris si tu veux une ouverture automatique de ce formulaire ou si tu veux l'ouvrir par un clic de l'utilisateur sur le bouton Parent de mineur
LibreOffice : Version : 25.8.1.1 (x64)(26 septembre 2025)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
margot666
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 22 mai 2023 19:29

Re: [Base]faire apparaitre un sous-formulaire par case à cocher

Message par margot666 »

Bonjour Jeanmimi et merci pour ton attention !
Mon idée initiale était de faire apparaître automatiquement le sous-formulaire "Parents" (pour l'instant il n'y a que le champs "prénom", mais c'est juste pour faciliter les manipulations dans les macros) quand la case se coche automatiquement par la "vue-age" et ses requêtes.

Mais j'ai fait un tas de tests, et je me suis parfois dit qu'il valait mieux passer par un bouton.......
Et parfois j'ai tenté de faire afficher un formulaire distinct (F_PARENTS_MINEUR).

Comme aucun de mes tests n'a abouti, il y en a des traces un peu partout.
Je suis actuellement en train de tester l'affichage par bouton de sections, mais je n'ai pas encore réussi ! (oui, je suis un peu lente....., et pas très douée).

Je trouverais plus "amusant" que le sous-formulaire "Parents" apparaisse automatiquement, mais je ne suis pas opposée au bouton lié à des sections.
Par contre, je pense que le formulaire F_PARENTS_MINEUR finira à la poubelle très bientôt, je préfère le "sous-formulaire".
J'espère que j'ai été un peu plus claire !
Je reviens vers vous dès que j'ai un peu avancé !
Margot
Libreoffice 25.8.1
Ubuntu 25.04
margot666
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 22 mai 2023 19:29

Re: [Base]faire apparaitre un sous-formulaire par case à cocher

Message par margot666 »

Bonjour à toutes et tous
J'ai eu peu de temps pour améliorer mon petit formulaire...
En suivant les indications de plusieurs posts de ce forum (viewtopic.php?t=23703 et viewtopic.php?t=23703), j'ai fini par opter pour une section qui apparaît avec un bouton.
Je remercie donc chaleureusement @Dude, @jeanmimi et @Pierre-Yves Samyn pour leurs différents tutos et leurs supers macros !
Voici la petite macro :

Code : Tout sélectionner

sub PysMasquerSection

if thiscomponent.TextSections.hasByName("Parents") then
	with thiscomponent.TextSections.getByName("Parents")
		.IsVisible = not(.IsVisible)
	end with
else
	msgbox "La section nommée Parents ne figure pas dans le document"
end if

end sub
Ce n'est pas "automatique" mais ça marche très bien !
Je mets en pièce jointe à ce message la bdd et son formulaire, qui n'a pas fini d'évoluer !
belle journée !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Margot
Libreoffice 25.8.1
Ubuntu 25.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26078
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]faire apparaitre un sous-formulaire par case à cocher

Message par Dude »

margot666 a écrit : 24 oct. 2025 12:57 Ce n'est pas "automatique" mais ça marche très bien !
Normal puisque tu n'interroges pas le contrôle de ta case à cocher :

Code : Tout sélectionner

Sub AfficheSection
	'Appel depuis l'événement du formulaire "Après le changement d'enregistrement"
	oDoc = ThisComponent
	oSection = oDoc.TextSections.getByName("Parents")
	oSection.IsVisible = False
	oFormAdh = oDoc.DrawPage.Forms.getByName("F_ADHERENTS")
	oFormAge = oFormAdh.getByName("Age")
	oMineur = oFormAge.getByName("chkMineur")
	wait 100 'attendre un peu que les données se chargent
	if oMineur.State = 1 then oSection.IsVisible = True
End Sub
Il faut ensuite brancher la macro sur le bon événement du formulaire principal :
capture.png
Merci d'ajouter [Résolu]
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
margot666
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 22 mai 2023 19:29

Re: [Base]faire apparaitre un sous-formulaire par case à cocher

Message par margot666 »

Ca marche formidablement bien !
Un grand merci !!!!

(j'avoue que je m'étais résolue à utiliser mon bouton pour faire apparaître la section.....)

Je joins ma dernière version, un peu plus avancée, au cas où ça servirait à d'autres

bonne soirée !!
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Margot
Libreoffice 25.8.1
Ubuntu 25.04