Insérer des sauts de pages à la fin de chaque page

slachromana - 12 déc. 2012 à 09:19
 slachromana - 12 déc. 2012 à 16:30
Bonjour,

Mon problème est simple mais je ne lui trouve toujours pas de solution.
J'ai un document Word, je veux insérer un saut de page à la fin de chacune des pages. A priori ce qu'il faut faire, c'est parcourir les pages une à une et insérer un saut de page à la fin du texte. J'ai aussi une contrainte, c'est que dans certaines pages j'ai des sauts de sections. J'ai essayé ce code mais le résultat n'est pas fameux. Déjà le curseur ne va pas automatiquement sur la première page et après les insertions ne sont pas aux bons endroits.

Merci de votre aide :)

Sub saut_de_page()

    Dim curDoc As Document
    Dim str As String
    Dim curHeader As HeaderFooter
    
    Set curDoc = ActiveDocument
    
    curDoc.GoTo what:=gotopage, which:=wdGoToFirst
    
    For i = 1 To curDoc.BuiltInDocumentProperties("Number of pages")
        
        curDoc.Bookmarks("\Page").Select
        str = Selection.text
        Selection.text = str & chr(12)
        Selection.GoTo what:=gotopage, which:=wdGoToNext, Count:=2

    Next

End Sub

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 déc. 2012 à 09:54
Salut

Avant de voir le côté programmation, explique nous pourquoi tu veux doubler ces sauts de page ?
Si le document est déjà découpé en pages, l'ajout d'un nouveau saut de page va donc insérer une page blanche entre chaque page.

Côté programmation, si vraiment tu veux ajouter des pages blanches, je pense qu'il serait judicieux de commencer par la fin du document car, en ajoutant un saut de page, tu vas augmenter le nombre de pages.
Alors le GotoNext/2 va fonctionner (pas sûr), mais tu vas arrêter de faire tes ajouts de Chr$(12) après la page P qui correspond au nombre de pages défini avant de commencer (au moment de la première exécution du For). A priori, ton code ne devrait fonctionner que pour la première moitié du document.
Ce qui donnerait (pas testé) :
    With ActiveDocument
        .GoTo what:=gotopage, which:=wdGoToLast
        For i = .BuiltInDocumentProperties("Number of pages") To 1 Step -1
            .Bookmarks("\Page").Select
            Str = Selection.Text
            Selection.Text = Str & Chr(12)
            Selection.GoTo what:=gotopage, which:=wdGoToPrevious, Count:=2
        Next i
    End With

Chr$(12), c'est un peu basique (ça me rappelle la programmation sur les imprimantes à aiguilles, lol).
Sous Word, l'ajout d'un saut de page se fait avec
Selection.InsertBreak Type:=wdPageBreak
(voir enregistreur de macro)

Je te recommande aussi, avant de faire ces insertions de Chr$(12), de les supprimer de ton doc avant de commencer, car si tu exécutes 2 fois ton code, ça va faire beaucoup de pages blanches ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Merci Jack pour ta réponse :)

Alors mon objectif est très simple. Je travail sur un document word et j'ai plusieurs Macros à lancer. Chacune de ces macros a un traitement spécifique qui consiste généralement à supprimer des parties du documents (paragraphes, mots, caractères) ce qui fait qu'après chaque traitement je ne suis pas sure que chaque page va garder son contenu, peut être qu'elle va recevoir une partie du contenu de la page qui la suit. C'est pourquoi je veux insérer des saut de pages pour être sure que chaque page gardera seulement son contenu à elle.
J'ai testé ta macro, le problème c'est qu'elle ne va pas directement à la dernière page. Il faut mettre le curseur à la dernière page avant de la lancer. Et ça n'a toujours pas donnée de bon résultats.
Le Selection.InsertBreak Type:=wdPageBreak me supprime le contenu de la page, c'est pourquoi j'ai concaténé le texte avec le caractère saut de page.

Je te remercie pour ton aide !
0
Rejoignez-nous