piloter (ou commander) word via une macro excel, est-ce possible ?

4 réponses
Avatar
Alfred WALLACE
Bonjour, j'ai peut =EAtre mal cherch=E9, mais, je n'ai pas trouv=E9 de
pistes ou r=E9ponses =E0 mon pb.
Word 2007 permet d'inserer un filigrane dans une page blance.
j'aimerai pouvoir le faire directement par macro vba excel.

En effet, j'ai une liste de noms (toto, titi, tata.... etc) et, pour
chaque nom
j'aimerai faire les commandes suicantes sous WORD2007 :
"mise en page" + "filigrane" + "filigrane personnalis=E9" puis
selectionner la zone "texte en filigrane" et enfin dans la zone
"texte", copier le contenu de chacun des noms que l'on veut.
Enfin, pour terminer, la macro doit exporter ce document word en pdf
ayant comme nom celui du nom en filigrane.pdf

Voila, merci par avance pour votre aide. je n'y arrive pas du tout.

Jos=E9

pour info, j'ai poster 2 ou 3 messages dans ce sens ces derniers
jours, mais sans succ=E8s.
j'ai g=E9n=E9r=E9 une macro sous word, et j'ai essay=E9 de l'int=E9gr=E9r d=
ans le
vba de excel, je n'ai pas
de message d'erreurs, par contre, je n'obtiend rien sur le document
word.... merci pour votre
aide.

4 réponses

Avatar
Géréginéflo
Le 15/06/2011 17:55, Alfred WALLACE a écrit :
Bonjour, j'ai peut être mal cherché, mais, je n'ai pas trouvé de
pistes ou réponses à mon pb.
Word 2007 permet d'inserer un filigrane dans une page blance.
j'aimerai pouvoir le faire directement par macro vba excel.

En effet, j'ai une liste de noms (toto, titi, tata.... etc) et, pour
chaque nom
j'aimerai faire les commandes suicantes sous WORD2007 :
"mise en page" + "filigrane" + "filigrane personnalisé" puis
selectionner la zone "texte en filigrane" et enfin dans la zone
"texte", copier le contenu de chacun des noms que l'on veut.
Enfin, pour terminer, la macro doit exporter ce document word en pdf
ayant comme nom celui du nom en filigrane.pdf

Voila, merci par avance pour votre aide. je n'y arrive pas du tout.

José

pour info, j'ai poster 2 ou 3 messages dans ce sens ces derniers
jours, mais sans succès.
j'ai généré une macro sous word, et j'ai essayé de l'intégrér dans le
vba de excel, je n'ai pas
de message d'erreurs, par contre, je n'obtiend rien sur le document
word.... merci pour votre
aide.



Bonjour,

Voici des indices :

Sous Excel il faut créer une variable objet
Comme ceci : Set MonWord = CreateObject("word.Application")

MonWord est la variable qui représente l'application MS Word
elle est indispensable pour piloter Word à partir de Excel, car il faut
que VBA puisse faire la différence entre une commande Excel et une
commande word.

Dans votre Macro5 toutes les commandes doivent être précédées de la
variable MonWord

MonWord.Documents.Add Template:="Normal", NewTemplate:úlse,
DocumentType:=0
MonWord.ActiveDocument.Sections(1).Range.Select
MonWord.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader

etc.

A la fin de la macro il faut ajouter deux lignes
MonWord.Application.Quit
Set MonWord = Nothing
Ces deux lignes disent à VBA que le dialogue entre Word et Excel est achevé.


Bon courage
Avatar
Alfred WALLACE
Bonsoir Géréginéflo

Merci pour ta réponse,
j'ai en effet deja essayé le code ci-dessous.
j'en parlais y'a un message il y a quelques jours.

le code ci-dessous, ne semble pas poser de pb
puisque çà ne bug pas, pas d'erreur à l'execution,
mais, par contre, ma page word reste desespérement
vide ...

Une idée ?
merci encore
José
************************************************************************
************************************************************************
Sub envoyerdonneesexcelversword()
Dim Wd As Object, Dc As Object, Fichier As String

On Error Resume Next
'Vérifie si l'application est déjà ouvert ....
Set Wd = GetObject(, "word.application")
'Si pas ouvert, cela génère une erreur...
'Raison de la présence de On error resume next

If Err <> 0 Then
Err = 0
'Création d'une nouvelle instance de Word
Set Wd = CreateObject("word.application")
Set Dc = Wd.Documents.new
Wd.Visible = True
'Reste de la macro
'Word est ouvert ... on continue la procédure

'CETTE MACRO EST TIREE DE L'ENREGISTREUR DE MACRO DE WORD
'j'ai seulement rajouter le "Wd." devant chaque appel pour (je
pensais) bien faire référence à l'objet word crée plus haut.
Wd.Documents.Add Template:="Normal", NewTemplate:úlse,
DocumentType:=0
Wd.ActiveDocument.Select 'Sections(1).Range.Select
Wd.ActiveWindow.ActivePane.View.SeekView = Wd.wdSeekCurrentPageHeader
Wd.Selection.HeaderFooter.Shapes.AddTextEffect(PowerPlusWaterMarkObject,
"José SISA-6A", "Times New Roman", 1, False, False, 0, 0).Select
Wd.Selection.ShapeRange.Name = "PowerPlusWaterMarkObject"
Wd.Selection.ShapeRange.TextEffect.NormalizedHeight = False
Wd.Selection.ShapeRange.Line.Visible = False
Wd.Selection.ShapeRange.Fill.Visible = True
Wd.Selection.ShapeRange.Fill.Solid
Wd.Selection.ShapeRange.Fill.ForeColor.RGB = RGB(192, 192, 192)
Wd.Selection.ShapeRange.Fill.Transparency = 0.5
Wd.Selection.ShapeRange.Rotation = 315
Wd.Selection.ShapeRange.LockAspectRatio = True
Wd.Selection.ShapeRange.Height = Wd.CentimetersToPoints(3.22)
Wd.Selection.ShapeRange.Width = Wd.CentimetersToPoints(19.34)
Wd.Selection.ShapeRange.WrapFormat.AllowOverlap = True
Wd.Selection.ShapeRange.WrapFormat.Side = wdWrapNone
Wd.Selection.ShapeRange.WrapFormat.Type = 3
Wd.Selection.ShapeRange.RelativeHorizontalPosition =
Wd.wdRelativeVerticalPositionMargin
Wd.Selection.ShapeRange.RelativeVerticalPosition =
Wd.wdRelativeVerticalPositionMargin
Wd.Selection.ShapeRange.Left = Wd.wdShapeCenter
Wd.Selection.ShapeRange.Top = Wd.wdShapeCenter
Wd.ActiveWindow.ActivePane.View.SeekView = Wd.wdSeekMainDocument

Set Wd = Nothing: Set Dc = Nothing

End If
End Sub
************************************************************************
************************************************************************

On 16 juin, 07:17, Géréginéflo wrote:
Le 15/06/2011 17:55, Alfred WALLACE a crit :









> Bonjour, j'ai peut tre mal cherch , mais, je n'ai pas trouv de
> pistes ou r ponses mon pb.
> Word 2007 permet d'inserer un filigrane dans une page blance.
> j'aimerai pouvoir le faire directement par macro vba excel.

> En effet, j'ai une liste de noms (toto, titi, tata.... etc) et, pour
> chaque nom
> j'aimerai faire les commandes suicantes sous WORD2007 :
> "mise en page" + "filigrane" + "filigrane personnalis "  puis
> selectionner la zone "texte en filigrane" et enfin dans la zone
> "texte", copier le contenu de chacun des noms que l'on veut.
> Enfin, pour terminer, la macro doit exporter ce document word en pdf
> ayant comme nom  celui du nom en filigrane.pdf

> Voila, merci par avance pour votre aide. je n'y arrive pas du tout.

> Jos

> pour info, j'ai poster 2 ou 3 messages dans ce sens ces derniers
> jours, mais sans succ s.
> j'ai g n r une macro sous word, et j'ai essay de l'int gr r dans le
> vba de excel, je n'ai pas
> de message d'erreurs, par contre, je n'obtiend  rien sur le document
> word.... merci pour votre
> aide.

Bonjour,

Voici des indices :

Sous Excel il faut cr er une variable objet
Comme ceci : Set MonWord = CreateObject("word.Application")

MonWord est la variable qui repr sente l'application MS Word
elle est indispensable pour piloter Word partir de Excel, car il faut
que VBA puisse faire la diff rence entre une commande Excel et une
commande word.

Dans votre Macro5 toutes les commandes doivent tre pr c d es de la
variable MonWord

MonWord.Documents.Add Template:="Normal", NewTemplate:úlse,
DocumentType:=0
     MonWord.ActiveDocument.Sections(1).Range.Select
     MonWord.ActiveWindow.ActivePane.View.SeekView = wdSeekCurren tPageHeader

etc.

A la fin de la macro il faut ajouter deux lignes
MonWord.Application.Quit
Set MonWord = Nothing
Ces deux lignes disent VBA que le dialogue entre Word et Excel est achev .

Bon courage
Avatar
HD
Bonjour,

Si cela vous intéresse, je me suis penché sur le problème il y'a quelques
mois. Ma problèmatique était de remplacer des chaînes de caractères située
dans un document Word par des données situées dans des cellules Excel. voilà
mes notes:

Il vous faut activer la référence correspondant à la version Word du poste.
- Pour un poste sous Word 2007 la référence est « Microsoft Word
12.0 Object Library ».
- Pour Word 2002 la référence est « « Microsoft Word 10.0 Object
Library »
- Pour Word 97 la référence est « « Microsoft Word 8.0 Object
Library »
Pour éviter tout lien cassé vers une référence, il y'a aussi la possibilité
d'utiliser la procédure suivante à l'ouverture d'Excel :
Private Sub Workbook_Open()
Dim Refs As Object, Ref As Object
On Error Resume Next
With ThisWorkbook
Set Refs = .VBProject.References
For Each Ref In Refs
If Ref.IsBroken Then
Refs.Remove Ref
End If
Next
.VBProject.References.AddFromGuid _
"{00020905-0000-0000-C000-000000000046}", 8, 4
End With
End Sub

Attention !!! Si un raccourci vers le classeur contenant les macros est
installé sur un poste il faut alors mettre en répertoire de travail du
raccourci un répertoire situé sur un emplacement non protégé du réseau ou
sur, par exemple, le répertoire temporaire de l'ordinateur car cela bloque
l'utilisation du transfert vers Word. J'ai eu le coup. Voici ma macro:

Sub Transfert_Excel_vers_Word()
Dim AppWord As Object, docWord As Object
Dim ret As Long
Dim CheminW As String
Dim i As Long
Dim AWkb As String

AWkb = ActiveWorkbook.Name
Sheets("Transf_Word").Select
If ActiveSheet.Name <> "Transf_Word" Then
ret = MsgBox("La feuillle 'Transf_Word' n'existe pas !!!",
vbExclamation, "")
Exit Sub
End If

CheminW = Range("D8").Value
If CheminW = "" Then
ret = MsgBox("Chemin vers le document Word indéfini !!!",
vbExclamation, "")
Exit Sub
End If
If Dir(CheminW, vbNormal) = "" Then
ret = MsgBox("Chemin vers le document Word erroné !!!" & vbCrLf &
CheminW, vbExclamation, "")
Exit Sub
End If

Set AppWord = CreateObject("Word.Application")
AppWord.ShowMe
AppWord.Visible = True
Set docWord = AppWord.Documents.Open(CheminW, ReadOnly:=True)

i = 12
If Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value <> "" Then
Do
With docWord.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = Workbooks(AWkb).Sheets("Transf_Word").Cells(i,
2).Value
'Le texte de remplacement
If InStr(1, Workbooks(AWkb).Sheets("Transf_Word").Cells(i,
3).Formula, "100", vbTextCompare) = 0 Then
Application.StatusBar = i - 11 & " / " &
Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value & " / " &
Application.Round(Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i,
3).Formula), 0)
.Replacement.Text =
Application.Round(Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i,
3).Formula), 0)
Else
Application.StatusBar = i - 11 & " / " &
Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value & " / " &
Application.Round(Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i,
3).Formula), 1)
.Replacement.Text =
Application.Round(Evaluate(Workbooks(AWkb).Sheets("Transf_Word").Cells(i,
3).Formula), 1)
End If
.Forward = True
.Execute Replace:=wdReplaceAll
End With
i = i + 1
Loop Until Workbooks(AWkb).Sheets("Transf_Word").Cells(i, 2).Value =
""
End If
Application.StatusBar = ""
End Sub



--
@+
HD
Avatar
HD
A savoir que j'ouvre le fichier Word en lecture seule car le document Word
en question est une matrice de travail à ne pas modifier. C'est ensuite à
l'utilisateur de faire un enregistré-sous.

Ma macro récupère les données en rafale d'une tableau pour balancer le
résultat des calculs sur le document word. J'ai ainsi en colonne B par
exemple:
[PRODVEGER]
et en colonne C par exemple:
=[doss.xls]Poly!$V$69/[doss.xls]Poly!$E$69

Les données sont calculées via un Evaluate puis balancées dans le document
Word.

--
@+
HD