Comment ouvrir un fichier Word à partir d'une macro excel

fandio

XLDnaute Nouveau
Bonjour à tous,

à partir d'un bouton créer sur une feuille excel je voudrais créer une macro qui ouvre un fichier word (ce fichier word est un courrier qui contient des champs conditionnels dont les informations sont dans une base d'excel) .

concrètement et comme je suis complètement débutant en VBA j'ai élaboré ce début de macro :

cette partie de macro ouvre en premier le fichier et onglet excel où se situe les données dont mon courrier word à besoin

ChDir _
"C:\Documents and Settings\thyssen\Mes documents\excel5\financier\Banque & Couverture USD"
Workbooks.Open Filename:= _
"C:\Documents and Settings\thyssen\Mes documents\excel5\financier\Banque & Couverture USD\nouvelle application dollarsv10.xls" _
, UpdateLinks:=0
Sheets("infos_oppen").Select

cette deuxième partie ouvre Word et mon fichier word (courrier)

Shell pathname:="C:\Program Files\Microsoft Office\OFFICE11\winword.exe C:\Documents and Settings\thyssen\Mes documents\word97\Devise Confirmation.Doc" _
, windowstyle:=vbNormalFocus


mais au lancement de la macro

j'obtiens dans word, ce message d'erreur "word à rencontré une erreur lors de l'ouverture du fichier. essayer de :
* vérifier les autorisations du fichier/Lecteur
* vérifier que la mémoire et l'espace disque sont suffisants
* Ouvrir le fichier avec le convertisseur Récupération de texte

Auriez-vous une idée pour remédier à ce message d'erreur et que la macro continue bien jusqu'au bout

Merci d'avance
 

Staple1600

XLDnaute Barbatruc
Re : Comment ouvrir un fichier Word à partir d'une macro excel

Bonjour

teste la macro ci-dessous
et des exemples dans ce ((_fil_)).
Code:
Sub OuvrirWordDoc()
'References: cocher Microsoft Word 9.0 Object Library ' ou 10.0 ou autre
'selon ta version de Word
Dim wdApp As Word.Application, wdDoc As Word.Document

On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then 
Set wdApp = CreateObject("Word.Application")
End If
On Error GoTo 0

Set wdDoc = wdApp.Documents.Open("C:\Documents and Settings\thyssen\Mes documents\word97\Devise Confirmation.doc")

wdApp.Visible = True

'
End Sub
 
Dernière édition:

Épaf

XLDnaute Occasionnel
Re : Comment ouvrir un fichier Word à partir d'une macro excel

N'oublie pas que si tu crées une instance de Word, il faut la refermer avant de sortir de ta procédure sans quoi, à chaque fois que tu exécutes celle-ci tu crées une nouvelle instance. Donc, fermer le fichier puis quitter Word (en rouge)
Code:
'necessite d'activer la reference microsoft Word 10.0 Object Library
Sub RenseignerLesSignets()
Dim wdApp As Word.Application
Dim WdDoc As Word.Document
Dim i As Byte
 
    Set wdApp = CreateObject("word.application")    'ouvre une session Word
    Set WdDoc = wdApp.Documents.Open("D:\Doc\DocWord.doc")    'ouvre le document Word
    wdApp.Visible = False    'Word est masqué pendant l'opération
    With wdApp
        For i = 1 To 3
            .Selection.Goto What:=wdGoToBookmark, Name:="Signet" & i
            .Selection.TypeText Text:=Cells(i, 1).Value
            'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
        Next i
    End With
 
    'WdApp.Visible = True    'affiche le document Word
    'WdDoc.PrintOut 'Pour imprimer le doc obtenu
 
[COLOR="red"]    WdDoc.Close True [/COLOR]'ferme le document word en sauvegardant les données
[COLOR="red"]    wdApp.Quit [/COLOR]'ferme la session Word

End Sub
S'il est trop tard, tu peux toujours aller dans le gestionnaire des tâches pour fermer ces instances ;)
 

Épaf

XLDnaute Occasionnel
Re : Comment ouvrir un fichier Word à partir d'une macro excel

Bonjour Epaf
Comme je n'ai pas Word d'installé , moi cela ne me dérnage pas (lol) :p
Mais effectivemet tu as raison , merci d'avoir rectifié mon oubli
Bonjour Staple,
C'est simplement que "Chat échaudé craint l'eau froide..." Le problème est surtout, quand un fichier est ouvert, qu'on a un message du style "fichier utilisé par ... etc." on qu'on se demande "quel est cet olibrius qui se permet d'utiliser sans autorisation un fichier perso placé sur "son" micro, dans "son" répertoire..." :D
@+
 

fandio

XLDnaute Nouveau
Re : Comment ouvrir un fichier Word à partir d'une macro excel

Bonjour à tous et en particulier à EPAF et à STAPPLE1600,

désolé de ne pas avoir donné de nouvelles plutôt, je pensais qu'il y avait une notification par mail des messages en réponses, et donc je viens de retourner seulement sur le site et je viens donc de voir vos réponses, et donc un grand merci à vous deux.

si vous le permettez, j'aurai encore quelques questions,

vous mentionnez tous les deux "necessite d'activer la reference microsoft Word 10.0 Object Library" pour ma part j'ai la version 11 de word d' office 2003 SP3 que je viens juste d'installer. pourriez-vous m'indiquer de quoi s'agit t-il exactement ?

concernant cette partie de code
"WdDoc.Close True 'ferme le document word en sauvegardant les données"

en ce qui me concerne, il ne faut pas que je sauvegarde le fichier word (car c'est une feuille genre publipostage limité) en effet dans excel j'ai un code "C" (pour courrier) dans une colonne, qui sert de critère à word pour établir ou pas un document

puis-je donc m'abstenir de ne pas tenir compte de cette ligne de code ?


ai-je également besoin de tous le code concernant les signets (dont je reconnais ne pas savoir ce que celà représente ni à quoi celà sert)

With wdApp
For i = 1 To 3
.Selection.Goto What:=wdGoToBookmark, Name:="Signet" & i
.Selection.TypeText Text:=Cells(i, 1).Value
'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
Next i
End With

Sincères salutations
 

Épaf

XLDnaute Occasionnel
Re : Comment ouvrir un fichier Word à partir d'une macro excel

fandio à dit:
vous mentionnez tous les deux "necessite d'activer la reference microsoft Word 10.0 Object Library" pour ma part j'ai la version 11 de word d' office 2003 SP3 que je viens juste d'installer. pourriez-vous m'indiquer de quoi s'agit t-il exactement ?
Dans l'éditeur VB, tu vas dans Outils -> Références, et tu valides "microsoft Word 10.0 Object Library" (checkbox à gauche du nom)

concernant cette partie de code
"WdDoc.Close True 'ferme le document word en sauvegardant les données"
en ce qui me concerne, il ne faut pas que je sauvegarde le fichier word
Tu remplaces True par False, c'est tout.
ai-je également besoin de tous le code concernant les signets (dont je reconnais ne pas savoir ce que celà représente ni à quoi celà sert
Code:
With wdApp
        For i = 1 To 3
            .Selection.Goto What:=wdGoToBookmark, Name:="Signet" & i
            .Selection.TypeText Text:=Cells(i, 1).Value
            'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
        Next i
End With)
Non, tu supprimes cette partie tirée d'un exemple
Bonne journée
 

Épaf

XLDnaute Occasionnel
Re : Comment ouvrir un fichier Word à partir d'une macro excel

J'ajoute une indication : Si tu désires "Activer" Word pour travailler sur un document, si tu le fermes manuellement, le code que je t'ai passé va l'avoir fermé avant que tu aies le temps de te placer sur Word.
Pour accéder à Word, c'est une ligne après ouverture de l'appli ou du fichier
Code:
wdApp.Activate
Si tu le fermes manuellement, ces deux lignes sont à supprimer :
WdDoc.Close True 'ferme le document word en sauvegardant les données
wdApp.Quit 'ferme la session Word
Toujours dans la même hypothèse (fermeture manuelle) tu as un choix à faire :
1 - Soit tu souhaites revenir sur Excel après avoir travaillé sur Word
2 - Soit Excel ne doit plus te servir, auquel cas tu peux le fermer.
Dans le premier cas (retour sur Excel) tu dois interrompre la macro le temps de travail sur Word. Pour ma part, je mets un msgbox "Retour dans Excel" après wdApp.Activate.
Quand Word est fermé, tu as simplement à faire un clic sur ok.
Il y a certainement une syntaxe plus sioux testant l'application active mais comme celle-ci me suiffit, je n'ai pas cherché plus loin.
J'espère ne pas t'avoir embrouillé :cool:
 

fandio

XLDnaute Nouveau
Re : Comment ouvrir un fichier Word à partir d'une macro excel

Bonsoir,

désolé c'est encore moi

Vos explications sont très limpides, et grace à vous j'ai avancé
je n'ai plus le message d'erreur du début du post,

par contre la macro ouvre le fichier sans faire de mise à jour,


je vais donc essayer d'être aussi clair que vous.

je m'explique,

normalement lorsque je fais la manipulation en manuel (donc sans utiliser la macro)

- j'ouvre word

- je charge mon fichier word (courrier publipostage sur certain champs de données liées avec excel et avec le critère "C")

- au chargement du fichier j'ai le message, " l'ouverture de ce document exécutera la commande SQL suivante
SELECT*FROM C:\repertoire\repertoire\repertoire\monfichier.xls
Where((Faire________Courrier___C___Etiquette___E='C'))
des données provenant de votre base de données seront insérées dans le document. Voulez-vous continuer"

- Ici je répond OUI

mon courrier apparaît après un petit moment, si monfichier.xls n'est pas ouvert excel s'ouvre, et charge monfichier.xls, et mon courrier est mis à jour

- j'édite

- je ferme word sans sauvegarder mon courrier


alors qu'en mode exécution de la macro, le courrier se présente comme lorsque je répond NON à la question du mode manuel

" l'ouverture de ce document exécutera la commande SQL suivante
SELECT*FROM C:\repertoire\repertoire\repertoire\monfichier.xls
Where((Faire________Courrier___C___Etiquette___E='C'))
des données provenant de votre base de données seront insérées dans le document. Voulez-vous continuer"

j'ai fait le test


donc comme celà ne fonctionne pas comme je veux, j'ai tenter la chose suivante :
j'ai donc créer une macro "essai" en mode assistant (quand je pratique en mode normal) ce qui ma généré le code suivant :

Sub essai()
'
'
essai Macro

Documents.Open FileName:="""Devise Confirmation.doc""", ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""

End sub

que j'ai tenté d'adapter à la ligne :

Set WdDoc = wdApp.Documents.Open("D:\Doc\DocWord.doc")

en :

Set WdDoc = wdApp.Documents.Open("C:\Documents and Settings\thyssen\Mes documents\word97\Devise Confirmation.Doc"), ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:=""

mais Vba n'accepte pas ce code il n'aime pas la "," juste après
Set WdDoc = wdApp.Documents.Open("C:\Documents and Settings\thyssen\Mes documents\word97\Devise Confirmation.Doc")

décidement que c'est difficile d'être débutant de de vouloir faire comme les grands !

Sincères salutations
 

MichelXld

XLDnaute Barbatruc
Re : Comment ouvrir un fichier Word à partir d'une macro excel

bonsoir

Je n'ai pas bien compris ce que tu cherches à réaliser. ci dessous une macro Excel, à adapter, qui ouvre un document principal de publipostage et effectue l'impression des enregistrements:
La base de données est dans la Feuille "Feuil1" d'un classeur Excel.


Code:
Private Sub commandButton1_Click()
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    Dim docWord As Word.Document
    Dim appWord As Word.Application
    Dim NomBase As String
    
    NomBase = "C:\dossier\labase.xls"
    
    Application.ScreenUpdating = False
    Set appWord = New Word.Application
    appWord.Visible = True
    'Ouverture du document principal Word
    Set docWord = appWord.Documents.Open("C:\leDocument.doc")
    
    'fonctionnalité de publipostage pour le document spécifié
    With docWord.mailMerge
  'Ouvre la base de données
  .OpenDataSource Name:= NomBase, _
            Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
            "DBQ=" & NomBase & "; ReadOnly=True;", _
            SQLStatement:="SELECT * FROM [Feuil1$]"
        'Spécifie la fusion vers l'imprimante
        .Destination = wdSendToPrinter
        .suppressBlankLines = True
            'Prend en compte l'ensemble des enregistrements
            With .DataSource
                .firstRecord = wdDefaultFirstRecord
                .lastRecord = wdDefaultLastRecord
            End With
        'Exécute l'opération de publipostage
        .Execute Pause:=False
    End With
    
    Application.ScreenUpdating = True
    
    'Fermeture du document Word
    docWord.Close False
    appWord.Quit
End Sub



Bonne soirée
MichelXld
 

fandio

XLDnaute Nouveau
Re : Comment ouvrir un fichier Word à partir d'une macro excel

Bonjour,

Je vais tenter de mieux exprimer mes besoins

Le but est d’automatiser par une macro (lancer à partir d’un bouton d’une feuille intitulée « Menu » et sauvegarder sous Excel) plusieurs taches répétitives chaque jour, pour me faciliter le travail.


Ainsi « ce bouton », donc la macro que je cherche à écrire depuis 2 jours doit

1) ouvrir un fichier Excel dont une des feuille intitulé par exemple « essai » est considérée comme ma donnée source, (genre base de donnée), je dis « genre base de donnée » car certaines colonnes sont alimentées de données saisies et d’autre par des formules), dans l’une de ces colonne par exemple la « F » les données de cette colonne peuvent prendre les valeurs : « C » qui est l’abréviation de « Courrier » ou « E » pour abréviation de « Etiquette », ou être vide. cette colonne va donc servir de critère à « WORD »



2) ouvrir un fichier Word et éditer (autant de courriers qu’il y a de « C » dans ma feuille Excel « essai »), en l‘ occurrence ici, un courrier type, qui est constituer de texte saisie et de « champs fusionnés », chaque champ fusionné représentant des valeurs d’une colonne de ma feuille Excel « essai », puis une fois l’édition terminée fermer Word sans sauvegarder le document, fermer ma feuille Excel "Essai" et revenir à ma feuille "Menu" toujours sous Excel.


Exemple : Donnée Excel « essai »

Type Taux Montant Clé
1 AC 1.3614 10000 C
2 VT 1.4215 5000
3 VT 1.3810 2000 C

Exemple : courrier type (servant de base) avec les champs fusionnées

Vous avez utilisé « Montant » Dollars au taux de « Taux » pour la catégorie
«Type »

Exemple : rendu du courrier type lorsque la mise à jour est faite (Word m’indique qu’il y a 2 courriers) car dans la base Excel « essai » j’ai 2 lignes dont le critère de fusion est « C »

Ce qui donne pour le 1er courrier

Vous avez utilisé 10000 Dollars au taux de 1.3614 pour la catégorie AC

Ce qui donne pour le 2ème courrier

Vous avez utilisé 2000 Dollars au taux de 1.3814 pour la catégorie VT


Donc pour finir, ce qui manque à ma macro actuelle est la mise à jour des données de fusion

J’obtiens actuellement

Vous avez utilisé Dollars au taux de pour la catégorie


J' espère avoir été plus compréhensible


Je vais devoir également faire une autre macro concernant cette fois ci les étiquettes ( j'ai un fichier word création étiquette vierge) toujours avec un critères de fusion qui sera cette fois la lettre "E"

dans la mesure ou j'arrive à effectuer ma première macro avec le courrier type, pourrais-je l'adapter à celle pour les étiquettes (avec bien sur des noms de champs différents) ?

Sincères salutations
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote