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

  • Initiateur de la discussion Initiateur de la discussion david54520
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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 !!
 
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 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
 
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

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.
 
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:
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
518
Réponses
2
Affichages
371
Réponses
2
Affichages
836
Retour