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

pb erreur 424 : "objet requis"

2 réponses
Avatar
Alex
Bonjour,
Je développe actuellement une application Access qui génère des documents
Word via Automation.
Comme le pied de page de ces documents dépend des données saisies dans
l'application, et est le
même quel que soit le type de document (il en existe une dizaine environ),
j'ai crée une fonction "GenererPiedDePage" qui serait appelée depuis les
fonctions de génération de documents (une fonction par type de document).

Ma fonction donne ça :
Sub GenererPiedDePage(ByVal appWord as Object)
Dim [...]

MsgBox "test"
[...]
End Sub

Dans mes fonctions de gén. de doc, je crée mon instance de Word en utilisant
une variable de type Object, pour avoir le "late binding" qui me permet de
ne pas avoir à mettre la référence à Word dans mon projet, et donc de le
faire marcher avec les différentes versions de Word utilisées par mes
clients.

Donc prenons l'exemple de la commande, la fonction ressemble à ça :
Sub GenererCommande(CommandeID as Long)
Dim appWord as Object
[...]
Set appWord = CreateObject("Word.Application")
[...] <-- Création et remplissage du document, tout va bien
GenererPiedDePage(appWord) <---- Proutch je ramasse une erreur 424 "Objet
requis" avant même de voir le MsgBox "test"

J'ai essayé dans l'appel de remplacer "appWord" par un
GetObject("Word.Application") et là je ramasse une "erreur de syntaxe
Automation" ...
J'ai essayé un appel GenererPiedDePage(CreateObject("Word.Application")) et
là ça passe...

Bref il doit y avoir moyen de passer mon objet appWord, ça doit être tout
bête, mais pour l'instant je n'ai pas eu l'idée qui marche,
et Google ne m'a pour l'instant pas beaucoup avancé...Bref je m'en remets à
votre érudition :)

2 réponses

Avatar
Raymond [mvp]
Bonjour.

A mon avis tu n'as pas besoin de passer ton objet Word dans la sub. Pour
cela il suffit que ton Dim appWord soit placé dans les déclaratives en début
de module et l'objet sera accessible par toutes les sub et fonctions du
module. si cet objet est utilisé par plusieurs modules il faudra le placer
en public dans un module standard, mais la tâche est un peu plus compliquée
pour gérer l'objet et bien souvent n'en vaut pas le coup.


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Alex" a écrit dans le message de
news:
Bonjour,
Je développe actuellement une application Access qui génère des documents
Word via Automation.
Comme le pied de page de ces documents dépend des données saisies dans
l'application, et est le
même quel que soit le type de document (il en existe une dizaine environ),
j'ai crée une fonction "GenererPiedDePage" qui serait appelée depuis les
fonctions de génération de documents (une fonction par type de document).

Ma fonction donne ça :
Sub GenererPiedDePage(ByVal appWord as Object)
Dim [...]

MsgBox "test"
[...]
End Sub

Dans mes fonctions de gén. de doc, je crée mon instance de Word en
utilisant

une variable de type Object, pour avoir le "late binding" qui me permet de
ne pas avoir à mettre la référence à Word dans mon projet, et donc de le
faire marcher avec les différentes versions de Word utilisées par mes
clients.

Donc prenons l'exemple de la commande, la fonction ressemble à ça :
Sub GenererCommande(CommandeID as Long)
Dim appWord as Object
[...]
Set appWord = CreateObject("Word.Application")
[...] <-- Création et remplissage du document, tout va bien
GenererPiedDePage(appWord) <---- Proutch je ramasse une erreur 424 "Objet
requis" avant même de voir le MsgBox "test"

J'ai essayé dans l'appel de remplacer "appWord" par un
GetObject("Word.Application") et là je ramasse une "erreur de syntaxe
Automation" ...
J'ai essayé un appel GenererPiedDePage(CreateObject("Word.Application"))
et

là ça passe...

Bref il doit y avoir moyen de passer mon objet appWord, ça doit être tout
bête, mais pour l'instant je n'ai pas eu l'idée qui marche,
et Google ne m'a pour l'instant pas beaucoup avancé...Bref je m'en remets
à

votre érudition :)




Avatar
Alex
Merci pour le conseil, je vais essayer !
Ah au fait la solution de mon problème était de faire l'appel sans
parenthèses...
("GenererPiedDePage appWord" au lieu de "GenererPiedDePage(appWord)")

"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.

A mon avis tu n'as pas besoin de passer ton objet Word dans la sub. Pour
cela il suffit que ton Dim appWord soit placé dans les déclaratives en
début

de module et l'objet sera accessible par toutes les sub et fonctions du
module. si cet objet est utilisé par plusieurs modules il faudra le placer
en public dans un module standard, mais la tâche est un peu plus
compliquée

pour gérer l'objet et bien souvent n'en vaut pas le coup.


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum