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

Macros et VBA Excel Discussion :

Publipostage : Enregistrement du fichier résultat avant impression [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Publipostage : Enregistrement du fichier résultat avant impression
    Bonjour le Forum,

    Ma source.
    Publipostage Word ExcelPAR Silkyroad/

    Il n'y a qu'un seul enregistrement dans ma base de données source.
    J'aurais souhaité avant l'impression du fichier résultat, l'enregistrer.

    J'ai récupéré sur la toile les différentes occurences de la méthode Destination (également disponible sur l'aide en ligne)

    'wdSendToEmail : Send results to e-mail recipient.
    'wdSendToFax : Send results to fax recipient.
    'wdSendToNewDocument : Send results to a new Word document.
    'wdSendToPrinter : Send results to a printer.

    J'ai donc codé

    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
    59
    60
    61
    Public Sub LiaisonWord(nombase As String, typedoc As String)
     
    'SILKYROAD
    'http://silkyroad.developpez.com/Excel/PublipostageWordExcel/
     
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
     
    'nombase = fichier Excel source
    'typedoc = 757B OU 990I ou Cerfa
     
    'Occurences de MailMerge.Destination =
    'wdSendToEmail : Send results to e-mail recipient.
    'wdSendToFax : Send results to fax recipient.
    'wdSendToNewDocument : Send results to a new Word document.
    'wdSendToPrinter : Send results to a printer.
     
    Dim DocWord As Word.Document
    Dim AppWord As Word.Application
     
    Application.ScreenUpdating = False
    Set AppWord = New Word.Application
    'Développement
    'AppWord.Visible = True
    AppWord.Visible = False
     
    'Ouverture du document principal Word
    Set DocWord = AppWord.Documents.Open("monfichiersource.doc")
     
    With DocWord.MailMerge
            'IMPORTANT : redéfinir si besoin Champ_Word, appelé ci-dessous.
            'Ouvre la base de données
            .OpenDataSource Name:=nombase, _
            Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
            "DBQ=" & nombase & "; ReadOnly=True;", _
            SQLStatement:="SELECT * FROM [Champ_Word]"
            'Développement voir plus haut les occurences pour la méthode Destination
            'Spécifie la fusion vers l'imprimante
            '.Destination = wdSendToPrinter
            .Destination = wdSendToNewDocument
            .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
     
    'Développement
    'Fermeture du document Word
    DocWord.Close False
    With ActiveDocument
            .SaveAs FileName:=("monfichierrésultat.doc")
            .PrintOut
            .Close
    End With
    AppWord.Quit
    End Sub
    Le code Buggue sur la ligne Active Document
    avec ce message "Aucun document n'est ouvert" ???

    Même erreur si j'écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Destination = wdSendToNewDocument
    Dim RésWord As Word.Document
    Set RésWord = ActiveDocument
    D'où ma question :

    Comment activer un document issu d'un publipostage (1 seul enregistrement)
    afin de l'enregistrer puis l'imprimer?

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour Marcel !

    Est-ce sur la ligne n°55 ? Car un document est fermé en ligne précédente …

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Marc-L

    Merci pour ta réponse.

    Non, le 2ème code est une variante du 1er.

    Dans le 1er code en ligne 55,
    dans le 2ème code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set RésWord = ActiveDocument
    J'ai placé cette dernière ligne immédiatement après la méttthode Destination

    Les 2 lignes bugguent.
    Autrement dit, je n'arrive pas à activer le document issu de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Destination = wdSendToNewDocument

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut PUBLIPOSTAGE : ENREGISTREMENT DOCUMENT RESULTAT
    J'ai trouvé une résolution qui ne me satisfait qu'à moitié.
    Il suffit de suffixer le document Word par l'application éponyme.

    D'où

    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
    59
    60
    61
    62
    63
    64
    Public Sub LiaisonWord(nombase As String, typedoc As String)
     
    'SILKYROAD
    'http://silkyroad.developpez.com/Excel/PublipostageWordExcel/
     
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
     
    'nombase = fichier Excel source
    'typedoc = 757B OU 990I ou Cerfa
     
    'Occurences de MailMerge.Destination =
    'wdSendToEmail : Send results to e-mail recipient.
    'wdSendToFax : Send results to fax recipient.
    'wdSendToNewDocument : Send results to a new Word document.
    'wdSendToPrinter : Send results to a printer.
     
    Dim DocWord As Word.Document
    Dim AppWord As Word.Application
     
    Application.ScreenUpdating = False
    Set AppWord = New Word.Application
    'Développement
    AppWord.Visible = False
    'AppWord.Visible = False
    'Ouverture du document principal Word
    Set DocWord = AppWord.Documents.Open("\\prnas02\33\NETSHARE_STAT PART PRO\commun\Outils_logiciels\Outils Réseaux Salariés\Décès complet\Notice " & typedoc & ".doc")
     
    With DocWord.MailMerge
            'IMPORTANT : redéfinir si besoin Champ_Word, appelé ci-dessous.
            'Ouvre la base de données
            .OpenDataSource Name:=nombase, _
            Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
            "DBQ=" & nombase & "; ReadOnly=True;", _
            SQLStatement:="SELECT * FROM [Champ_Word]"
            'Développement voir plus haut les occurences pour la méthode Destination
            'Spécifie la fusion vers l'imprimante
            '.Destination = wdSendToPrinter
            .Destination = wdSendToNewDocument
            .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
     
    'Développement
    'Fermeture du document Word
    DocWord.Close False
     
    With AppWord
            With .ActiveDocument
                    .SaveAs FileName:=("\\prnas02\33\NETSHARE_STAT PART PRO\commun\Outils_Exports\Exports_Décès\Essai publi " & typedoc & ".doc")
                    .PrintOut
                    .Close False
            End With
            .Quit
    End With
     
    End Sub
    Mais ici, le document actif est celui par défaut qui subsiste dans Appword.
    Or, j'aurais souhaité affecter le document résultat à une variable immédiatement après sa création.

    Du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Destination = wdSendToNewDocument
    Dim RésWord As Word.Document
    Set RésWord = ???????
    Merci!

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Inscrit en
    Novembre 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'Ingénierie et d'Analyses en Ressources Humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 63
    Par défaut
    Bonjour,

    Tu ne peux déclarer ta variable qu'après la fin de l'opération de publipostage marquée par cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            'Exécute l 'opération de publipostage
            .Execute Pause:=False
    Du coup, en modifiant le code de cette façon, ça devrait être bon :

    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
    59
    60
    61
    62
    63
    64
    65
    Public Sub LiaisonWord(nombase As String, typedoc As String)
     
    'SILKYROAD
    'http://silkyroad.developpez.com/Excel/PublipostageWordExcel/
     
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
     
    'nombase = fichier Excel source
    'typedoc = 757B OU 990I ou Cerfa
     
    'Occurences de MailMerge.Destination =
    'wdSendToEmail : Send results to e-mail recipient.
    'wdSendToFax : Send results to fax recipient.
    'wdSendToNewDocument : Send results to a new Word document.
    'wdSendToPrinter : Send results to a printer.
     
    Dim DocWord As Word.Document
    Dim AppWord As Word.Application
    Dim RésWord As Word.Document
     
    Application.ScreenUpdating = False
    Set AppWord = New Word.Application
    'Développement
    'AppWord.Visible = True
    AppWord.Visible = False
     
    'Ouverture du document principal Word
    Set DocWord = AppWord.Documents.Open("monfichiersource.doc")
     
    With DocWord.MailMerge
            'IMPORTANT : redéfinir si besoin Champ_Word, appelé ci-dessous.
            'Ouvre la base de données
            .OpenDataSource Name:=nombase, _
            Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
            "DBQ=" & nombase & "; ReadOnly=True;", _
            SQLStatement:="SELECT * FROM [Champ_Word]"
            'Développement voir plus haut les occurences pour la méthode Destination
            'Spécifie la fusion vers l'imprimante
            '.Destination = wdSendToPrinter
            .Destination = wdSendToNewDocument
     
            .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
            Set RésWord = Word.ActiveDocument
    With RésWord
            .SaveAs Filename:=("monfichierrésultat.doc")
            .PrintOut
            .Close
    End With
    End With
     
    Application.ScreenUpdating = True
     
    'Développement
    'Fermeture du document Word
    DocWord.Close False
     
    AppWord.Quit
    End Sub

    Chtik

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Ch'tik,

    Merci pour ta réponse.

    C'est exactement cela!

    Si tu pouvais m'expliquer la raison...

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

Discussions similaires

  1. Mise en forme d'un fichier avant impression
    Par papy_polo67 dans le forum Excel
    Réponses: 3
    Dernier message: 19/04/2014, 04h07
  2. Réponses: 1
    Dernier message: 31/03/2014, 13h26
  3. Enregistrer un fichier résultat sous format txt
    Par hananemto2007 dans le forum R
    Réponses: 3
    Dernier message: 19/02/2009, 15h16
  4. Réponses: 1
    Dernier message: 18/04/2008, 15h36
  5. Réponses: 4
    Dernier message: 01/05/2007, 16h24

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