Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro word pour insertion de filigrane à executer sous vba excel ?

3 réponses
Avatar
Alfred WALLACE
bonjour =E0 tous,
j'ai un soucis avec l'insertion de filigrane dans un nouveau document
word via
une macro-enregistr=E9e dans word...(voir ci-dessous)

J'aimerai executer cette macro DANS du code vba sous Excel.

une id=E9e ?
Merci beaucoup

Jos=E9


Sub Macro5()
'
' Macro5 Macro
'
'
Documents.Add Template:=3D"Normal", NewTemplate:=3DFalse,
DocumentType:=3D0
ActiveDocument.Sections(1).Range.Select
ActiveWindow.ActivePane.View.SeekView =3D wdSeekCurrentPageHeader
=20
Selection.HeaderFooter.Shapes.AddTextEffect(PowerPlusWaterMarkObject,
_
"Jos=E9 SISA-6A", "Times New Roman", 1, False, False, 0,
0).Select
Selection.ShapeRange.Name =3D "PowerPlusWaterMarkObject"
Selection.ShapeRange.TextEffect.NormalizedHeight =3D False
Selection.ShapeRange.Line.Visible =3D False
Selection.ShapeRange.Fill.Visible =3D True
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.RGB =3D RVB(192, 192, 192) '
<<<<=3D=3D=3D=3D PB c'est RGB !!!
' il faut corriger =E0 la main et mettre RGB =E0 la place de RVB.
Selection.ShapeRange.Fill.Transparency =3D 0.5
Selection.ShapeRange.Rotation =3D 315
Selection.ShapeRange.LockAspectRatio =3D True
Selection.ShapeRange.Height =3D CentimetersToPoints(3.22)
Selection.ShapeRange.Width =3D CentimetersToPoints(19.34)
Selection.ShapeRange.WrapFormat.AllowOverlap =3D True
Selection.ShapeRange.WrapFormat.Side =3D wdWrapNone
Selection.ShapeRange.WrapFormat.Type =3D 3
Selection.ShapeRange.RelativeHorizontalPosition =3D _
wdRelativeVerticalPositionMargin
Selection.ShapeRange.RelativeVerticalPosition =3D _
wdRelativeVerticalPositionMargin
Selection.ShapeRange.Left =3D wdShapeCenter
Selection.ShapeRange.Top =3D wdShapeCenter
ActiveWindow.ActivePane.View.SeekView =3D wdSeekMainDocument
End Sub

3 réponses

Avatar
Gloops
Alfred WALLACE a écrit, le 14/06/2011 11:26 :
bonjour à tous,
j'ai un soucis avec l'insertion de filigrane dans un nouveau document
word via
une macro-enregistrée dans word...(voir ci-dessous)

J'aimerai executer cette macro DANS du code vba sous Excel.

une idée ?
Merci beaucoup

José


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

Selection.HeaderFooter.Shapes.AddTextEffect(PowerPlusWaterMarkObject,
_
"José SISA-6A", "Times New Roman", 1, False, False, 0,
0).Select
Selection.ShapeRange.Name = "PowerPlusWaterMarkObject"
Selection.ShapeRange.TextEffect.NormalizedHeight = False
Selection.ShapeRange.Line.Visible = False
Selection.ShapeRange.Fill.Visible = True
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.RGB = RVB(192, 192, 192) '
<<<<==== PB c'est RGB !!!
' il faut corriger à la main et mettre RGB à la place de RVB.
Selection.ShapeRange.Fill.Transparency = 0.5
Selection.ShapeRange.Rotation = 315
Selection.ShapeRange.LockAspectRatio = True
Selection.ShapeRange.Height = CentimetersToPoints(3.22)
Selection.ShapeRange.Width = CentimetersToPoints(19.34)
Selection.ShapeRange.WrapFormat.AllowOverlap = True
Selection.ShapeRange.WrapFormat.Side = wdWrapNone
Selection.ShapeRange.WrapFormat.Type = 3
Selection.ShapeRange.RelativeHorizontalPosition = _
wdRelativeVerticalPositionMargin
Selection.ShapeRange.RelativeVerticalPosition = _
wdRelativeVerticalPositionMargin
Selection.ShapeRange.Left = wdShapeCenter
Selection.ShapeRange.Top = wdShapeCenter
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub





Bonjour,

Donc, la macro fonctionne bien, et la question est de la lancer depuis
une autre application, c'est bien ça ?

Au fil du temps ont existé trois solutions, celle qu'on utilise de
préférence, maintenant, est plutôt DDE, pour Dynamic Data Exchange. En
cherchant ces trois lettres tu vas trouver une abondante documentation,
dont des choses claires et d'autres moins.

La gymnastique est de trouver dans la documentation d'une des deux
applications ce que tu ne trouves pas dans celle de l'autre, en espéran t
travailler avec des versions installées avec une documentation
suffisamment complète.

La première chose est de déclarer un objet Application Word, et un ob jet
Document, et les initialiser.

Il y a deux façons de procéder, en lien précoce ou en lien tardif, comme
ça a été mis sur pied par des Américains on a assez tendance à utiliser
les termes anglo-saxons, donc Early Binding, et Late Binding.

Le Late Binding est utilisé dans des cas où on ne réussit pas à u tiliser
l'autre, ou des cas où les ressources ne sont pas disponibles au moment
du développement. Les objets sont déclarés en tant que ... Object.

Dim appWord As Object

Set appWord = GetObject("Application.Word")
'dans le cas où Word est ouvert
ou
Set appWord = CreateObject("Application.Word")
'dans le cas où Word doit être ouvert

Attention, c'est quelque chose que je cite de mémoire. L'un des deux
prend un deuxième argument, si je ne m'abuse le deuxième, avec le che min
du document. Dans le cas d'un script on met l'objet Script devant
GetObject ou CreateObject.

Ne pas hésiter à chercher la documentation sur GetObject et sur
CreateObject.

Dans le cas du Early Binding, la première chose à faire est de décl arer
la référence. Aller dans un module, puis dans le menu Outils, appeler la
commande Références. Dans la boîte de dialogue, cocher l'applicatio n
visée, en l'occurrence Microsoft Word, ou Microsoft Office, trouver le
bon intitulé, cocher la case devant, valider. Il se peut qu'un peu de
tâtonnement soit nécessaire. Si on a sélectionné une référenc e qui n'est
pas la bonne, revenir dans Outils Références, décocher la référ ence
inutile, et cocher la bonne, ou une dont on suppose qu'elle est la bonne.

L'explorateur d'objets permet de se rendre compte des objets disponibles
dans la référence qu'on vient de déclarer, et ainsi de s'assurer qu 'on
s'est bien adressé à la bonne référence, plutôt qu'une dont le nom
ressemble.

Dans un certain nombre de versions, l'explorateur d'objets s'ouvre, dans
l'environnement de développement, avec la touche F2.

Dans Word on doit au moins trouver les méthodes Application et Document ,
qui retournent des objets.

L'étape suivante consiste à déclarer les objets, et les initialiser .
Dim appWord As new Word.Application
Dim appDoc As Word.Document

Set appDoc = appWord.ActiveDocument

Attention, pour l'application j'ai mis new, ce qui va ouvrir
l'application Word, de façon invisible à l'écran. On peut s'en rend re
compte en appelant le gestionnaire des tâches par Ctrl Alt Suppresion,
on aura une ligne avec Word.

Pour le document, en revanche, je n'ai pas mis new, la ligne Dim ne fait
que déclarer l'objet document, il est initialisé à la ligne suivant e,
avec l'instruction Set.


Ensuite chacun des objets appelés dans la macro doit se référer à l'un
de ces objets

appWord.Selection

par exemple.

L'avantage du Early Binding sur le Late Binding, est qu'on dispose de ce
que Microsoft appelle l'Intellisense, c'est-à-dire qu'en tapant le nom
d'un objet suivi d'un point, on voit apparaître la liste de ses membres ,
c'est-à-dire ses propriétés et méthodes. Donc, après déclaré appWord
comme Word.Application, lorsqu'on tape appWord. on voit apparaître une
liste, lorsqu'on tape Selection, à chaque lettre la liste se restreint,
jusqu'à ce qu'il suffise de taper Entrée pour sélectionner le mot a ctif.

Une chose à avoir à l'esprit : par défaut, une application ouverte par
DDE n'apparaît pas à l'écran. Si on veut que l'utilisateur la voie, il
faut le demander explicitement

appWord.Visible = true

Si jamais l'exécution de la macro qu'on teste est interrompue en cours
de route, et que l'instruction ci-dessus n'a pas été exécutée, no us
avons une application Word d'ouverte, et non visible. Si l'objet n'est
plus reconnu, il faut penser à passer par le gestionnaire des tâches
(Ctrl Alt Suppression) pour fermer l'application.


Voilà déjà de quoi partir à la découverte ...

S'agissant d'une macro déjà développée dans Word, son nom va bien
apparaître quelque part dans l'explorateur d'objets, ce qui va permettr e
de visualiser depuis quel objet l'appeler.
Avatar
Alfred WALLACE
Bonjour Gloops,
oui, la macro fonctionne bien sous word, ET elle s'execute BIEN
sous excel (en vba), sans messages d'erreur.
Par contre, sous excel, la page word reste blanche...

une idée ?

Merci
José



On 14 juin, 14:22, Gloops wrote:
Alfred WALLACE a écrit, le 14/06/2011 11:26 :









> bonjour à tous,
> j'ai un soucis avec l'insertion de filigrane dans un nouveau document
> word via
> une macro-enregistrée dans word...(voir ci-dessous)

> J'aimerai executer cette macro DANS du code vba sous Excel.

> une idée ?
> Merci beaucoup

> José

> Sub Macro5()
> '
> ' Macro5 Macro
> '
> '
>      Documents.Add Template:="Normal", NewTemplate:lse,
> DocumentType:=0
>      ActiveDocument.Sections(1).Range.Select
>      ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageH eader

> Selection.HeaderFooter.Shapes.AddTextEffect(PowerPlusWaterMarkObject,
> _
>          "José SISA-6A", "Times New Roman", 1, False, False , 0,
> 0).Select
>      Selection.ShapeRange.Name = "PowerPlusWaterMarkObject"
>      Selection.ShapeRange.TextEffect.NormalizedHeight = False
>      Selection.ShapeRange.Line.Visible = False
>      Selection.ShapeRange.Fill.Visible = True
>      Selection.ShapeRange.Fill.Solid
>      Selection.ShapeRange.Fill.ForeColor.RGB = RVB(192, 192, 19 2) '
> <<<<==== PB c'est RGB !!!
> ' il faut corriger à la main et mettre RGB à la place de RVB.
>      Selection.ShapeRange.Fill.Transparency = 0.5
>      Selection.ShapeRange.Rotation = 315
>      Selection.ShapeRange.LockAspectRatio = True
>      Selection.ShapeRange.Height = CentimetersToPoints(3.22)
>      Selection.ShapeRange.Width = CentimetersToPoints(19.34)
>      Selection.ShapeRange.WrapFormat.AllowOverlap = True
>      Selection.ShapeRange.WrapFormat.Side = wdWrapNone
>      Selection.ShapeRange.WrapFormat.Type = 3
>      Selection.ShapeRange.RelativeHorizontalPosition = _
>          wdRelativeVerticalPositionMargin
>      Selection.ShapeRange.RelativeVerticalPosition = _
>          wdRelativeVerticalPositionMargin
>      Selection.ShapeRange.Left = wdShapeCenter
>      Selection.ShapeRange.Top = wdShapeCenter
>      ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
> End Sub

Bonjour,

Donc, la macro fonctionne bien, et la question est de la lancer depuis
une autre application, c'est bien ça ?

Au fil du temps ont existé trois solutions, celle qu'on utilise de
préférence, maintenant, est plutôt DDE, pour Dynamic Data Exchange. En
cherchant ces trois lettres tu vas trouver une abondante documentation,
dont des choses claires et d'autres moins.

La gymnastique est de trouver dans la documentation d'une des deux
applications ce que tu ne trouves pas dans celle de l'autre, en espéran t
travailler avec des versions installées avec une documentation
suffisamment complète.

La première chose est de déclarer un objet Application Word, et un ob jet
Document, et les initialiser.

Il y a deux façons de procéder, en lien précoce ou en lien tardif, comme
ça a été mis sur pied par des Américains on a assez tendance à utiliser
les termes anglo-saxons, donc Early Binding, et Late Binding.

Le Late Binding est utilisé dans des cas où on ne réussit pas à u tiliser
l'autre, ou des cas où les ressources ne sont pas disponibles au moment
du développement. Les objets sont déclarés en tant que ... Object.

Dim appWord As Object

   Set appWord = GetObject("Application.Word")
                'dans le cas où Word est ouvert
ou
   Set appWord = CreateObject("Application.Word")
                'dans le cas où Word doit être ouvert

Attention, c'est quelque chose que je cite de mémoire. L'un des deux
prend un deuxième argument, si je ne m'abuse le deuxième, avec le che min
du document. Dans le cas d'un script on met l'objet Script devant
GetObject ou CreateObject.

Ne pas hésiter à chercher la documentation sur GetObject et sur
CreateObject.

Dans le cas du Early Binding, la première chose à faire est de décl arer
la référence. Aller dans un module, puis dans le menu Outils, appeler la
commande Références. Dans la boîte de dialogue, cocher l'applicatio n
visée, en l'occurrence Microsoft Word, ou Microsoft Office, trouver le
bon intitulé, cocher la case devant, valider. Il se peut qu'un peu de
tâtonnement soit nécessaire. Si on a sélectionné une référenc e qui n'est
pas la bonne, revenir dans Outils Références, décocher la référ ence
inutile, et cocher la bonne, ou une dont on suppose qu'elle est la bonne.

L'explorateur d'objets permet de se rendre compte des objets disponibles
dans la référence qu'on vient de déclarer, et ainsi de s'assurer qu 'on
s'est bien adressé à la bonne référence, plutôt qu'une dont le nom
ressemble.

Dans un certain nombre de versions, l'explorateur d'objets s'ouvre, dans
l'environnement de développement, avec la touche F2.

Dans Word on doit au moins trouver les méthodes Application et Document ,
qui retournent des objets.

L'étape suivante consiste à déclarer les objets, et les initialiser .
Dim appWord As new Word.Application
Dim appDoc As Word.Document

Set appDoc = appWord.ActiveDocument

Attention, pour l'application j'ai mis new, ce qui va ouvrir
l'application Word, de façon invisible à l'écran. On peut s'en rend re
compte en appelant le gestionnaire des tâches par Ctrl Alt Suppresion,
on aura une ligne avec Word.

Pour le document, en revanche, je n'ai pas mis new, la ligne Dim ne fait
que déclarer l'objet document, il est initialisé à la ligne suivant e,
avec l'instruction Set.

Ensuite chacun des objets appelés dans la macro doit se référer à l'un
de ces objets

appWord.Selection

par exemple.

L'avantage du Early Binding sur le Late Binding, est qu'on dispose de ce
que Microsoft appelle l'Intellisense, c'est-à-dire qu'en tapant le nom
d'un objet suivi d'un point, on voit apparaître la liste de ses membres ,
c'est-à-dire ses propriétés et méthodes. Donc, après déclar é appWord
comme Word.Application, lorsqu'on tape appWord. on voit apparaître une
liste, lorsqu'on tape Selection, à chaque lettre la liste se restreint,
jusqu'à ce qu'il suffise de taper Entrée pour sélectionner le mot a ctif.

Une chose à avoir à l'esprit : par défaut, une application ouverte par
DDE n'apparaît pas à l'écran. Si on veut que l'utilisateur la voie, il
faut le demander explicitement

appWord.Visible = true

Si jamais l'exécution de la macro qu'on teste est interrompue en cours
de route, et que l'instruction ci-dessus n'a pas été exécutée, no us
avons une application Word d'ouverte, et non visible. Si l'objet n'est
plus reconnu, il faut penser à passer par le gestionnaire des tâches
(Ctrl Alt Suppression) pour fermer l'application.

Voilà déjà de quoi partir à la découverte ...

S'agissant d'une macro déjà développée dans Word, son nom va bien
apparaître quelque part dans l'explorateur d'objets, ce qui va permettr e
de visualiser depuis quel objet l'appeler.
Avatar
Gloops
J'avoue que je proposerais bien une réponse de flemmard :)
Ce que je ferais bien, là, c'est une exécution en pas à pas, comme ça si
à un moment il y a quelque chose qui apparaît on a le temps de s'en
rendre compte, et surtout en se donnant la peine de lire les
instructions à mesure ça aide bien à comprendre ce qui se passe. Ne pas
hésiter à passer le curseur sur les différents objets pour afficher la
valeur. On peut aussi demander l'affichage d'une valeur dans la fenêtre
d'exécution, et si on a besoin d'en suivre l'évolution il y a ce qu'o n
appelle les "espions".


Comme on est sous Excel et que le traitement se fait sous Word, ne pas
oublier de rendre la fenêtre Word visible.

Quelque chose du style appWord.Visible = true, à taper dans la fenê tre
d'exécution au moment judicieux.
_____________________________________________
Alfred WALLACE a écrit, le 15/06/2011 17:31 :
Bonjour Gloops,
oui, la macro fonctionne bien sous word, ET elle s'execute BIEN
sous excel (en vba), sans messages d'erreur.
Par contre, sous excel, la page word reste blanche...

une idée ?

Merci
José