[Résolu][Base] Ouvrir les formulaires sur un nouvel enregistrement

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 !
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26242
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Ouvrir les formulaires sur un nouvel enregistrement

Message par Dude »

Alors déjà, je trouve particulièrement désobligeant le fait que tu enlèves la mention de l'origine de la macro. :evil:
Il y a une question de respect pour l'auteur lorsque l'on pompe son travail.
gaelviller a écrit : ↑20 mai 2024 10:26 Alors, ça fonctionne, mais ça reste limité à des tables "légères"... Si la table contient beaucoup d'enregistrements
Quel est intérêt de charger une table si c'est pour se positionner sur un nouvel enregistrement ?
Problème XY et on en revient à la solution de jeanmimi.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
gaelviller
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 12 mai 2024 15:50

Re: [Base] Ouvrir les formulaires sur un nouvel enregistrement

Message par gaelviller »

Alors, j'ai généré des données pour remplir la table et je vous joins le résultat :
DB_Test.odb
L'ouverture du formulaire ne se fait pas sur 'nouvel enregistrement'...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2
gaelviller
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 12 mai 2024 15:50

Re: [Base] Ouvrir les formulaires sur un nouvel enregistrement

Message par gaelviller »

Bonjour,
Dude a écrit : ↑20 mai 2024 13:31 Alors déjà, je trouve particulièrement désobligeant le fait que tu enlèves la mention de l'origine de la macro. :evil:
Il y a une question de respect pour l'auteur lorsque l'on pompe son travail.
Loin de moi l'idée de me montrer désobligeant. N'étant pas habitué au fonctionnement de ce forum, j'en découvre les habitudes. Je n'ai pas souhaité manquer de respect à l'auteur auquel j'ai "pompé" le travail (je pense avoir cité dans mes messages précédents mes sources d'inspiration). Si j'ai heurté, sans le vouloir, certains membres en allégeant le code de la macro, je vous prie de bien vouloir m'en excuser. J'ai pensé que ces informations étaient à mon attention afin de me permettre de retrouver les notions apportées. Ce que j'ai tenté de faire ce n'était qu'exposer les informations qui me semblaient utiles pour m'assurer que j'avais bien compris les éléments en place. S'il est nécessaire que certaines mentions soient remises pour le partage commun, n'hésite pas à me le signaler ou à repartager le code ! :super:
Dude a écrit : ↑20 mai 2024 13:31 Problème XY
J'ai exposé dans le titre de ce fil une demande : ouvrir un formulaire "automatiquement" sur un nouvel enregistrement (besoin X exposé dans le titre et dans mes messages tout au long du fil). Etant donné que ma base est constituée de formulaires reliés entre eux par des boutons (et donc des macros), j'ai souhaité orienter ma demande dans ce sens (besoin Y exprimé dans les messages). Cependant, je ne veux pas brider la créativité de chacun (il y a sûrement plusieurs moyens d'atteindre un même objectif) ! Si tu as une solution pour que ça fonctionne simplement à l'ouverture de n'importe quel formulaire, merveilleux, je prends ! :bravo:

Merci pour le temps accordé.
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26242
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Ouvrir les formulaires sur un nouvel enregistrement

Message par Dude »

gaelviller a écrit : ↑20 mai 2024 18:56 en allégeant le code de la macro
Tu n'allèges rien en enlevant la référence à la source.
gaelviller a écrit : ↑20 mai 2024 18:56 Si tu as une solution pour que ça fonctionne simplement à l'ouverture de n'importe quel formulaire
Bis repetitae :
Dude a écrit : ↑20 mai 2024 13:31 on en revient à la solution de jeanmimi.
Car il n'y a aucun
Dude a écrit : ↑20 mai 2024 13:31 intérêt de charger une table si c'est pour se positionner sur un nouvel enregistrement

Code : Tout sélectionner

Sub Ouvrir_Type
	const FormAOuvrir ="Form-Type"'[nomFormulaire-àouvrir]
	const FormAFermer ="MENU"'[nomFormulaire-àfermer]
	'issue du suprême https://forum.openoffice.org/fr/forum/viewtopic.php?p=178282#p178282
	'ne pas supprimer cette référence quand on pompe
	oForms = ThisDatabaseDocument.FormDocuments
	Lien = oForms.getbyname(FormAOuvrir).open
	oForm = Lien.DrawPage.Forms.getByName("MainForm")'[nom"sous"Formulaire]
	
	With oForm
		Do while .isLoaded = false
		Loop
		.last
		.moveToInsertRow
	End with
	
	bRet = oForms.getByName(FormAFermer).close
End Sub
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
gaelviller
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 12 mai 2024 15:50

Re: [Base] Ouvrir les formulaires sur un nouvel enregistrement

Message par gaelviller »

Dude a écrit : ↑20 mai 2024 19:33 Bis repetitae :
Dude a écrit : ↑20 mai 2024 13:31 on en revient à la solution de jeanmimi.
J'entends bien, cependant, cette solution rend le formulaire inexploitable puisque le contrôle de table est alors rendu inopérant. Il n'est donc pas possible d'y voir les enregistrements déjà saisis, or cette base de données sera ensuite exploitée par différents utilisateurs. Ça complique grandement les choses de ne plus pouvoir utiliser les outils disponibles...
Dude a écrit : ↑20 mai 2024 19:33 Car il n'y a aucun
Dude a écrit : ↑20 mai 2024 13:31 intérêt de charger une table si c'est pour se positionner sur un nouvel enregistrement
Encore une fois, je comprends bien que, à tes yeux d'utilisateur averti, il n'y a aucun intérêt. Cependant, si j'ai initié ce post, c'est parce que d'autres avant moi avaient eu la même idée (depuis 2008...). Ils ont trouvé de l'aide ici grâce à des personne bienveillantes et sont arrivés au résultat souhaité (résultat que je n'arrive pas à adapter à ma base, j'en conviens !) Ceci-dit, même en relisant leurs échanges, il ne se trouve personne qui leur ait répondu ce genre d'affirmation ! :roll:
Dude a écrit : ↑20 mai 2024 19:33

Code : Tout sélectionner

'ne pas supprimer cette référence quand on pompe
Hmm... Je sens le message personnel !
PS : Merci pour le code, j'étais en train de le ré-écrire pour le republier. Tu es bien plus expert que moi, à n'en point douter ! :super:
D'ailleurs, le .last n'était pas présent à l'origine, je vais le tester...
[Edit] J'ai testé avec ta proposition de code, mais je reviens au même résultat. Cependant, en reprenant une autre manière de coder, ça semble fonctionner : (Je me suis permis de retirer le message perso ! :wink: )

Code : Tout sélectionner

Sub Ouvrir_Type'[nomMacro]
	const FormAOuvrir ="Form-Type"'[nomFormulaire-àouvrir]
	const FormAFermer ="MENU"'[nomFormulaire-àfermer]
		oForms = ThisDatabaseDocument.FormDocuments
		Lien = oForms.getbyname(FormAOuvrir).open
		'issue du suprême https://forum.openoffice.org/fr/forum/viewtopic.php?p=178282#p178282
		oForm = Lien.DrawPage.Forms.getByName("MainForm")'[nom"sous"Formulaire]
		'attend que le formulaire soit chargé
		Do while oForm.isLoaded = false
		Loop
		wait 100 '[attente en ms]
		with oForm	
			.last
			.moveToInsertRow
		End with
	bRet = oForms.getByName(FormAFermer).close
End Sub
J'ai testé sans la variable wait, mais ça ne fonctionnait pas, puis j'ai re-testé avec différentes durées de plus en plus courte jusqu'à 1, sans rencontrer le moindre pb donc je pense que laisser à 100 est un bon compromis... Mais comme je ne m'y connais pas, je demande l'avis d'un habitué ! [/Edit]
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26242
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Ouvrir les formulaires sur un nouvel enregistrement

Message par Dude »

gaelviller a écrit : ↑20 mai 2024 20:52 cette solution rend le formulaire inexploitable puisque le contrôle de table est alors rendu inopérant
Un formulaire avec un contrôle de table peut disposer d'une barre de navigation qui permet d'avoir un bouton pour ajouter un nouvel enregistrement.
Cela me semble parfaitement exploitable et surtout ne nécessite aucune macro et surtout pas la gymnastique de codage que tu as ici.


gaelviller a écrit : ↑20 mai 2024 20:52 J'ai testé sans la variable wait, mais ça ne fonctionnait pas
L'attente est inutile sous OpenOffice (testé sous Windows 10 et Debian 12) avec ton ODB.
La temporisation est sans doute nécessaire pour LibreOffice uniquement (ou MacOS).



Comment clore le sujet : viewtopic.php?t=3299
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: [Base] Ouvrir les formulaires sur un nouvel enregistrement

Message par jeanmimi »

En application de ce que tu as pu lire plus avant, je te propose la solution que j'avais émise :
dans le formulaire, la partie haute ne permet la saisie que d'un nouvel enregistrement, la partie basse, après clic sur le bouton, afficha dans le contrôle de Table les derniers enregistrements effectués.
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