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 Access Discussion :

Publipostage vers un nouveau document [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Points : 129
    Points
    129
    Par défaut Publipostage vers un nouveau document
    Bonjour à tous, comment allez-vous par cette belle journée de Vendredi ?

    J'ai un petit problème qui me bloque les portes du week-end, alors si vous pouviez me donner un coup de pouce

    Voici le problème :
    Je souhaite éxécuter un publipostage depuis Access à partir d'un modèle de document Word que j'ai déjà créé bien comme il faut.
    Le document fait 2 pages et j'aimerais que chaque document personnalisé grâce au publipostage s'enregistre avec un nom personnalisé aussi.
    Le résultat attendu serait donc d'avoir par exemple 5 documents de 2 pages (s'il y a 5 destinataires) enregistrés dans un répertoire sous la forme : abc.doc, def.doc, ghi.doc, jkl.doc, mno.doc
    Problème en envoyant vers un nouveau document, tout ce met à la suite du même document m'enregistrant donc un seul document de 10 pages nommé abc.doc
    Voici le code VBA concernant mon publipostage :
    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
     
    Set wdApp = New Word.Application
    wdApp.Visible = True
    Set wdDoc = wdApp.Documents.Open("E:\MonDocument.doc")
    With wdDoc.MailMerge
              .OpenDataSource Name:="E:\MaBase.mdb", SQLStatement:="SELECT * FROM [MaTable] ORDER BY [Nom];"
              .Destination = wdSendToNewDocument
              .SuppressBlankLines = True
              .Execute
              id = .DataSource.DataFields("ID").Value
    End With
    With ActiveDocument
              .SaveAs "E:\Publipostage\" & id & ".doc"
              .Close
    End With
    wdDoc.Close False
    Set wdDoc = Nothing
    wdApp.Quit
    Set wdApp = Nothing
    Je sens que la réponse est toute bête, mais j'ai pas trouvé dans la FAQ et les tutos, alors merci d'avance à ceux qui pourront m'aider

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Points : 129
    Points
    129
    Par défaut
    Je vois que mon problème n'a encore suscité aucune réaction.
    Si le problème n'est pas clair ou si un point reste flou dîtes le moi surtout

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Points : 129
    Points
    129
    Par défaut
    Bon après avoir parcouru une nouvelle fois le tuto de Heureux-oli, j'ai changé un peu mon code.
    Le problème maintenant c'est qu'il ne trouve aucun enregistrement dans la source de données.

    Voici le 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
     
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim i, iR As Integer
    Dim docName As String
     
    [...]
     
    Set wdApp = New Word.Application
    wdApp.Visible = True
    Set wdDoc = wdApp.Documents.Open("E:\MonDocument.doc")
    iR = wdDoc.MailMerge.DataSource.RecordCount
    For i = 1 To iR
              With wdDoc.MailMerge
                        .DataSource.FirstRecord = i
                        .DataSource.LastRecord = i
                        .Destination = wdSendToNewDocument
                        .Execute
                        .DataSource.ActiveRecord = i
                        docName = .DataSource.DataFields("ID").Value
              End With
              With ActiveDocument
                        .SaveAs "E:\Publipostage\" & docName & ".doc"
                        .Close
              End With
    Next i
    wdDoc.Close False
    Set wdDoc = Nothing
    wdApp.Quit
    Set wdApp = Nothing
    Voilà, j'ai bien essayé d'ouvrir la source de données avant de définir iR grâce à OpenDataSource (au cas où il ne trouverai pas directement la source du document) mais rien n'y fait, arrivé à la boucle, il ne la parcours pas car iR = -1

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 74
    Points : 129
    Points
    129
    Par défaut
    Ayé j'ai trouvé !

    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
     
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim i As Integer
    Dim docName As String
    Dim rst As Recordset
     
    [...]
     
    Set wdApp = New Word.Application
    wdApp.Visible = True
    Set wdDoc = wdApp.Documents.Open("E:\MonDocument.doc")
    For i = 1 To rst.RecordCount
              With wdDoc.MailMerge
                        .OpenDataSource Name:="E:\MaBase.mdb", SQLStatement:="SELECT * FROM [MaTable];"
                        .DataSource.FirstRecord = i
                        .DataSource.LastRecord = i
                        .Destination = wdSendToNewDocument
                        .Execute
                        .DataSource.ActiveRecord = i
                        docName = .DataSource.DataFields("ID").Value
              End With
              With ActiveDocument
                        .SaveAs "E:\Publipostage\" & docName & ".doc"
                        .Close
              End With
    Next i
    rst.Close
    Set rst = Nothing
    wdDoc.Close False
    Set wdDoc = Nothing
    wdApp.Quit
    Set wdApp = Nothing
    Comme j'avais un recordset ouvert sur la table qui me sert au publipostage pendant tout le programme, plutôt que de le fermer juste avant je l'ai laissé ouvert pour me permettre d'utiliser le RecordCount comme valeur maximale de i.
    Bien sûr il ne faut pas oublier d'ouvrir la source avec OpenDataSource.

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

Discussions similaires

  1. [WD-2007] Transfert de macro d'un modèle vers un nouveau document
    Par MrPihey dans le forum VBA Word
    Réponses: 4
    Dernier message: 25/06/2014, 10h18
  2. Réponses: 0
    Dernier message: 01/12/2009, 21h29
  3. Publipostage Excel->Word et fusion sur nouveau document
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2007, 16h04
  4. [JDOM] Copie d'un element vers un nouveau document
    Par Le Singe dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 08/03/2006, 12h00

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