IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

doc word scindé en 1 pdf par page


Sujet :

VBA Word

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut doc word scindé en 1 pdf par page
    Bonjour,

    Imaginons une document Word de 30 pages correspond à autant de formulaires (le concepteur a fait un simple copier/coller, bout à bout, sans introduire de sauts de pages particuliers... Aucun champ de formulaire, par ailleurs).

    Comment créer 30 pdf via une macro, exportés sur le bureau et renommés (par défaut) de 1 à 30 (sachant qu'il n'existe pas de champ de formulaire) ?

    En vous remerciant par avance pour vos lumières,

    Cordialement,
    jp

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message

    Bonjour,

    A mettre dans un module standard et à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Option Explicit
     
    Sub LancerImprimerParPageEnPdf()
     
    Dim I As Integer, Nbpages As Integer
    Dim RepertoireCible As String
     
        Nbpages = ActiveDocument.Range.Information(wdActiveEndPageNumber)
        RepertoireCible = ActiveDocument.Path ' A adapter
     
        For I = 1 To Nbpages
            ImprimerParPageEnPdf RepertoireCible, I
        Next I
     
    End Sub
     
    Sub ImprimerParPageEnPdf(ByVal RepertoireCible2 As String, ByVal PageChoisie As Integer)
     
    Dim NomDuDocument As String
     
        NomDuDocument = RepertoireCible2 & "\Doc " & Format(PageChoisie, "00") & ".pdf"
     
        Application.PrintOut FileName:="", outputfilename:=NomDuDocument, Range:=wdPrintRangeOfPages, Item:= _
            wdPrintDocumentWithMarkup, Copies:=1, Pages:="" & PageChoisie & "", PageType:= _
            wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=True, _
            PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
     
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour Eric,

    Merci beaucoup.

    Les PDF sont parfaitement générés (ce qui ne te surprendra pas) mais j'obtiens un message d'erreur car j'utilise Adobe Acrobat Reader DC sur le PC que j'ai sous la main à cette heure...
    Y a-t-il un moyen de contourner ce problème ?
    Nom : erreur pdf.jpg
Affichages : 86
Taille : 44,7 Ko

    Cordialement,
    jp

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    J'ai généré le code avec l'enregistreur de macro. Tu pourrais essayer de ton côté de générer une macro pour enregistrer les séquences d'impression d'une page particulière et de mettre le résultat en ligne pour voir s'il y a une différence. Nb : Le nom de sauvegarde n'aura pas d'importance. Regarde avant si le résultat est lisible sur ton poste...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    J'oubliais, est-ce que l'imprimante en cours est calée sur Microsoft Print To Pdf ? Chez-moi c'est l'imprimante pas défaut.

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    est-ce que l'imprimante en cours est calée sur Microsoft Print To Pdf
    Non, elle ne l'était pas par défaut

    Sur mon premier essai (4 pages) c'est parfait.
    Sur un autre fichier de 54 pages,
    * Nbpages prend bien en compte les 54 pages
    * RepertoireCible prend bien en compte le répertoire créé

    Mais la macro me génère 2 pdf uniquement (qui intègrent l'ensemble des pdf) !
    Nom : erreur pdf 2.jpg
Affichages : 116
Taille : 20,3 Ko

    Cdt

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    Que contient le fichier de 54 pages ? Un ou des tableaux ?
    Si vous avez la possibilité de mettre en ligne votre fichier, je peux regarder ce que cela donne chez moi.

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Un même texte (avec logo + un nom différent sur chaque page), dupliqué 54 fois et chacune des pages se termine par "Saut de section (page suivante)"

    Le contenu ne me permet pas de le faire suivre, même en MP.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    Essayez avec un DoEvents dans la boucle comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Sub LancerImprimerParPageEnPdf()
     
    Dim I As Integer, Nbpages As Integer
    Dim RepertoireCible As String
     
        Nbpages = ActiveDocument.Range.Information(wdActiveEndPageNumber)
        RepertoireCible = ActiveDocument.Path ' A adapter
     
        For I = 1 To Nbpages
            ImprimerParPageEnPdf RepertoireCible, I
            DoEvents
        Next I
     
    End Sub

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Idem

    Si j'exécute le code pas à pas avec F8, je vois que les deux premiers PDF apparaissent bien dans le répertoire de destination mais après, plus rien même si la variable I continue de s'incrémenter.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    Regardez comment fonctionne mon document sur votre poste. Si vous récupérez bien 6 documents : OK.
    Si OK, faites un copier coller de votre document sur le mien et recommencez la manip.

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Les 6 PDF sont bien générés.

    J'ai donc fait un copier/coller dans ce nouveau classeur (avec les 2 options : "Utiliser le thème de destination" et ensuite "Conserver la mise en forme source") et le résultat est encore 2 PDF.

    La seule différence que je vois entre les 2 fichiers, c'est qu' :

    au bas du tien, je vois
    Nom : saut de page.jpg
Affichages : 76
Taille : 4,3 Ko

    au bas du "mien", je vois
    Nom : page suivante.jpg
Affichages : 73
Taille : 7,9 Ko

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    OK, les pages 5 et 6 sont en fait des sauts de section que j'ai désolidarisés.
    As tu la possibilité de m'envoyer la trame de ton fichier sur 6 pages en enlevant tout ce qui est confidentiel ?
    J'ai pensé qu'il pouvait y avoir des caractères insécables (j'écris peut-être n'importe quoi), mais justement il faudrait avoir un exemple pour vérifier.

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Je vais essayer ; ici ou en MP ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    S'il n'y a rien de confidentiel, tu peux le mettre ici.

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Je pense avoir enlevé tout ce qui était confidentiel mais dans le doute, est-il possible que j'envoie le classeur en MP (et si oui, comment fait-on ?)

    Je viens d'essayer avec cette version "light" et le problème persiste : ça génère 1 seul PDF (contrairement à 2 auparavant)

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    Je viens d'envoyer mon adresse en MP.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jpma75 Voir le message
    Il faut travailler par section et imprimer la sélection en cours en écartant le saut de section (saut de page) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Option Explicit
     
    Sub LancerImprimerParSectionEnPdf()
     
    Dim I As Integer
    Dim RepertoireCible As String
    Dim MonRange As Range
     
        RepertoireCible = ActiveDocument.Path ' A adapter
     
        With ActiveDocument
             For I = 1 To .Sections.Count
                 With .Sections(I)
                      .Range.Select
                      Set MonRange = Selection.Range
                      MonRange.SetRange Start:=MonRange.Start, End:=MonRange.End - 2
                      MonRange.Select
                      ImprimerParSectionEnPdf RepertoireCible, I
                      Set MonRange = Nothing
                 End With
             Next I
        End With
     
        MsgBox "Fin de traitement !", vbInformation
     
     
    End Sub
     
     
    Sub ImprimerParSectionEnPdf(ByVal RepertoireCible2 As String, ByVal PageChoisie As Integer)
     
    Dim NomDuDocument As String
     
        NomDuDocument = RepertoireCible2 & "\Version suivi " & Format(PageChoisie, "00") & ".pdf"
     
        Application.PrintOut FileName:="", outputfilename:=NomDuDocument, Range:=wdPrintSelection, Item:= _
            wdPrintDocumentWithMarkup, Copies:=1, PageType:=wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=True, _
            PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0
     
    End Sub

  19. #19
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    wow !! 28''49 pour imprimer les 54 PDF !

    Merci beaucoup pour ta patience et l'efficacité de ton code !

    C'est la première fois que j'utilise du VBA pour Word (habituellement sur Excel) ; je vais donc me pencher sur ce code (pour l'instant un peu abscons) car par principe, et par respect pour les contributeurs, je mets un point d'honneur à comprendre ce que l'on a pris la peine de m'expliquer.

    En attendant, un très grand merci !!
    Cordialement,
    jp

  20. #20
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 593
    Points : 153
    Points
    153
    Par défaut
    Bonjour,

    Je pensais ajouter Application.ScreenUpdating = False pour éviter l'affichage intermédiaire des PDF, mais mes différents essais ne sont pas efficients.
    Rappel du code, si l'un de vous a une idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Option Explicit
    Sub LancerImprimerParSectionEnPdf()
    Dim I As Integer
    Dim RepertoireCible As String
    Dim MonRange As Range
     
        RepertoireCible = ActiveDocument.Path ' A adapter
        Application.ScreenUpdating = False
        With ActiveDocument
             For I = 1 To .Sections.Count
                 With .Sections(I)
                      .Range.Select
                      Set MonRange = Selection.Range
                      MonRange.SetRange Start:=MonRange.Start, End:=MonRange.End - 2
                      MonRange.Select
                      ImprimerParSectionEnPdf RepertoireCible, I
                      Set MonRange = Nothing
                 End With
             Next I
        End With
     
        MsgBox "Fin de traitement !", vbInformation
     
    End Sub
    Sub ImprimerParSectionEnPdf(ByVal RepertoireCible2 As String, ByVal PageChoisie As Integer)
    Dim NomDuDocument As String
     
        NomDuDocument = RepertoireCible2 & "\Agent " & Format(PageChoisie, "00") & ".pdf"
     
    '    Application.ScreenUpdating = False
    '
        Application.PrintOut _
            FileName:="", _
            outputfilename:=NomDuDocument, _
            Range:=wdPrintSelection, _
            Item:=wdPrintDocumentWithMarkup, _
            Copies:=1, _
            PageType:=wdPrintAllPages, _
            Collate:=True, _
            Background:=True, _
            PrintToFile:=True, _
            PrintZoomColumn:=0, _
            PrintZoomRow:=0, _
            PrintZoomPaperWidth:=0, _
            PrintZoomPaperHeight:=0
     
            Application.ScreenUpdating = True
     
    End Sub
    En vous remerciant par avance pour d'éventuelles propositions,
    Cdt
    jp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2016] créer un pdf par page d'état
    Par dodo28 dans le forum IHM
    Réponses: 6
    Dernier message: 25/03/2019, 15h04
  2. [XL-2010] VBA impression d'un TCD avec un pdf par page
    Par olvrteil dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/11/2015, 15h19
  3. Réponses: 6
    Dernier message: 28/04/2015, 12h29
  4. Un fichier PDF par page/itération
    Par sadok.m dans le forum Reports
    Réponses: 2
    Dernier message: 03/09/2013, 10h45
  5. Transférer doc word et excel en pdf
    Par benjisan dans le forum Access
    Réponses: 3
    Dernier message: 12/07/2007, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo