Script pour modifier un doc sous word

Signaler
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014
-
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014
-
Hello


Je dois faire un script qui permet de remplacer un logo dans l'entête d'un document word par un autre et je ne sais pas du tout par où commencer et comment partir.
Vos propositions sont les bienvenues.

23 réponses

Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

Il existe 2 problématiques dans ta formulation
- Accès à l'entête d'un document (activeDocument.ActivePane.View.SeekView = wdSeekCurrentPageHeader)
- remplacer dans une zone du document une image (si le logo n'est pas inclus dans un champ du type "IncludePicture" avec liaison, ou dans un signet (Bookmark), ce sera difficile de remplacer un logo par un autre)

Mais la problématique du remplacement du logo est t'elle une problématique administrateur ou utilisateur?
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

Niveau de la sécurité NT c'est du point de vue Administrateur.


Et sinon c'est bien dans l'entête elle même que l'image doit être remplacée.
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Ce n'est surtout pas une solution complète mais des éléments techniques à creuser : bon courage car il reste beaucoup de travail

Je rajoute ceci pour aider 3 techniques

1- le Bookmark pour marquer la zone logo (pour ensuite le remplacer),
2- l'insertion d'image (CHAMP IncludePicture ou methode Shape)
3- la recherche de Shape ou de champ INCLUDE Picture (pour ensuite remplacer l'objet)



1- Pour remplacer un logo inclus dans un signet "Logo" :

If ActiveDocument.Bookmarks.Exists("Logo") Then

ActiveDocument.bookmarks("Logo").Select
'Selection.Delete 'suprimer avant d'insérer = remplacer

2 - insérer une image
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"INCLUDEPICTURE ""c:\\logo.bmp"" \d ", PreserveFormatting:=True
'ou
Dim ils as Word.InLineShape
Dim objShapes as Shapes

Set ils = Selection.InlineShapes.AddPicture(FileName:="C:\newlogo.bmp", LinkToFile:=False, SaveWithDocument:=True)
ils.Height = 100
ils.Width = 100

3- rechercher les éléments CHAMP ou GRAPHIQUE insérés dans un document
il faut créer une forme avec deux Listbox et des bouton OK , Annuler

' il doit être possible de parcourir les éléments Shapes avec une recherche du type, il faut ensuite Appeler une fenetre avec 2 listbox , la 1ère listebox contenant tous les objets shape du document et la 2ème listbox qui contient tous les logos possibles

For Each s In ActiveDocument.Shapes
If s.Type = msoPicture Then
' à tester
ListBox1.Add s.LinkFormat.SourceName
End If
If s.Type = msoLinkedPicture then
Listbox1.Add s.LinkFormat.SourceName
End if
Next
Dim oFolder
Dim ofso

Set ofso = CreateObject("Scripting.FileSystemObject")
If oFSo.folderexists("c:\logos") Then
Set oFolder = oFSo.GetFolder("c:\logos")
For Each oFile In oFolder.Files
Listbox2.Add oFile.Name
Next
End if

Encore bon courage
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

Ok
Je vais approfondir ces infos, mais je risque fort de revenir vers toi avec des questions alors ne t'éloignes pas trop :-)
Merci!
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

J'ai testé ce que tu m'avais proposé mais j'ai un soucis lorsque je dois la remplacer.
Le gars qui a généré ces documents word (et qui s'est fait virer d'ailleurs) les a générés avec une entête qui a une marge de gauche réduite et sous forme de modèle word avec l'iimage originale en dehors de l'entête mais dans le cadre à marge réduite.
Du coup lorsque je colle l'image il me la met dans l'entête et dans le cadre et ça fait qu'il y à un espace vide à gauche.
J'ai essayé de régler cela avec le top et le left mais ça le met au coin gauche du cadre toujours.
Et sinon merci !
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
L'image est collé dans l'entête, c'est ce que tu souhaitez.

Cependant il reste un espace vide à gauche, peux-tu le sélectionner facilement à la souris et demander sa suppression : si c'est toujours le cas, tu peux faire une macro avec l'enregistreur de macro pour supprimer cet espace.

Sinon, je ne comprend pas à quoi est du cet espace à gauche.
Il existe aussi une option Word pour accélérer le défilement du document qui génère des espèces sur l'insertion d'image.
Menu :"Outils / Options/ Affichage " : décocher "Espaces pour images"
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

Oui elle est dans l'entête mais avec l'espace elle est presque au milieu de la page alors qu'il faudrait qu'elle soit collée au bord gauche de la page.
En fait il a mis des colonnes dans l'entête et le logo que je dois remplacer se trouve à gauche de la colonne de gauche dans la marge c'est un peu spécial si tu veux je t'envoie par mail le fichier.
Cet espace a été mis en place par mon prédécesseur donc aucune idée pourquoi il a fait ça comme ça.
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
S'il s'agit d'un tableau et qu'il faut rentrer dans la première cellule
pour aligner un paragraphe
Activedocument.Paragraphs.Alignment = wdAlignParagraphLeft


Si première cellule (col=1)de la première ligne d'un tableau (Row=1)
Row= 1
Col=1
ActiveDocument.Tables(1).Cells(Row,Col).Range.Select
selection.ParagraphFormat.Alignment= wdAlignParagraphLeft

Je ne tiens pas du tout à mettre mon email sur le net
Essayons de continuer comme ça
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

Oui je comprends pour le mail pas de soucis.


Je t'ai mis le fichier sur mon server ftp je delete le compte après:



ftp://word:word@clavxavi.serveftp.com/



en fait le logo que je rajoute est dans le tableau mais le tableau commence à qqes centimètres du bord il faudrait que je puisse ramener le début de ce tableau plus à gauche.
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
2 documents récuépérés
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Je vais manger

Mais j'ai fait une macro avec l'enregistreur de macro de Word

Tableau / Sélectionner/ Tableau
Tableau / Ajustement automatique / Ajouter à la fenetre
et cela me semnble aller


Selection.Tables(1).Select
Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)

Je reviens à 14h30
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

k je vais essayer ça merci
bon ap
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

Re.
En fait il faudrait pouvoir faire comme si tu vas voir sur le logo click-droit


-> Format de l'image... -> Habillage -> Avancé
-> Positionnement de l'image Horizontale -> Position absolue -2.31cm à droite de Colonne
et
-> Positionnement de l'image Verticale -> Position absolue -0.19cm au-dessous du Paragraphe

J'ai pensé à le mettre dans le

    ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage).Shapes.AddPicture _
        strPics, LinkToFile:=False, SaveWithDocument:=True, Left:=-2.31, Top:=-0.19

mais c'est pas le bon endroit où mettre ça
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

J'ai essayé ça 
       Selection.Tables(1).Select
       Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)
mais ca ne changeait pas le cadre du tableau
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Tu es rentré dans l'entete avant les 2 lignes
Dans ton doc final Ce que j_obtient.doc si j'éxécute le code ci-dessous cela me semble bien sympatique mais si je l'exéctue dans ton doc original cela n'est pas ce qui est recherché mais je ne sais pas pourquoi

If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.Tables(1).Select
Selection.Tables(1).AutoFitBehavior (wdAutoFitWindow)
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

Et sais-tu comment définir ces valeurs en VBA :
-> Format de l'image... -> Habillage -> Avancé
-> Positionnement de l'image Horizontale -> Position absolue -2.31cm à droite de Colonne
Je crois que si j'arrive à les définirs pour le logo que j'insère le problème sera résolu.
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Positionnement absolue : Quand je crée la macro dans Word le code qui en ressort est le suivant

Selection.ShapeRange.Left = CentimetersToPoints(-2.31)
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

C'est tout bon j'ai pu faire ce que je voulais faire.
Je tenais à te remercier particulièrement ça faisait 5 ans que j'avais plus fait de VB6 et VBA et la remise dans le bain n'aurait pas été autant rapide sans ton aide.
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Je suis content d'avoir pu t'aider.

Moi aussi, J'ai un problème et je ne sais pas à quelle porte taper.

Il s'agit d'enfants.

Penses tu que quelqu'un auprès de toi peux m'aider.
Messages postés
109
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
14 février 2014

? humour?