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

  1. #1
    Futur Membre du Club
    Publipostage : Impression en PDF avec une page par fichier
    Bonjour à tous,

    Je viens demander votre aide sur un souci avec Word.

    Je fais un publipostage (Excel- Word) pour faire les ordres de missions des collaborateurs. Auparavant je les imprimais et je leur donnais mais auujourd'hui nous avons décidé de ne plus les faire en format papier. Une fois le publipostage fait il faut envoyer à chaque personne son ordre de mission par mail au format PDF.
    Je souhaiterais donc pouvoir imprimer en PDF les ordres de mission (1 par personne). Seulement je ne sais pas comment faire pour faire un fichier PDF par ordre de mission en une seule manipulation. Il y en a 130 donc j'aimerais éviter de faire 130 tri

    J'ai mis en pièce-jointe le document type de l'ordre de mission.
    Est ce que j'ai été claire?
    Est ce que quelqu'un aurait une idée?

  2. #2
    Rédacteur/Modérateur

    Salut,

    il faut passer par du VBA pour n'avoir qu'un fichier par enregistrement.

    On a alors deux options, une où l'on scinde le fichier obtenu puisque chaque enregistrement est séparé par un saut de page, soit on génére un fichier par enregistrement lors du publipostage.

    http://heureuxoli.developpez.com/off...ipostage/#L7-G

    c'est à toi de voir.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Futur Membre du Club
    Bonjour,

    Désolé pour la réponse tardive...

    Alors à choisir je préfèrerais un fichier par enregistrement. En effet avec le saut de page je risque d'avoir un problème si l'enregistrement prend plus d'une page.

    J'ai regardé le lien que tu as mis. J'ai trouvé lapartie corespondant à ce que je cherche.

    Est ce que je dois y apporter des modifications une fois que je l'ai copiée dans VBA?

  4. #4
    Rédacteur/Modérateur

    Salut,

    Oui, dans l'exemple, je fais une sauvegarde dans un fichier Word, ilfaut modifier le format du fichier de sauvegarde pour que ce soit un PDF.

    Il faut aussi adapter le code en fonction de tes champs de données.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Futur Membre du Club
    Salut,

    Je débute vraiement en VBA (à part faire de l'enregistrement de macro je n'ai rien fais d'autre...)
    A quels endroits je dois changer les champs? Pour le .pdf j'ai trouvé pas de souci mais pour le reste je ne sais pas trop.

  6. #6
    Rédacteur/Modérateur

    Salut,

    Dans ce code,
    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
    Sub TestPublipost()
    ' Déclaration des variables
    Dim iR As Integer
    Dim i As Integer
    Dim oDoc As Document
    Dim DocName As String
    Dim oDS As MailMergeDataSource
     
    ' Affectation des objets
    Set oDoc = ActiveDocument
    Set oDS = oDoc.MailMerge.DataSource
     
    iR = MailMerge.DataSource.RecordCount
    Debug.Print iR
    For i = 1 To iR
        With oDoc.MailMerge
        	'Définition du premier et dernier enregistrement
            .DataSource.FirstRecord = i
     
            .DataSource.LastRecord = i
            ' Envoi des données dans un nouveau document
            .Destination = wdSendToNewDocument
            ' Exécution du publipostage
            .Execute
            ' Actualisation de l'enregistrement pour la sauvegarde
            .DataSource.ActiveRecord = i
            'Utilisation de deux champs pour obtenir le nom du document
            DocName = .DataSource.DataFields(2).Value
            DocName = DocName & "-" & .DataSource.DataFields(3).Value
            Debug.Print DocName; i
        End With
    	' Sauvegarde du document publiposté
        With ActiveDocument
            .SaveAs "c:\temp\" & DocName & ".doc"
            .Close
        End With
    Next i
    End Sub


    j'utilise ces deux lignes :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
            DocName = .DataSource.DataFields(2).Value
            DocName = DocName & "-" & .DataSource.DataFields(3).Value

    pour définir le nom à donner au fichier.

    C'est à toi de voir quels sont le ou les champs qui seront utilisés pour donner un nom à tes fichiers.

    Il semblerait que cette ligne :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    iR = MailMerge.DataSource.RecordCount

    pose parfois problèle, si c'est le cas, il faut la modifier par celle-ci
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    iR = oDoc.MailMerge.DataSource.RecordCount
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Futur Membre du Club
    Merci pour les infos :

    Je pensais avoir fait les modifs commetu me l'as indiqué mais qand j'exécute la macro rien ne se passe.

    Je mets le code avec mes modifs j'ai du louper quelque chose ( je suis pas très douée décidément )
    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
    Sub TestPublipost()
    ' Déclaration des variables
    Dim iR As Integer
    Dim i As Integer
    Dim oDoc As Document
    Dim DocName As String
    Dim oDS As MailMergeDataSource
     
    ' Affectation des objets
    Set oDoc = ActiveDocument
    Set oDS = oDoc.MailMerge.DataSource
     
    iR = oDoc.MailMerge.DataSource.RecordCount
    Debug.Print iR
    For i = 1 To iR
        With oDoc.MailMerge
            'Définition du premier et dernier enregistrement
            .DataSource.FirstRecord = i
     
            .DataSource.LastRecord = i
            ' Envoi des données dans un nouveau document
            .Destination = wdSendToNewDocument
            ' Exécution du publipostage
            .Execute
            ' Actualisation de l'enregistrement pour la sauvegarde
            .DataSource.ActiveRecord = i
            'Utilisation de deux champs pour obtenir le nom du document
            DocName = .DataSource.DataFields(2).Value
            DocName = DocName & "Nom" & .DataSource.DataFields(3).Value
            Debug.Print DocName; i
        End With
        ' Sauvegarde du document publiposté
        With ActiveDocument
            .SaveAs "K:\RH - Gestion du Personnel\Ordre de Mission\OM 2011 maj indémnités\TEST PDF" & DocName & ".pdf"
            .Close
        End With
    Next i
    End Sub


    Est ce que tu vois où est ce que j'ai fais une erreur?

  8. #8
    Rédacteur/Modérateur

    Salut,

    il faut que le document de publipostage soit le document actif.

    Dans la fenêtre exécution, il devrait y avoir le nom du document pour chaque enregistrement.

    As-tu reçu un message d'erreur ?
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Futur Membre du Club
    En fait j'ouvre le document Word, je vais dans l'onglet developpeur - Macro - Je selectionne la macro - Executer et rien ne se passe pas de message d'erreur rien

  10. #10
    Rédacteur/Modérateur

    Salut,

    Pas de sablier ?

    Les fichiers sont peut-être générés !
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  11. #11
    Futur Membre du Club
    La situtation a évolué (j'avais un souci avec ma base Excel).

    Donc la macro commence bien mais au moment de l'exécution de la ligne ci dessous
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    .SaveAs "K:\RH - Gestion du Personnel\Ordre de Mission\OM 2011 maj indémnités\TEST PDF" & DocName & ".pdf"


    le message d'erreur suivant apparait :

    Erreur d'éxécution 5152
    "Nom de fichiers non valide"

    Est ce que c'est du au fait que je ne fasse pas un enregistrement en /temp?

  12. #12
    Futur Membre du Club
    J'avance petit à petit j'avance :

    Le message d'erreur n'apparait plus (je ne sais pas trop pourquoi mais bon... )

    Par contre il reste 2 petits soucis :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     With ActiveDocument
            .SaveAs "K:\RH - Gestion du Personnel\Ordre de Mission\OM 2011 maj indémnités\OMPDF" & DocName & ".pdf"
            .Close


    Après l'éxécution de cette ligne de code, mon enregistrement est enregistré mais dans le dossier OM 2011 maj indémnités. il est nommé OMPDF + le nom donné plus haut dans le code et en .pdf.
    Don en fait il s'enregistre pas au bon endroit et en plus quand je vais pour ouvrir le fichier en pdf cela me donne le message d'erreur suivant :

    "Adobe reader n'a pas pu ouvrir le document car le type de fichier n'est pas pris en charge ou il est endommagé"

    Alors là du coup je sèche....

  13. #13
    Membre expert
    Bonjour,

    Essaye d'enregistrer un document en PDF avec exportasFixedFormat.
    Tu peux faire le test en enregistrant une macro qui sauvegarde le fichier.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    .ExportAsFixedFormat OutputFileName:= _
            nom_complet_fichier ("K:..." & docname & ".pdf"), ExportFormat:= _
            wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
            wdExportOptimizeForPrint, Range:=wdExportAllDocument, from:=1, To:=1, _
            Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
            CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
            BitmapMissingFonts:=True, UseISO19005_1:=False


    En rouge, ce que tu dois asapter le chemin du fichier et son nom
    en bleu, les commentaires ou exemples
    En vert, les options qu'il peut être intéressant de changer, garder les signets par exemple là.

    le message d'erreur suivant apparait :

    Erreur d'éxécution 5152
    "Nom de fichiers non valide"
    Que contient la colonne identifiant le nom, n'y a t'il pas un caractère interdit du genre "/" ou "*" pour un nom de fichier?
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  14. #14
    Futur Membre du Club
    Cette macro ne fonctionne pas non plus :

    "L'exportation à echoué car cette fonctionalité n'est pas installée"

    Une petite question, on ne pourrait pas passer par l'impression en pdf?

  15. #15
    Futur Membre du Club
    Oupsss pardon Bonjour Carden je n'avais pas vu que ce n'était pas la même personne désolé.

  16. #16
    Futur Membre du Club
    Pour la colone identifiant les Noms il n'y a que des noms de famille tous écris en majuscule.

  17. #17
    Futur Membre du Club
    C'est bon en fait j'ai vu avec un de mes collègues.

    Le souci venait du fait qu'il me manquait le module pour transformer en les Wrd en PDF.

    J'ai testé la macro sur un PC qui l'a et tout marche!

    Je vous remercie beaucoup!

  18. #18
    Rédacteur/Modérateur

    Citation Envoyé par nesumi Voir le message
    Cette macro ne fonctionne pas non plus :

    "L'exportation à echoué car cette fonctionalité n'est pas installée"

    Une petite question, on ne pourrait pas passer par l'impression en pdf?
    Salut,

    Oui, tu peux imprimer en pdf, mais les obstacles seront plus nombreux encore.
    Il faut dans ce cas en plus de piloter Word, piloter l'imprimante.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  19. #19
    Candidat au Club
    Bonjour à tous,

    je suis actuellement dans sur du vba pour développer un projet similaire à Nesumi.
    La macro proposée est parfaite sauf que j'ai un bug dès qu'il faut transformer le word en pdf. Je suis assez débutante dans cette belle langue de VBAiste

    Je ne sais pas où mettre ce code

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    .ExportAsFixedFormat OutputFileName:= _
            nom_complet_fichier ("K:..." & docname & ".pdf"), ExportFormat:= _
            wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
            wdExportOptimizeForPrint, Range:=wdExportAllDocument, from:=1, To:=1, _
            Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
            CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
            BitmapMissingFonts:=True, UseISO19005_1:=False


    Dans

    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
    Sub TestPublipost()
     
    ' Déclaration des variables
    Dim iR As Integer
    Dim i As Integer
    Dim oDoc As Document
    Dim DocName As String
    Dim oDS As MailMergeDataSource
     
    ' Affectation des objets
    Set oDoc = ActiveDocument
    Set oDS = oDoc.MailMerge.DataSource
     
    iR = oDoc.MailMerge.DataSource.RecordCount
    Debug.Print iR
    For i = 1 To iR
        With oDoc.MailMerge
            'Définition du premier et dernier enregistrement
            .DataSource.FirstRecord = i
     
            .DataSource.LastRecord = i
            ' Envoi des données dans un nouveau document
            .Destination = wdSendToNewDocument
            ' Exécution du publipostage
            .Execute
            ' Actualisation de l'enregistrement pour la sauvegarde
            .DataSource.ActiveRecord = i
            'Utilisation de deux champs pour obtenir le nom du document
            DocName = .DataSource.DataFields(9).Value
            'DocName = DocName & "-" & .DataSource.DataFields(3).Value
            Debug.Print DocName; i
     
        End With
        ' Sauvegarde du document publiposté
        With ActiveDocument
            .SaveAs "C:\Documents and Settings\corate92\Bureau\" & DocName & ".doc"
            .Close
        End With
    Next i
    End Sub


    Je suis un peu perdue

    Merci à tous pour ce forum!

  20. #20
    Rédacteur/Modérateur

    Salut,

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        With ActiveDocument
            .SaveAs "C:\Documents and Settings\corate92\Bureau\" & DocName & ".doc"
            .Close
        End With

    Ces lignes de code permettent la sauvegarde du fichier en document, si tu utilises ta ligne de code à la place de .saveAs, ça devrait le faire.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !