[Résolu][Base] ouverture fermeture formulaire supreme code

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 !
bestplayer44
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 20 sept. 2011 20:56

[Résolu][Base] ouverture fermeture formulaire supreme code

Message par bestplayer44 »

bonjour à tous
je voulais vous proposer ma solution pour fermer un formulaire actif et ouvrir un autre formulaire style Menu par exemple.

après avoir étudié les "suprêmes codes" et m'étant intéressé depuis peu à la macro, j'ai fini par obtenir ce code ci joint qui me semble plus simple et court grâce à la macro Xray qui m'a permis de trouver un raccourcis pour trouver le nom du formulaire et grâce à tous les autres suprêmes codes précédents sur le sujet.

Code : Tout sélectionner

Sub RETOUR_ACCUEIL

Dim oDoc as Object
Dim oFormAFerme as object
CONST oFORMaOuvrir = "MENU ACCUEIL"

oDoc=stardesktop.currentcomponent
ThisDataBaseDocument.FormDocuments.getbyname(oDoc.args(7).value).close
ThisDataBaseDocument.FormDocuments.getbyname(oFORMaOuvrir).open


End Sub
dans l'exemple "menu accueil" est le nom du formulaire existant
"oDoc.args(7).value" est le raccourcis pour trouver le nom du formulaire actif et le reste est le même code trouvé sur les postes précédents.

ce code est bien sûr à assigner à un bouton par exemple qui en l'exécutant doit fermer le formulaire actif et ouvrir le formulaire nommé '"menu accueil"

dites moi si il a sa place dans le suprême code .

cordialement
Dernière modification par bestplayer44 le 15 juin 2026 16:58, modifié 1 fois.
OpenOffice.org 4.1.2 sur Windows 10
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 540
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: ouverture fermeture formulaire supreme code

Message par Noonours »

Bonjour à tous,
Tout d'abord, tu devrais baliser le titre de ton sujet avec la balise [Base] puisque c'est avec ce module que ta macro doit fonctionner.
De plus, l'argument passé "oDoc.args(7).value" ne fonctionne que sur ton fichier, il a été certainement initialisé en amont dans ta macro d'origine; pour moi il prend la valeur 0.
Je ne suis pas spécialiste en macros spécifiques Base, l'avis d'experts passants ici sauront mieux t'éclairer. :wink:
Cordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 25.8.5.2 (recommandée) et OpenOffice 4.1.16 sous Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17220
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: ouverture fermeture formulaire supreme code

Message par jeanmimi »

Bonjour,
bestplayer44 a écrit : 13 juin 2026 09:24 solution pour fermer un formulaire actif
Il est aussi possible de fermer un formulaire sans avoir un recours à une Macro, ce qui simplifie la maintenance de la Base.
Ci-dessous la propriété du Bouton du formulaire (si la copie d’écran veut bien suivre) :
Fermeture de formulaire sans Macro.jpg
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
bestplayer44
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 20 sept. 2011 20:56

Re: ouverture fermeture formulaire supreme code

Message par bestplayer44 »

Noonours a écrit : 13 juin 2026 12:45 Bonjour à tous,
Tout d'abord, tu devrais baliser le titre de ton sujet avec la balise [Base] puisque c'est avec ce module que ta macro doit fonctionner.
De plus, l'argument passé "oDoc.args(7).value" ne fonctionne que sur ton fichier, il a été certainement initialisé en amont dans ta macro d'origine; pour moi il prend la valeur 0.
Je ne suis pas spécialiste en macros spécifiques Base, l'avis d'experts passants ici sauront mieux t'éclairer. :wink:
Cordialement,
bonjour pour moi aussi args(7).value renvoie 0 si j'exécute la macro depuis l'EDI basic il faut l'exécuter du formulaire actif sinon chercher avec Xray le numéro de l'args() qui correspond à documentTitle lorsque vous lancez Xray du formulaire actif de votre base de donnée.
mais peut être qu'en effet le logiciel crée des args() différent pour chaque base créée. je ne sais pas, pas assez ,voir pas du tout informaticien :oops:

pour votre astuce avec la propriété du bouton je ne connaissais pas. mais est ce qu'on peut rajouter une macro pour ouvrir le formulaire suivant sur le même bouton ou est ce que cette propriété ne ferme que le formulaire ?

j'espère que cela puisse servir à d'autres personnes malgré tout

bonne continuation et programmation
OpenOffice.org 4.1.2 sur Windows 10
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12878
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Base] ouverture fermeture formulaire supreme code

Message par Bidouille »

Bonjour,
bestplayer44 a écrit : 13 juin 2026 09:24 après avoir étudié les "suprêmes codes" et m'étant intéressé depuis peu à la macro, j'ai fini par obtenir ce code ci joint qui me semble plus simple et court
Je ne vois pas trop ce qu'apporte votre code par rapport au suprême existant et notamment l'exemple complet de Piaf.
Pouvez-vous joindre un ODB pour l'illustrer ?
bestplayer44
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 20 sept. 2011 20:56

Re: [Base] ouverture fermeture formulaire supreme code

Message par bestplayer44 »

Bidouille a écrit : 16 juin 2026 06:20 Je ne vois pas trop ce qu'apporte votre code par rapport au suprême existant et notamment l'exemple complet de Piaf.
Pouvez-vous joindre un ODB pour l'illustrer ?
Bonjour, voici en piece jointe un exemple de navigation entre formulaire dans une base de donnée.
dans le formulaire "MENUS" le premier bouton utilise les 2 lignes de la macro et le second utilise la fermeture sans macro de piaf.
le problème, comme disait piaf, est qu'il n'enregistre pas les modifications et ne réouvre pas un formulaire souhaité.
ensuite le "args(7).value" semble marcher aussi sur cette nouvelle base de donnée créée pour l'exemple.

comme je disais précédemment, il suffit juste de modifier le nom du formulaire à ouvrir dans la macro et non les 2 comme dans la première macro proposée par thierryM le 06/07/2009.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 17 juin 2026 09:04, modifié 1 fois.
Raison : Citation réduite au minimum nécessaire
OpenOffice.org 4.1.2 sur Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26222
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] ouverture fermeture formulaire supreme code

Message par Dude »

Salut,

Tu te sers de Const alors que c'est une variable. Relire l'aide F1 du Basic :
capture.png

Ton code serait plus simple à maintenir de cette façon :

Code : Tout sélectionner

Sub RETOUR_ACCUEIL
	OuvreEtFerme("MENU ACCUEIL")
End Sub

Sub RETOUR_ATCD
	OuvreEtFerme("MENU ATCD")
End Sub

Sub RETOUR_ATCD_FAMILIAUX
	OuvreEtFerme("ATCD FAM")
End Sub

Sub RETOUR_ATCD_MEDICAUX
	OuvreEtFerme("ATCD MED")
End Sub

Sub RETOUR_ATCD_TRAUMATIQUES
	OuvreEtFerme("ATCD TRAUM")
End Sub

Sub OuvreEtFerme(sOuvre)
	sFerme = ThisComponent.Args(7).Value
	ThisDataBaseDocument.FormDocuments.getbyname(sFerme).close
	ThisDataBaseDocument.FormDocuments.getbyname(sOuvre).open
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
bestplayer44
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 20 sept. 2011 20:56

Re: [Base] ouverture fermeture formulaire supreme code

Message par bestplayer44 »

bonjour et merci pour cette simplification
en fait le code avec "const" je l'avais pris sur une vieille vidéo youtube qui reprenait le code ressemblant au premier supreme code pour la fermeture et ouverture de formulaire.
je l'ai gardé en copier coller par la suite car il avait l'air de marcher.

effectivement cette simplification est plus claire . une question par contre la variable sOuvre ne se définit pas. on a pas besoin de la déclarer avec Dim est elle immédiatement reconnue par la création de la fonction OuvreetFerme ?

désolé je n'ai pas encore la logique de l'informaticien ou du programmeur pour la syntaxe la plus limpide.

sinon sur le principe vous validez la simplification du code à 2 ou 3 lignes ?

merci encore de vos retours d'expert
OpenOffice.org 4.1.2 sur Windows 10
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 540
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Base] ouverture fermeture formulaire supreme code

Message par Noonours »

Bonjour à tous,
bestplayer44 a écrit :une question par contre la variable sOuvre ne se définit pas. on a pas besoin de la déclarer avec Dim est elle immédiatement reconnue par la création de la fonction OuvreetFerme ?
En Basic, les variables ne sont pas obligatoirement déclarées, sauf si la commande Option Explicit est mentionnée en début de script.
Par défaut, elles sont du type "Variant".
De plus, si elles sont passées en argument d'une Sub ou d'une Function, tu peux les déclarer avec "As", pour s'assurer que le paramètre soit du bon type; ex:

Code : Tout sélectionner

Function MaFonction(MonParametre As String)
[...]
End Function
Dans ce cas, cela déclenchera une erreur si 'MonParametre' n'est pas une chaine de caractères.
Tu peux aussi "verrouiller" le paramètre avec ByVal, ce qui l'empêche d'être modifié. ex:

Code : Tout sélectionner

Function MaFonction(ByVal MonParametre As Long)
[...]
End Function
Dans ce cas, la variable 'MonParametre' ne pourra pas être transformée en type Double, ou String, etc.
Pour ByVal, tu trouveras à la page 177 du guide d'Andrew Pytoniak:
Andrew Pytoniak a écrit :17.13ByVal (Mot-clé)
Description :
Les paramètres des procédures et des fonctions définies par l'utilisateur sont passés par référence. Si
la procédure ou fonction modifie le paramètre, la modification est reportée dans la procédure ou fonction
appelante. Ceci peut amener un comportement plus ou moins étrange si le paramètre appelant est une
constante, ou si la procédure ou fonction appelante n'attend pas cette modification. Le mot-clé ByVal
spécifie que l'argument doit être passé par valeur et non par adresse (référence).
Cordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 25.8.5.2 (recommandée) et OpenOffice 4.1.16 sous Windows 10