Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA-E] - Frm - Membre de méthode ou de données introuvable

6 réponses
Avatar
XLnoob
Bonjour à tous,
j'ai un problème (a priori très simple) d'initialisation de mes textbox à
l'ouverture de mon classeur.
En fait, un seul pose problème, le dernier ; le débogueur m'indique "membre
de méthode ou de données introuvable". Pourtant il est situé sur le même form
que les autres qui s'initialisent bien.

mon code :
-----------------------------------------
Sub init()
'initialisation des textbox du form Che

today = Format(Now, "d/m/yyyy")

FrmChe.TextQuand.Text = today
FrmChe.TextOu.Text = "Ouagadougou"
FrmChe.TextQuoi1.Text = ""
FrmChe.TextQuoi2.Text = ""
FrmChe.TextQui.Text = ""

'probleme
FrmChe.TextCombien.Text = ""

FrmChe.Show
End Sub
--------------------------------------

J'ai vérifié le nom de mon textbox ; et j'ai essayé en remplacant .text par
.value, sans différence.

Si quelqu'un a une idée, je l'en remercie par avance, je sèche
complètement...

6 réponses

Avatar
XLnoob
Précision qui peut avoir son importance:

Quand executé de manière "non liée à l'ouverture du classeur", ce code
marche parfaitement...

je fais juste appel à la procédure ainsi :
------------------------------------------
Private Sub Workbook_Open()

Call init

End Sub
-------------------------------------------
Avatar
papou
Bonjour
Généralement les valeurs devant être initialisées dans un Userform les sont
dans la procédure évènementielle UserForm_Initialize c'est plus cohérent.
Je te recommande donc d'essayer cette méthode et de modifier ton code en
conséquence en intégrant notamment la modif dans l'évènement Workbook_open
avec simplement ceci :
Load FrmChe
FrmChe.Show

Cordialement
Pascal


"XLnoob" a écrit dans le message de news:

Bonjour à tous,
j'ai un problème (a priori très simple) d'initialisation de mes textbox à
l'ouverture de mon classeur.
En fait, un seul pose problème, le dernier ; le débogueur m'indique
"membre
de méthode ou de données introuvable". Pourtant il est situé sur le même
form
que les autres qui s'initialisent bien.

mon code :
-----------------------------------------
Sub init()
'initialisation des textbox du form Che

today = Format(Now, "d/m/yyyy")

FrmChe.TextQuand.Text = today
FrmChe.TextOu.Text = "Ouagadougou"
FrmChe.TextQuoi1.Text = ""
FrmChe.TextQuoi2.Text = ""
FrmChe.TextQui.Text = ""

'probleme
FrmChe.TextCombien.Text = ""

FrmChe.Show
End Sub
--------------------------------------

J'ai vérifié le nom de mon textbox ; et j'ai essayé en remplacant .text
par
.value, sans différence.

Si quelqu'un a une idée, je l'en remercie par avance, je sèche
complètement...


Avatar
XLnoob
Bonjour
et merci de vous pencher sur mon problème, et pour ces (bons) conseils.

J'ai découvert l'existence de l'évenement UserForm_Initialize un peu avant
votre réponse, et ainsi anticipé vos conseils. (+ exactement j'ai utilisé
FrmChe.load au lieu de load FrmChe -> ce qui revient au même il me semble?)

Malheureusement cela ne règle rien.
A l'ouverture, j'obtiens: "Erreur 75: Erreur d'accès chemin/fichier"

Mon Form etant dans le meme WorkBook que le code qui s'execute, ce message semble quelque peu étrange..



Après quelques recherches:
[Quote]
un classeur est composé de feuilles, de fiches et de modules. Lorsqu'il se
construit (au sens programmation objet) en mémoire à partir du fichier XLS,
il construit aussi ses feuilles, ses fiches et ses modules. Selon l'ordre
dans lequel cela est fait - et tu n'as pas la main la dessus, certaines
méthodes (constructeurs) sont appelées avant ou après d'autres.
[/Quote]


Autrement dit, je soupconne le code présent dans ThisWorkbook de s'éxécuter
alors que tous les objets du classeur ne sont pas chargés (dont FrmChe), et
donc d'appeler un objet qui n'est pas considéré comme créé , provoquant le
message d'erreur ci-dessus.
(J'ai bon?)

Quelqu'un voit comment faire pour contourner ca?
(sans changer le code-source d'Excel, hein! :)

j'essaie de garder le sourire, mais je commence à craquer, surtout quand je
vois qu'en créant un UF dans un nouveau classeur, et en suivant la même
méthode (UserForm_initialize et Workbook_Open), tout fonctionne à merveille...




"papou" wrote:

Bonjour
Généralement les valeurs devant être initialisées dans un Userform les sont
dans la procédure évènementielle UserForm_Initialize c'est plus cohérent.
Je te recommande donc d'essayer cette méthode et de modifier ton code en
conséquence en intégrant notamment la modif dans l'évènement Workbook_open
avec simplement ceci :
Load FrmChe
FrmChe.Show

Cordialement
Pascal


Avatar
XLnoob
Bon j'ai trouvé UNE SOLUTION, j'ai VRAIMENT hésité à la poster car c'est
vraiment du bricolage et je sens que je vais m'attirer les foudres de tous
les spécialistes (et des autres). Mais en attendant personne ne m'a proposé
mieux!
(je reste ouvert à toute explication et/ou solution plus académique).

j'ai contourné le "problème de construction des objets" soupconné ci-dessus
en liant l'affichage de mon Form non pas directement à l'evenement
ThisWorkbook_Open mais à Worksheet_Activate de la feuille1, elle meme activée
par ThisWorkbook_Open.
Mais le code Worksheet_Activate de la feuille 1 ne s'exécute pas lors de la
1ere activation....

Voilà donc ma mocheté finale :
------------------------------------------------
Private Sub Workbook_Open() '(ThisWorkbook)
ActiveWorkbook.Worksheets(2).Activate
ActiveWorkbook.Worksheets(1).Activate
End Sub
-----------------------------------------------
Private Sub Worksheet_Activate() '(Feuil1)
FrmChe.load
FrmChe.show
End Sub
-----------------------------------------------
Private Sub UserForm_Initialize() '(Formulaire Che)
today = Format(Now, "d/m/yyyy")

FrmChe.TextQuand.Text = today
FrmChe.Text = "ouagadougou"
FrmChe.TextQuoi1.Text = ""
FrmChe.TextQuoi2.Text = ""
FrmChe.TextQui.Text = ""
FrmChe.TextCombien.Text = "Excel, je t'ai eu!"

End Sub
-----------------------------------------------


Désolé pour cette hérésie mais comme on dit "aide-toi et le ciel t'aidera"...
++
Avatar
papou
Bonjour
FrmChe.load
??

Ceci n'est pas une syntaxe correcte de VBA et doit provoquer une erreur.
Par ailleurs quel est l'intérêt de l'affichage de ton Userform à
l'activation d'une feuille ?


Cordialement
Pascal

"XLnoob" a écrit dans le message de news:

Bon j'ai trouvé UNE SOLUTION, j'ai VRAIMENT hésité à la poster car c'est
vraiment du bricolage et je sens que je vais m'attirer les foudres de tous
les spécialistes (et des autres). Mais en attendant personne ne m'a
proposé
mieux!
(je reste ouvert à toute explication et/ou solution plus académique).

j'ai contourné le "problème de construction des objets" soupconné
ci-dessus
en liant l'affichage de mon Form non pas directement à l'evenement
ThisWorkbook_Open mais à Worksheet_Activate de la feuille1, elle meme
activée
par ThisWorkbook_Open.
Mais le code Worksheet_Activate de la feuille 1 ne s'exécute pas lors de
la
1ere activation....

Voilà donc ma mocheté finale :
------------------------------------------------
Private Sub Workbook_Open() '(ThisWorkbook)
ActiveWorkbook.Worksheets(2).Activate
ActiveWorkbook.Worksheets(1).Activate
End Sub
-----------------------------------------------
Private Sub Worksheet_Activate() '(Feuil1)
FrmChe.load
FrmChe.show
End Sub
-----------------------------------------------
Private Sub UserForm_Initialize() '(Formulaire Che)
today = Format(Now, "d/m/yyyy")

FrmChe.TextQuand.Text = today
FrmChe.Text = "ouagadougou"
FrmChe.TextQuoi1.Text = ""
FrmChe.TextQuoi2.Text = ""
FrmChe.TextQui.Text = ""
FrmChe.TextCombien.Text = "Excel, je t'ai eu!"

End Sub
-----------------------------------------------


Désolé pour cette hérésie mais comme on dit "aide-toi et le ciel
t'aidera"...
++


Avatar
XLnoob
"papou" wrote:
FrmChe.load
??

Ceci n'est pas une syntaxe correcte de VBA et doit provoquer une erreur.


Mea Culpa, j'ai effectivement dit une grosse bêtise!! Seule la méthode
Load(FrmChe) existe.
Si j'ai bien compris, quand on utilise .show, le form est implicitement
loadé en mémoire. Je ne vois pas tellement d'interet d'utiliser load en plus
dans mon cas, d'autant que FrmChe n'est pas titanesque.


Quoiqu'il en soit:
Load FrmCHe, FrmChe.show (dans Workbook_Open) provoque aussi une erreur : là
excel plante carrément.


Par ailleurs quel est l'intérêt de l'affichage de ton Userform à
l'activation d'une feuille ?


Je voudrais que mon UserForm s'affiche au démarrage.
Mais si je déclenche l'affichage de mon UserForm avec l'evenement
Worksheet_Open, j'ai le fameux message d'erreur #75. (ou mieux: plantage si
je fais Load FrmChe avant mon FrmChe.Show).
J'ai simplement nommé la feuil1 "Saisie" (elle ne sert à rien, elle est
vide) ; quand elle est activée, ou si l'utilisateur clique dessus, il tombe
sur le form (grâce à Worksheet_Activate)

Intellectuellement ce n'est pas pleinement satisfaisant, mais au moins le
programme fonctionne.

Encore merci,
a+