Word perd certaines fonctions au lancement via macroExcel

Résolu
Signaler
Messages postés
6
Date d'inscription
mardi 10 juillet 2012
Statut
Membre
Dernière intervention
12 juillet 2012
-
Messages postés
6
Date d'inscription
mardi 10 juillet 2012
Statut
Membre
Dernière intervention
12 juillet 2012
-
Bonjour à Tous et Toutes,

J'ai un problème dans la conception d'une macro vba Excel (ou peut-être est-ce dans word). J'espère qu'un As pourra m?aider.

Au départ, j'ai créé un modèle word avec une Sub Autonew ; avec le code suivant, word détecte quels sont les documents word ouverts :

[i]Private Sub UserForm_Initialize()
Dim agentvérif(20)
r = 1
For Each adoc In Documents
If adoc.Name = "aaaNormal.dot" Then GoTo line963
If adoc.Name = "itinera_aaanormal.dot" Then GoTo line963
agentvérif(r) = adoc.Name
ComboBox1.AddItem agentvérif(r)
r = r + 1
line963:
Next adoc
ComboBox1.Value = agentvérif(1)
End Sub /i

J'arrive au problème. Maintenant, je suis obligé de passer par excel (j'ai créé un Auto_open) pour faire un pré-traitement de données et, donc, j'ouvre le word (et mon modèle) via excel. Voici la fin :

[i]?
Application.WindowState = xlMinimized
Set appwrd = CreateObject("Word.Application")
appwrd.Visible = True
Set docword = appwrd.documents.Add(template:="i:...\itinera_aaanormal.dot", newtemplate:=False, documenttype:=0)
Application.Quit/i

Et là, le problème est que ma macro word ne veut plus faire son job et ne reconnaît plus les autres documents ouverts.

Le problème est-il dû au fait que word est piloté par excel ? Y a-t-il une solution ? Certainement, mais je ne sais comment m?y prendre ! D'avance, merci pour toutes vos idées géniales.

8 réponses

Messages postés
6
Date d'inscription
mardi 10 juillet 2012
Statut
Membre
Dernière intervention
12 juillet 2012

Salut,

Enfin, voilà la solution. Mon userform paraît vide parce que c'est une nouvelle instance. Il faut déclarer la bibliothèque de Word dans le projet.

Dim appwrd As Word.Application
Dim docword As Word.Document
Application.WindowState = xlMinimized
 
Set appwrd = Word.Application
appwrd.Visible = True 
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
salut,

Set docword = appwrd.documents.Add(template:="i:...\itinera_aaanormal.dot", newtemplate:=False, documenttype:=0)


cette ligne n'ouvre pas un document word elle creer un document sur la base du template !

Pendant la création(mode création) les macro du fichier créer ne sont pas activée ! Les macro sont lancées et activées à l'ouverture du fichier et oui ! ici le nouveau fichier n'a encore jamais été ouvert !

Pour ce que tu veux faire il faut ouvrir le template puis lui appliquer la méthode SaveAs.

A+
Messages postés
6
Date d'inscription
mardi 10 juillet 2012
Statut
Membre
Dernière intervention
12 juillet 2012

Salut,
Merci bigfish pour l'info
J'essaie dès que je peux...
Messages postés
6
Date d'inscription
mardi 10 juillet 2012
Statut
Membre
Dernière intervention
12 juillet 2012

Je ne suis pas vraiment au point. J'ai donc modifié mon fichier excel dans ce sens

[i]Set appwrd = CreateObject("Word.Application")
appwrd.Visible = True
[b]Set docword = appwrd.documents.Open("i:...\itinera_aaanormal.dot")
docword.SaveAs "c:\temp\test.doc"/b/i

Il m'ouvre bien mon modèle et l'enregistre mais la macro Autonew ne s'exécute pas. Qu'est-ce que je dois faire? Au secours?
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
re,

ben... je viens de tester ton bout de code et cela fonctionne de mon coté... ah mais

qu'est ce que tu as mis dans autonew ???

A+
Messages postés
6
Date d'inscription
mardi 10 juillet 2012
Statut
Membre
Dernière intervention
12 juillet 2012

Re,

Voilà, l'autonew ouvre un userform

[i]Sub autonew()
altern.Show
End Sub/i

Dans cet userform, l'utilisateur à plusieurs choix (c'est un choix de formulaires, ou de textes prédéfinis). Donc, il va choisir, par exemple, le texte pour un mail. Voici la suite de la macro

Private Sub OptionButton379_Click()
'mail: coord
altern.Hide
'quel doc pour insérer
Insert.Show (ceci permet de voir quels documents sont ouverts et dans quel document l'insertion doit se faire)
'protection oui-non - retirer
Set adoc = ActiveDocument
If adoc.ProtectionType <> wdNoProtection Then Protection = 1
If adoc.ProtectionType <> wdNoProtection Then
adoc.Unprotect
End If


'où
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Les conditions d'octroi n'étaient pas remplies parce que"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute

'insertion

ActiveDocument.MailMerge.OpenDataSource Name:="C:\temp\Lien_Itinera.xls", _
ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\temp\Lien_Itinera.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35;Jet OLE" _
, SQLStatement:="SELECT * FROM `wfl$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
Selection.Font.Bold = wdToggle
Selection.TypeText Text:="Concerne :"
Selection.TypeParagraph
Selection.TypeParagraph
Selection.Font.Bold = wdToggle
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""SIGLE_DEST"""
Selection.TypeText Text:=" "
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""NOM_DEST"""
Selection.TypeText Text:=" "
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""PRENOM_DEST"""
Selection.TypeText Text:=" --- "
Selection.Font.Bold = wdToggle
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""NUMN"""
Selection.Font.Bold = wdToggle
Selection.TypeParagraph
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""ADRESSE_DEST"""
Selection.TypeText Text:=" "
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""CBOITE_DEST"""
Selection.TypeText Text:=" "
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""BOITE_DEST"""
Selection.TypeText Text:=" - "
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""CP_DEST"""
Selection.TypeText Text:=" "
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""LOCALITE_DEST"""
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeText Text:="Nos références : "
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""DOSSIER_NRO"""
Selection.TypeText Text:="/"
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
, Text:="""NUMERO_AGT"""
Selection.TypeParagraph
Selection.Font.Bold = wdToggle
Selection.TypeText Text:="Vos références : "
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
Selection.TypeParagraph
Selection.Font.Bold = wdToggle
Selection.TypeParagraph

' ************* fixation
Selection.MoveUp Unit:=wdLine, Count:=7, Extend:=wdExtend
Selection.Fields.Unlink
Selection.MoveRight Unit:=wdCharacter, Count:=1
' *************
Selection.TypeParagraph


If Protection = 1 Then WordBasic.ToolsProtectDocument DocumentPassword:="", NoReset:=1, Type:=2

'fermer .dot
Documents("Itinera_aaaNormal.dot").Activate
ActiveDocument.Close False

End Sub


J'espère que je ne suis pas trop cochon de ma conception. Mais là, je ne sais plus du tout ce que je dois faire. Merci merci
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
ok ok ! j'ai compris !

une grosse accumulation d'erreur ! et moi je tombe dans le panneau !

dans le VBA de word ce n'est pas la macro qui doit s'appeler AutoNew ou AutoOpen, mais c'est le module qui contient la macro ! En suite pour que cela fonctionne la macro dans le module AutoNew(par exemple) doit s'appeler "Main"


Donc ton code :

Application.WindowState = xlMinimized
Set appwrd = CreateObject("Word.Application")
appwrd.Visible = True
Set docword = appwrd.documents.Add(template:="i:...\itinera_aaanormal.dot", newtemplate:=False, documenttype:=0)
Application.Quit 


fonctionne !

En bref créé un module nomé "AutoNew"

dans ce module ajoute :

Sub Main()
   altern.Show
End Sub 


si tu veux utilisé le bout de code que je t'ai donné

il faut que le module se nome "AutoOpen"

dans ce module ajoute :

Sub Main()
   altern.Show
End Sub 


A+
Messages postés
6
Date d'inscription
mardi 10 juillet 2012
Statut
Membre
Dernière intervention
12 juillet 2012

Re-bonjour,

Merci, j'ai fait les modifications et cela fonctionne bien pour le début.
Mais, j'ai toujours un problème.

Donc, l'AutoNew s'exécute parfaitement pour lancer l'userform. Quand je choisis une certaine option (OptionButton), il doit lancer la macro qui permet de voir quel document (document word et/ou message sans titre) est ouvert :

Private Sub UserForm_Initialize() 
Dim agentvérif(20) 
r = 1 
For Each adoc In Documents 
If adoc.Name = "aaaNormal.dot" Then GoTo line963 
If adoc.Name = "itinera_aaanormal.dot" Then GoTo line963 
agentvérif(r) = adoc.Name 
ComboBox1.AddItem agentvérif(r) 
r = r + 1 
line963: 
Next adoc 
ComboBox1.Value = agentvérif(1) 
End Sub 


Cette macro fonctionne parfaitement si je lance directement mon fichier word. Par contre, elle n'arrive plus à me donner les infos quand elle est lancée par excel (l'userform est vide!) .

Il y a certainement une solution mais ... laquelle?