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 :

Publipostage individuel PDF - Problème VBA [WD-2010]


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Novembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Publipostage individuel PDF - Problème VBA
    Bonjour à tous,

    Je suis confrontée à un problème que je n'ai pas résolu en parcourant les différentes discussion sur le sujet.
    Je tente d'automatiser la génération en PDF d'avenants de contrat (individuels) via une base de donnée excel (500 personnes) et un word en publipostage.
    J'ai utiliser la programmation VBA ci dessous (je suis débutante). J'ai alors un message d'erreur 3651"Impossible de fusionner ... enregistrements tous vides ou aucun enregistrement de répondait à vos options de requête" avec un stop sur .Execute.

    Je suis bloquée et j'ai vérifié mes champs excel/word, ma selection de destinataires, les apperçus et la manip à la main fonctionnent. Est ce que quelqu'un aurait une piste?

    Merci pour votre aide

    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
    Sub TestPDF()
    'Déclaration 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
            'Premier & dernier enregistrement
            .DataSource.FirstRecord = i
            .DataSource.LastRecord = i
            'Envoi dans un nouveau doc
            .Destination = wdSendToNewDocument
            .Execute
            'Actualisation de l'enregistrement pour la sauvegarde
            .DataSource.ActiveRecord = i
            docName = .DataSource.DataFields(7).Value
            docName = docName & .DataSource.DataFields(8) & "Avenant télétravail"
            Debug.Print docName; i
        End With
        With ActiveDocument
            .SaveAs "C:\Users\MONID\BOITE\SERVICE (Grp. O365) - Documents\Télétravail\Avenants pour envoi\" & docName & ".pdf", wdExportFormatPDF
            .Close
        End With
    Next i

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

    Essayez ce code, pas testé :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    Sub TestPDF()
     
    'Déclaration variables
    Dim IR As Integer, I As Integer
    Dim DocName As String, RepertoireDestination As String
    Dim oDoc As Document
    Dim oDS As MailMergeDataSource
     
        RepertoireDestination = "C:\Users\MONID\BOITE\SERVICE (Grp. O365) - Documents\Télétravail\Avenants pour envoi\"
     
        '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
     
                    'Premier & dernier enregistrement
                    .DataSource.FirstRecord = I
                    .DataSource.LastRecord = I
     
                    'Envoi dans un nouveau doc
                    .Destination = wdSendToNewDocument
                    .Execute
     
                    'Actualisation de l'enregistrement pour la sauvegarde
                    With .DataSource
                         .ActiveRecord = I
                         DocName = .DataFields(7) & .DataFields(8) & "Avenant télétravail"
                         Debug.Print DocName; I
                    End With
     
                    With ActiveDocument
                       .ExportAsFixedFormat OutputFileName:= _
                       RepertoireDestination & DocName & ".pdf", ExportFormat:=wdExportFormatPDF, _
                       OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
                       wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent, _
                       IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
                       wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
                       True, UseISO19005_1:=False
                       .Close savechanges:=wdDoNotSaveChanges
                    End With
     
            End With
     
     
        Next I
     
     
        Set oDoc = Nothing
        Set oDS = Nothing
     
    End Sub

  3. #3
    Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Novembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour Eric,
    Malheureusement cela m'affiche le même message d'erreur

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LouRiche Voir le message
    Ce code fonctionne, il faudrait vérifier votre base de données. Si vous en avez la possibilité mettez un exemple non confidentiel en ligne dans un fichier .zip.

  5. #5
    Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Novembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Ce code fonctionne, il faudrait vérifier votre base de données. Si vous en avez la possibilité mettez un exemple non confidentiel en ligne dans un fichier .zip.
    Télétravail.7z

    Il me semblait bien que le code n'était pas le problème ... mais je ne vois pas le problème ailleurs non plus.

    J'ai fait une version non confidentielle (qui ne fonctionne pas non plus chez moi).
    Après, parmi mes hypothèses: je suis sur windows 2010 et mes documents sont sur un dossier synchronisé onedrive/sharepoint. Est ce que cela pourrait jouer?

    Merci beaucoup

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LouRiche Voir le message
    Je n'arrive pas à ouvrir votre fichier. Dans l'explorateur Windows, clic droit sur le fichier et Envoyer sur dossier compressé.

  7. #7
    Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Novembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Je n'arrive pas à ouvrir votre fichier. Dans l'explorateur Windows, clic droit sur le fichier et Envoyer sur dossier compressé.
    TestAvenantNC.zip
    C'est bon ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LouRiche Voir le message
    J'ai supprimé le data source du fichier word, j'ai dupliqué la base de donnée et j'ai rendu plus clairs les civilités, noms, prénoms.

    Dans le code, il vous faut prendre les champs 6 et 7 au lieu des 7 et 8. Vous trouverez les résultats dans le zip. J'ai le même message que vous avec la base d'origine. Le publipostage à bien fonctionné avec le deuxième fichier.

  9. #9
    Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Novembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour Eric,

    Merci beaucoup pour ce retour. Après avoir épluché les cas ou cela fonctionne et les autres, je me rends compte qu'une variable fait planter l'action : si les destinataires sélectionnés ne sont pas à la suite et au début de l'excel alors cela ne fonctionne pas.
    Ex : les lignes 1,2 et 3 sélectionnées => fonctionne
    1,4 et 6 sélectionné => seulement la ligne 1 est enregistrée en PDF
    3,4 et 5 => Aucune ne sort : tout de suite message d'erreur.

    Est ce qu'il y a quelque chose à faire côté code ou je dois forcément recopier les lignes que je veux feuille 2 pour ne pas avoir à sélectionner les destinataires ?

    J'ai trouvé une solution : ne pas sélectionner dans Excel les destinataire mais les filtrer à partir d'une colonne, alors tout fonctionne. MERCI BEAUCOUP ERIC !
    Merci à vous

  10. #10
    Invité
    Invité(e)
    Par défaut Publipostage en pdf avec sélection partielle
    Citation Envoyé par LouRiche Voir le message
    Après de nombreux essais...
    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
    50
    51
    52
    53
    54
    55
    56
    57
     
    Sub PublipostageAvecSelectionPartielle()
     
    Dim DernierEnregistrement As Integer
    Dim DocName As String, RepertoireDestination As String
    Dim oDoc As Document
     
     
        Set oDoc = ActiveDocument
        RepertoireDestination = "D:\Documents\VBA Word\Publipostage\Publipostage 2020-11-16\Repertoire pdf\"  ' Adapter
     
        With oDoc.MailMerge.DataSource
     
             .ActiveRecord = wdLastRecord
             DernierEnregistrement = .ActiveRecord
             .ActiveRecord = wdFirstRecord
     
             Do While .ActiveRecord <> wdLastRecord
     
                .FirstRecord = .ActiveRecord
                .LastRecord = .ActiveRecord
     
                'Debug.Print .ActiveRecord
     
                'Envoi dans un nouveau doc
                With oDoc.MailMerge
                     .Destination = wdSendToNewDocument
                     .Execute
                End With
     
                ' Recherche des nom et prénom dans l'enregistrement pour la sauvegarde
                DocName = .DataFields(6) & .DataFields(7) & "Avenant télétravail"
     
                With ActiveDocument
                       .ExportAsFixedFormat OutputFileName:= _
                       RepertoireDestination & DocName & ".pdf", ExportFormat:=wdExportFormatPDF, _
                       OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
                       wdExportAllDocument, FROM:=1, To:=1, Item:=wdExportDocumentContent, _
                       IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
                       wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
                       True, UseISO19005_1:=False
                       .Close savechanges:=wdDoNotSaveChanges
                 End With
     
                 If .ActiveRecord = DernierEnregistrement Then Exit Do
     
                 .ActiveRecord = wdNextRecord
     
            Loop
     
        End With
     
        Set oDoc = Nothing
     
        MsgBox "Fin du publipostage !", vbInformation
     
    End Sub
    Regardez si cela fonctionne chez vous. Cela permettra de valider le code pour ceux qui en auraient besoin.
    Dernière modification par Invité ; 19/11/2020 à 15h19. Motif: Suppression des variables inutiles.

  11. #11
    Candidat au Club
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Novembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je valide !

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LouRiche Voir le message
    Ok, merci.

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

Discussions similaires

  1. [XL-MAC 2016] Impression PDF en VBA - Problème d'affichage pour les images
    Par Pierrea4564 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/11/2018, 16h43
  2. [XL-MAC 2011] Problème VBA pour enregistrement en Pdf
    Par ArnaudSi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/12/2016, 13h46
  3. Réponses: 2
    Dernier message: 01/06/2011, 00h22
  4. Problème VBA publipostage
    Par faruedde dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 11/09/2008, 19h59
  5. [PDF] Problème
    Par dj_lil dans le forum Documents
    Réponses: 8
    Dernier message: 19/08/2005, 09h44

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