Remplace signet word via un programme VBA Excel
Bonjour,
je souhaite à partir d'un code vba aller chercher une valeur dans ma feuille excel. cette valeur sera ensuite écrite à la place d'un signet d'un document word que j'ouvre avec le meme programme vba.
Voici le code que j'ai piqué sur des forums, que j'ai adapté à mon projet et qui a l'air de fonctionner selon les dires mais il ne marche pas trés bien dans mon cas. Il m'ouvre le doucument word mais ne remplace pas du tout le signet à la valeur trouvée.
Public Function RemplirSignet(mon_signet As String, mon_texte As String, WordDoc as Object)
' Remplace mon_signet par mon_texte
Dim Place As Long
Place = ActiveDocument.Bookmarks(mon_signet).Range.Start
ActiveDocument.Bookmarks(mon_signet).Range.Text = mon_texte
ActiveDocument.Bookmarks.Add Name:=mon_signet, Range:=ActiveDocument.Range(Place, Place + Len(mon_texte))
End Function
Sub Export_word()
Dim WordApp As Object, WordDoc As Object
' Ouvrir le document Word
Set WordApp = CreateObject("Word.Application")
WordApp.Visible = True
WordApp.Documents.Open "D:/MacroV2/Fiche_Test.docx"
'Remplacer le signer dans le document Word
RemplirSignet "S3", Sheets("Feuil1").Range("B1").Value, WordDoc
End Sub
En executant le programme, le document Fiche_Test s'ouvre mais j'ai une erreur d'exécution 91, variable objet ou variable de bloc with non défini à la ligne suivante : Place = WordDoc.Bookmarks(S).Range.Start .
Merci par avance pour votre aide.
PS : Je suis un vrai debutant en programmation vba.
Bonjour,
Une piste à adapter :
Sub Test()
Dim AppWord As Object
Dim Doc As Object
'crée une instance de Word
Set AppWord = CreateObject("Word.Application")
With AppWord
.Visible = True
'ouvre un document
Set Doc = .Documents.Open("D:/MacroV2/Fiche_Test.docx")
With Doc
'*** faire le choix entre...
'...remplacer les signets par les textes des cellules A1 et B1
.Bookmarks("Monsignet1").Range.Text = Range("A1")
.Bookmarks("Monsignet2").Range.Text = Range("B1")
'...insèrer les textes des cellules A1 et B1 après les signets
' .Bookmarks("Monsignet1").Range.InsertAfter Range("A1")
' .Bookmarks("Monsignet2").Range.InsertAfter Range("B1")
End With
End With
End Sub
Merci Theze ton code marche à la perfection.
Maintenant, je veux enregistrer le document en formant .pdf dans le même répertoire que mon doc word.
Si t'aurais une piste n'hésite pas.
Merci d'avance.
Bonne soirée à toi
Bonjour,
Avec l'exportation au format pdf dans le même dossier :
Sub Test()
Dim AppWord As Object
Dim Doc As Object
'crée une instance de Word
Set AppWord = CreateObject("Word.Application")
With AppWord
.Visible = True
'ouvre un document
Set Doc = .Documents.Open("D:/MacroV2/Fiche_Test.docx")
With Doc
'*** faire le choix entre...
'...remplacer les signets par les textes des cellules A1 et B1
.Bookmarks("Monsignet1").Range.Text = Range("A1")
.Bookmarks("Monsignet2").Range.Text = Range("B1")
'...insèrer les textes des cellules A1 et B1 après les signets
' .Bookmarks("Monsignet1").Range.InsertAfter Range("A1")
' .Bookmarks("Monsignet2").Range.InsertAfter Range("B1")
'export au format pdf
.ExportAsFixedFormat "D:/MacroV2/Fiche_Test.pdf", 17 'wdExportFormatPDF = 17
End With
End With
End Sub
Bonjour,
Ca marche Theze encore une fois merci. Je crois que ce n'est plus nécessaire de l'enregistrer en pdf. Vu que l'utilisateur peut à tout moment modifier le document word. je m'explique ajouter un texte par exemple.
J'ai pensé à ouvrir le doc Fiche_Test avec le programme et l'enregistrer en format Now(), "yyyymmdd_hhmm.docx
Du coup il y ajoute ses modifications.
Je garde mon document d'origine de meme que mes SIGNEEEEEETTTTTTTS.
Merci ton code m'a vraiment aider.
Bonne journée à toi
Le code complet et ça marche parfaitement :
Sub Export_word()
Dim WordApp As Word.Application, WordDoc As Word.Document
Dim NDF As String
NDF = ActiveWorkbook.Path & "\" & "Fiche_Test" & Format(Now(), "yyyymmdd_hhmm")
On Error Resume Next
'crée une instance de Word
Set AppWord = CreateObject("Word.Application")
With AppWord
.Visible = True
'ouvre le document
Set WordDoc = .Documents.Open("E:/MacroV3/Fiche_Test.docx")
With WordDoc
'...remplacer les signets par les textes des cellules B1
.Bookmarks("S1").Range.Text = Range("B7")
.Bookmarks("S2").Range.Text = Range("B6")
.Bookmarks("S3").Range.Text = Range("B1")
.Bookmarks("S4").Range.Text = Range("B2")
.Bookmarks("S5").Range.Text = Range("B3")
.Bookmarks("S6").Range.Text = Range("B4")
.Bookmarks("S7").Range.Text = Range("B5")
.Bookmarks("S8").Range.Text = Range("B8")
.Bookmarks("S9").Range.Text = Range("B9")
'...Enregistrer mon doc Fiche_Test au format Now(), "yyyymmdd_hhmm")
WordDoc.SaveAs NDF
End With
End With
End Sub
Bonjour,
Content de t'avoir aidé