Macro Excel VBA vers Word - Mise en forme des signets

Forj45

XLDnaute Nouveau
Bonjour à tous,

Je viens vers vous car je lutte un peu avec VBA pour faire quelque chose de correct.
Mon besoin actuelle est de générer à partir d'un tableau Excel, en sélectionnant une ligne, divers documents (pour le moment un Word et un mail) qui reprennent les données de cette ligne.

J'ai déjà pu finaliser le besoin sur la partie MAIL, où la gestion des couleurs est très simple quand on injecte du HTML dans HTMLBody.
Cependant j'ai énormément de mal côté WORD à trouver une fonction simple me permettant d'injecter mon texte avec la couleur souhaité...

Voici le code :
Sub Creation_Word()

'# # # # # # # # OUVERTURE DU DOCUMENT # # # # # # # # # #

'Ouverture de l'application word

Set appwd = CreateObject("word.application")
'ouverture du fichier type, basé sur le nom de fichier de l'onglet Paramétrage (cellule appelé "fichier")
Set doc = appwd.documents.Open(ThisWorkbook.Path & "\" & ThisWorkbook.Names("fichier").RefersToRange)


'# # # # # # # # ENCAPSULATION DONNÉES EXCEL DANS VARIABLES VBA # # # # # # # # # #

Titre_Sujet = Sheets("Mon_Onglet").Cells(ActiveCell.Row, 1) 'Libellé du sujet (Colonne 1)
OK_KO = Sheets("Mon_Onglet").Cells(ActiveCell.Row, 2) 'Date de Fin du sujet (Colonne 2)
'etc...



'# # # # # # # # AJOUT DES DONNÉES DANS LES SIGNETS WORD # # # # # # # # # #

'Ajout des données dans les Signets Word correspondants --> doc.bookmarks([Libellé_Signet]).Range = XXX
doc.Bookmarks("Signet_Titre").Range = Titre_Sujet
doc.Bookmarks("Signet_OK_KO").Range = OK_KO
'etc...


'# # # # # # # # OUVERTURE DU DOCUMENT # # # # # # # # # #

'Enregistrer Sous

fileSaveWordName = Application.GetSaveAsFilename(InitialFileName:=Nom_Document, fileFilter:="Word Files (*.doc), *.doc")
With appwd
If fileSaveWordName <> False Then
.ActiveDocument.SaveAs Filename:=fileSaveWordName
.ActiveDocument.Close
MsgBox "Document bien enregistré dans le dossier spécifié"
Else ' Ferme le document sans enregistrement
.ActiveDocument.Close wdDoNotSaveChanges
End If ' Quitte l'application
.Quit
End With
Set appwd = Nothing
End Sub


Mon problème est donc de mettre par exemple en rouge le signet qui correspond à la ligne :
Code:
doc.Bookmarks("Signet_OK_KO").Range = OK_KO

J'ai eu beau tester des trucs du style .bookmarks().Range.Font.Color = wdred ou des trucs dans ce style vu à droite à gauche, rien à faire :confused:

Le test pour déterminer la couleur, j'en fais mon affaire, un petit if ou un switch et ça ira
Mais la fonction de changement de couleur ça veut pas
(et l'interface VB d'Excel est pas franchement cool à pas donner en automatique les fonctions associés en auto implémentation)

Si l'un de vous peut m'aider... merci par avance
 

Forj45

XLDnaute Nouveau
Re : Macro Excel VBA vers Word - Mise en forme des signets

Bonjour,

tu devrais chercher ta réponse sur un forum word je pense ;)

P.

Je suis pas sur que cette réponse apporte beaucoup à la question mais étant donné que c'est du code VBA exploitant du Excel, je vais laisser ma question ici je pense :)


Bonjour les amis :)
Ou tu peux écrire plutôt un truc genre :
Code:
With appwd.Selection
   .Goto what:=wdGoToBookmark, Name:="Signet_Titre""
   .TypeText Text:=Titre_Sujet
   .Font.Bold =  True   ' Police en gras
   .Font.ColorIndex = 2 ' bleu

   .Goto what:=wdGoToBookmark, Name:="Signet_OK_KO""
   .TypeText Text:=OK_KO
   .Font.Italic = True  ' police en italique
   .Font.ColorIndex = 6 ' rouge

   ' ... autres signets ...

end with

:) Pierre

Je vais essayer mais dans ce cas, à quoi me servent les deux lignes
Set appwd = CreateObject("word.application")
Set doc = appwd.documents.Open(ThisWorkbook.Path & "\" & ThisWorkbook.Names("fichier").RefersToRange)


Je n'utilise plus la variable doc???... a t'elle une réelle utilité donc ???
 
Dernière édition:

Forj45

XLDnaute Nouveau
Re : Macro Excel VBA vers Word - Mise en forme des signets

Hello,

La déclaration : "Set appwd = CreateObject("word.application")" ouvre Word
La déclaration : "Set doc = appwd.documents.Open( ....." ouvre le document dont le nom est défini dans les parenthèses
Ensuite le ligne proposée : "With appwd.Selection" fait référence au "document-courant-ouvert-dans-Word"
Ta variable "Doc" est donc indispensable! car il faut bien ouvrir un document pour écrire dedans!

:) Pierre

Alors dans ce cas c'est un manque de maitrise à ce niveau...:confused:
Pourquoi ne pas écrire dans ce cas
With doc.Selection
.Goto ...



Dans ma logique, on injecte les données dans l'objet qui correspond au modèle
(et donc ici la variable DOC et non pas APPWD...:confused::confused:)

Mais c'est peut-être mes anciennes habitudes de dev Java et de programmation objet qui ont la peau dure



Bon en tout cas je comprends bien ce qu'il faut faire, encore merci
Je vous tiens au courant dès que ça marche
 

Forj45

XLDnaute Nouveau
Re : Macro Excel VBA vers Word - Mise en forme des signets

Hello, c'est moi de nouveau

Code:
With appwd.Selection
       [B][COLOR="#FF0000"] .Goto what:=wdGoToBookmark, Name:="Mon_Signet"[/COLOR][/B]
        .TypeText Text:=Texte_Feu
        .Font.Bold = True    ' Police en gras
        .Font.ColorIndex = 2 ' bleu
    End With

J'ai un soucis avec cette ligne là car VBA me dit que le signet n'existe pas... (Erreur 5101, ce signet n'existe pas)
Pourtant je confirme que le signet existe pourtant et avec ce nom là.
D'ailleurs quand je le mets à jour via doc.Bookmarks("Mon_Signet").Range = "blabla" ça fonctionne bien...
A noter que la variable wdGoToBookmark en mode débogage affiche VIDE comme valeur...

Auriez vous un conseil pour résoudre cela ?

Cordialement

PS : je comprend pourtant bien que wdGoToBookmark est un wdGoToItem auquel je spécifie un nom de signet ensuite... Mais je ne vois pas pourquoi la ligne plante...
 
Dernière édition:

Numidia

XLDnaute Occasionnel
Bonjour tout le monde bonjour tatiak
votre code fonctionne à merveille mais par contre le contenu de la cellule transféré vers le signet_Titre ne se met pas en gras ni en couleur je ne sais ce qu'il ne va pas c bizarre
et merci pour votre reponse
 

Numidia

XLDnaute Occasionnel
Bonjour Pierre,
Merci de m'avoir répondu
J'ai résolu le problème, au début j'ai mis ce morceau de coude
With .Selection
.Goto what:=wdGoToBookmark, Name:="Signet_Titre"
.TypeText Text:=Titre_Sujet
.Font.Bold = True
.Font.ColorIndex = 6

End With
ensuite j'ai interverti l'ordre que que j'avais établi au préalable comme ceci :
With .Selection
.Goto what:=wdGoToBookmark, Name:="Signet_Titre"
.Font.Bold = True
.Font.ColorIndex = 6
.TypeText Text:=Titre_Sujet

End With
et ça a marché à merveille
Merci beaucoup Pierre le code mis sur la ligne est magnifique et permet de régler pas mal de problèmes
Kabylie Algérie express
 
Dernière édition:

Discussions similaires