Voici mon code complet qui permet d'ouvrir word et remplacer tous les champs comptenu dans un tableau pour d'aurte champs comptenu dans une autre colonne de ce meme tableau :
Set objWord = CreateObject("Word.Application" )
Const wdSeekMainDocument = 0
Const wdPrintView = 3
Const wdSeekCurrentPageHeader = 9
Const wdSeekCurrentPageFooter = 10
Const wdDialogFileSaveAs = 84
Const wdReplaceAll = 2
Const msoCanvas = 20
Const msoTextBox = 17
Const wdHeaderFooterPrimary = 1
''''''''''''''''''''''''''traitement des documents un par un
For j=0 to compteur -1
document_a_sauvegarder = tab_a_sauvegarder(j)
''''''''''''''''''en fait ici j'ouvre un doc vbs qui stocks des varaibles, je l'execute pour remplir ses variables (mais pas utile pour notre cas)
r = path_ville & "\" & fiche_a_generer & ".vbs"
Set f=fso.OpenTextFile(r,1)
Do while f.AtEndOfStream = false
lecture_vbs = lecture_vbs & f.ReadLine & vbcrlf
loop
lecture_vbs = modiftextdoc(lecture_vbs)
Execute lecture_vbs
Set f= Nothing
Set doc = objWord.Documents.Add(path_doc & "\" & tab_a_generer(j) & ".doc" )
objWord.Visible = true
For i=0 to UBound(tableau)
''''''''''''''''''''les varibles cotenues dans le tableau sont mise dans tempo
Execute "tempo=" & tableau(i,2)
tempo = modiftextdoc(tempo)
''''''''''''''''''ici rempacement dans le text word (ca amrche)
With objWord.Selection.Find
.ClearFormatting()
.Text = "@" & tableau(i,0) & "@"
With .Replacement
.ClearFormatting()
.Text = tempo
End With
.Execute , , , , , , , , , , wdReplaceAll
End With
Next
''''''''''''''''''remplacement du text dans les entetes et pied de pages (ca marche)
With objWord.ActiveWindow.ActivePane.View
.Type = wdPrintView
.SeekView = wdSeekCurrentPageHeader
For i=0 to UBound(tableau)
Execute "tempo=" & tableau(i,2)
tempo = modiftextdoc(tempo)
With objword.Selection.Find
.ClearFormatting()
.Text = "@" & tableau(i,0) & "@"
With .Replacement
.ClearFormatting()
.Text = tempo
End With
.Execute , , , , , , , , , , wdReplaceAll
End With
Next
.SeekView = wdSeekCurrentPageFooter
For i=0 to UBound(tableau)
Execute "tempo=" & tableau(i,2)
tempo = modiftextdoc(tempo)
With objword.Selection.Find
.ClearFormatting()
.Text = "@" & tableau(i,0) & "@"
With .Replacement
.ClearFormatting()
.Text = tempo
End With
.Execute , , , , , , , , , , wdReplaceAll
End With
Next
.SeekView = wdSeekMainDocument
End With
For i=0 to UBound(tableau)
Execute "tempo=" & tableau(i,2)
tempo = modiftextdoc(tempo)
Next
'''''''''''''''remplacement du text dans les textbox cotenu dans les entetes et pied (ca marche que pour les entetes)
For Each objShape In objWord.ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes
For i=0 to UBound(tableau)
Execute "tempo=" & tableau(i,2)
tempo = modiftextdoc(tempo)
Select Case objShape.Type
Case msoCanvas
MsgBox "canvas"
For Each objShItm In objShape.CanvasItems
If objShItm.Type = msoTextBox Then
With objShItm.TextFrame.TextRange
.Text = Replace(.Text,"@" & tableau(i,0) & "@", tempo)
End With
End If
Next
Case msoTextBox
MsgBox "textbox"
With objShape.TextFrame.TextRange
.Text = Replace(.Text,"@" & tableau(i,0) & "@", tempo)
End With
End Select
Next
Next
fiche_a_generer = fso.GetBaseName(fiche_a_generer)
doc.SaveAs choix_dossier & "\" & document_a_sauvegarder & ".doc"
doc.Close
Next
objword.visible=true
objWord.Quit
Set objWord = Nothing
Alors, j'ai pas mis le remplacement dans les textbox directement car ca marche pas.
J'ai laissé msocanvas meme si je ne sais pas quel option woes il s'agit...
J'espere que tu pourras m'aider parce que je bloque pour le spied de page -> textbox
et textbox direct...
Merci