Ce post ne fait que récapituler différentes méthodes expliquées dans le forum.
Il s'adresse aux personnes qui débutent avec le module Base.
La fonctionnalité du code a été vérifiée sous les versions officielles OpenOffice 3.3.0 et LibreOffice 3.4.5
En partant du principe que l'on travaille sur une base de données embarquée
et que celle-ci est enregistrée.
La base exemple ne contient que deux formulaires.
Les macros sont toutes déclenchées à l'évènement Exécuter l'action des différents Boutons
Formulaire1.png
La première rangée de Boutons utilise la méthode la plus simple
Elle nécessite que le nom du Formulaire soit nommé dans la macro, ce qui peut être utile lors de la relecture du code.
Le bouton
Ouvrir ouvre un second formulaire.
Le bouton
Fermer ferme le formulaire en cours.
Le bouton
Ouvrir et Fermer ouvre un second formulaire et ferme celui en cours.
Code : Tout sélectionner
Sub OuvrirFormulaireA
'Ouvre le formulaire nommé
ThisDatabaseDocument.FormDocuments.getByName( "Formulaire2" ).open
End Sub
Sub FermerFormulaireA
'Ferme le formulaire nommé
ThisDatabaseDocument.FormDocuments.getByName( "Formulaire1" ).close
End Sub
Sub OuvrirFermer
'combinaison des deux commandes précédentes
ThisDatabaseDocument.FormDocuments.getByName( "Formulaire2" ).open
ThisDatabaseDocument.FormDocuments.getByName( "Formulaire1" ).close
End Sub
Le bouton
Ouvrir par Tag utilise une méthode différente.
Elle nécessite que le nom du Formulaire à ouvrir soit nommé dans la propriété "Complément d'information"(Tag) du Bouton.
L'avantage de ce procédé est qu'il peut être l'utiliser sans avoir à retaper du code.
Code : Tout sélectionner
Sub OuvrirParTag(oEv as Object)
Dim NouveauFormulaire as Object, NomFormulaire As String
'Va récupérer le nom du formulaire dans Complément d'information du bouton appelant la macro
NomFormulaire = oEv.Source.Model.Tag
'Appel la fonction OuvrirFormulaire avec le nom du formulaire en paramètre
NouveauFormulaire= OuvrirFormulaire(NomFormulaire)
End sub
Function OuvrirFormulaire(NomFormulaire as String ) as Object
Dim NouveauFormulaire as Object
'Vérifie que le formulaire appelé existe bien dans la base
If ThisDatabaseDocument.FormDocuments.hasbyname(NomFormulaire) then
's'il existe le défini par son nom
NouveauFormulaire = ThisDatabaseDocument.FormDocuments.getbyname(NomFormulaire)
Else
'si non affiche un message
msgbox("La Base n'a pas de formulaire nommé " & NomFormulaire,64,"Ouverture fermeture formulaire")
'et stop la procédure
End
End If
'Si Oui ouvre le formulaire
OuvrirFormulaire = NouveauFormulaire.open
end function
Le Bouton
Ouvrir et Fermer par Tag reprend la méthode précédente,
il la complète par la fermeture du formulaire courant.
Elle nécessite que le nom du formulaire à ouvrir et celui du formulaire à fermer
soient nommés dans la propriété "Complément d'information"(Tag) du Bouton
séparés pour l'exemple par un point virgule.
Pour plus d'information voir la fonction Split dans l'aide en ligne
Code : Tout sélectionner
Sub OuvrirFermerFormulaire(oEv As Object)
Dim lesFormulaires As Object, leFormulaire As Object
Dim bouton As Object, appel As String, courant as String
'Bouton ayant déclenché l'action
bouton = oEv.Source
'Voir la fonction split dans l'aide en ligne
'cherche dans complément d'information du bouton le nom du formulaire à ouvrir(avant le point virgule) et le défini à appel
appel = split(bouton.Model.tag,";",2)(0)
'cherche dans complément d'information du bouton le nom du formulaire à fermer(après le point virgule) et le défini à courant
if instr(1,bouton.Model.tag,";") then courant = split(bouton.Model.tag,";",2)(1)
'ouvre le formulaire appel s'il existe
lesFormulaires = ThisDatabaseDocument.FormDocuments
if lesFormulaires.hasByName(appel) then
leFormulaire = lesFormulaires.getByName(appel)
leFormulaire.open
else
MsgBox("La Base n'a pas de formulaire nommé " & appel,64,"Ouverture fermeture formulaire")
exit sub
end if
'si le nom du formulaire à fermer existe, appel la procédure FermerFormulaire avec courant en paramètre
if thisDatabaseDocument.FormDocuments.hasByName(courant) then FermerFormulaire(courant)
End Sub
Sub FermerFormulaire(NomFormulaire) '*** appelée par OuvrirFermerFormulaire
'ferme le formulaire dont le nom est passé en paramètre
thisDataBaseDocument.FormDocuments.getByName(NomFormulaire).close
End sub
Le Bouton
Fermer sans macro (comme son nom l'indique) ferme le formulaire sans faire appel à une macro.
Propriété du Bouton
Action > Ouvrir la page web
URL > .uno:closewin
Précision sur la fermeture des formulaires.
Pour une application normale, c'est à dire avec des formulaires présentant des données.
Fermeture par macro
Si les données ont été modifiées et pas enregistrées, la boite de dialogue de confirmation d'enregistrement s'affiche
Si la structure du formulaire a été modifiée, la boite de dialogue de confirmation d'enregistrement s'affiche
même comportement que le clic sur la croix de la fenêtre
Fermeture sans macro
Si les données ont été modifiées et pas enregistrées, la boite de dialogue de confirmation d'enregistrement s'affiche
Si la structure du formulaire a été modifiée, la boite de dialogue de confirmation d'enregistrement ne s'affiche pas
Faire attention donc en phase de développement.
Ouverture automatique.png
Pour l'ouverture automatique d'un formulaire au lancement de la base
Assigner la macro OuvertureBase dans le menu Outils > Personnaliser > Ouvrir un document
Enregistrer dans OuvertureFermeture.odb
Code : Tout sélectionner
Sub OuvertureBase
'sur Outils personnaliser ouvrir un document enregistrer dans OuvertureFermeture.odb
dim NomFormulaire as Object,maConnexion as Object
'Utilise la connexion courante
ThisDatabaseDocument.CurrentController.connect("","")
maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
NomFormulaire=OuvrirFormulaire("Formulaire1")
End sub
Quelques liens pour approfondir la question:
viewtopic.php?f=15&t=6355
viewtopic.php?f=8&t=31953
viewtopic.php?f=8&t=31895
viewtopic.php?f=8&t=29822
A+