[Résolu][Base] thisDatabaseDocument et Formulaires non définis

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 !
emena
Membre lOOyal
Membre lOOyal
Messages : 41
Inscription : 07 janv. 2007 17:19

[Résolu][Base] thisDatabaseDocument et Formulaires non définis

Message par emena »

Hello,

La solution

Quand on veut avoir des données contextuelles, il faut mettre les macros dans le fichier et non dans les macros communes.
Voir l'avant dernier post.
Un autre code possible dans le dernier post.
EM

Le problème posé

J'essaye de passer d'un formulaire à l'autre par bouton en utilisant les macros trouvées dans le suprème de code ici
La méthode marche avec les fichiers exemples qui sont donnés, il n'y a pas de problèmes d'environnement

Par contre je n'y arrive pas avec mon fichier.
Les paramètres de contrôle du bouton ont l'air d'être corrects, les fichiers à ouvrir et fermer sont justes, les msgbox le confirme.

Le code de mon dernier essais est

Code : Tout sélectionner

Sub OuvrirFormulaire(evt As Object) '*** assignée au déclenchement du bouton

	Dim lesFormulaires As Object, leFormulaire As Object
	Dim bouton As Object, appel As String, courant as String

	bouton = evt.Source
	appel = split(bouton.Model.tag,";",2)(0)
	if instr(1,bouton.Model.tag,";") then courant = split(bouton.Model.tag,";",2)(1)
	
	msgBox("Formulaire à ouvrir  : " & appel , 0)
	msgBox(" à fermer : " & courant , 0)
	
	if lesFormulaires.hasByName(appel)  then
		leFormulaire = lesFormulaires.getByName(appel)
		leFormulaire.open
	else
	  	MsgBox("Formulaire inconnu : " & appel, 16)
	  	exit sub
	end if
	
	if thisDatabaseDocument.FormDocuments.hasByName(courant) then FermerFormulaire(courant)	
	
End Sub

Sub FermerFormulaire(nomFormulaire) '*** appelée par OuvrirFormulaire

	thisDataBaseDocument.FormDocuments.getByName(nomFormulaire).close

End sub
A chaque fois que j'arrive à la ligne

Code : Tout sélectionner

if lesFormulaires.hasByName(appel)  then
Il me dit que la variable est indéfinie, et effectivement
  • la variable lesFormulaires est indéfinie, je trouve null en débugant
  • d'autre part thisDatabaseDocument est out of scope.
il doit y avoir une initialisation qui manque quelque part, mais je ne la trouve pas
Merci d'avance de votre aide
EM
Dernière modification par Oukcha le 20 oct. 2024 11:43, modifié 3 fois.
Emena

Version: 7.3.7.2 / LibreOffice Community
Build ID: 30(Build:2)
CPU threads: 12; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: fr-BE (fr_BE.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.3.7-0ubuntu0.22.04.6
Calc: threaded2
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17084
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Base]thisDatabaseDocument n'est pas défini

Message par jeanmimi »

Bonjour,
emena a écrit : 19 oct. 2024 11:35 Par contre, je n'y arrive pas avec mon fichier.
Juste au-dessus de la Macro d'ouverture et fermeture par tag de Piaf, il y a cet avertissement :
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.
Est-ce que c'est le cas dans ta Base ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
emena
Membre lOOyal
Membre lOOyal
Messages : 41
Inscription : 07 janv. 2007 17:19

Re: [Base]thisDatabaseDocument n'est pas défini

Message par emena »

Hello,

Merci de me répondre.

Ça, je l’ai fait, je le vérifie avec msgbox et en débuguant.
La macro est appelée et les deux formulaires bien identifiés.

C’est vraiment « thisdatabase » et « lesFormulaires » qui ne sont pas connus.
J’ai vérifié le post dans lequel on explique comment recopier à partir des exemples, je ne vois pas ce que je n’ai pas fait.

C’est sans doute un bête truc, mais comment chercher ou ça se passe ?

Merci encore.
EM
Emena

Version: 7.3.7.2 / LibreOffice Community
Build ID: 30(Build:2)
CPU threads: 12; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: fr-BE (fr_BE.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.3.7-0ubuntu0.22.04.6
Calc: threaded2
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12457
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Base]thisDatabaseDocument n'est pas défini

Message par Bidouille »

Bonjour,
emena a écrit : 19 oct. 2024 13:52 C’est sans doute un bête truc, mais comment chercher ou ça se passe ?
Comme d'habitude...
Image
Comment joindre un fichier au format ODB
Pensez également à dépersonnaliser le fichier joint.
emena
Membre lOOyal
Membre lOOyal
Messages : 41
Inscription : 07 janv. 2007 17:19

Re: [Base]thisDatabaseDocument n'est pas défini

Message par emena »

Hello,

Le voilà, mais je pensais plutôt à une démarche, je ne voulais pas faire faire le travail par d'autres à priori :o :o
En tout cas merci de regarder

Suite des tests, j'ai essayé avec xray qui me confirme que "lesFormulaires" et "thisDatabaseDocument" sont vides

Bonne soirée
EM
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Emena

Version: 7.3.7.2 / LibreOffice Community
Build ID: 30(Build:2)
CPU threads: 12; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: fr-BE (fr_BE.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.3.7-0ubuntu0.22.04.6
Calc: threaded2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]thisDatabaseDocument n'est pas défini

Message par Dude »

Salut,
emena a écrit : 19 oct. 2024 11:35 Il me dit que la variable est indéfinie, et effectivement
  • la variable lesFormulaires est indéfinie, je trouve null en débugant
Donc ce n'est thisDatabaseDocument qui est indéfini. Pourquoi indiques-tu une mauvaise information ?
Pour récupérer tes formulaires, il faut logiquement utiliser en 1er :

Code : Tout sélectionner

thisDatabaseDocument.FormDocuments
Autre chose...
capture.png
L'ODB fourni ne contient aucune macro.
Merci de tester un minimum ce que tu soumets avant de joindre un fichier.


Personnellement, je ne vois pas l'intérêt d'utiliser Base pour la structure que tu as faite.
Il n'y a qu'une seule table, aucun modèle relationnel et des tas d'informations redondantes.
A priori, tu ne tiens pas compte de ce que l'on t'a écrit précédemment : viewtopic.php?t=69124
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
emena
Membre lOOyal
Membre lOOyal
Messages : 41
Inscription : 07 janv. 2007 17:19

Re: [Base]thisDatabaseDocument n'est pas défini

Message par emena »

Bonjour,

Juste une précision, je n'ai pas oublié ce que vous m'avez dit
Mais ma difficulté, c'est la programmation, donc avant d'implémenter ma base, je fais des tests.
Je me fais une bibliothèque de macros et requêtes dont je sais que j'aurais besoin.
Je le fais avec la base que j'ai crée avec mon fichier CALC, parce qu'encoder la base complète me prendra du temps.
J'aurais pu faire les choses dans l'autre sens, c'est celui qui m'est venu naturellement.

En ce qui concerne mon titre
Ce sont les deux variables qui ne sont pas définies
la variable lesFormulaires est indéfinie, je trouve null en débugant
d'autre part thisDatabaseDocument est out of scope.
J'ai pas mis les deux dans le titre, question de longueur et il me semblait que le problème est le même dans les deux cas, mais je corrige

En ce qui concerne le fichier

J'ai repris le fichier que je t'avais donné, en le téléchargeant depuis ce post, mon résultat est dans l'image jointe.
Je clique sur le formulaire F-arbre.
Dans le formulaire, je clique sur le bouton "généralités".
Là j'espère avoir le formulaire TD_generalite et j'obtiens le résultat de l'image.

Il y a juste une petite particularité, comme j'ai beaucoup de champs, et que cela restera toujours vrai une fois la base de donnée relationnelle mise en place, j'ai crée une vue à laquelle mon formulaire fait référence.


Merci de ton aide
EM
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Emena

Version: 7.3.7.2 / LibreOffice Community
Build ID: 30(Build:2)
CPU threads: 12; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: fr-BE (fr_BE.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.3.7-0ubuntu0.22.04.6
Calc: threaded2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base]thisDatabaseDocument et lesFormulaires ne sont pas défini

Message par Dude »

Compare avec ma copie écran :
capture.png
Tes macros ne sont pas correctement localisées.
Il est donc logique que thisDatabaseDocument ne soit pas accessible.

Et étudie la notion de container indiqué dans le tutoriel "Introduction aux macros".
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17084
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Base]thisDatabaseDocument et lesFormulaires ne sont pas défini

Message par jeanmimi »

Le code de la Macro pour ouvrir par tag, puisque le nom du formulaire à ouvrir est renseigné dans les propriétés du Bouton, serait plutôt celui-ci :

Code : Tout sélectionner

Sub OuvForm(evt As Object)
    '**********************************************************************************************
    'Lancée par l'appui sur un bouton
    ' Permet l'ouverture d'un formulaire dont le nom est renseigné dans le champ
    ' "Complément d'information" du bouton
    '==============================================================================================
    Dim oForms As Object
    Dim sNomForm As String
       sNomForm = evt.Source.Model.tag
       oForms = ThisComponent.Parent.FormDocuments
       IF oForms.hasByName(sNomForm)  Then
         oForms.getByName(sNomForm).open
       Else
         MsgBox("Formulaire inconnu : " & sNomForm, 16)
       End IF
    End Sub
À tester :
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.8.2 (x64)(10 novembre 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
emena
Membre lOOyal
Membre lOOyal
Messages : 41
Inscription : 07 janv. 2007 17:19

Re: [Base]thisDatabaseDocument et lesFormulaires ne sont pas défini

Message par emena »

MERCI à tous les deux,

C'était donc bien une bête erreur,
merci aussi pour le code par tag qui marche bien.

Bonne journée
EM
Emena

Version: 7.3.7.2 / LibreOffice Community
Build ID: 30(Build:2)
CPU threads: 12; OS: Linux 5.15; UI render: default; VCL: gtk3
Locale: fr-BE (fr_BE.UTF-8); UI: fr-FR
Ubuntu package version: 1:7.3.7-0ubuntu0.22.04.6
Calc: threaded2