VBA word imprimer en word page par page

Fermé
kingso - 13 juil. 2020 à 15:35
m@rina Messages postés 20947 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 28 septembre 2024 - 16 juil. 2020 à 19:28
Bonjour à tous

j'ai trouvé un code VBA pour Word que j'utilise tout les jours,mais j'aimerai améliorer ce code .

Il permet d'enregistrer page par page un document word en pdf (plusieurs lettre individuel dans un seul doc word).

aujourd’hui je voudrai que ce code enregistre en Word et que je puisse renommer chaque page (si possible par rapport a une ligne précise (M.DUPONT HENRY) car ce sont des lettres individuel.

ci-dessous le code :
Sub SaveAsSeparatePDFs()

Dim I As Long
Dim xStr As String
Dim xPathStr As Variant
Dim xDictoryStr As String
Dim xFileDlg As FileDialog
Dim xStartPage, xEndPage As Long
Dim xStartPageStr, xEndPageStr As String
Set xFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
If xFileDlg.Show <> -1 Then
MsgBox "Please chose a valid directory", vbInformation, "Kutools for Word"
Exit Sub
End If
xPathStr = xFileDlg.SelectedItems(1)
xStartPageStr = InputBox("Begin saving PDFs starting with page __? " & vbNewLine & "(ex: 1)", "Kutools for Word")
xEndPageStr = InputBox("Save PDFs until page __?" & vbNewLine & "(ex: 7)", "Kutools for Word")
If Not (IsNumeric(xStartPageStr) And IsNumeric(xEndPageStr)) Then
MsgBox "The enterng start page and end page should be number format", vbInformation, "Kutools for Word"
Exit Sub
End If
xStartPage = CInt(xStartPageStr)
xEndPage = CInt(xEndPageStr)
If xStartPage > xEndPage Then
MsgBox "The start page number can't be larger than end page", vbInformation, "Kutools for Word"
Exit Sub
End If
If xEndPage > ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) Then
xEndPage = ActiveDocument.BuiltInDocumentProperties(wdPropertyPages)
End If
For I = xStartPage To xEndPage
ActiveDocument.ExportAsFixedFormat xPathStr & "\Page_" & I & ".pdf", _
wdExportFormatPDF, False, wdExportOptimizeForPrint, wdExportFromTo, I, I, wdExportDocumentWithMarkup, _
False, False, wdExportCreateHeadingBookmarks, True, False, False
Next
End Sub


merci d'avance .

cordialement.
A voir également:

5 réponses

m@rina Messages postés 20947 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 28 septembre 2024 11 329
13 juil. 2020 à 18:24
Bonjour,

Il s'agit du résultat d'un publipostage ?
Parce que Dupont Thierry, ou Duschmoll Jules, ça ne va rien dire à Word !
Il faut donc donner à Word un critère de coupure.

Exemple de macro ici pour couper par section :
https://faqword.com/index.php/word/publipostage/552-comment-couper-un-gros-fichier-en-autant-de-petits-fichiers-quil-y-a-de-sauts-de-section

m@rina


0
bonjour,

merci pour votre réponse.

j'ai utilisé votre code qui fonctionne parfaitement . j'ai vu qu'il était possible de l'enregistrer sous un nom spécifique. comment puis-je le rajouter à la macro ?

merci d'avance.
cordialement .
0
m@rina,

il s'agit de ses 2 macro :

http://faqword.com/index.php/word/publipostage/552-comment-couper-un-gros-fichier-en-autant-de-petits-fichiers-quil-y-a-de-sauts-de-section

http://faqword.com/index.php/word/environnement/736

mes lettres sont toujours écrite de la même manière et le nom prénom de la personne se trouve toujours à la même place .

peux-tu m'aider s'il te plait .

merci d'avance.
cordialement .
0
m@rina Messages postés 20947 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 28 septembre 2024 11 329
15 juil. 2020 à 16:44
Bonjour,

Dans la première macro, ajoute au début toutes la déclaration de la variable "nom".
Evidemment, il faut que tu mettes bien le bon numéro de paragraphe, et du ou des mots.
Puis à la place de
.SaveAs FileName:=chemin & DocNum & ".docx"

tu mets :
.SaveAs FileName:=chemin & nom & ".docx"


m@rina
0
Super merci,
Jai réussi à faire fonctionner la macro parcontre il m'enregistrer tout les fichier sous le même nom prénom ,ce qui fait que jai qu'un 1 seul document d'enregistrer sur 5 .

Peux tu m'aider ? Je voudrais que quand il passe à la page 2 il enregistre le document sous ce nom. Car la boucle ne prend en compte que le 1er enregistrement.

Merci d'avance.
Cordialement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
m@rina Messages postés 20947 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 28 septembre 2024 11 329
16 juil. 2020 à 19:28
Oui, désolée, mais effectivement la variable Nom doit bien sûr être mise dans la boucle.

For x = 1 To ActiveDocument.Sections.Count - 1
Set R = ActiveDocument.Sections(x).Range: R.End = R.End - 1
R.Copy
Documents.Add Template:="...monmodele.dotx"
Selection.Paste
'Mettez ici le nom complet du dossier où vous souhaitez récupérer les documents
chemin = "C:\..."
nom = ActiveDocument.Paragraphs(2).Range.Words(3)
With ActiveDocument
.SaveAs FileName:=chemin & nom & ".docx"
.Close
End With
Next x


m@rina
0