[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 !
gaelviller
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 12 mai 2024 15:50

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

Message par gaelviller »

Bonjour,
Je travaille sur une base de données avec LibreOffice Base 7.6.
En suivant divers tutos et posts, j'ai réussi à mettre en oeuvre ma base et mes données.
J'ai ensuite créé mes formulaires pour faciliter la saisie des données. Et j'ai inséré des boutons depuis un formulaire MENU pour accéder aux autres formulaires. Tout cela fonctionne à merveille (chapeau aux devs pour leur travail :D ).

Cependant, du fait de mon manque de connaissance, je ne parviens pas à ouvrir mes formulaires "de saisie" sur un nouvel enregistrement (il m'affiche systématiquement le premier de la table. Comment procéder ? :?:

Bien-sûr avant de poster ce message, j'ai cherché sur le forum et dans différentes documentations disponible, sans résultat (les posts glanés sur ce forum datent de 2008 (viewtopic.php?t=10739) et 2010 (viewtopic.php?t=26120), mais les codes proposés ne semblent pas fonctionner sur ma version de LibreOffice :roll: ).

Merci pour votre aide et votre compréhension. :super:

EDIT : Pour exemple, voici une base 'basique' en version 'locale' avec une table et deux formulaires :
DB_Test.zip
Cependant, pour l'utiliser, il vous faudra la version 2.7.2 de HSQLDB https://hsqldb.org/... (infos de config plus bas)
Et la même base en version 'intégrée' (CF échanges plus bas) :
DB_Test(Int).odb
SOLUTION FINALE :
Si toutefois certains pouvaient avoir besoin, voici la macro qui semble fonctionner :

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
Elle est utilisée dans la base de données de test suivante :
DB_Test.odb
Merci à tous pour votre aide précieuse pour arriver à ce résultat !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par gaelviller le 13 juin 2024 16:42, modifié 9 fois.
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2
Avatar de l’utilisateur
tintin
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 10229
Inscription : 18 juil. 2008 15:29
Localisation : F-Oise

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

Message par tintin »

Bonjour et bienvenue,
gaelviller a écrit : ↑12 mai 2024 16:09 PS : Si nécessaire, je peux refaire une base 'basique' et deux formulaires pour exemple.
C'est toujours mieux avec que sans.
Comment joindre un fichier.
AOO 4.1.16 et LibO 26.2.6 / macOS M4 26.7.1 Tahoe
Adoptium-temurinJDK-1.8.0.504 / Firefox/Safari/Thunderbird /Time Machine + Clone CCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
gaelviller
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 12 mai 2024 15:50

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

Message par gaelviller »

Bonsoir,
Oui, j'y ai bien pensé... Du coup je l'ai jointe à mon premier message pour pas faire traîner la chose.
Cependant, sur mes postes, j'utilise HSQLDB en version 2.7.2 qui, après téléchargement, a été ajouté dans les options/préférences avancées de LibO en tant "chemin de classe" liés à l'environnement java en cliquant ensuite sur "ajouter une archive..." (pour le fichier hsqldb.jar) et "ajouter un dossier" (pour le dossier contenant le fichier hsqldb.jar).
Je ne pense pas que beaucoup de personnes font ça... Si vous faîtes cette configuration, LibO risque ne ne plus être capable d'ouvrir vos bases issues d'anciennes versions. Heureusement, pour récupérer votre environnement 'normal' après, il suffira de supprimer dans les "chemins de classe" le chemin de l'"archive" et du "dossier".
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 formulaire sur un nouvel enregistrement

Message par Dude »

Salut,
gaelviller a écrit : ↑12 mai 2024 20:15 Cependant, sur mes postes, j'utilise HSQLDB en version 2.7.2
Afin d'écarter un problème avec une source externe, merci de joindre un ODB avec le mode natif HSQLDB.
gaelviller a écrit : ↑12 mai 2024 16:09 je ne parviens pas à ouvrir mes formulaires "de saisie" sur un nouvel enregistrement (il m'affiche systématiquement le premier de la table. Comment procéder ?
Tout cela fait l'objet d'un suprême de code : viewtopic.php?f=15&t=6355
Teste déjà le fichier pour voir s'il fonctionne avec ta version.
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 formulaire sur un nouvel enregistrement

Message par jeanmimi »

Bonjour,
gaelviller a écrit : ↑12 mai 2024 16:09 je ne parviens pas à ouvrir mes formulaires "de saisie" sur un nouvel enregistrement (il m'affiche systématiquement le premier de la table. Comment procéder ?
Hors Macro,
il faut procéder comme décrit dans l'Aide : créer un formulaire dont la Propriété sera de ne saisir que les nouvelles données.
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
gaelviller
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 12 mai 2024 15:50

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

Message par gaelviller »

Bonjour,
Dude a écrit : ↑13 mai 2024 06:22 Afin d'écarter un problème avec une source externe, merci de joindre un ODB avec le mode natif HSQLDB.
Je comprends bien... Désolé, je vais tenter de tout recommencer en mode 'normal'. [EDIT : C'est fait ! voir premier post pour retrouver le fichier .odb] Cependant, ma situation (formulaire qui s'ouvre systématiquement sur le premier enregistrement de la table) semble être la norme sur les formulaires depuis de nombreuses versions... Ce n'est pas votre cas ?
Dude a écrit : ↑13 mai 2024 06:22 Tout cela fait l'objet d'un suprême de code : viewtopic.php?f=15&t=6355
Teste déjà le fichier pour voir s'il fonctionne avec ta version.
J'ai regardé, mais les codes proposés ne semblent pas fonctionner sur une base créée avec les dernières versions de LibO. Par exemple, j'ai testé le code pour ouvrir automatiquement un formulaire au lancement de la base, il n'a pas fonctionné car certaines fonctions des marcos ne sont plus fonctionnelles. Aussi j'ai dû l'adapter pour parvenir à l'utiliser... Et j'ai réussi, sans vraiment être certain que ça fonctionnerait.
Après, la solution qui s'approche le plus de ma recherche, mais que je ne parviens pas à adapter, c'est cette partie :
Piaf a écrit : ↑19 févr. 2012 11:05 Le Bouton Nouvel enregistrement.
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
Hélas, impossible à intégrer dans ma base (n'est-elle pas "configurée" pour pouvoir l'utiliser ?)...
jeanmimi a écrit : ↑13 mai 2024 09:22 Hors Macro,
il faut procéder comme décrit dans l'Aide : créer un formulaire dont la Propriété sera de ne saisir que les nouvelles données.
Merci pour l'idée, cependant, cela me bloque complètement la visualisation de ma table dans le tableau affiché sur le formulaire... :?
J'avais commencé par là, mais le résultat n'était pas celui escompté...
Une autre idée ?

Dans les liens partagés dans mon premier message, il y a du code pour les macros, mais je ne suis pas assez connaisseur pour les adapter à mes besoins... Il semblerait qu'il faille configurer une fonction avec "moveToInsertRow". Mais LibO me rétorque systématiquement :
"Erreur d'exécution BASIC.
Propriété ou méthode non trouvée : moveToInsertRow."

J'ai testé plusieurs méthodes dans cette base :
DB_Test(Int).odb
Avec différents boutons appelant chacun une macro différente, mais encore une fois sans résultat.

Le post le plus récent trouvé qui semble avoir apporté une réponse c'est https://ask.libreoffice.org/t/dernier-e ... ire/104011, cependant, je ne comprends absolument pas comment l'adapter à HSQLDB (en intégré ou en local).

Si quelqu'un savait faire, ça m'aiderait ! :oops:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par gaelviller le 13 mai 2024 17:54, modifié 1 fois.
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 »

Est-ce que tu comprends au moins ce que tu fais où tu programmes au petit bonheur ?
Regarde ta routine si je clique sur "NewRecord"

Code : Tout sélectionner

Sub FarmerNew_newRecord
	oForm = ThisDatabaseDocument.FormDocuments.getByName("Form-Type")
	oForm = oForm.Component.DrawPage.Forms.getByIndex(0)
	oForm.moveToInsertRow
end sub
Déjà tu écrases ta variable oForm, ce qui n'est pas très propre pour déboguer.
Ensuite, je ne vois pas ce que tu cherches à faire avec cette 2e ligne.
gaelviller a écrit : ↑13 mai 2024 16:48 Il semblerait qu'il faille configurer une fonction avec "moveToInsertRow"
Tu devrais utiliser XRay pour savoir si la propriété ou la méthode que tu appelles existe.

Enfin, merci de fournir un exemple limité à la seule problématique.
A savoir un ODB qui ouvre un formulaire sur un nouvel enregistrement.
On ne sait même pas ce qu'il faut faire avec ton fichier :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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 »

Salut!
Dude a écrit : ↑14 mai 2024 06:26 Est-ce que tu comprends au moins ce que tu fais où tu programmes au petit bonheur ?
Oups, je suis démasqué ! Oui, je suis un noob total. :lol: Comme le fichier que j'ai partagé n'est qu'un test, ça ne me dérange pas de le casser complètement.
Donc, je regarde les liens qu'on me propose, je fouille dans le code recommandé d'utiliser pour essayer de comprendre ce qui est apporté. Et ensuite, j'essaie de l'adapter avec les 'variables' de ma base....
Dude a écrit : ↑14 mai 2024 06:26 Regarde ta routine si je clique sur "NewRecord"

Code : Tout sélectionner

Sub FarmerNew_newRecord
	oForm = ThisDatabaseDocument.FormDocuments.getByName("Form-Type")
	oForm = oForm.Component.DrawPage.Forms.getByIndex(0)
	oForm.moveToInsertRow
end sub
Déjà tu écrases ta variable oForm, ce qui n'est pas très propre pour déboguer.
Ensuite, je ne vois pas ce que tu cherches à faire avec cette 2e ligne.
Ne sachant pas à quoi servent ces 'fonctions/variable' ni comment les utiliser, c'est du 'bête' copier-coller de choses que d'autres ont réussi à faire fonctionner ici. Mais j'ai bien conscience de mes lacunes dans le domaine.
Désolé, je découvre qu'il fallait autant de connaissance en codage pour quelque chose que je pensais évident pour tout le monde et que j'avais même un peu honte de demander au départ : qu'un formulaire s'ouvre sur un nouvel enregistrement de la table afin de ne pas risquer d'endommager les données déjà présentes dans la base.
Ma naïveté m'a amené à croire que de nombreuses personnes avait déjà rencontré cette problématique et que, depuis 2008 (selon les traces trouvées sur ce forum), elle avait été simplifiée... (simple questionnement, aucune animosité dans ce message)
Dude a écrit : ↑14 mai 2024 06:26 Tu devrais utiliser XRay pour savoir si la propriété ou la méthode que tu appelles existe.
Je vais me pencher là dessus...
[EDIT]Effectivement, je ne trouve nulle part 'moveToInsertRow'. C'est cependant la méthode (je ne suis pas sûr du terme) qui était recommandée depuis 2008... Elle aurait disparu ?[/EDIT]
Dude a écrit : ↑14 mai 2024 06:26 Enfin, merci de fournir un exemple limité à la seule problématique.
A savoir un ODB qui ouvre un formulaire sur un nouvel enregistrement.
On ne sait même pas ce qu'il faut faire avec ton fichier :
Encore une fois, désolé.
J'ai testé plusieurs manières d'arriver au résultat demandé depuis le début. Mais j'ai systématiquement des messages d'erreur et j'essaie de comprendre ce qu'ils veulent dire pour résoudre le problème (sans toutefois y parvenir). Du coup, ne sachant pas lequel était sur la bonne piste, j'ai gardé tous les essais...
Le premier en haut à gauche étant une simple ouverture de mon formulaire, et "QUITTER" est assez explicite, il me semble.
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 »

Voici comment il fallait décrire le processus au départ.
  1. lancer l'ODB
  2. lancer le formulaire MENU
  3. cliquer sur le bouton "Ouvrir le formulaire"
Celui-ci lance la macro Ouv_Ferm_Form.OuvrirType qui contient

Code : Tout sélectionner

Sub Ouvrir_Type

const FormAOuvrir ="Form-Type"
Lien=ThisDatabaseDocument.FormDocuments.getbyname(FormAOuvrir).open
const FormAFermer ="MENU"
Lien=ThisDatabaseDocument.FormDocuments.getbyname(FormAFermer).close

End Sub
  • Constat : le formulaire s'ouvre sur l'enregistrement ID=0
  • Attendu : le formulaire doit s'ouvrir sur un nouvel enregistrement
capture.png
Maintenant qu'on a une description correcte, on peut analyser. :?

Ta macro fait exactement ce que tu lui demandes de faire à savoir "ouvrir le formulaire Form-Type et fermer le formulaire "MENU".
Pour le lancer sur un nouvel enregistrement, il faut s'inspirer du suprême de code :

Code : Tout sélectionner

Sub Ouvrir_Type

const FormAOuvrir ="Form-Type"
Lien=ThisDatabaseDocument.FormDocuments.getbyname(FormAOuvrir).open
	'issue du suprême https://forum.openoffice.org/fr/forum/viewtopic.php?p=178282#p178282
	oForm = Lien.DrawPage.Forms.getByName("MainForm")
	'attend que le formulaire soit chargé	
	Do while oForm.isLoaded = false
	Loop
	with oForm
		'se positionne sur un nouvel enregistrement		
		.moveToInsertRow
	End with
const FormAFermer ="MENU"
Lien=ThisDatabaseDocument.FormDocuments.getbyname(FormAFermer).close


End Sub
Pour comprendre les noms des contrôles, tu peux lire ceci : https://beaussier.com/sections/viewtopic.php?f=8&t=158
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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 : ↑14 mai 2024 08:40 Pour comprendre les noms des contrôles, tu peux lire ceci : https://beaussier.com/sections/viewtopic.php?f=8&t=158
Salut, merci pour ta réponse.
Même si je ne comprends pas tout le code écrit, je pense comprendre dans les grandes lignes.
Je l'ai testé sur ma base, mais je continue d'avoir un message d'erreur :
Capture d’écran 2024-05-14 à 18.08.44.png
Voici ma base de test réactualisée (et nettoyée des macros et boutons inutiles).
DB_Test(Int).odb
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Oukcha le 14 mai 2024 18:40, modifié 1 fois.
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4371
Inscription : 06 oct. 2008 08:03

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

Message par Oukcha »

Bonjour,

Pour répondre à un message, utilisez le bouton RÉPONDRE (en bas de page, à gauche), et non le bouton CITER, ce qui évite un enchaînement réponse-réponse-question nuisant à la lisibilité de votre fil de discussion.

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
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,
Ok, merci. Désolé, j'ai perdu l'habitude des forums de discussion.
[EDIT] En revanche, il devient difficile de citer des extraits du message précédent, avec cette méthode... :roll:
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 : ↑14 mai 2024 16:16mais je continue d'avoir un message d'erreur
Objet non accessible = formulaire MENU non ouvert
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 »

Etrange, vu que je clique sur le bouton qui se trouve dans le formulaire "MENU" pour lancer la macro...
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 : ↑15 mai 2024 06:29 Etrange, vu que je clique sur le bouton qui se trouve dans le formulaire "MENU" pour lancer la macro...
Mauvais codage avec usage de la même variable (Lien) pour deux objets différents.
As-tu installé XRay comme je te l'ai indiqué ?
On voit que la méthode close renvoie un booléen :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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 »

J'ai bien installé XRay, mais je ne comprends pas comment l'appeler pour analyser mes commandes... :oops:
Hum... C'est quoi un booléen ? et comment se résout ce type de 'problème' ? :?:
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 »

Pour XRay, il y a une documentation de 30 pages fournie avec.
gaelviller a écrit : ↑15 mai 2024 13:24 Hum... C'est quoi un booléen ?
:shock: https://fr.wikipedia.org/wiki/Bool%C3%A9en

Je n'ai plus de temps à consacrer à des explications.
Voici un code propre à étudier :

Code : Tout sélectionner

Sub Ouvrir_Type
const FormAOuvrir ="Form-Type"
const FormAFermer ="MENU"

	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")
	'attend que le formulaire soit chargé	
	Do while oForm.isLoaded = false
	Loop
	with oForm
		'se positionne sur un nouvel enregistrement		
		.moveToInsertRow
	End with
	bRet = oForms.getByName(FormAFermer).close
End Sub
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 »

Merci pour tes réponses.
Je comprends mieux ce qu'est un booléen.
J'ai testé avec le code que tu as indiqué et je n'ai plus de problème de message d'erreur. Cependant, retour au point de départ : le formulaire s'ouvre sur le premier enregistrement de la table... :marto:
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 : ↑15 mai 2024 18:34 retour au point de départ : le formulaire s'ouvre sur le premier enregistrement de la table...
Je ne reproduis pas. Donc, fournis un document qui montre le problème.
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 »

Salut,
J'ai mis dans le formulaire MENU trois boutons se rapportant aux trois différents codes pour ouvrir le formulaire Form-Type :
1-celui que j'avais à l'origine,
2-le premier code que tu m'avais proposé (sur celui-ci j'ai rendu inopérant la fonction de fermeture du formulaire MENU qui posait problème)
3-le second code que tu m'avais proposé.
Le résultat est à chaque fois le même : ouverture du formulaire Form-Type et fermeture du formulaire MENU (sauf bouton 2), mais le formulaire Form-Type s'ouvre systématiquement sur le premier enregistrement de la table appelée par ce formulaire...
Attention : j'ai essayé de placer la 'balise' Xray dans chacune des macros pour tenter d'analyser un élément de celles-ci, mais je ne sais pas vraiment m'en servir... Donc elle n'est sûrement pas là où il faut.
Voici donc le fichier :
DB_Test(Int).odb
De ton côté, avec le code que tu m'as partagé, le formulaire Form-Type parvient-il à s'ouvrir sur un nouvel enregistrement de la table ?
Si oui, n'hésite pas à me partager ce fichier que je puisse le tester chez moi.
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
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 »

Forcément si tu appelles XRay alors que tu n'as pas chargé la bibliothèque, ton code provoque une erreur :
capture.png
Enlève cette ligne et ça fonctionnera.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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 »

ça fonctionne chez toi ?
Parce que j'ai ajouté cette ligne pour tenter d'activer XRay qui est installé sur mon poste. Avant cela, la ligne n'y était pas et la fonction ne parvenait pas à ouvrir le formulaire sur un nouvel enregistrement de la table...
Dernière modification par gaelviller le 16 mai 2024 16:15, modifié 1 fois.
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 : ↑16 mai 2024 07:50 Parce que j'ai ajouté cette ligne pour tenter d'activer XRay qui est installé sur mon poste.
Dude a écrit : ↑16 mai 2024 07:45 Forcément si tu appelles XRay alors que tu n'as pas chargé la bibliothèque, ton code provoque une erreur
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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 »

Salut,
Merci, je pense avoir compris l'idée... :super:
J'ai donc réussi à atteindre le résultat souhaité avec ce code :

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
		oForm = Lien.DrawPage.Forms.getByName("MainForm")'[nom"sous"Formulaire]
		Do while oForm.isLoaded = false
		Loop
		with oForm	
			.moveToInsertRow
		End with
	bRet = oForms.getByName(FormAFermer).close
End Sub
J'ai ajouté des 'notes' pour indiquer les variables à adapter selon les besoins de chacun. ça te semble bon ? (après confirmation, j'ajouterai la balise [résolu])
La modération vous a écrit: Pour information, Comment clore un sujet lorsqu'il est résolu

EDIT : Hélas, pour une raison que j'ignore, la fonction ne semble pas opérationnelle systématiquement... je remets la base de test ci-dessous :
DB_Test.odb
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
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1202
Inscription : 19 août 2018 05:20

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

Message par Dolev »

Bonjour,
gaelviller a écrit : ↑16 mai 2024 09:51Hélas, pour une raison que j'ignore, la fonction ne semble pas opérationnelle systématiquement...
Merci d'expliquer plus en détail ce qui n'est pas opérationnel.
Open Office 4.1.16 sous Windows 11
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 pour faire simple, lorsque je clique sur le bouton du formulaire MENU configuré pour ouvrir le formulaire form-type, il s'ouvre sue le premier enregistrement de la table liée au formulaire.
Retour donc au point de départ superbement résumé par Dude :
Dude a écrit : ↑14 mai 2024 08:40
  1. lancer l'ODB
  2. lancer le formulaire MENU
  3. cliquer sur le bouton "Ouvrir le formulaire"
Celui-ci lance la macro Ouv_Ferm_Form.OuvrirType qui contient

Code : Tout sélectionner

Sub Ouvrir_Type

const FormAOuvrir ="Form-Type"
Lien=ThisDatabaseDocument.FormDocuments.getbyname(FormAOuvrir).open
const FormAFermer ="MENU"
Lien=ThisDatabaseDocument.FormDocuments.getbyname(FormAFermer).close

End Sub
  • Constat : le formulaire s'ouvre sur l'enregistrement ID=0
  • Attendu : le formulaire doit s'ouvrir sur un nouvel enregistrement
Malgré l'utilisation d'une macro codée pour cela, celle-ci ne semble pas fonctionner systématiquement... Suis-je le seul à rencontrer ce problème ? (cf fichier partagé plus haut)
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1202
Inscription : 19 août 2018 05:20

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

Message par Dolev »

gaelviller a écrit : ↑19 mai 2024 15:08 cliquer sur le bouton "Ouvrir le formulaire"
Ce bouton n'existe pas :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open Office 4.1.16 sous Windows 11
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 »

Arf, désolé, le fichier a été mis à jour depuis... C'est le bouton "Ouvrir Form-Type"
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2
Avatar de l’utilisateur
DLE
HédOOniste
HédOOniste
Messages : 1516
Inscription : 30 déc. 2007 18:56
Localisation : Lille

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

Message par DLE »

Bonjour,
L'insertion d'un "wait" semble régler le problème, à valider.

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
		oForm = Lien.DrawPage.Forms.getByName("MainForm")'[nom"sous"Formulaire]
		Do while oForm.isLoaded = false
		Loop
		wait 1000 '<-----
		with oForm	
			.moveToInsertRow
		End with
	bRet = oForms.getByName(FormAFermer).close
End Sub
MacOS Tahoe 26.5 (iMac-M4) : AOO 4.1.16 , LibreOffice 25.8.7.3, Adoptium-temurinJDK 1.8.0_402, CCC, FireFox, Thunderbird, ORB 1.2.1
Parallels Desktop = Windows 11 & MacOS : AOO, Libre Office.
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 et merci,
Je teste cela...

[Edit] Alors, ça fonctionne, mais ça reste limité à des tables "légères"... Si la table contient beaucoup d'enregistrements, ça ne fonctionne plus (à savoir que ça affiche un autre enregistrement de la base que le "nouvel enregistrement") : systématiquement à l'ouverture, il affiche le même enregistrement (à chaque ouverture du formulaire via le bouton paramétré avec la fonction).
Le résultat dans une table avec 3 champs, la fonction semble aller jusqu'au 41ème enregistrement ; dans une table à 13 champs, elle n'accède qu'au 18ème enregistrement...
J'ai essayé de changer la durée du wait en la passant à 5000 : le résultat est le même...

[Edit2] Dans mes recherches pour trouver une solution à cette temporisation, j'ai trouvé ceci. L'auteur détaille bien les éléments nécessaires, cependant le procédé est assez complexe et je ne connais pas le langage de programmation des macros.

[Edit3] D'autres recherches m'ont améné ici... Mais je ne sais pas 'combiner' ce code au précédent pour le faire fonctionner...
Dernière modification par gaelviller le 20 mai 2024 13:36, modifié 1 fois.
LivreOffice 7.6 sous MaocOS Sonoma (14.4) avec HSQLDB 2.7.2