[Base] Ouverture et fermeture de formulaire
Modérateur : Vilains modOOs
Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
-
- IdOOle de la suite
- Messages : 25184
- Inscription : 03 mars 2006 07:45
- Localisation : 127.0.0.1
[Base] Ouverture et fermeture de formulaire
Ouverture et fermeture de formulaire
J'ai repris l'excellent travail de Serge que j'ai légèrement modifié pour qu'il soit plus simple et auquel j'ai ajouté un peu de code de PYS.
Cette base de données contient un formulaire fmMenuGénéral qui permet de lancer via des boutons quatre autres formulaires. Sur chaque formulaire appelé, un bouton permet également de le fermer.
http://user.services.openoffice.org/fr/ ... 050515.odb
Attention : depuis la 3.1, la gestion de l'ouverture des formulaires a été simplifié. Reportez-vous en bas de ce fil.
J'ai repris l'excellent travail de Serge que j'ai légèrement modifié pour qu'il soit plus simple et auquel j'ai ajouté un peu de code de PYS.
Cette base de données contient un formulaire fmMenuGénéral qui permet de lancer via des boutons quatre autres formulaires. Sur chaque formulaire appelé, un bouton permet également de le fermer.
http://user.services.openoffice.org/fr/ ... 050515.odb
Attention : depuis la 3.1, la gestion de l'ouverture des formulaires a été simplifié. Reportez-vous en bas de ce fil.
Dernière modification par Dude le 07 juil. 2009 14:04, modifié 2 fois.
-
- Fraîchement OOthentifié
- Messages : 3
- Inscription : 23 nov. 2007 12:56
[Base] Ouvrir un formulaire
Bonjour,
Je suis maintenant capable d'ouvrir un formulaire grâce à l'aide que j'ai obtenue de Dude ManitOOou.
Voici une procédure détaillée pour ouvrir un formulaire.
http://user.services.openoffice.org/fr/ ... 020428.pdf
Merci Dude
Je suis maintenant capable d'ouvrir un formulaire grâce à l'aide que j'ai obtenue de Dude ManitOOou.
Voici une procédure détaillée pour ouvrir un formulaire.
http://user.services.openoffice.org/fr/ ... 020428.pdf
Merci Dude
Version 2.3
Windows XP
Windows XP
-
- Membre lOOyal
- Messages : 44
- Inscription : 22 sept. 2006 17:52
- Localisation : Lille (59)
Re: [Base] Ouverture et fermeture de formulaire
Bonjour à tous,
Je me permets de proposer aussi ma méthode pour un Menu Général entièrement AUTOMATIQUE dans Base :
Un formulaire nommé "MENU GENERAL" qui va chercher AUTOMATIQUEMENT TOUS les formulaires existants et les affiche sous forme de boutons contenant leurs noms.
On clique sur le bouton/formulaire désiré et il s'ouvre.
L'intérêt premier est de ne pas devoir refaire ce formulaire MENU GENERAL, à chaque fois que l'on ajoute un nouveau formulaire : il s'ajoute tout seul.
Le code est encore à revoir, à nettoyer même, mais il fonctionne:
Il faut que la base soit enregistrée dans Open Office et sous le nom "SOCIETE".
Il faut également créer le formulaire "00 OoGestComm MENU PRINCIPAL" dans lequel intégrer la macro présentée ci-dessus et l'assigner dans propriétés du document à l'ouverture du document.
Je vais essayer de simplifier et rendre plus universel ces dernières manipulations.
Pour consultation, voir le fichier joint qui est un exemple simple (attention : encore à améliorer).
Je l'ai également intégré dans ma base en cours (Gestion Commerciale). voir ci-dessous.
Domm
Je me permets de proposer aussi ma méthode pour un Menu Général entièrement AUTOMATIQUE dans Base :
Un formulaire nommé "MENU GENERAL" qui va chercher AUTOMATIQUEMENT TOUS les formulaires existants et les affiche sous forme de boutons contenant leurs noms.
On clique sur le bouton/formulaire désiré et il s'ouvre.
L'intérêt premier est de ne pas devoir refaire ce formulaire MENU GENERAL, à chaque fois que l'on ajoute un nouveau formulaire : il s'ajoute tout seul.
Le code est encore à revoir, à nettoyer même, mais il fonctionne:
Code : Tout sélectionner
option explicit
Private FormulR(100)
Private formulr As String
Sub MENUChoix
rem -----Plein écran------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FullScreen"
args1(0).Value = true
dispatcher.executeDispatch(document, ".uno:FullScreen", "", 0, args1())
'ListeFormulaires()
Dim odoc As object
Dim odrawpage As object
Dim button_shape As object
Dim button_model As object
Dim monDbContext As Object, maSource As Object, dbDoc2 As Object
Dim monFormulaire As Object, lesFormulaires As Object
Dim oListBox as object
Dim oForm as object
Dim oContext as object
Dim TabNomSources as variant
Dim mNameList( 100 ) As String
Dim momChamp As String
Dim OdbOpt(0) as new com.sun.star.beans.PropertyValue
Dim adrOdb As String, nomFormulaire As String
Dim f As Long, k As Long, x As Long, unCtrl As Object
Dim aPos as new com.sun.star.awt.Point
Dim aSize as new com.sun.star.awt.Size
Const nomSource = "SOCIETE"
'se connecte à la base "SOCIETE"
monDbContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
maSource = monDbContext.getByName(nomSource)
dbDoc2 = maSource.DatabaseDocument
adrOdb = dbDoc2.URL
OdbOpt(0).Name = "Hidden"
OdbOpt(0).Value = True
dbDoc2 = StarDesktop.loadComponentFromURL(adrOdb, "_blank", 0, OdbOpt())
LesFormulaires = dbDoc2.FormDocuments
ReDim FormulR(lesFormulaires.Count -1)
' Nombre de formulaires à afficher dans le Menu
ReDim mNameList(lesFormulaires.Count -1)
' Trouve les formulaires et les place dans le tableau FormulR(f)
' sauf "00 OoGestComm MENU PRINCIPAL" et le répertoire "futurs formulaires"
x=0
for f= 0 to lesFormulaires.Count -1
monFormulaire = lesFormulaires(f)
nomFormulaire = monFormulaire.Name
If nomFormulaire <> "futurs formulaires" AND nomFormulaire <> "00 OoGestComm MENU PRINCIPAL" THEN
FormulR(f)=nomFormulaire
mNameList(x)=FormulR(f)
x=x+1
'Crée et affiche les boutons contenant le nom de chaque formulaire de la base
odoc = thisComponent
odrawpage = odoc.drawPage
oform = odrawpage.forms.getByName("Standard")
button_shape = odoc.createInstance("com.sun.star.drawing.ControlShape")
aPos.X = 200
aPos.Y = (500 + x*600)
button_shape.Position = aPos
aSize.Width = 4800
aSize.Height = 500
button_shape.Size = aSize
button_shape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
button_model = odoc.createInstance("com.sun.star.form.component.CommandButton")
button_model.Name = "PushButton"
button_model.Label = FormulR(f)
button_shape.Control = button_model
oform.insertByIndex(0, button_model)
odrawpage.add(button_shape)
Dim sListenerInterfaceName as String
sListenerInterfaceName = "com.sun.star.awt.XActionListener"
Dim sListenerMethodName as String
sListenerMethodName = "actionPerformed"
'affecte la macro Lanceformulaire au bouton en cours
Dim sMacroLocation as String
sMacroLocation = "document:Standard.Module1.Lanceformulaire"
Dim oEvent as new com.sun.star.script.ScriptEventDescriptor
oEvent.ListenerType = sListenerInterfaceName
oEvent.EventMethod = sListenerMethodName
oEvent.ScriptType = "StarBasic"
oEvent.ScriptCode = sMacroLocation
oform.registerScriptEvent(0, oEvent )
'print FormulR(f)
Else Endif
next
End Sub
sub Lanceformulaire ( oEvent as new com.sun.star.script.ScriptEventDescriptor)
dim monDocument As Object
dim monForm As Object
oEvent.Source.Model.Label ' ou .Name ou .Tag Récupère le nom du bouton pressé
formulr = oEvent.Source.Model.Label
monDocument = ThisComponent
monForm = monDocument.DrawPage.Forms.getByName("Standard")
OpenForm( oEvent.Source.Model.Parent.ActiveConnection.Parent.DatabaseDocument.FormDocuments,oEvent.Source.Model.Parent.ActiveConnection, formulr)
End Sub
' L'ouverture des formulaires se fait par appel d'une fonction OpenForm
Function OpenForm( formContainer as variant, oConnection as variant, sFormName as string, optional strMode as string ) as variant
Dim aProp(1) As New com.sun.star.beans.PropertyValue
dim openMode as string
if ismissing( strMode ) then
openMode = "open"
else
openMode = strMode
endif
aProp(0).Name = "ActiveConnection"
aProp(0).Value = oConnection
aProp(1).Name = "OpenMode"
aProp(1).Value = strMode
OpenForm = formContainer.loadComponentFromURL(sFormName,"_blank",0,aProp())
End Function
Il faut également créer le formulaire "00 OoGestComm MENU PRINCIPAL" dans lequel intégrer la macro présentée ci-dessus et l'assigner dans propriétés du document à l'ouverture du document.
Je vais essayer de simplifier et rendre plus universel ces dernières manipulations.
Pour consultation, voir le fichier joint qui est un exemple simple (attention : encore à améliorer).
Je l'ai également intégré dans ma base en cours (Gestion Commerciale). voir ci-dessous.
Domm
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Domm le 31 mai 2008 04:07, modifié 5 fois.
Oo 3.0
Win xp Pro sp2
Access 2000
Projet de gestionnaire de Contacts d'après le carnet d'adresses : http://user.services.openoffice.org/fr/ ... 058#p60058
Win xp Pro sp2
Access 2000
Projet de gestionnaire de Contacts d'après le carnet d'adresses : http://user.services.openoffice.org/fr/ ... 058#p60058
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
Re: [Base] Ouverture et fermeture de formulaire
Bonjour,
Voici le code (à associer par exemple à un bouton sur l'évènement "Lors du déclenchement") permettant d'enregistrer et fermer un formulaire (voir le fil suivant pour plus de détail : http://user.services.openoffice.org/fr/ ... =8&t=11810) .
Ce code a été trouvé sur http://www.oooforum.org/forum/viewtopic ... 290#272290 fourni par Evgenych.
À bientôt,
Thierry
Voici le code (à associer par exemple à un bouton sur l'évènement "Lors du déclenchement") permettant d'enregistrer et fermer un formulaire (voir le fil suivant pour plus de détail : http://user.services.openoffice.org/fr/ ... =8&t=11810) .
Ce code a été trouvé sur http://www.oooforum.org/forum/viewtopic ... 290#272290 fourni par Evgenych.
Code : Tout sélectionner
REM ***** BASIC *****
option explicit
Function curFormName (o as object) as string
'Fonction qui permet de récupérer le nom du formulaire
Dim args as object, i as integer
args = o.getArgs
for i = lBound(args) to uBound(args)
if args(i).name = "DocumentTitle" then
curFormName = args(i).value
exit for
end if
next
End Function
Sub FermerFormulaireDansBase(oEvent)
oEvent.source.model.parent.updateRow 'met à jour l'enregistrement
thisComponent.parent.FormDocuments.getByName(curFormName (thisComponent)).dispose()'ferme le formulaire
end sub
Thierry
Dernière modification par Oukcha le 06 juil. 2009 10:05, modifié 1 fois.
Raison : Suppression citation modérateur
Raison : Suppression citation modérateur
-
- Membre enthOOusiaste
- Messages : 437
- Inscription : 26 nov. 2006 11:29
- Localisation : Les Corbières
Re: [Base] Ouverture et fermeture de formulaire
Bonjour,
Je viens de découvrir avec la mouture 3.1 un moyen beaucoup plus simple d'ouvrir un formulaire dans Base. Il suffit d'une ligne (sans avoir recours à une macro tierce comme l'habituelle fonction "OpenForm") !
Même chose pour fermer un formulaire :
Quelle simplification ! Attention ce n'est valable que depuis la version 3.1 d'OOo !
Je viens de découvrir avec la mouture 3.1 un moyen beaucoup plus simple d'ouvrir un formulaire dans Base. Il suffit d'une ligne (sans avoir recours à une macro tierce comme l'habituelle fonction "OpenForm") !
Code : Tout sélectionner
ThisDatabaseDocument.FormDocuments.getByName( "NomFormulaire" ).open
Code : Tout sélectionner
ThisDatabaseDocument.FormDocuments.getByName( "NomFormulaire" ).close
Dernière modification par Oukcha le 14 août 2009 19:47, modifié 2 fois.
Raison : Suppression citation modérateur
Raison : Suppression citation modérateur
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?
-
- Membre hOOnoraire
- Messages : 125
- Inscription : 08 juil. 2008 16:31
- Localisation : Orleans / France
Re: [Base] Ouverture et fermeture de formulaire
Bonjour,
Voici encore une autre solution pour ouvrir un formulaire par macro.
Il faut au préalable renseigné le nom du formulaire dans les propriétés du bouton qui déclenche la macro, dans le champ complément d'information.
Si votre formulaire est "logé" dans un dossier de formulaire le champ sera renseigné ainsi : NomDuDossier/NomDuFormulaire, sinon ce sera tout simplement : NomDuFomulaire
Source du code : http://www.oooforum.org/forum/viewtopic.phtml?p=312729#312729
Voici encore une autre solution pour ouvrir un formulaire par macro.
Il faut au préalable renseigné le nom du formulaire dans les propriétés du bouton qui déclenche la macro, dans le champ complément d'information.
Si votre formulaire est "logé" dans un dossier de formulaire le champ sera renseigné ainsi : NomDuDossier/NomDuFormulaire, sinon ce sera tout simplement : NomDuFomulaire
Code : Tout sélectionner
Sub openFormByTag(oEv)
REM OOo3.0: Reads the form name from a calling control's tag
cWhat = com.sun.star.sdb.application.DatabaseObject.FORM
oModel = oEv.Source.getModel()
sName = oModel.Tag
oView = oModel.Parent.Parent.Parent.Parent.getCurrentController()
oView.loadComponent(cWhat, sName, FALSE)
End Sub
Dernière modification par Bidouille le 11 sept. 2009 12:42, modifié 4 fois.
Open Office 3.2.1
Mac OS 10.5.8
Mac OS 10.5.8
-
- Membre hOOnoraire
- Messages : 133
- Inscription : 12 déc. 2007 13:42
Re: [Base] Ouverture et fermeture de formulaire
Salut, j'ai amelioré la base SWITCHBOARD.
En ajoutant la liste des rapports en plus des formulaires avec l'ouverture du menu au lancement de la base(penser à l'enregister dans openoffice)
En ajoutant la liste des rapports en plus des formulaires avec l'ouverture du menu au lancement de la base(penser à l'enregister dans openoffice)
Comme indiqué sur le bandeau rouge en haut de la page :
Toute question relative à ce sujet devra obligatoirement être posée en section MACROS ET API et non à la suite de ce message.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Bidouille le 11 sept. 2009 12:43, modifié 1 fois.
Raison : Insertion citation
Raison : Insertion citation
Windows 7 PRO Libre Office 4.1.3.2
Si je peu aider je n'hésite pas
Si je peu aider je n'hésite pas
-
- NOOuvel adepte
- Messages : 17
- Inscription : 15 déc. 2009 09:33
Re: [Base] Ouverture et fermeture de formulaire
Bonjour, je sais que ceci pourra aider d'autres personnes qui ne connaissent pas grand chose à la programmtion dans BASE. Pour les personnes désirant cr'éer une base avec plusieurs formulaires, lorsque l'on crée un bouton pour naviguer d'un fomulaire à un autre, l'ouverture se fait mais souvent on se retrouve avec plusieurs formulaires ouverts en second plan. Il serait alors utile de coupler dans la même macro l'ouverture du nouveau formulaire ainsi que la fermeture du formulaire de départ. Pour ma part je procède ainsi :
J'éspère que cela pourra aider certains utilisateurs de OooBase !
Code : Tout sélectionner
Sub OuvertureFermeture( oEvent as variant )
ThisDatabaseDocument.FormDocuments.getByName( "nom_du_formulaire_à_ouvrir" ).open
ThisDatabaseDocument.FormDocuments.getByName("nom_du_formulaire_à_fermer").close
end sub
Openoffice 3.0 sous Windows XP SP3
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Principe d'ouverture et fermeture de formulaire
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 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.
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.
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
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. 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
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+
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 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
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
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
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. 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
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+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Piaf le 20 févr. 2012 10:50, modifié 1 fois.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
-
- GourOOu
- Messages : 5622
- Inscription : 25 nov. 2011 18:07
- Localisation : Guyane
Ouverture d'un formulaire sur un enregistrement
Bonjour
La grande majorité des exemples de ce post est une adaptation pour l'ouverture d'un second formulaire
du code de P.Y. SAMYN dans son tutoriel [Base]Sélectionner un enreg. avec une liste déroulante
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
La fonction OuvrirFormulaire est la même que dans le post précédent.
Précisions au sujet des noms de formulaires
Dans base, le terme "formulaire" recouvre deux notions distinctes :
Dans la base exemple, les deux objets portent le même nom.
Ce qui simplifie le code puisque le nom est récupéré dans le complément d'information(Tag) du bouton Appelant la macro.
La ligne Permet de passer du premier Objet au second
Merci à spYre pour les explications techniques Le bouton Par requête.
Construit une requête sur les enregistrements du formulaire à ouvrir
ne contenant que l'enregistrement correspondant à la sélection dans la liste.
Le formulaire une fois ouvert ne contient qu'un enregistrement.
Le bouton Par filtre.
Filtre le formulaire à ouvrir sur le champ correspondant à la liste
avec comme valeur la sélection de la liste.
Le formulaire une fois ouvert contient tous les enregistrements mais est verrouillé sur celui de la sélection.
On ne peut donc pas naviguer dans les enregistrements sans supprimer le filtre.
Pour le vérifier il suffit de supprimer le filtre.
Le masquage du bouton Supprimer le filtre
Le Bouton Par signet.
Créer une copie(resultset) des enregistrements du formulaire à ouvrir.
Recherche la valeur sélectionnée dans le champs de la copie correspondant à la liste.
Une fois trouvé, défini le signet du formulaire à celui de l'enregistrement de la copie.
Le formulaire une fois ouvert contient tous les enregistrements et permet la navigation.
Le Bouton Nouvel enregistrement.
Positionne le jeu d'enregistrements du formulaire sur un Nouvel enregistrement.
Quelques liens pour aller plus loin.
http://user.services.openoffice.org/fr/ ... 29&t=14662
http://user.services.openoffice.org/fr/ ... =15&t=6367
A+
La grande majorité des exemples de ce post est une adaptation pour l'ouverture d'un second formulaire
du code de P.Y. SAMYN dans son tutoriel [Base]Sélectionner un enreg. avec une liste déroulante
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
La fonction OuvrirFormulaire est la même que dans le post précédent.
Précisions au sujet des noms de formulaires
Dans base, le terme "formulaire" recouvre deux notions distinctes :
- - le document formulaire proprement dit.
Ce premier objet est celui affiché dans la fenêtre Formulaires de la base de données.
Il dispose des propriétés d'un document texte(SwXTextDocument) à ce niveau le formulaire est une page Writer.
- - à l'intérieur de ce document, la couche logique assurant l'interface entre les contrôles et la table sous-jacente.
Ce deuxième objet est celui que l'on explore par clic-droit sur contrôle -> Formulaire (ou via l'explorateur de formulaire dans la barre d'outils Ébauche de formulaire).
Il dispose des propriétés d'un document Formulaire(com.sun.star.comp.forms.ODatabaseForm)
On parle aussi de la Vue du formulaire.
Dans la base exemple, les deux objets portent le même nom.
Ce qui simplifie le code puisque le nom est récupéré dans le complément d'information(Tag) du bouton Appelant la macro.
La ligne
Code : Tout sélectionner
NouveauFormulaire = NouveauFormulaire.DrawPage.Forms.getByName(nomFormulaire)
Merci à spYre pour les explications techniques Le bouton Par requête.
Construit une requête sur les enregistrements du formulaire à ouvrir
ne contenant que l'enregistrement correspondant à la sélection dans la liste.
Le formulaire une fois ouvert ne contient qu'un enregistrement.
Code : Tout sélectionner
Sub PositionParRequete(oEv as Object)
Dim oForm as Object, ctrlListeChoix as Object, NouveauFormulaire as Object
Dim ValeurChoix as String, sqlSelect as String, nomFormulaire As String
'Le formulaire actif en l'occurrence fForm1
oForm = oEv.Source.Model.Parent
'Le contrôle Zone de liste Choix de l'enregistrement
ctrlListeChoix = oForm.getByName("lstChoix")
'vérifie qu'une entrée soit sélectionnée dans la zone de liste
If ctrlListechoix.currentvalue<>"" then
'Récupère la valeur sélectionnée
ValeurChoix = ctrlListechoix.CurrentValue
Else
msgbox ("Vous devez sélectionner une entrée dans la Zone de liste",64,"Ouverture formulaire sur enregistrement")
Exit sub
End If
'Instruction SQL sélectionnant l'enregistrement de la table tenregistrements correspondant au critère
sqlSelect = "SELECT tEnregistrement.* FROM tEnregistrement WHERE Enregistrement ='" & ValeurChoix & "'"
'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)
NouveauFormulaire = NouveauFormulaire.DrawPage.Forms.getByName(nomFormulaire)
'défini le type de contenu du formulaire à instruction SQL
'la commande est utile car par défaut le type de contenu est sur Table
NouveauFormulaire.Commandtype = 2
'défini le contenu du formulaire (la requête SELECT)
NouveauFormulaire.Command = sqlSelect
End Sub
Filtre le formulaire à ouvrir sur le champ correspondant à la liste
avec comme valeur la sélection de la liste.
Le formulaire une fois ouvert contient tous les enregistrements mais est verrouillé sur celui de la sélection.
On ne peut donc pas naviguer dans les enregistrements sans supprimer le filtre.
Pour le vérifier il suffit de supprimer le filtre.
Code : Tout sélectionner
Sub PositionParFiltre(oEv as Object)
'La récupération des différentes variables est la même que dans la procédure précédente
Dim oForm as Object, ctrlListeChoix as Object, NouveauFormulaire as Object
Dim ValeurChoix as String, nomFormulaire As String
oForm = oEv.Source.Model.Parent
ctrlListeChoix = oForm.getByName("lstChoix")
If ctrlListechoix.CurrentValue<>"" then
ValeurChoix = ctrlListeChoix.CurrentValue
Else
msgbox ("Vous devez sélectionner une entrée dans la Zone de liste",64,"Ouverture formulaire sur enregistrement")
Exit sub
End If
nomFormulaire = oEv.Source.Model.Tag
NouveauFormulaire= OuvrirFormulaire(nomFormulaire)
with NouveauFormulaire.drawpage.forms.getbyname(nomFormulaire)
'Défini le champ à filtrer et le filtre à appliquer
.Filter="""Enregistrement"" ='" & ValeurChoix & "'"
'Applique le filtre
.Applyfilter = True
if .isloaded = false then
.load
else
.reload
end if
end with
'rend visible le bouton supprimer le filtre
NouveauFormulaire = NouveauFormulaire.DrawPage.Forms.getByName(nomFormulaire)
NouveauFormulaire.getByname("cmdSupFiltre").EnableVisible = true
end sub
Code : Tout sélectionner
sub SupprimerFiltre(oEv)
'Supprime le filtre et cache le bouton Supprimer filtre
dim oForm as object
oForm = oEv.Source.Model.Parent
oForm.ApplyFilter = False
oForm.getByname("cmdSupFiltre").EnableVisible = False
oForm.reload()
end sub
Créer une copie(resultset) des enregistrements du formulaire à ouvrir.
Recherche la valeur sélectionnée dans le champs de la copie correspondant à la liste.
Une fois trouvé, défini le signet du formulaire à celui de l'enregistrement de la copie.
Le formulaire une fois ouvert contient tous les enregistrements et permet la navigation.
Code : Tout sélectionner
Sub PositionParSignet(oEv as Object)
Dim oForm as Object, ctrlListeChoix as Object, NouveauFormulaire as Object
Dim ValeurChoix as String, nomFormulaire As String
Dim Enregistrements as Object, EnregistrementEnCours as object
dim Cherche as String, Trouve as Boolean
oForm = oEv.Source.Model.Parent
ctrlListeChoix = oForm.getByName("lstChoix")
If ctrlListechoix.CurrentValue<>"" then
ValeurChoix = ctrlListeChoix.CurrentValue
Else
msgbox ("Vous devez sélectionner une entrée dans la Zone de liste",64,"Ouverture formulaire sur enregistrement")
Exit sub
End If
nomFormulaire = oEv.Source.Model.Tag
NouveauFormulaire = OuvrirFormulaire(nomFormulaire)
NouveauFormulaire = NouveauFormulaire.DrawPage.Forms.getByName(nomFormulaire)
'attend que le nouveau formulaire soit ouvert
Do while NouveauFormulaire.isLoaded = false
Loop
'Créer un clone(resultset) des enregistrement du formulaire
Enregistrements = NouveauFormulaire.createResultSet()
'défini le critère de recherche
Cherche = ValeurChoix
'se déplace avant le premier enregistrement
Enregistrements.beforeFirst
'Précise qu'il n'a pas trouvé
Trouve = false
'Boucle sur les enregistrements du resultset
'tant qu'il existe des enregistrements et que le critère n'est pas trouvé dans la colonne Enregistrement
do while Enregistrements.next() and Trouve = false
EnregistrementEnCours = Enregistrements.columns.getByName("Enregistrement")
's'il trouve l'enregistrement précise qu'il a trouve
if EnregistrementEnCours.String = Cherche then
Trouve = true
'Sort de la boucle
exit do
end if
loop
'si l'enregistrement a été trouvé aligne le signet du formulaire sur celui du resultset
if Trouve = true then
NouveauFormulaire.moveToBookmark(Enregistrements.Bookmark)
else
'si à la fin de la boucle, l'enregistrement n'est pas trouvé affiche un message
msgbox("Enregistrement non trouvé", 64, "Ouverture formulaire sur enregistrement")
end if
end sub
Positionne le jeu d'enregistrements du formulaire sur un Nouvel enregistrement.
Code : Tout sélectionner
Sub PositionNouveau(oEv as Object)
Dim NouveauFormulaire as Object
Dim nomFormulaire As String
'même procédé pour ouvrir le formulaire
nomFormulaire = oEv.Source.Model.Tag
NouveauFormulaire = OuvrirFormulaire(nomFormulaire)
NouveauFormulaire = NouveauFormulaire.DrawPage.Forms.getByName(nomFormulaire)
'attend que le formulaire soit chargé
Do while NouveauFormulaire.isLoaded = false
Loop
with NouveauFormulaire
'se positionne sur un nouvel enregistrement
.moveToInsertRow
End with
end sub
http://user.services.openoffice.org/fr/ ... 29&t=14662
http://user.services.openoffice.org/fr/ ... =15&t=6367
A+
Comme indiqué sur le bandeau rouge en haut de la page :
Toute question relative à ce sujet devra obligatoirement être posée en section MACROS ET API et non à la suite de ce message.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.