[Résolu][Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

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 !
Frankygir
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 20 févr. 2025 09:36

[Résolu][Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

Message par Frankygir »

Bizarrement tous vos exemples disent d'utiliser Forms.getbyName("NomForm"):

Code : Tout sélectionner

oForm = ThisComponent.DrawPage.Forms.getByName("GFA_ENT_SORT")
mais la macro s'arrête et je ne sais pas pourquoi
erreur getform.jpg
expérimentalement j'ai essayé

Code : Tout sélectionner

oForm = ThisComponent.DrawPage.Forms("GFA_ENT_SORT")
qui marche mais je voudrais bien savoir pourquoi
Est-ce que il comprend une commande du type oForm = ThisComponent.DrawPage.Forms(0)
qui marche puisque je suis dans le formulaire principal

J'ai demandé à Xray ce qu'il savait sur oForm
Xray getform.jpg
Je sais que vous voulez un base d'essai
GFA_XXXXXX_Compta-2.odb
les 4 macros ont besoin de ce getform
Les 3 boutons et la macro active quand on quitte le dernier champ Type de Mvt bancaire
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Frankygir le 04 mai 2025 13:16, modifié 6 fois.
Apache Open Office 4.1.15 -- Oracle Report Builder 1.2.1 -- Windows 11
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

Message par Dolev »

Bonjour,
Frankygir a écrit : 03 mai 2025 12:49 expérimentalement j'ai essayé

Code : Tout sélectionner

oForm = ThisComponent.DrawPage.Forms("GAF_ENT_SORT")
qui marche mais je voudrais bien savoir pourquoi
Dude vous a répondu sur votre autre fil : viewtopic.php?t=69772

Analyser la propriété Forms via XRay, elle attend un entier.
Donc si vous passez une chaîne, ce sera équivalent à 0.
Open Office 4.1.15 sous Windows 11
Frankygir
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 20 févr. 2025 09:36

Re: [Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

Message par Frankygir »

Dude s'obstine à me rappeler que lors de mon tout premier envoi de base il restait une faute de frappe GAF au lieu de GFA
que je fais sans arrêt
et je lui avais renvoyé une base avec une macro corrigée mais il n'en a jamais tenu compte
C'était sur une autre sujet "comment assigner un champ formatté en Basic" donc c'était une question secondaire à mon sujet
c'est pourquoi je la repose ici

D'ailleurs dans l'image du bug que j'ai joint ici on voit bien que le Formulaire appelé s'appelle GFA_ENT_SORT
comme dans l'image du Xray

Ce n'est donc pas la raison de l'échec de la commande Forms.getbyname("GFA_ENT_SORT")

Je le remercie de m'expliquer que grâce à Xray on voit qu'il attend un entier et que lui passer une chaîne serait équivalent à 0 (là je ne comprends pas bien pourquoi mais je veux bien l'admettre) en plus je ne vois pas l'entier dont Dude me parle, peut-il m'expliquer où?
je ne suis pas spécialiste comme lui, je débute dans ce Basic

Alors pour essayer de comprendre j'ai créé un objet

Code : Tout sélectionner

Dim oDrawpage                                  As Object
	oDrawpage = ThisComponent.DrawPage
 Xray oDrawpage
et j'ai vu:
Xray DrawPage.jpg
on voit la propriété Forms de type objet mais pas d'entier

Puis pour essayer de comprendre j'ai donc écrit le code suivant dans une macro

Code : Tout sélectionner

	oForm = ThisComponent.DrawPage.Forms(0)
Xray oForm
Même en sélectionnant 0 j'ai l'impression qu'il trouve tout seul "GFA_ENT_SORT" dans les Propriétés
et je ne vois pas de quel entier Dude nous parle
Xray Properties Form.jpg
je vois

Code : Tout sélectionner

Command    String     "GFA_ENT_SORT"
mais est-ce que Command correspond au paramètre d'appel de la fonction? ça je n'en sais rien!

En fouillant dans les méthodes je retrouve bien la méthode getbyName qui attend un string
Xray Méthodes getbyname.jpg
mais pourquoi me renvoie-t-elle une exception à laquelle je ne comprends rien?

Ma question reste donc toujours pertinente pourquoi Forms.getbyname("GFA_ENT_SORT") plante?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Frankygir le 04 mai 2025 13:17, modifié 1 fois.
Apache Open Office 4.1.15 -- Oracle Report Builder 1.2.1 -- Windows 11
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

Message par Dolev »

Re,


Vous confondez le nom de l'objet formulaire et son contenu.
Le contenu est donné avec le navigateur de formulaire.
Vous devriez lire ceci qui l'explique : https://beaussier.com/sections/viewtopic.php?f=8&t=158
Open Office 4.1.15 sous Windows 11
Frankygir
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 20 févr. 2025 09:36

Re: [Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

Message par Frankygir »

Effectivement voilà où était l'erreur avec le getByName
Quand j'ai créé avec l'assistant le formulaire et son sous-formulaire il n'a rien trouvé de mieux que de les appeler tous les deux "SubForm"
NavigForm SubForm.jpg
et si je corrige ma ligne avec le nom "SubForm" ça marche!

Code : Tout sélectionner

	oForm = ThisComponent.DrawPage.Forms.getByName("SubForm")
Merci beaucoup à Dolev :bravo: qui m'a indiqué le sujet écrit par Bidouille :super: qui donne la solution pour le getByName

Il me reste dans mes macros soit à écrire 3 instructions qui marchent :
oForm = ThisComponent.DrawPage.Forms.getByName("SubForm") REM ou alors renommer le SubForm en GAF_ENT_SORT
oForm = ThisComponent.DrawPage.Forms(0)
oForm = ThisComponent.DrawPage.Forms("GFA_ENT_SORT")

La 3e manière qui marche est-elle un coup de bol comme dit Dude car je n'ai pas trouvé où on attendait un nombre
Quelle propriété correspond à un passage de paramètres?
La propriété Command ne correspond-t-elle au passage de paramètres???
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Frankygir le 04 mai 2025 12:03, modifié 1 fois.
Apache Open Office 4.1.15 -- Oracle Report Builder 1.2.1 -- Windows 11
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1140
Inscription : 19 août 2018 05:20

Re: [Résolu][Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

Message par Dolev »

Le lien vous avait été donné pourtant : viewtopic.php?p=390343#p390343
:lol:
Open Office 4.1.15 sous Windows 11
Frankygir
Membre lOOyal
Membre lOOyal
Messages : 29
Inscription : 20 févr. 2025 09:36

Re: [Base] Forms("NomForm") au lieu de Forms.getbyName("NomForm")

Message par Frankygir »

Effectivement je n'avais pas vu! :marto:

Je n'avais pas vu non plus que c'était vous qui repreniez cette vieille citation obsolete avec ma faute de frappe et non Dude
Dolev a écrit : 03 mai 2025 15:34 Bonjour,
Frankygir a écrit : 03 mai 2025 12:49 expérimentalement j'ai essayé

Code : Tout sélectionner

oForm = ThisComponent.DrawPage.Forms("GAF_ENT_SORT")
qui marche mais je voudrais bien savoir pourquoi
Dude vous a répondu sur votre autre fil : viewtopic.php?t=69772

Analyser la propriété Forms via XRay, elle attend un entier.
Donc si vous passez une chaîne, ce sera équivalent à 0.
Dude a écrit : 17 avr. 2025 07:01 Bon, plein de problèmes dans ce que tu fournis.
Et on ne peut pas dire que ton ODB est simple et conforme avec ce que je t'avais demandé.

Concernant ton histoire d'ouverture de formulaire :
capture.png
Avec XRay, on voit qu'en interrogeant la propriété ElementNames, il n'existe pas de formulaire nommé "GAF_ENT_SORT".
Pour plus d'info sur le sujet, lire ceci : https://beaussier.com/sections/viewtopic.php?f=8&t=158


Ensuite le fait d'imposer une clé primaire qui va contenir un assemblage d'années et de mois n'est pas une bonne idée.
Tu déclares ça avec un entier (INTEGER) qui sera bloqué dès lors que tu vas atteindre la limite de ce qu'il peut contenir.
Tu ferais mieux de mettre ça en tant que chaîne puisqu'il ne semble pas y avoir à faire de calcul avec.

Pour moi, il faut déjà revoir ton modèle relationnel.

Dude nous perd souvent en conjectures car au lieu de parler de notre bug du à notre incompétence en basic il se met à critiquer notre besoin ou notre manière de voir une base de données, notre analyse relationnelle pourtant très simple : des mouvements bancaires qui pointent vers des relevés bancaires, une clef que j'ai envie de structurer (20) 24 123 4 parce que c'est plus parlant
et pour lequel il y a malheureusement un VRAI BUG dans le contrôle du champ clé:

Je m'obstine à paramètrer le contrôle du champ clef primaire ainsi : format défini par l'utilisateur : ##\ ###\ # (un peu comme pour un n° de téléphone)
il le prend en compte!
Il affiche tout de suite dans le contrôle les valeurs min (20)12 000 0 et max (20)99 999 9
et ensuite il affiche correctement la clef formattée dans le formulaire

MAIS!!!! quand je rouvre le contrôle (comme l'a fait Dude) il me dit que le format est un nombre et de format #" "###" "# en mettant à la poubelle le premier caractère dont il ne tient même pas compte puisqu'il affichait la clef correctement (20) ## ### #

(D'autre part dans le générateur de rapport formatter le champ Id avec un format défini par l'utilisateur : ##\ ###\ # marche parfaitement)

Dans l'ancien sujet je n'ai pas polémiqué avec lui sur ce sujet puisque c'était un autre sujet et une question par sujet
Faut-il déclarer un bug dans un autre sujet?


Puisque c'est vous qui me répondiez je n'ai pas compris où vous avez vu un entier pour passer le paramètre? Je suis novice en Xray, je ne vois pas

Je ne savais pas qu'on pouvait cliquer sur une propriété pour faire apparaître un tableau
Je l'ai fait sur Parameters et là j'ai vu un long
Xray Properties Form Parameters.jpg
C'est franchement pas clair, je suis bien dans parameters mais ce qu'il me montre Count long 0 dans countindexaccess???
c'est peut-être çà

je comprends que je peux appeler
Forms(0) ou Forms.getbyname(nom) avec le nom trouvé dans la navigateur de formulaire + Propriétés et qu'on peut renommer MainForm quand il met SubForm par défaut

Le sujet est donc clos
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Apache Open Office 4.1.15 -- Oracle Report Builder 1.2.1 -- Windows 11