Word VBA WORD - déclaration numéro de page

david54520

XLDnaute Junior
Bonjour

Un petit soucis sur un bout de code VBA pour du WORD, et peut-être que certains d'entre vous savent faire :)

A la base un doc de 200 pages
le besoin : créer un fichier PDF pour chaque page
ci dessous un essai pour les 5 premières pages
mais ...dans l'instruction ....pages:=i.....il ne sait pas faire

sans doute parce qu'il faut déclarer i
j'ai tente un i=pageNumbers....marche pas

bref ....comment déclarer en VBA-Word "numéro de pages"



for i = 1 To 5
' ActivePrinter = "Microsoft Print to PDF"
Application.PrintOut FileName:="", Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentWithMarkup, Copies:=1, Pages:=i, PageType:= _
wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _
PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0
Next i


Merci d'avance aux bonnes âmes qui se pencheront sur cette situation d'un débutant vba word

Bien cordialement, David
 

Staple1600

XLDnaute Barbatruc
Bonsoir

Test OK sur mon PC
(Code à mettre dans le document à traiter)
Les PDF sont générés dans le dossier contenant le document Word.
Le document Word est enregistré avec l'extension *.docm
VB:
Sub Eclater_DOC_WORD()
Dim NB_Pages, I
Dim str_REP$
str_REP = ActiveDocument.Path & "\"
NB_Pages = ActiveDocument.ComputeStatistics(wdStatisticPages)
Application.ScreenUpdating = False
For I = 1 To NB_Pages
            ActiveDocument.ExportAsFixedFormat OutputFileName:= _
               str_REP & "\Page_" & I & ".pdf", ExportFormat:=wdExportFormatPDF, _
                OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
                wdExportFromTo, From:=I, To:=I, Item:=wdExportDocumentContent, _
                IncludeDocProps:=False, KeepIRM:=False, CreateBookmarks:= _
                wdExportCreateHeadingBookmarks, DocStructureTags:=True, _
                BitmapMissingFonts:=False, UseISO19005_1:=False
        Next
End Sub
 

david54520

XLDnaute Junior
Ben non en fait, je n'ai pas attendu, et ca marche impeccable (testé en pas à pas pour quelques pages). Vraiment merci !!
ne faut -il pas un "Application.ScreenUpdating=True" avant le end Sub ?

et si j'abusais un peu
1-est-il possible que le nom du fichier soit les éléments qui sont dans la première ligne de chaque page (première ligne après l'entête). Sur cette ligne on trouve : nom (parfois plusieurs), prénom (parfois composé) et parfois un Mr ou MMe pour débuter la ligne
2- est-il possible de générer un feuille excel avec la liste des 200 premières lignes ( de manière à récupérer les nom, prénom et même le MR ou MME - je pourrais convertir ensuite) ?

Ne pas se tordre l'esprit avec cette demande, c'est au cas où.
Je peux déjà bien avancer avec ce qui a été fait

encore merci !!
 

Staple1600

XLDnaute Barbatruc
Re

ne faut -il pas un "Application.ScreenUpdating=True" avant le end Sub ?
Non ce n'est pas obligatoire

Pour le 1)
Joins un document Word d'une seule page avec des données fictives
(mais respectant la structure originale)

Pour le 2)
Oui, mais je ferais le test avec ton fichier exemple.
 

Staple1600

XLDnaute Barbatruc
Re

En attendant ton fichier, test Ok sur mon fichier de test
Ce code récupère la 1ère phrase de chaque page du document Word (contenant cette macro)
NB: Il est nécessaire d'activer la référence à la librairie Excel dans VBE (*)
VB:
Sub Premiere_Phrase_Page_Vers_Excel()
Dim xlApp As Excel.Application, xlWB As Excel.Workbook
Dim PageCounter&, j&, PageFirstSentence As Range
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
j = 1
Set xlWB = xlApp.Workbooks.Add
For PageCounter = 1 To ActiveDocument.Windows(1).Panes(1).Pages.Count
Set PageFirstSentence = ActiveDocument.Range.GoTo(wdGoToPage, wdGoToAbsolute, PageCounter)
PageFirstSentence.Expand (wdSentence)
PageFirstSentence.SetRange PageFirstSentence.Start, PageFirstSentence.End - 1
xlWB.Worksheets(1).Cells(j, 1) = PageFirstSentence.Text
j = j + 1
Next
End Sub

(*) : Voir sur le net, comment faire cela
 

david54520

XLDnaute Junior
Re

ne faut -il pas un "Application.ScreenUpdating=True" avant le end Sub ?
Non ce n'est pas obligatoire

Pour le 1)
Joins un document Word d'une seule page avec des données fictives
(mais respectant la structure originale)

Pour le 2)
Oui, mais je ferais le test avec ton fichier exemple.

Re

en pièce jointe le doc demande
je pense avoir conserve la structure avec entete avec image et texte
Puis 3 ou 4 ligne de données administratives (dont le premiere ligne que je souhaite récupérer pour le nom du fichier pdf + liste dans une fichier xls
Puis un mélange de texte et d'image et pas de pied de page

merci pour ton appui !!

a+ David
 

Pièces jointes

  • essai_pour_Staple1600_.docx
    80.7 KB · Affichages: 4

Staple1600

XLDnaute Barbatruc
Re

Ici on récupère le 1er paragraphe

NB: La aussi, veiller à que la référence à Excel soit activée
Code:
Sub Premier_Paragraphe_Page_Vers_Excel()
Dim xlApp As Excel.Application, xlWB As Excel.Workbook
Dim PageCounter&, j&, PremPara As Range
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
j = 1
Set xlWB = xlApp.Workbooks.Add
For PageCounter = 1 To ActiveDocument.Windows(1).Panes(1).Pages.Count
Set PremPara = ActiveDocument.Range.GoTo(wdGoToPage, wdGoToAbsolute, PageCounter)
xlWB.Worksheets(1).Cells(j, 1) = PremPara.Paragraphs(1).Range.Text
j = j + 1
Next
End Sub

Les codes VBA proposés répondent peu ou prou au point 2)

Pour le point 1), je m'en occuperai après une nuit de sommeil.

Car demain, j'embauche à 7h27

En attendant, tu as donc deux codes à tester sur ton fichier ;)

Bonne nuit.
 

Staple1600

XLDnaute Barbatruc
Re

Finalement, le temps de me brosser les dents et de boire ma camomille ou plutôt le contraire
J'ai eu le temps de tester ce dernier code
(test OK chez moi: Office 365)
Contexte de test
• Un document Word de 5 pages
• Chaque page commence par un paragraphe de deux mots NOM PRENOM
VB:
Sub Exporter_Nommer_Par_Page_vers_PDF()
Dim i&, Rng As Range
With ActiveDocument
    For i = 1 To .ComputeStatistics(wdStatisticPages)
        Set Rng = .Range.GoTo(What:=wdGoToPage, Name:=i).GoTo(What:=wdGoToBookmark, Name:="\page")
        .ExportAsFixedFormat OutputFileName:=.Path & "\" & Split(Rng.Paragraphs(1).Range.Text, vbCr)(0) & ".pdf", _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, _
        Range:=wdExportFromTo, From:=i, To:=i, Item:=wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=False, _
        CreateBookmarks:=wdExportCreateHeadingBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=False, UseISO19005_1:=False
    Next
End With
End Sub
J'obtiens bien cinq PDF nommés NOM PRENOM.pdf
(Ici le document Word de départ)
exempleW.png
Ci-dessous le résultat obtenu
Export_PDF.PNG

I
 
Dernière édition:

david54520

XLDnaute Junior
Re
une bizarrerie et...bien sûr dirais-je...je n'arrive pas à identifier où se situe le problème dans le code : la liste excel se fait parfaitement bien jusqu'à la 59ème page. puis plus rien

Dans le document word, je n'ai pas vu de chose particulière qui amènerait à un arrêt du process

à l'occasion, je suis preneur d'une explication si tu vois ce qui se passe :)

a+ david
 

Staple1600

XLDnaute Barbatruc
Bonjour,

Vite fait ce petit test
VB:
Sub test()
premier = Split(ActiveDocument.Paragraphs(1).Range.Text, vbCr)(0)
premier = VBA.Replace(VBA.Trim(premier), " ", "$")
patronyme = Split(premier, "$")
nom = patronyme(0)
prenom = patronyme(1)
MsgBox nom & Chr(13) & prenom
End Sub
Pourquoi tout ces espaces supplémentaires dans ton fichier?
....NOM..PRENOM

Sinon, si ce document est le résultat d'un publipostage, il y a plus simple.
On gènére un PDF par page lors de la fusion (fusion que l'on effectue en VBA)

Voir ma propositions dans ce fil

PS: Il y d'autres discussions sur ce thème dans les archives du forum
 

david54520

XLDnaute Junior
Merci JM pour ton investissement

je ne suis malheureusement pas responsable de ce fichier ..... qui a été fait un peu n'importe comment....
Je n'ai pas la main sur le truc
avec tout ce que tu as produit, çà m suffit pour faire ce qua j'ai à faire pour les 200 pages.

il va falloir que j'investigue un peu le VBA word :)

Trés bonne continuation David
 

Discussions similaires

Réponses
2
Affichages
821

Statistiques des forums

Discussions
315 094
Messages
2 116 157
Membres
112 673
dernier inscrit
ìntellisoft