Excel / Word Signet
Bonjour à tous,
Dans le cadre de mon travail, je dois remplir un fichier word à l'aide d'informations qui se trouvent dans un fichier excel.
J'aimerai trouver un moyen que les informations se remplissent automatiquement et j'ai cru comprendre que c'est par l’intermédiaire d'une macro excel ainsi que de signets que cela est possible.
J'ai trouvé sur internet la macro suivante :
Sub Publicontract()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim i As Byte
Set WordApp = CreateObject("word.application")
Set WordDoc = WordApp.Documents.Open("C:\essaie1.docx")
WordApp.Visible = True
For i = 4 To 7
Set monSignet = WordDoc.Bookmarks("Signet" & i).Range
monSignet.Text = Cells(i, 2)
WordDoc.Bookmarks.Add "Signet" & i, monSignet
Next i
End Sub
Mais j'avoue ne pas bien comprendre comment elle fonctionne.
Je vais essayer de m'expliquer à travers un exemple :
En colonne B j'ai le nom des signets 'date, destination, prix)
En colonne C j'ai l’information que j’aimerais envoyer automatiquement comme suit :
Date 12/10/20
Destination Tunisie
Prix 799e
Comment faire pour que le signet "Date" se remplisse automatiquement dans mon word avec l'information "12/10/2020" ?
J'espère avoir été clair dans ma demande et je vous remercie par avance
Bonjour,
si l'information Date est sur la ligne 4,
If i = 4 then monSignet.Text = Format(Cells(i, 2), "dd/mm/yy") else monSignet.Text = Cells(i, 2)
Bonjour,
Merci pour l'élément de réponse.
Donc si je comprends bien, avec votre ligne de VBA, l'information de la date en cellule C4 ira directement sur le signet "Date" de mon word ?
Et pour insérer plus de signet il me suffit de dupliquer la ligne de code comme suit ?
If i = 4 then monSignet.Text = Format(Cells(i, 2), "dd/mm/yy") else monSignet.Text = Cells(i, 2)
If i = 5 then monSignet.Text = Cells(i, 2) --> information de la destiantion en cellule C5
If i = 6 then monSignet.Text = Cells(i, 2) --> information du prix en cellule C6
etc etc
Merci !
c'en en remplacement de la ligne
monSignet.Text = Cells(i, 2)
par
If i = 4 Then monSignet.Text = Format(Cells(i, 2), "dd/mm/yy") Else monSignet.Text = Cells(i, 2)
- Messages
- 4'094
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Pour remplir un document Word à partir d'un classeur Excel, plutôt que des signets, il est préférable d'utiliser des contrôles de contenu de texte : Word --> menu développeur --> Contrôles --> Bouton "Aa".
Les propriétés de ce contrôle comportent un titre et une balise. Il suffit alors d'y affecter les noms de votre colonne B.
ci-joint exemple de document Word avec les contrôles correspondant aux noms de votre colonne B.
ci-dessous exemple de code en supposant que le document Word soit placé dans votre dossier : Mes Documents
Sub remplissage_doc()
Dim WordApp As Object, WordDoc As Object, ctrl As Object
Dim nom_fichier As String
Set WordApp = CreateObject("word.application")
WordApp.Visible = True
nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") & "\essai01.docx"
Set WordDoc = WordApp.Documents.Open(nom_fichier)
For Each ctrl In WordDoc.ContentControls
If ctrl.Type = 0 Then
Set Cell = ActiveSheet.Columns("B").Find(ctrl.Tag)
If Not Cell Is Nothing Then ctrl.Range.Text = Cell.Offset(, 1)
End If
Next ctrl
MsgBox "fin du traitement"
WordDoc.Close savechanges:=True
WordApp.Quit
End Sub
Remarque : ctrl.Tag est la balise du contrôle, ctrl.Title est son titre.
Bonjour Thev,
Merci beaucoup pour votre réponse.
N'ayant q'un mac chez moi je ne peux pas tester la macro ce week-end mais ce sera ma priorité du Lundi.
Si je peux encore abuser de vos connaissances, j'ai encore quelques questions sur ce sujet :
- Si je connais le chemin d'accès précis de mon document Word, peut-on le rentrer directement dans la macro ? car j'ai ici l'impression que l'on crée un nouveau fichier word à chaque fois ?
- Avec la macro qe vous m'avez donné, je peux rajouter autant de controle sur la colonne B (avec les informations correspondantes en colonne C) et en rajoutant des boutons Aa sur le document Word, ceux-ci se rempliront automatiquement ?
C'est génial en tout les cas merci beaucoup !
- Messages
- 4'094
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Si je connais le chemin d'accès précis de mon document Word, peut-on le rentrer directement dans la macro ?
Oui. Mais il est toujours préférable de le placer dans les dossiers standard Microsoft : mes Documents ou Bureau dont le chemin est donné par : CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") ou CreateObject("Wscript.Shell")SpecialFolders("Desktop")
car j'ai ici l'impression que l'on crée un nouveau fichier word à chaque fois ?
Pas du tout. On met simplement à jour le fichier Word avec les infos issues du fichier Excel. On recrée seulement à chaque fois une application Word, qui est fermée à la fin de la procédure : "WordApp.Quit"
Avec la macro qe vous m'avez donné, je peux rajouter autant de controle sur la colonne B (avec les informations correspondantes en colonne C) et en rajoutant des boutons Aa sur le document Word, ceux-ci se rempliront automatiquement ?
Oui, sous réserve de renseigner titre et balise des contrôles "Aa" avec les noms de la colonne B, en cliquant sur leurs propriétés (Menu Développeur --> Contrôles --> Propriétés)
Bonjour,
C'est parfait ! je viens de tester et tout fonctionne correctement.
J'ai également trouvé un subsitut :
Sub maj()
Dim AppWord As Object
Dim Doc As Object
Set AppWord = CreateObject("Word.Application")
With AppWord
.Visible = True
Set Doc = .documents.Open("\\Sw-frathc-fil01\users-fr$\T1102007\Desktop\ExcelWord\Doc1.docx")
With Doc
.bookmarks("Monsignet1").Range.Text = Range("A1")
.bookmarks("Monsignet3").Range.Text = Range("A2")
End With
End With
End Sub
Ma dernière question est la suivante : Peut-on ajouter une ligne qui change la couleur du mot que j'ajoute ?
Merci par avance pour vos idées !
- Messages
- 4'094
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Ma dernière question est la suivante : Peut-on ajouter une ligne qui change la couleur du mot que j'ajoute ?
Bien sûr, ci-dessous code modifié
For Each ctrl In WordDoc.ContentControls
If ctrl.Type = 0 Then
Set Cell = ActiveSheet.Columns("B").Find(ctrl.Tag)
If Not Cell Is Nothing Then
ctrl.Range.Text = Cell.Offset(, 1)
ctrl.Range.Font.ColorIndex = 2 'couleur bleue
End If
End If
Next ctrl
et lien des codes couleur : https://docs.microsoft.com/en-us/office/vba/api/word.wdcolorindex
Bonjour Thev,
Merci pour votre réactivité.
Votre macro marche parfaitement.
Est-il néanmoins possible de choisir la couleur selon le Contrôle ?
Par exemple, ma contrôle "Destination" en rouge et le contrôle "Prix" en bleu?
Car si je comprends bien, la dernière ligne de code que vous m'avez donné applique une couleur pour tous les controles ?
J'ai contourné ce problème en répétant la boucle de Crtl tag sur la colonne E. C'est-à-dire que tous les controle en colonne B sont de couleur Bleue et ceux en colonne "E" sont en vert.
Cela donne comme suit :
For Each ctrl In WordDoc.ContentControls
If ctrl.Type = 0 Then
Set Cell = ActiveSheet.Columns("B").Find(ctrl.Tag)
If Not Cell Is Nothing Then
ctrl.Range.Text = Cell.Offset(, 1)
ctrl.Range.Font.ColorIndex = 2 'couleur bleue
End If
End If
Next ctrl
For Each ctrl In WordDoc.ContentControls
If ctrl.Type = 0 Then
Set Cell = ActiveSheet.Columns("E").Find(ctrl.Tag)
If Not Cell Is Nothing Then
ctrl.Range.Text = Cell.Offset(, 1)
ctrl.Range.Font.ColorIndex = 4
End If
End If
Next ctrl
Je ne pense pas que ce soit très optimisé mais cela semble fonctionner.
Merci pour aide précieuse.
- Messages
- 4'094
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Est-il néanmoins possible de choisir la couleur selon le Contrôle ?
Dans ce cas, le plus simple est d'affecter directement la couleur au contrôle de contenu dans le document Word, en sélectionnant le remplissage de base.
ci-joint exemple:
Ça marche parfaitement. Merci pour votre aide cela va me faciliter la tâche sur beaucoup de tâches répétitives.
Bonne fin de journée