OVH Cloud OVH Cloud

Excel n'ouvre pas Word

9 réponses
Avatar
A QUEMENER
Bonjour à tous,

Je n'arrive pas à ouvrir un document Word à partir d'une macro Excel.
Voici le code que j'utilise:
Sub ouvreWord()
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & "\"
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(Chemin_prog & "tableau.doc",
ReadOnly:=True)
end sub

Le message d'erreur suivant apparaît:
"Erreur de compilation
Type défini par l'utilisateur non défini"
????
Qqu'un peut-il m'aider à corriger le code
D'avance merci
cordialement
andré

9 réponses

Avatar
PMO
Bonjour,

Essayez les 2 procédures ci-dessous

'********************************
'---- Liaison précoce; Librairie indispensable
'---- "Microsoft World x.0 Object Library"
'---- FAIRE: menu Outils/Références et cocher
'---- la référence susmentionnée
'---- Remarque: exécution plus rapide
Sub ouvreWord_PRECOCE()
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Dim Chemin_prog As String
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open _
(Chemin_prog & "tableau.doc", ReadOnly:=True)
End Sub

'---- Liaison tardive; Sans la librairie
'---- "Microsoft World x.0 Object Library"
'---- Remarque: exécution moins rapide
Sub ouvreWord_TARDIVE()
Dim DocWord As Object 'Word.Document
Dim AppWord As Object 'Word.Application
Dim Chemin_prog As String
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open _
(Chemin_prog & "tableau.doc", ReadOnly:=True)
End Sub
'********************************

Cordialement.
--
PMO
Patrick Morange



Bonjour à tous,

Je n'arrive pas à ouvrir un document Word à partir d'une macro Excel.
Voici le code que j'utilise:
Sub ouvreWord()
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(Chemin_prog & "tableau.doc",
ReadOnly:=True)
end sub

Le message d'erreur suivant apparaît:
"Erreur de compilation
Type défini par l'utilisateur non défini"
????
Qqu'un peut-il m'aider à corriger le code
D'avance merci
cordialement
andré





Avatar
Ange Ounis
Tu as dû t'embrouiller dans tes copier/coller :)
Pour une liaison tardive, je dirais plutôt :

Set AppWord = CreateObject("Word.Application")

----------
Ange Ounis
----------

Bonjour,

Essayez les 2 procédures ci-dessous

'********************************
'---- Liaison précoce; Librairie indispensable
'---- "Microsoft World x.0 Object Library"
'---- FAIRE: menu Outils/Références et cocher
'---- la référence susmentionnée
'---- Remarque: exécution plus rapide
Sub ouvreWord_PRECOCE()
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Dim Chemin_prog As String
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open _
(Chemin_prog & "tableau.doc", ReadOnly:=True)
End Sub

'---- Liaison tardive; Sans la librairie
'---- "Microsoft World x.0 Object Library"
'---- Remarque: exécution moins rapide
Sub ouvreWord_TARDIVE()
Dim DocWord As Object 'Word.Document
Dim AppWord As Object 'Word.Application
Dim Chemin_prog As String
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open _
(Chemin_prog & "tableau.doc", ReadOnly:=True)
End Sub
'********************************

Cordialement.


Avatar
A QUEMENER
Merci pour vos aides précieuses
Cordialement
andré


"PMO" <patrickPOINTmorangeAROBASElapostePOINTnet> a écrit dans le message de
news:
Bonjour,

Essayez les 2 procédures ci-dessous

'********************************
'---- Liaison précoce; Librairie indispensable
'---- "Microsoft World x.0 Object Library"
'---- FAIRE: menu Outils/Références et cocher
'---- la référence susmentionnée
'---- Remarque: exécution plus rapide
Sub ouvreWord_PRECOCE()
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Dim Chemin_prog As String
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open _
(Chemin_prog & "tableau.doc", ReadOnly:=True)
End Sub

'---- Liaison tardive; Sans la librairie
'---- "Microsoft World x.0 Object Library"
'---- Remarque: exécution moins rapide
Sub ouvreWord_TARDIVE()
Dim DocWord As Object 'Word.Document
Dim AppWord As Object 'Word.Application
Dim Chemin_prog As String
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open _
(Chemin_prog & "tableau.doc", ReadOnly:=True)
End Sub
'********************************

Cordialement.
--
PMO
Patrick Morange



Bonjour à tous,

Je n'arrive pas à ouvrir un document Word à partir d'une macro Excel.
Voici le code que j'utilise:
Sub ouvreWord()
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(Chemin_prog & "tableau.doc",
ReadOnly:=True)
end sub

Le message d'erreur suivant apparaît:
"Erreur de compilation
Type défini par l'utilisateur non défini"
????
Qqu'un peut-il m'aider à corriger le code
D'avance merci
cordialement
andré







Avatar
PMO
Bonjour,

1) J'entends par Liaison PRECOCE
- Déclaration des variables AVEC spécification
du type du composant ActiveX soit:
Dim DocWord As Word.Document
Dim AppWord As Word.Application
VBA reconnaît l'intention et optimise le code compilé

2) J'entends par Liaison TARDIVE
- Déclaration des variables SANS spécification soit:
Dim DocWord As Object
Dim AppWord As Object
Ce n'est qu'à l'exécution que VBA interprètera l'intention

Cordialement.
--
PMO
Patrick Morange



Tu as dû t'embrouiller dans tes copier/coller :)
Pour une liaison tardive, je dirais plutôt :

Set AppWord = CreateObject("Word.Application")

----------
Ange Ounis
----------



Avatar
Ange Ounis
Ah, OK.
Cependant, ce n'est pas, à ma connaissance, la définition habituelle de ces termes.
La liaison précoce est celle qui s'effectue à la compilation du code alors que
la liaison tardive s'effectue à l'exécution du code.
Même si la "compilation" de VBA n'en est pas vraiment une, les liaisons précoces
et tardives sont bien effectuées selon la définition habituelle, pour ce que
j'en sais.
La distinction que tu fais, AMHA, ne différencie pas 2 types de liaisons, mais
plutôt 2 méthodes de déclaration des variables objet : typée (Dim AppWord As
Word.Application) et non typée (Dim AppWord As Object).

----------
Ange Ounis
----------

Bonjour,

1) J'entends par Liaison PRECOCE
- Déclaration des variables AVEC spécification
du type du composant ActiveX soit:
Dim DocWord As Word.Document
Dim AppWord As Word.Application
VBA reconnaît l'intention et optimise le code compilé

2) J'entends par Liaison TARDIVE
- Déclaration des variables SANS spécification soit:
Dim DocWord As Object
Dim AppWord As Object
Ce n'est qu'à l'exécution que VBA interprètera l'intention

Cordialement.


Avatar
michdenis
Bonjour Ange Ounis,

| La distinction que tu fais, AMHA, ne différencie pas 2 types de liaisons, mais
| plutôt 2 méthodes de déclaration des variables objet : typée (Dim AppWord As
| Word.Application) et non typée (Dim AppWord As Object).

Le commentaire de PMO est exact.

Dim AppWord As Word.Application
Ce type de déclaration requiert le chargement de la référence à
"Microsoft Word x.x object librairy" avant l'exécution du code.

Lors de la compilation, Excel a déjà identifié l'activex et où il est situé dans
la base de registre. À l'exécution, le code est plus rapide car la "recherche"
est déjà faite. De là, l'expression "Liaison précode"

Dim AppWord As Object
- Ne requiert pas le chargement de la référence
-Lors de la compilation... excel n'est pas en mesure de savoir de quel
activex il s'agit et de le localiser... c'est ce qu'il va faire à l'exécution
du code ... d'où l'expression : "Liaison tardive" et un temps d'exécution
un peu plus lent.


Salutations!


"Ange Ounis" a écrit dans le message de news: %23xwIZEE%
Ah, OK.
Cependant, ce n'est pas, à ma connaissance, la définition habituelle de ces termes.
La liaison précoce est celle qui s'effectue à la compilation du code alors que
la liaison tardive s'effectue à l'exécution du code.
Même si la "compilation" de VBA n'en est pas vraiment une, les liaisons précoces
et tardives sont bien effectuées selon la définition habituelle, pour ce que
j'en sais.
La distinction que tu fais, AMHA, ne différencie pas 2 types de liaisons, mais
plutôt 2 méthodes de déclaration des variables objet : typée (Dim AppWord As
Word.Application) et non typée (Dim AppWord As Object).

----------
Ange Ounis
----------

Bonjour,

1) J'entends par Liaison PRECOCE
- Déclaration des variables AVEC spécification
du type du composant ActiveX soit:
Dim DocWord As Word.Document
Dim AppWord As Word.Application
VBA reconnaît l'intention et optimise le code compilé

2) J'entends par Liaison TARDIVE
- Déclaration des variables SANS spécification soit:
Dim DocWord As Object
Dim AppWord As Object
Ce n'est qu'à l'exécution que VBA interprètera l'intention

Cordialement.


Avatar
A QUEMENER
Merci pour vos précieux conseils
cordialement
andré

"A QUEMENER" a écrit dans le message de news:
dmq99g$ijp$
Bonjour à tous,

Je n'arrive pas à ouvrir un document Word à partir d'une macro Excel.
Voici le code que j'utilise:
Sub ouvreWord()
Dim DocWord As Word.Document
Dim AppWord As Word.Application
Set AppWord = New Word.Application
Chemin_prog = ActiveWorkbook.Path & ""
AppWord.ShowMe
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open(Chemin_prog & "tableau.doc",
ReadOnly:=True)
end sub

Le message d'erreur suivant apparaît:
"Erreur de compilation
Type défini par l'utilisateur non défini"
????
Qqu'un peut-il m'aider à corriger le code
D'avance merci
cordialement
andré




Avatar
Ange Ounis
Je suis désolé d'insister mais dans les 2 exemples proposés par PMO la référence
à la librairie des objets de Word _doit_ être cochée pour que le code compile
sans erreur.
C'est facile à vérifier :)
Si la référence à la librairie de Word n'est pas cochée, l'instruction
New Word.Application
de la 2ème procédure provoque l'erreur 'type défini par l'utilisateur non
défini', erreur qui ne se produit plus dès que la librairie est cochée...

Les 2 procédures proposées par PMO utilisent donc toutes les 2 des liaisons
précoces. Pour une liaison dite tardive, sans référence à la librairie d'objets
de Word, il faut utiliser soit GetObject (si on suppose que Word est déjà
ouvert) soit CreateObject (pour créer une nouvelle instance de Word).

----------
Ange Ounis
----------

Bonjour Ange Ounis,

| La distinction que tu fais, AMHA, ne différencie pas 2 types de liaisons, mais
| plutôt 2 méthodes de déclaration des variables objet : typée (Dim AppWord As
| Word.Application) et non typée (Dim AppWord As Object).

Le commentaire de PMO est exact.

Dim AppWord As Word.Application
Ce type de déclaration requiert le chargement de la référence à
"Microsoft Word x.x object librairy" avant l'exécution du code.

Lors de la compilation, Excel a déjà identifié l'activex et où il est situé dans
la base de registre. À l'exécution, le code est plus rapide car la "recherche"
est déjà faite. De là, l'expression "Liaison précode"

Dim AppWord As Object
- Ne requiert pas le chargement de la référence
-Lors de la compilation... excel n'est pas en mesure de savoir de quel
activex il s'agit et de le localiser... c'est ce qu'il va faire à l'exécution
du code ... d'où l'expression : "Liaison tardive" et un temps d'exécution
un peu plus lent.


Salutations!


"Ange Ounis" a écrit dans le message de news: %23xwIZEE%
Ah, OK.
Cependant, ce n'est pas, à ma connaissance, la définition habituelle de ces termes.
La liaison précoce est celle qui s'effectue à la compilation du code alors que
la liaison tardive s'effectue à l'exécution du code.
Même si la "compilation" de VBA n'en est pas vraiment une, les liaisons précoces
et tardives sont bien effectuées selon la définition habituelle, pour ce que
j'en sais.
La distinction que tu fais, AMHA, ne différencie pas 2 types de liaisons, mais
plutôt 2 méthodes de déclaration des variables objet : typée (Dim AppWord As
Word.Application) et non typée (Dim AppWord As Object).

----------
Ange Ounis
----------


Bonjour,

1) J'entends par Liaison PRECOCE
- Déclaration des variables AVEC spécification
du type du composant ActiveX soit:
Dim DocWord As Word.Document
Dim AppWord As Word.Application
VBA reconnaît l'intention et optimise le code compilé

2) J'entends par Liaison TARDIVE
- Déclaration des variables SANS spécification soit:
Dim DocWord As Object
Dim AppWord As Object
Ce n'est qu'à l'exécution que VBA interprètera l'intention

Cordialement.







Avatar
michdenis
Bonjour,

Je m'étais contenté de lire les lignes de déclaration des variables, et,
c'est vrai qu'une telle ligne de code cause problème si on croit effectuer
une liaison prococe :
Set AppWord = New Word.Application

;-)


Salutations!



"Ange Ounis" a écrit dans le message de news: Ocuhj5L%
Je suis désolé d'insister mais dans les 2 exemples proposés par PMO la référence
à la librairie des objets de Word _doit_ être cochée pour que le code compile
sans erreur.
C'est facile à vérifier :)
Si la référence à la librairie de Word n'est pas cochée, l'instruction
New Word.Application
de la 2ème procédure provoque l'erreur 'type défini par l'utilisateur non
défini', erreur qui ne se produit plus dès que la librairie est cochée...

Les 2 procédures proposées par PMO utilisent donc toutes les 2 des liaisons
précoces. Pour une liaison dite tardive, sans référence à la librairie d'objets
de Word, il faut utiliser soit GetObject (si on suppose que Word est déjà
ouvert) soit CreateObject (pour créer une nouvelle instance de Word).

----------
Ange Ounis
----------

Bonjour Ange Ounis,

| La distinction que tu fais, AMHA, ne différencie pas 2 types de liaisons, mais
| plutôt 2 méthodes de déclaration des variables objet : typée (Dim AppWord As
| Word.Application) et non typée (Dim AppWord As Object).

Le commentaire de PMO est exact.

Dim AppWord As Word.Application
Ce type de déclaration requiert le chargement de la référence à
"Microsoft Word x.x object librairy" avant l'exécution du code.

Lors de la compilation, Excel a déjà identifié l'activex et où il est situé dans
la base de registre. À l'exécution, le code est plus rapide car la "recherche"
est déjà faite. De là, l'expression "Liaison précode"

Dim AppWord As Object
- Ne requiert pas le chargement de la référence
-Lors de la compilation... excel n'est pas en mesure de savoir de quel
activex il s'agit et de le localiser... c'est ce qu'il va faire à l'exécution
du code ... d'où l'expression : "Liaison tardive" et un temps d'exécution
un peu plus lent.


Salutations!


"Ange Ounis" a écrit dans le message de news: %23xwIZEE%
Ah, OK.
Cependant, ce n'est pas, à ma connaissance, la définition habituelle de ces termes.
La liaison précoce est celle qui s'effectue à la compilation du code alors que
la liaison tardive s'effectue à l'exécution du code.
Même si la "compilation" de VBA n'en est pas vraiment une, les liaisons précoces
et tardives sont bien effectuées selon la définition habituelle, pour ce que
j'en sais.
La distinction que tu fais, AMHA, ne différencie pas 2 types de liaisons, mais
plutôt 2 méthodes de déclaration des variables objet : typée (Dim AppWord As
Word.Application) et non typée (Dim AppWord As Object).

----------
Ange Ounis
----------


Bonjour,

1) J'entends par Liaison PRECOCE
- Déclaration des variables AVEC spécification
du type du composant ActiveX soit:
Dim DocWord As Word.Document
Dim AppWord As Word.Application
VBA reconnaît l'intention et optimise le code compilé

2) J'entends par Liaison TARDIVE
- Déclaration des variables SANS spécification soit:
Dim DocWord As Object
Dim AppWord As Object
Ce n'est qu'à l'exécution que VBA interprètera l'intention

Cordialement.