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 :

Utiliser la fonction DataFields("") pour créer des fichiers PDF [WD-365]


Sujet :

VBA Word

  1. #1
    Membre du Club
    Homme Profil pro
    Bureautique générale
    Inscrit en
    Juin 2020
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bureautique générale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 103
    Points : 41
    Points
    41
    Par défaut Utiliser la fonction DataFields("") pour créer des fichiers PDF
    Bonjour,

    Depuis un publipostage Word, je souhaiterais créer des fichiers PDF (en utilisant plusieurs champs de données dans le nom).

    Le publipostage :
    EXCEL (tableau des données) => Word (publipostage) => Enregistrement des documents en PDF

    Outil utilisé :
    Une macro qui permet d'automatiser cette fonction

    Le problème :
    Il manque une information.
    Puisque le champ 'SOCIETE" ne suffit pas à créer tous les fichiers PDF correspondants aux données du tableaux EXCEL.

    Voici l'extrait du VBA que je souhaiterais améliorer afin de finaliser la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docname = .DataFields("SOCIETE").Value & ".pdf"
    Ma question :
    Est il possible d'ajouter un champs en plus de "SOCIETE" afin de compléter-ajouter un autre élément au nom ?

    J'ai fait le tour des forums en testant des macros.
    Maintenant j'ai trouvé la macro qui fonctionne. MAIS : il manque ce petit plus...

    Merci de m'aider à finaliser cette macro ou bien me donner des infos...

    Bonne journée

  2. #2
    Membre du Club
    Homme Profil pro
    Bureautique générale
    Inscrit en
    Juin 2020
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bureautique générale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 103
    Points : 41
    Points
    41
    Par défaut La (presque) macro
    Bonjour,

    J'ai trouvé une macro qui fait le travail du publipostage vers des documents individuels mais au format Word (docx).
    Vraiment bien expliquée (VII-G. Enregistrement de chaque document) :
    https://heureuxoli.developpez.com/of.../publipostage/

    J'ai essayé de modifier pour enregistrer au format PDF... sans réussite...

    Pouvez-vous m'aider à modifier la fin de cette macro, svp?

    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
    Sub PublipostWordtoPDF()
     
    ' 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(7).Value
            DocName = DocName & " " & .DataSource.DataFields(1).Value
            Debug.Print DocName; i
     
        End With
     
        ' Sauvegarde du document publiposté
        With ActiveDocument
            .SaveAs "F:\" & DocName & ".doc"
            .Close
        End With
     
    Next i
    End Sub

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

    Testez :
    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
     
    Sub PublipostWordtoPDF()
     
    ' 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(7).Value
                    DocName = DocName & " " & .DataSource.DataFields(1).Value
                    Debug.Print DocName; i
     
                End With
     
                ' Sauvegarde du document publiposté
                With ActiveDocument
                    .SaveAs2 "F:\" & DocName & ".pdf", fileformat:=wdFormatPDF
                    .Close savechanges:=False
                End With
     
            Next i
     
            Set oDoc = Nothing
            Set oDS = Nothing
     
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    Bureautique générale
    Inscrit en
    Juin 2020
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bureautique générale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 103
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Alors là je dis : "maître vous m'épatez"!
    C'est vraiment impec! GRAND merci!!

    Juste une petite question en guise de "cerise sur le gateau" :
    Est il possible d'insérer au début du nom des fichiers les lettres "OS " dans la partie "'Utilisation de deux champs pour obtenir le nom du document" du code VBA ?

    Je sais : ce n'est pas logique
    Mais en vérifiant le résultat de la macro, je me suis rendu compte que le nom des fichiers n'était pas complet.

    Encore merci d'avoir modifié cette macro.

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

    Remplacez les lignes concernées par celles-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                    With .DataSource
                         ' Actualisation de l'enregistrement pour la sauvegarde
                        .ActiveRecord = i
     
                         'Utilisation de deux champs pour obtenir le nom du document
                         DocName = "OS" & .DataFields(7).Value & " " & .DataFields(1).Value
                         Debug.Print DocName; i
     
                    End With

  6. #6
    Membre du Club
    Homme Profil pro
    Bureautique générale
    Inscrit en
    Juin 2020
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bureautique générale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 103
    Points : 41
    Points
    41
    Par défaut
    Merci pour cette partie modifiée.

    Cependant j'ai le message:

    "Erreur de compilation: Next sans For"
    sur "Next i"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Next i
     
            Set oDoc = Nothing
            Set oDS = Nothing
     
    End Sub

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par PENSEUR33 Voir le message
    Mettez votre code en entier.

  8. #8
    Membre du Club
    Homme Profil pro
    Bureautique générale
    Inscrit en
    Juin 2020
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bureautique générale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 103
    Points : 41
    Points
    41
    Par défaut
    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
    Sub PublipostageLettresPDF()
     
    ' 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
     
                     With .DataSource
                         ' Actualisation de l'enregistrement pour la sauvegarde
                        .ActiveRecord = i
     
                         'Utilisation de deux champs pour obtenir le nom du document
                         DocName = "OS " & .DataFields(7).Value & " " & .DataFields(1).Value
                         Debug.Print DocName; i
                     End With
     
                ' Sauvegarde du document publiposté
                With ActiveDocument
                    .SaveAs2 "D:\" & DocName & ".pdf", fileformat:=wdFormatPDF
                    .Close savechanges:=False
                End With
     
            Next i
     
            Set oDoc = Nothing
            Set oDS = Nothing
     
    End Sub

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par PENSEUR33 Voir le message
    Il manque End With après la ligne 42. Pour mieux contrôler, indentez vos lignes (Les With et les End With sont alignés)

  10. #10
    Membre du Club
    Homme Profil pro
    Bureautique générale
    Inscrit en
    Juin 2020
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bureautique générale
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 103
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Exactement!
    Je n'étais pas assez remonté vers le haut pour trouver ce "With"

    Mille merci

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

Discussions similaires

  1. Fonctions de quoting : str, nrquote, nbrquote
    Par L0007 dans le forum Macro
    Réponses: 8
    Dernier message: 12/11/2010, 14h20
  2. Réponses: 2
    Dernier message: 15/05/2008, 22h26
  3. Réponses: 3
    Dernier message: 27/11/2006, 18h00

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