Découpe d'un fichier Word selon nombre de pages donné

Signaler
Messages postés
11
Date d'inscription
lundi 12 mars 2012
Statut
Membre
Dernière intervention
21 mars 2012
-
 Palickia -
Bonjour,

Je n'ai vraiment pas un bon niveau en VB et je m'excuse si ma demande ressemble à d'autres à quelques détails près.

Je cherche a découper un résultat de plublipostage. Selon le publipostage que je traite, j'ai parfois besoin de coupe mon fichier toutes les X pages.

Voila la première macro que j'ai trouvé et adapté à mon besoin :
Sub DissocierPage()
   
Dim NomDocDepart As String
Dim j As Long 
Dim Termine As Boolean
Dim PgDepart As Long
Dim Dossier As String, DossierSauvegarde As String
Dim DecouperEn As Integer
Dim NumLigne As Integer, NumMot1 As Integer, NumMot2 As Integer
     
    DecouperEn = InputBox("Combien de page fait le document ?", "Question")
    NumLigne = InputBox("A quelle ligne se situe les Nom/Prénom ?", "Personnalisation du nom de fichier")
    NumMot1 = InputBox("A quelle place se situe le Nom ?", "Personnalisation du nom de fichier")
    NumMot2 = InputBox("A quelle place se situe le Prénom ?", "Personnalisation du nom de fichier")
    
    Application.ScreenUpdating = False
     
    NomDocDepart = ActiveDocument.Name
     
    Dossier = ActiveDocument.Path
    DossierSauvegarde = Dossier & Application.PathSeparator & "Découpe"
    VerifDossier (DossierSauvegarde)
     
    Selection.EndKey Unit:=wdStory
    Selection.HomeKey Unit:=wdStory
    Termine = False
    ChangeFileOpenDirectory DossierSauvegarde
 
    Do While True
            
        PgDepart = Selection.Range.Start
        For j = 1 To DecouperEn
            Application.Browser.Next
        Next
          
        If Selection.Range.Start = PgDepart Then
            Termine = True
            Selection.EndKey Unit:=wdStory
        Else
            Selection.MoveLeft Unit:=wdCharacter, Count:=1
        End If
         
        ActiveDocument.Range(Start:=PgDepart,   End:=Selection.Range.Start).Copy
        Documents.Add NewTemplate:=False
        Selection.Paste
          
        ActiveDocument.SaveAs FileName:=ActiveDocument.Paragraphs(NumLigne).Range.Words(NumMot1) + "_" + _
                                        ActiveDocument.Paragraphs(NumLigne).Range.Words(NumMot2) + _
                                        ".doc", FileFormat:=wdFormatDocument
          
        ActiveDocument.Close
          
        Documents(NomDocDepart).Activate
        If Termine Then Exit Do
         
        Selection.MoveRight Unit:=wdCharacter, Count:=1
    Loop
    Application.ScreenUpdating = True


 
Private Sub VerifDossier(ByVal DossierSauvegarde As String)
    On Error GoTo erreur
    ChDir DossierSauvegarde
    Exit Sub
erreur:
    If Err.Number = 76 Then
        MkDir DossierSauvegarde
        Resume Next
    End If
End Sub

Le problème, c'est que cette macro ne me copie pas les en-têtes et pied de pages.

J'ai donc cherché autre chose et j'ai trouvé cette deuxième macro qui la me copie les en-tête et pied de page, mais me fait une découpe page par page. Voici la macro :
Sub DissocierPage() 'Permet de créer un fichier par page
   Application.Browser.Target = wdBrowseSection

   For i = 1 To ((ActiveDocument.Sections.Count) - 1)

      'Selectionne et copie le texte de la section dans le presse-papier
      ActiveDocument.Bookmarks("\Section").Range.Copy

      'Crée un nouveau document et colle le texte du presse-papier
      Documents.Add
      Selection.Paste

      'Retire le saut de section qui a été copié
      Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
      Selection.Delete Unit:=wdCharacter, Count:=1

     ChangeFileOpenDirectory "C:"
      DocNum = DocNum + 1
     ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
     ActiveDocument.Close
      'section suivante
     Application.Browser.Next
   Next i
   ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub


Alors, j'essai de l'adapter, mais il y a plein de variable/intitulé que je ne comprend pas. Je fais des tests entre mes deux macros, mais je n'arrive pas a obtenir de bon résultat.

Es-ce que quelqu'un saurait m'aider gracieusement s'il vous plaît ?
Merci beaucoup pour le temps que vous prendrez à me répondre.

Cordialement,
Rookiz

7 réponses


Bonjour,

Que veux-tu vraiment faire ?

Si tu veux faire un document global de publipostage puis séparer chaque envoi en fichiers distincts, la seconde macro devrait faire l'ouvrage, si tu ne modifies aucunement le document fusionné après le publipostage. Dans ce cas, si chaque envoi individuel est de cinq pages, chaque nouveau fichier aura cinq pages.

Si tu veux séparer le document fusionné en extraits fixes de, disons, 7 pages et imprimer les entêtes et pieds de pages, là, il faudra penser à autre chose. Si tes envois individuels sont de 5 pages et que tu coupes à 7 pages, tu auras environ un document et demi par fichier.

Ceci dit, quelques commentaires sur les deux macros. Premièrement, ne jamais au grand jamais indiquer un numéro de page, de ligne manuellement avec des InputBox. Les paginations et calculs manuels à partir de l'écran, de même que les sauts de lignes seront bien souvent différents à l'écran et à l'impression. Même que d'imprimer sur des imprimantes différentes peut tout saboter.

La première macro utilise l'objet Selection pour sélectionner une partie, ou l'ensemble du texte. Cependant, l'objet Selection ne peut pas sélectionner les en-têtes et pieds de page.

La deuxième macro permet de sélectionner des sections de document, lesquelles sections sont définies par l'auteur à la rédaction du document. Par définition les sections comprennent les en-têtes et pieds de pages.

Maintenant, comme demandé précédemment : c'est quoi la vraie question ?
Messages postés
11
Date d'inscription
lundi 12 mars 2012
Statut
Membre
Dernière intervention
21 mars 2012

Merci beaucoup cmarcotte pour ton retour et tes explications.

Effectivement, je n'ai peut-être pas été assez clair sur mon besoin final qui est de séparer chaque envoie (d'un fichier publipostage) dans des fichiers distincts.

Je ne modifie pas le fichier publipostage. Je le reçois et effectue la séparation selon le nombre de pages de l'envoi. D'ou mon besoin de spécifier le nombre de page qui varie d'un publipostage à un autre.

Ma première macro fonctionnait plutôt bien (même si comme tu me l'explique, j'y ai fais beaucoup d'erreur), mais je ne récupérait pas les en-tête et pied de page.

J'ai donc trouvé la deuxième macro, mais je n'arrive pas à spécifier le nombre de page de l'envoi.

J'espère que mes explications sont plus clair.
Et merci encore aux intervenants.
Rookiz

Bonjour,

Il n'y rien à ajouter et le nombre de pages n'a AUCUNE importance. L'assistant fusion et publipostage sépare lui-même les envois en sections. Chaque envoi constitue sa propre section. La seconde macro utilise les sections pré-définies pour séparer les envois. Tu appliques la seconde macro telle quelle au document de publipostage, ni plus, ni moins.
Messages postés
11
Date d'inscription
lundi 12 mars 2012
Statut
Membre
Dernière intervention
21 mars 2012

Dans ce cas, c'est mon résultat de publipostage qui n'est pas correct.
J'avais déjà fais le test quand j'ai trouvé la macro et je me retrouvais avec 24 fichiers au lieu de 8. Chaque envoi est decoupé en 3 parties.

Je viens de faire un nouveau test et j'obtiens le meme résultat.

Je ne suis pas le propriétaire des publipostage. Je me contente juste de faire la découpe, donc j'vais avoir du mal à contrôler la manière dont ils sont fait.

Il y a un moyen de controler le nombre de section ?

Bonjour,

Essaie quand même avec cette autre macro avant:

ici.š

D'une manière plus générale tu peux gérer les sections manuellement. Commence par para métrer Word pour afficher tous les caractères. Une fois fait, tu vas voir tous les sauts de section, les tirets et les sauts de pages à l'écran. C'est le seul moyen de contrôler l'édition du document.
Messages postés
11
Date d'inscription
lundi 12 mars 2012
Statut
Membre
Dernière intervention
21 mars 2012

Merci encore cmarcotte, j'ai mieux compris les macros et l'utilisation de section.

Je pense reussir a me débrouiller.

Un grand merci a toi
Bonjour,

J'ai une question concernant la macro commande plus bas. Est-ce possible de faire en sorte que les fichiers soient renommés selon les informations d'un ou de plusieurs champs de fusion contenus dans le document.

---------

Sub DissocierPage() 'Permet de créer un fichier par page
Application.Browser.Target = wdBrowseSection

For i = 1 To ((ActiveDocument.Sections.Count) - 1)

'Selectionne et copie le texte de la section dans le presse-papier
ActiveDocument.Bookmarks("\Section").Range.Copy

'Crée un nouveau document et colle le texte du presse-papier
Documents.Add
Selection.Paste

'Retire le saut de section qui a été copié
Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
Selection.Delete Unit:=wdCharacter, Count:=1

ChangeFileOpenDirectory "C:"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="test_" & DocNum ".doc"
ActiveDocument.Close
'section suivante
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub

---------

Palickia