Problème GetObject pour Automation Word Excel

deca

XLDnaute Nouveau
Bonsoir (nuit ?) A tous.
Des heures que je cherche quelque chose que je pensais tout simple.
J'explique :
J'ai une liste dans Excel et un document Word (qui ne sera pas toujours le même)
L'idée : Ajouter un signet au document Word ouvert (appelé texte) et lancer une macro dans Excel, ce programme va balayer la liste Excel, et pour chaque ligne dans Excel , il va copier le doc word actif dans un nouveau document Word (pour ne pas modifier l'original et parce que je ne sais pas supprimer un texte entré précédemment), Copié la ligne Excel à l'endroit du signet, imprimer le document puis le fermer. Retourner à l'original Word, si ligne suivante d'Excel y a une ligne à imprimer on recommence la procédure.

Pour faire ceci je dois donc utiliser le document Word alors que je ne connais pas forcément son chemin.
Jai donc pensé à "GETOBJECT"
Ben vous me croirez ou non, ça ne fonctionne pas (pas comme je l'entends du moins)

Ci dessous le code (qui n'est pas fini bien sur)

Code:
Private Sub CommandButton_OK_Click()
    Dim WordDoc As Word.Document
    Dim WordDoc2 As Word.Document
    Dim WordApp As Word.Application
    Dim Texte As String
    Dim NomWord As String, NomWord2 As String
    Dim NomExcel As String
    
    NomExcel = Me.TextBox_Nom_Excel
    NomWord = Me.TextBox_Nom_Word
    Windows(NomExcel).Activate
    Texte = Range("a1")
    
    Set WordApp = CreateObject("Word.Application")
    'Set WordDoc = GetObject(NomWord)
    Set WordDoc = GetObject("D:\Nos documents\AutoEntrepriseVincent\ProgOnline\Guillaumme Roux\PubliWord\Test.docx")
    
    WordDoc.Range.Select
    WordDoc.Content.Copy
        
    WordApp.Documents.Add.Activate
    WordApp.Visible = True
    NomWord2 = WordApp.ActiveDocument.Name
    Set WordDoc2 = GetObject(NomWord2)
    
    
    WordApp.Selection.Paste
    
    
    WordDoc2.Bookmarks("texte").Range.Text = Texte
    
    
    
    
End Sub

La il fonctionne , ce qui me chagrine c'est que je suis obligé de rentrer le chemin dans le premier Getobject alors que pas du tout pour le second, le nom du fichier suffit.
Mais pourquoi ?
J'ai du faire une erreur bête car on ne parle pas de ce problème sur le net, et j'ai cherché. La syntaxe que je trouve dans les forums est celle que j'utilise. Pourtant il est indiqué que le chemin n'est pas obligatoire. Ou me goure je ?

Si quelqu'un à une idée, ce "petit" problème m'a vanné.

En tout cas merci à tous. ceux qui auront eu le courage d'aller jusqu'au bout de ce message

Bonne chance
 

deca

XLDnaute Nouveau
Re : Problème GetObject pour Automation Word Excel

Salut,
Oui c'est ça.
La difficulté (enfin la mienne), c'est que le fichier doc source, ne sera pas toujours le même et l'endroit de l'insertion variable.
Donc je place un signet à l'endroit du doc ou je souhaite faire l'insertion.
Mon Excel et mon Word sont ouverts quand je lance le publipostage.
Alors pourquoi diantre, ce 1er getobject m'oblige au nom de chemin et le second s'en passe très bien ?

Dur dur.
 
C

Compte Supprimé 979

Guest
Re : Problème GetObject pour Automation Word Excel

Re,

Pourquoi utiliser du VBA dans Excel ?

Je ne comprends franchement pas le but de ta procédure :confused:

Tu peux lancer un publipostage directement de word en lui indiquant :
- quel fichier excel utilisé
- quels enregistrement traiter
- que faire (impression ou nouveau fichier)

A+
 

chris

XLDnaute Barbatruc
Re : Problème GetObject pour Automation Word Excel

Bonjour

Je suis totalement d'accord avec Bruno (à qui je fais une grosse bise) mais pour répondre à ta question :

  • dans le premier cas le fichier existe sur le disque dur et sans doute pas dans le dossier courant d'Excel
  • tandis que dans le second cas le fichier est le document actif qui n'est pas encore enregistré sur le disque et n'a donc pas de chemin.
Si ton info Excel ne doit pas se placer au même endroit dans ton document Word le plus logique est de créer 2 documents de publipostage selon tes 2 cas (encore que l'on puisse mettre des conditions dans les documents de publipostage et souvent gérer cela dans le même) et d'utiliser une donnée de la ligne Excel pour fusionner ceraines lignes vers le premier modèle et les autres vers le second.
 

deca

XLDnaute Nouveau
Re : Problème GetObject pour Automation Word Excel

Parce que :
- Je me sens beaucoup plus a l'aide dans le vba Excel (Excel étant mon cœur de métier, Word est anecdotique), que mon fichier source est un fichier Excel.
- Que je pensais pas que je me heurterais à ce genre de soucis quand je me suis lancé, et quand je suis face à un prblème j'aime bien comprendre.
- Maintenant que tu me le dis, peut être devrais je recommencer ma macro sous word, mais je me heurterais sûrement à de nouvelles difficultés dans l'automation dans l'autre sens.
- Que finalement, maintenant ma macro tourne, mais que tout de même , réside cette Interrogation : Pourquoi GetObject à besoin d'un chemin la première fois et pas l'autre (sachant que j'aimerais m'en passer), l'utilisateur n'aurai pas besoin d'aller chercher le répertoire source.

Bon merci la piste Word, si je n'ai pas de réponse pour la partie Excel, je la tenterai.

Pour info, voici le code qui tourne, j'ai rajouté la notion de chemin :
Code:
Private Sub CommandButton_OK_Click()
    Dim WordDoc As Word.Document
    Dim WordDoc2 As Word.Document
    Dim WordApp As Word.Application
    Dim Texte As String
    Dim NomWord As String, NomWord2 As String
    Dim NomExcel As String, Ligne As Long, Chemin As String
    
    On Error GoTo Erreur:
    ' Ligne de départ des données du fichier Excel est 5
    Ligne = 5
    
    Chemin = Me.TextBox_Chemin & "\"
    NomExcel = Me.TextBox_Nom_Excel
    NomWord = Me.TextBox_Nom_Word
    Windows(NomExcel).Activate
    Do While Cells(Ligne, 1) <> ""
    
        Texte = Cells(Ligne, 1) & " " & Cells(Ligne, 2) & " " & Cells(Ligne, 3) & " " & Cells(Ligne, 4) & " " & Cells(Ligne, 5)
        
        Set WordApp = CreateObject("Word.Application")
        Set WordDoc = GetObject(Chemin & NomWord)
        
        WordDoc.Range.Select
        WordDoc.Content.Copy
            
        WordApp.Documents.Add.Activate
        WordApp.Visible = False
        NomWord2 = WordApp.ActiveDocument.Name
        Set WordDoc2 = GetObject(NomWord2)
        
        WordApp.Selection.Paste
        
        WordDoc2.Bookmarks("texte").Range.Text = Texte
        
        WordDoc2.PrintOut
        
        WordDoc2.Close SaveChanges:=wdDoNotSaveChanges    'Ferme le doc actif sans l'enregistrer
        'ActiveWindow.Close SaveChanges:=wdDoNotSaveChanges     'Ferme la fenêtre active sans l'enregistrer
        
        Ligne = Ligne + 1
        
    Loop
    UserForm_PubliWord.Hide
    
    End Sub
 

deca

XLDnaute Nouveau
Re : Problème GetObject pour Automation Word Excel

Il n'y a pas que 2 modèles Word, mais dans l'absolu il peut y avoir autant de modèles que demandes des tiers. Chaque prestataire nous envoie son document Word à renseigner, il n'y a pas de modèle prédéfini.
Donc j'ouvre le document Word qu'on m'envoie.
Je place le Signet à l'endroit voulu par le prestataire.
J'ouvre mon fichier Excel contenant les données et je lance ma macro Excel (qui figure dans un fichier Excel indépendant) qui dit : copie le document Word, prend la première ligne et publiposte dans le doc Word créée, imprime et ferme le doc Word. Passe à la ligne Excel suivante etc...

Merci pour vos indications (même si ça reste flou, et que je trouve bizarre qu'on ne puisse pas passer d'une fenêtre à une autre sans en connaitre forcément le chemin)

A bientôt.
 

chris

XLDnaute Barbatruc
Re : Problème GetObject pour Automation Word Excel

Re
deca à dit:
Merci pour vos indications (même si ça reste flou, et que je trouve bizarre qu'on ne puisse pas passer d'une fenêtre à une autre sans en connaitre forcément le chemin)
Toi tu vois des fenêtres mais VBA vois des fichiers et tout fichier a un emplacement sur le disque dur. C'est en fait ton deuxième document qui fait fait exception à cette règle car il est au premier plan et actif.

deca à dit:
Il n'y a pas que 2 modèles Word, mais dans l'absolu il peut y avoir autant de modèles que demandes des tiers. Chaque prestataire nous envoie son document Word à renseigner, il n'y a pas de modèle prédéfini.
Donc j'ouvre le document Word qu'on m'envoie.
Je place le Signet à l'endroit voulu par le prestataire

Puisqu'il faut faire des manips manuelles :

  • ouvrir le document Word du prestataire
  • définir un signet au bon endroit
il serait aussi simple de placer un champ de fusion.
 

deca

XLDnaute Nouveau
Re : Problème GetObject pour Automation Word Excel

Euh, non, je ne veux pas faire compliqué...
Je ne vois pas en quoi insérer un signet est plus lourd que d'insérer un champs de fusion ?
Il y a certainement une évidence qui m'échappe, mais je fais très peu de publipostage ( très très rarement).

Je suis prêt à m'adapter faut juste que je comprenne (j'aime bien comprendre)

Bon dimanche et merci à vous.
 
C

Compte Supprimé 979

Guest
Re : Problème GetObject pour Automation Word Excel

Salut Deca,

Je ne vois pas en quoi insérer un signet est plus lourd que d'insérer un champs de fusion ?
Ce n'est pas plus lourd, mais tout simplement plus simple ;)
pas besoin de VBA :p

Un petit lien ici qui t'explique comment faire
Créer un publipostage avec Word 2003 - Bureautique - Articles : Astuces-Internet

Je suis prêt à m'adapter faut juste que je comprenne (j'aime bien comprendre)
C'est tout à ton honneur
applo.gif
, tellement de gens ne chechent pas à comprendre quoique ce soit :rolleyes:

A+
 

deca

XLDnaute Nouveau
Re : Problème GetObject pour Automation Word Excel

Merci à tous.
j'ai vu
Mais le hic (et peut être ne l'ai je pas signalé)
est que ce n'est pas moi qui vais faire ce publipostage.
Au vu du nombre de manip (Créer le champs, aller dans les options Excel pour lier le fichier et les zones) j'entends déjà les gestionnaires râler etc..
Là, c'est transparent pour eux (ou presque)
Ils insèrent le signet avec un certain nom (point le plus délicat, car pareil, soit ils le verront pas, soit je dois leur expliquer comment faire pour le visualiser)
Puis ils lancent la macro
2 actions.
Ca m'a l'air plus court (pour eux)
Puisque c'est justement ce qu'ils veulent, le moins d'interventions possible.

Merci à vous.
 
C

Compte Supprimé 979

Guest
Re : Problème GetObject pour Automation Word Excel

Re,

Deca, une fois les champs de fusion insérer (ta manip) il suffit d'enregistrer le fichier.
Nota : les colonnes ont toujours la même entête

Côté utilisateur, à l'ouverture du fichier,
il suffit de dire à Word ou se trouve le fichier de données
1 action :p

Donc si c'est le moins possible d'action que tu veux, 1, ça devrait aller :D

A+
 
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino