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 automatique depuis excel


Sujet :

VBA Word

  1. #1
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 305
    Par défaut Publipostage automatique depuis excel
    Bonjour à tous,

    J'ai trouvé la macro ci-dessous qui permet d'automatiser la tâche de publipostage (j'ai cherché longtemps sur le net..j'ai aussi lu toutes tes slides Heureux-oli mais je n'arrive pas trouver laquelle prendre comme macro.)

    J'ai un document principal word et une base de donnée excel (2 onglets : 1 onglet avec la liste des factures fournisseur et un autre onglet avec l'adresse respective de chacun des fournisseurs)

    La macro trouvé sur le net est la suivante et je voudrai l'adapter :

    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
    Public Const wdDefaultFirstRecord = 1
     Public Const wdDefaultLastRecord = -16
     
     
     Sub Publipostage()
     Dim NDXL As String, NDF As String, NDF2 As String, Rep As String
     Dim WordApp As Object ' Word.Application
     Dim WordDoc As Object ' Word.Document
     
         Application.ScreenUpdating = False
     
         NDXL = ActiveWorkbook.Path & "\ESSAI.xlsm"
         NDF = ActiveWorkbook.Path & "\BULL.docx"
         Rep = ActiveWorkbook.Path & "\SousDossier\"
         If Not ExisteRep(Rep) Then MkDir Rep
         NDF2 = Rep & "DocBULL_" & Format(Now(), "yyyymmddhhmm")
     
         Set WordApp = CreateObject("Word.Application")
         WordApp.Visible = False
         Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
         With WordDoc.mailMerge
             .OpenDataSource Name:=NDXL, Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
                 "DBQ=" & NDXL & "; ReadOnly=True;", SQLStatement:="SELECT * FROM [Feuil1$]"
             '.Destination = wdSendToPrinter 'Si besoin de fusion vers l'imprimante
             .suppressBlankLines = True
             With .DataSource
                 .firstRecord = wdDefaultFirstRecord
                 .lastRecord = wdDefaultLastRecord
             End With
             .Execute Pause:=False 'Exécute l'opération de publipostage
         End With
     
         WordDoc.Application.ActiveDocument.SaveAs NDF2
         Set WordDoc = Nothing
         Set WordApp = Nothing
         Application.ScreenUpdating = True
         MsgBox "Publipostage OK"
     End Sub
     
     
     Function ExisteRep(NDF As String) As Boolean
         On Error Resume Next
         ExisteRep = GetAttr(NDF) And vbDirectory
     End Function
    Le seul probleme est que lorsque je lance cette macro, à un moment donné elle bloque à ce niveau là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not ExisteRep(Rep) Then MkDir Rep
    Merci par avance pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Tu veux faire quoi avec cette macro ?
    Elle publiposte chaque enregistrement dans un fichier.
    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
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 305
    Par défaut
    Salut Heureux oli,

    Ce que je veux faire c'est automatiser le publipostage depuis ma base excel avec envoie par mail au format HTML.

    Et du coup je suis un peu perdu.

    Je m'y connais pas trop dans les macros.......

    Merci par avance heureux-oli pour ton aide

    Cordialement

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Pourquoi cette explication :
    J'ai un document principal word et une base de donnée excel (2 onglets : 1 onglet avec la liste des factures fournisseur et un autre onglet avec l'adresse respective de chacun des fournisseurs)
    Qu'as-tu d'autre que le bout de code que tu nous donnes ?
    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
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 305
    Par défaut
    Salut Heureux-oli,

    Cette explication est pour dire que mon publipostage est fait à partir d'un fichier excel comprenant 2 onglets.....(Peut être que c'est important de le mentionner pour le publipostage, après je me trompe peut être)

    Je suis vraiment désolée si je m'exprime mal.....

    Quand tu dis "bout de code", de quoi parles tu? Du code VBA que j'ai trouvé sur le net?

    Merci par avance pour ta précision

    Cordialement

  6. #6
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 305
    Par défaut
    Heureux-Oli,

    J'ai finalement trouvé ton code VBA que j'avais pas vu dans un autre module et que je trouve clair :

    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
    Private Sub commandButton1_Click()
        'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
        Dim docWord As Word.Document
        Dim appWord As Word.Application
        Dim NomBase As String
     
        NomBase = "C:\dossier\labase.xls"
     
        Application.ScreenUpdating = False
        Set appWord = New Word.Application
        appWord.Visible = True
        'Ouverture du document principal Word
        Set docWord = appWord.Documents.Open("C:\leDocument.doc")
     
        'fonctionnalité de publipostage pour le document spécifié
        With docWord.mailMerge
    		'Ouvre la base de données
    		.OpenDataSource Name:= NomBase, _
                Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
                "DBQ=" & NomBase & "; ReadOnly=True;", _
                SQLStatement:="SELECT * FROM [Feuil1$]"
            'Spécifie la fusion vers l'imprimante
            .Destination = wdSendToPrinter
            .suppressBlankLines = True
                'Prend en compte l'ensemble des enregistrements
                With .DataSource
                    .firstRecord = wdDefaultFirstRecord
                    .lastRecord = wdDefaultLastRecord
                End With
            'Exécute l'opération de publipostage
            .Execute Pause:=False
        End With
     
        Application.ScreenUpdating = True
     
        'Fermeture du document Word
        docWord.Close False
        appWord.Quit
    End Sub
    J'ai modifié les éléments suivant pour l'adapter à mon cas :

    J'ai renseigné mes chemins d'accés mais par contre je n'ai pas trop compris quoi remplacer avec les éléments suivants qui apparaissent en violet dans ton module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
                "DBQ=" & NomBase & "; ReadOnly=True;", _
                SQLStatement:="SELECT * FROM [Feuil1$]"
    Est ce que tu peux m'aider stp?

    Merci par avance

  7. #7
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 305
    Par défaut Demande d'aide sur une Macro
    Bonjour à tous,

    Je voudrai utiliser la macro ci-dessous pour effectuer un publipostage automatique depuis excel :

    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
    Private Sub commandButton1_Click()
        'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
        Dim docWord As Word.Document
        Dim appWord As Word.Application
        Dim NomBase As String
     
        NomBase = "C:\dossier\labase.xls"
     
        Application.ScreenUpdating = False
        Set appWord = New Word.Application
        appWord.Visible = True
        'Ouverture du document principal Word
        Set docWord = appWord.Documents.Open("C:\leDocument.doc")
     
        'fonctionnalité de publipostage pour le document spécifié
        With docWord.mailMerge
    		'Ouvre la base de données
    		.OpenDataSource Name:= NomBase, _
                Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
                "DBQ=" & NomBase & "; ReadOnly=True;", _
                SQLStatement:="SELECT * FROM [Feuil1$]"
            'Spécifie la fusion vers l'imprimante
            .Destination = wdSendToPrinter
            .suppressBlankLines = True
                'Prend en compte l'ensemble des enregistrements
                With .DataSource
                    .firstRecord = wdDefaultFirstRecord
                    .lastRecord = wdDefaultLastRecord
                End With
            'Exécute l'opération de publipostage
            .Execute Pause:=False
        End With
     
        Application.ScreenUpdating = True
     
        'Fermeture du document Word
        docWord.Close False
        appWord.Quit
    End Sub
    J'ai renseigné mes chemins d'accés mais par contre je n'ai pas trop compris par quoi je peux remplacer les éléments suivants qui sont en rouge :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
                "DBQ=" & NomBase & "; ReadOnly=True;", _
                SQLStatement:="SELECT * FROM [Feuil1$]"
    Est ce que quelqu'un peut m'aider svp?

    Merci par avance

  8. #8
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à lire et assimiler : Le publipostage Word-Excel

  9. #9
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 305
    Par défaut
    Bonjour Kiki29

    J'ai lu le module et la macro est issue de ce module.

    Je ne suis pas très douée en macro et je n'ai pas tout compris....

  10. #10
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Pour l'envoi, il faut passer par un client de messagerie.

    Si c'est un format html, Word ne sera pas d'une grande utilité.
    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
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 305
    Par défaut
    Salut Heureux-Oli

    Merci pour ton retour.

Discussions similaires

  1. imprimer publipostage word depuis excel
    Par abdelkarim_1987 dans le forum Excel
    Réponses: 3
    Dernier message: 17/09/2013, 16h33
  2. [XL-2010] Publipostage VBA (depuis excel vers outlook)
    Par krokos55 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/12/2012, 10h49
  3. Publipostage Word depuis Excel avec datasource = fichier macro vba
    Par julac dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/11/2012, 14h58
  4. Envoi de mail automatique depuis Excel + ajout condition temporelle
    Par l'acrobate dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/05/2012, 11h46
  5. [SQL & excel]Importation automatique depuis excel
    Par balabonov dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/10/2006, 12h51

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