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

Utilisation d'une instance excel à partir de Project

11 réponses
Avatar
Anne
Bonjour,

Dans des macros VBA sous MS Project, je cherche =E0 lire des donn=E9es
dans un classeur excel.
A l'aide de diff=E9rents messages d=E9j=E0 post=E9s sur ce sujet, j'ai pu
=E9crire des lignes de code qui fonctionnent tr=E8s bien chez moi.
Exemple :
Set xlApp =3D CreateObject("Excel.Application")
xlApp.Workbooks.Open ActiveProject.Path &
"\Param=E8tres_essais.xls", _
ReadOnly:=3DTrue
etc...
Malheureusement, lorsque je copie ces macros chez les autres
utilisateurs, il y a erreur : a priori, il faut d=E9finir tous les
param=E8tres Excel.
J'ai ajout=E9 la commande dim xlApp as Excel.Application, mais cela ne
fonctionne pas. Dim xlApp as Object semble marcher. J'ai d=E9j=E0 du mal
=E0 comprendre...
Ensuite, il faut apparemment que je d=E9finisse toutes les commandes
excel du type xlToRight, xlDown, etc.
Est-ce normal? Comment les d=E9finir?

Merci d'avance!

10 réponses

1 2
Avatar
Jan De Messemaeker
Bonjour Anne,

Je dois admettre que je ne suis pas sur de ce qui est exactement ton pb.
Chez chaque utilisateur il faut passer en VBE, et dans Tools, References,
cocher Micrososft Excel.
Malheureusement il est très diffiile d'automatiser cela, mieux vaut
(demander de) le faire à la main.

Après cela les constantes Excel sont connues dans VBA Project.
Bien à toi,

--
Jan De Messemaeker, Microsoft Project Most Valuable Professional
http://users.online.be/prom-ade/
For FAQs: http://www.mvps.org/project/faqs.htm
"Anne" schreef in bericht
news:
Bonjour,

Dans des macros VBA sous MS Project, je cherche à lire des données
dans un classeur excel.
A l'aide de différents messages déjà postés sur ce sujet, j'ai pu
écrire des lignes de code qui fonctionnent très bien chez moi.
Exemple :
Set xlApp = CreateObject("Excel.Application")
xlApp.Workbooks.Open ActiveProject.Path &
"Paramètres_essais.xls", _
ReadOnly:=True
etc...
Malheureusement, lorsque je copie ces macros chez les autres
utilisateurs, il y a erreur : a priori, il faut définir tous les
paramètres Excel.
J'ai ajouté la commande dim xlApp as Excel.Application, mais cela ne
fonctionne pas. Dim xlApp as Object semble marcher. J'ai déjà du mal
à comprendre...
Ensuite, il faut apparemment que je définisse toutes les commandes
excel du type xlToRight, xlDown, etc.
Est-ce normal? Comment les définir?

Merci d'avance!
Avatar
Anne
Merci Jan, je crois que ta réponse me résoud partiellement mon
problème. J'avais complètement oublié cette histoire de référence
à Excel.

Mais il y a toujours des dysfonctionnements. Sur mon poste, j'ai écrit
uniquement "Set xlApp = CreateObject("Excel.Application") ", sans le
dim... Sur les autres postes, ça ne fonctionne pas, il faut que je
définisse l'objet xlApp. Si je définis par :
dim xlApp as Excel.Application, le type n'est pas reconnu.
Avatar
Jan De Messemaeker
Bonjour Anne,

Il y a une option en VB Editor (Tools, Options, Editor) "Require Variable
Declaration" qui est sans doute off chez toi et on chez les autres.

En principe quand tu as la référence le dim as Excel.application doit
marcher mais sans la ref cela ne peut marcher car iil ignore la librairie
Excel.

Si nécessaire dim xlapp as object marche aussi.

Bien à toi,

--
Jan De Messemaeker, Microsoft Project Most Valuable Professional
http://users.online.be/prom-ade/
For FAQs: http://www.mvps.org/project/faqs.htm
"Anne" schreef in bericht
news:
Merci Jan, je crois que ta réponse me résoud partiellement mon
problème. J'avais complètement oublié cette histoire de référence
à Excel.

Mais il y a toujours des dysfonctionnements. Sur mon poste, j'ai écrit
uniquement "Set xlApp = CreateObject("Excel.Application") ", sans le
dim... Sur les autres postes, ça ne fonctionne pas, il faut que je
définisse l'objet xlApp. Si je définis par :
dim xlApp as Excel.Application, le type n'est pas reconnu.
Avatar
Anne
Merci beaucoup Jan.
En fait la référence à Excel avait mal été validée chez
l'utilisateur. Maintenant, le "dim xlApp as Excel.Application"
fonctionne.

En ce qui concerne la déclaration des variables, j'ai bien moi aussi
la déclaration obligatoire. Mais je pense avoir compris : j'ai dû
déclaré une fois dim xlApp as Excel.Application, et cette
déclaration a dû être "conservée" chez moi.
J'ai ajouté un set xlApp=Nothing à la fin de mon code, pour être
certaine de ne pas reproduire ce genre de choses.

Merci encore.
Avatar
Jan De Messemaeker
Bonjour,

Avant que tu ne le demandes... Excel à partir de Project a un pb insoluble.
A la fin d'un traîtement même avec le =nothing, dans le task manager de
Windows tu trouveras une instance "obscure" de Excel qui est gênante. Elle
disparaît quand tu coupes Project.

--
Jan De Messemaeker, Microsoft Project Most Valuable Professional
http://users.online.be/prom-ade/
For FAQs: http://www.mvps.org/project/faqs.htm
"Anne" schreef in bericht
news:
Merci beaucoup Jan.
En fait la référence à Excel avait mal été validée chez
l'utilisateur. Maintenant, le "dim xlApp as Excel.Application"
fonctionne.

En ce qui concerne la déclaration des variables, j'ai bien moi aussi
la déclaration obligatoire. Mais je pense avoir compris : j'ai dû
déclaré une fois dim xlApp as Excel.Application, et cette
déclaration a dû être "conservée" chez moi.
J'ai ajouté un set xlApp=Nothing à la fin de mon code, pour être
certaine de ne pas reproduire ce genre de choses.

Merci encore.
Avatar
Anne
En effet, j'avais remarqué ce problème, en pensant que cela venait
peut-être d'un défaut de mon code.
Merci beaucoup.
Avatar
Karl Stewing
Bonjour Anne -

Il reste aussi la possibilité suivante :

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application")

C'est ce que l'on appelle du late binding je crois. Avec ca, plus besoin
d'ajouter une référence à la main.
Bonne journée.

- Karl Stewing, M7
Project MCP/MVP

Anne wrote:
En effet, j'avais remarqué ce problème, en pensant que cela venait
peut-être d'un défaut de mon code.
Merci beaucoup.


Avatar
Jan De Messemaeker
Bonjour,

Ceci ne résout pas le problème discuté, qui est qu'une instance Excel
subsiste après la clôture de la macro même si on fait quit et on met xlapp à
Nothing.

--
Jan De Messemaeker, Microsoft Project Most Valuable Professional
http://users.online.be/prom-ade/
For FAQs: http://www.mvps.org/project/faqs.htm
"Karl Stewing" schreef in bericht
news:
Bonjour Anne -

Il reste aussi la possibilité suivante :

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application")

C'est ce que l'on appelle du late binding je crois. Avec ca, plus besoin
d'ajouter une référence à la main.
Bonne journée.

- Karl Stewing, M7
Project MCP/MVP

Anne wrote:
En effet, j'avais remarqué ce problème, en pensant que cela venait
peut-être d'un défaut de mon code.
Merci beaucoup.






Avatar
Karl Stewing
Bonjour Jan -

Je ne pense pas que ma réponse soit hors sujet, elle est juste un peu haute
dans l'arbre des posts. En fait, elle traite de la manière de déclarer des
variables (thème que vous avez abordé) et pas de la fermeture d'Excel.
Désolé.

Par contre, pour ma culture personnelle, j'ai essayé le code suivant :

Option Explicit

Public Sub test()

Dim oApp As Object

Set oApp = CreateObject("Excel.Application")
oApp.Quit
Set oApp = Nothing

End Sub

et je ne trouve pas d'instance d'Excel qui fonctionne après ca, sans quitter
Project. Qu'ai-je fais de différent par rapport à vous pour que je puisse
voir ce pb ?

Merci.

- Karl Stewing, M7
Project MCP/MVP

Jan De Messemaeker wrote:
Bonjour,

Ceci ne résout pas le problème discuté, qui est qu'une instance Excel
subsiste après la clôture de la macro même si on fait quit et on met
xlapp à Nothing.

Bonjour Anne -

Il reste aussi la possibilité suivante :

Dim xlApp As Object

Set xlApp = CreateObject("Excel.Application")

C'est ce que l'on appelle du late binding je crois. Avec ca, plus
besoin d'ajouter une référence à la main.
Bonne journée.

- Karl Stewing, M7
Project MCP/MVP

Anne wrote:
En effet, j'avais remarqué ce problème, en pensant que cela venait
peut-être d'un défaut de mon code.
Merci beaucoup.






Avatar
Anne
Effectivement, je ne vois pas de différence avec les commandes que
j'utilise. Mais parfois l'instance Excel qui reste est bien cachée...
Autre chose : j'ai utilisé des "End" pour des boutons Quitter dans ma
macro, cela doit également poser des problèmes pour fermer l'instance
Excel. Apparemment il n'est pas très bon d'utiliser des "End".
1 2