VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

ReaverMan

XLDnaute Nouveau
Bonjour à tous,

voilà mon problème : j'ai créé, dans le cadre de mon travail, un programme VBA dans un fichier Excel de taille conséquente (>25Mo). Ce programme gère les compétences acquises par mes stagiaires tout au long de leur formation, en indiquant si la compétence est acquise ou en cours (ou rien si elle n'a pas été abordée). Je fonctionne avec des formulaires qui me permettent d'ajouter des stagiaires, de modifiers leurs infos de base, de modifier l'état d'avancement de leurs compétences, et de modifier les compétences ou les catégories de compétences. Ce programme devrait, dans le futur, être distribué dans d'autres agences pour que les attestations de compétences à faire soient simplifiées.
J'ai donc ajouté un formulaire qui permet d'éditer, pour un stagiaire défini, l'attestation voulue (acquis, ou en cours d'acquisition). Je pilote Word depuis Excel, j'ouvre un document, je copie là où je veux grâce à des signets le contenu des colonnes souhaitées, je fais ma mise en forme comme je le souhaite, et j'obtiens mon document final, tout prêt à être imprimé.
Voilà pour la présentation du programme (exhaustive, merci à ceux qui auront tout lu !), pour situer au mieux les choses.
Mon problème est le suivant : une fois que mon document est édité sous Word, à partir du modèle voulu (qui se trouve dans un AUTRE dossier que celui des modèles "classiques" de Word), je l'enregistre comme je le souhaite, mais lorsque je quitte Word, le programme me demande si je souhaite enregistrer les modifications apportées au modèle. Pour mon utilisation personnelle, ce n'est pas plus dérangeant que cela - cliquer sur non, ne pas enregistrer, etc - mais si le programme est distribué, il s'adressera à des personnes enseignant d'autres matières, et ne maîtrisant probablement pas toutes les notions informatiques... Je souhaiterais donc que ce désagrément disparaisse.
Voici la ligne de code que j'utiliser pour créer mon doc Word à partir d'Excel :
.Documents.Add Template:="C:\PoCoX\PoCoX_info_acquis.dot", newtemplate:=False, documenttype:=wdNewBlankDocument, Visible:=True
Je vous fais grâce des déclarations, je pense que la ligne se suffit à elle-même.

Je n'effectue aucune autre opération de gestion de fichier dans mon code.

Pour info, lorsque je déclarais "newtemplate:=True, Word ne me demandait pas si je souhaitais modifier le modèle (logique), mais la contrepartie était qu'il me proposait automatiquement l'enregistrement du fichier comme un modèle, et dans le dossier de modèles de Word.

Merci d'avance à tous ceux qui essaieront de m'aider !

Damien
 

PMO2

XLDnaute Accro
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Bonjour,

Peut-être un truc du genre

Code:
Sub aa()
Dim WordDoc As Object
Dim Wapp As Object
Set WordDoc = GetObject("C:\PoCoX\PoCoX_info_acquis.dot")
Set Wapp = WordDoc.Parent
Wapp.Visible = True

''' traitement '''

WordDoc.SaveAs "c:\zaza.doc"
Wapp.Quit
Set Wapp = Nothing
Set WordDoc = Nothing
End Sub

A extrapoler.

Cordialement.

PMO
Patrick Morange
 

ReaverMan

XLDnaute Nouveau
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Bonjour Patrick,
merci pour la réponse !
La méthode GetObject me permettrait d'ouvrir une occurrence d'un modèle sans faire appel au fichier modèle directement... intéressant !
Je teste ça et je poste le résultat ;)
Damien
 

ReaverMan

XLDnaute Nouveau
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Ah, mon Excel (2003) ne connaît pas la méthode "WordDoc.Parent"... un dépannage à me proposer ?
Je vois bien où la méthode mène : au lieu de créer un nouveau document dans Word, puis d'aller solliciter le modèle, je crée directement l'occurrence de Word à partir du modèle, soit GetObject au lieu de CreateObject...
En tout cas ça m'intéresse bien, en plus de simplifier le code ça économise des opérations système !
Damien
 

ReaverMan

XLDnaute Nouveau
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

oups ô temps pour moi ! J'ai mal lu, j'ai déclaré wd (comme dans mon programme original) au lieu de WordDoc, et je n'ai pas adapté ! Fatigue quand tu nous tiens... Je re-teste et re-réponds
Damien
 

ReaverMan

XLDnaute Nouveau
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

bon, j'ai bien tout fait fonctionner, mais mon problème retourne une étape auparavant : en faisant comme ça, il m'ouvre l'occurrence de Word en ouvrant le modèle. Je ne tiens pas à créer obligatoirement le fichier de sortie, j'aimerais que l'utilisateur final puisse choisir comment le nommer...
Une autre piste ?
 

PMO2

XLDnaute Accro
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Bonjour,

Essayez avec le code suivant à copier dans un module standard

Code:
'### Constante du modèle .dot à adapter ###
Const MON_MODELE As String = "C:\Program Files\Microsoft Office\Templates\1036\Professional Resume.dot"
'##########################################

Sub Dot2Doc()
Dim TemplateDoc As Object
Dim TemplateApp As Object
Dim NewApp As Object
Dim NewDoc As Object
Dim DocRange As Object
'--- Monte le modèle Word et le copie ---
Set TemplateDoc = GetObject(MON_MODELE)
Set TemplateApp = TemplateDoc.Parent
With TemplateDoc
  Set DocRange = .Range(Start:=.Paragraphs(1).Range.Start, _
      End:=.Paragraphs(.Paragraphs.Count).Range.End)
End With
DocRange.Copy
    '--- Nettoyage ---
Set TemplateDoc = Nothing
TemplateApp.Quit
Set TemplateApp = Nothing
'--- Ouvre un document Word et colle le contenu du presse-papiers ---
Set NewApp = CreateObject("Word.application")
Set NewDoc = NewApp.Documents.Add(DocumentType:=0)  'wdNewBlankDocument
Set DocRange = NewDoc.Range(0)
DocRange.Paste
NewApp.Visible = True
    '--- Nettoyage ---
Set NewDoc = Nothing
Set NewApp = Nothing
'--- Pseudo copie - écrasement du contenu du presse-papiers ---
[iv65536].Copy   'pseudo copie - écrasement du contenu du presse-papiers
Application.CutCopyMode = False
End Sub

Cordialement.

PMO
Patrick Morange
 

ReaverMan

XLDnaute Nouveau
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Bonsoir,
j'ai été occupé ces derniers jours et je découvre seulement votre réponse.
Ce joli morceau de code (merci !!!) me semble correspondre à ce dont j'ai besoin, il me reste à l'implémenter et à le tester...
Je vous tiens au courant dès que j'ai pu essayer. Encore merci pour votre patience et votre persévérance !
A charge de revanche...

Cordialement
Damien DELMAS
 

ReaverMan

XLDnaute Nouveau
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Bonjour,

je viens de tester le code. Je n'ai pas tout adapté, mais le souci n'est pas là : lorsqu'il crée le fameux modèle, au moment de la purge, il me demande si je veux enregistrer les changements appliqués au modèle... Je creuse encore et je vous tiens au courant.
Cordialement,
Damien DELMAS
 

ReaverMan

XLDnaute Nouveau
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Bon, je pense avoir saisi d'où vient le problème : mes modèles ne se trouvent pas dans le dossier "Modèles" d'office, et c'est à cause de cela que lorsque j'ouvre le modèle, il ouvre une nouvelle occurrence de document (Document1) mais laisse en même temps la possibilité de modifier le modèle à la fermeture... mon problème ne vient donc pas d'Excel mais de Word.
Il faudrait donc que je puisse accéder à une valeur de la base de registre : celle de l'emplacement des Modèles, quel que soit l'utilisateur. Elle doit bien être enregistrée quelque part... Si c'est le cas, je pourrai stocker mes modèles dans le dossier de modèles, et par le fait, ils ne pourront plus être modifiés "par erreur" ou simplement par inadvertance par les utilisateurs...
Si vous avez une piste, je prends !

Damien
 

PMO2

XLDnaute Accro
Re : VBA Excel : pb fermeture doc Word créé sur modèle depuis Excel VBA

Bonjour,

On évite peut-être l'apparition du message d'enregistrement du modèle avec le code modifié comme suit

Code:
Option Explicit

'### Constante du modèle .dot à adapter ###
Const MON_MODELE As String = "C:\Program Files\Microsoft Office\Templates\1036\Professional Resume.dot"
'''("C:\PoCoX\PoCoX_info_acquis.dot")
'##########################################

Sub Dot2Doc()
Dim TemplateDoc As Object
Dim TemplateApp As Object
Dim NewApp As Object
Dim NewDoc As Object
Dim DocRange As Object
'--- Monte le modèle Word et le copie ---
Set TemplateDoc = GetObject(MON_MODELE)
Set TemplateApp = TemplateDoc.Parent
With TemplateDoc
  Set DocRange = .Range(Start:=.Paragraphs(1).Range.Start, _
      End:=.Paragraphs(.Paragraphs.Count).Range.End)
End With
DocRange.Copy

    '### Ferme le modèle ###
TemplateDoc.Saved = True
TemplateDoc.Close
    '#######################

    '--- Nettoyage ---
Set TemplateDoc = Nothing
Set TemplateApp = Nothing
'--- Ouvre un document Word et colle le contenu du presse-papiers ---
Set NewApp = CreateObject("Word.application")
Set NewDoc = NewApp.Documents.Add(DocumentType:=0)  'wdNewBlankDocument
Set DocRange = NewDoc.Range(0)
DocRange.Paste
NewApp.Visible = True
    '--- Nettoyage ---
Set NewDoc = Nothing
Set NewApp = Nothing
'--- Pseudo copie - écrasement du contenu du presse-papiers ---
[iv65536].Copy   'pseudo copie - écrasement du contenu du presse-papiers
Application.CutCopyMode = False
End Sub

Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 311
Membres
102 860
dernier inscrit
fredo67