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 :

[VBA-E/W] publipostage a partir d'excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut [VBA-E/W] publipostage a partir d'excel
    Bonjour,

    J'ai fouiné dans les différents posts mais je n'ai pas trouvé mon bonheur.

    Je voudrais, une fois une ligne saisie dans excel, qu'une macro m'ouvre word génère un publipostage, de la ligne en question uniquement, de façon à compléter ce courrier à façon.

    Merci pour votre aide.

    Daniel

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour le principe :
    Trois fichiers : La base de données.xls, un fichier xls temporaire, le .doc
    Depuis ma base de données Excel, je crée un fichier xls avec entêtes de colonnes temporaire ne contenant que la ou les lignes de la base que je souhaite voir fusionnées.

    Ta lettre type doit être réalisée
    Elle doit être liée au nom du fichier temporaire (.xls) et les champs de fusion insérés dans ton texte

    Pour ouvrir Word et lui demander d'ouvrir la lettre modèle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        paramètre = Chemin + "\" + NomFich ' + ".doc"
        n = "WINWORD.EXE " + paramètre
        DemWord = Shell(n, 3) '3 pour maximized
        AppActivate DemWord
    Là, Word est ouvert sur la lettre désirée
    Ici, tu as plusieurs solutions mais je te passe ce que j'ai fait : Une macro en auto_open, dans Word, lance la fusion.

    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
    Public NomLettreType
    Sub AutoOpen()
        Main
    End Sub
     
    Public Sub Main()
        Fusionner
    End Sub
     
    Sub Fusionner()
    Dim r, i
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .Execute
        End With
        'Un msgbox avec les boutons Oui et Annulé
        r = MsgBox("Fusion réalisée." & Chr(13) & "Souhaitez vous examiner le document avant impression ?" & Chr(13) & "(Annuler ferme Word et renvoie sur l'application Excel)", 51, "ÉDITER LE RÉSULTAT DE LA FUSION")
        If r = 6 Then
                Exit Sub
            ElseIf r = 2 Then
                quitter
        End If
        NomLettreType = ActiveDocument.Name
        Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
            wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
            Collate:=True, Background:=False, PrintToFile:=False
        quitter
    End Sub
     
    Sub quitter()
        If NomLettreType <> "" Then
            Set MonFichier = GetObject(NomLettreType)
            MonFichier.Activate
            MonFichier.Close SaveChanges:=wdDoNotSaveChanges
        End If
     
        Set MonFichierXls = GetObject("CheminFichierTemporaire\FichierTemporaire.xls")
        MonFichierXls.Activate
        MonFichierXls.Close SaveChanges:=False
     
        Set MonFichierXls = GetObject("D:\xls\FichierExcelAppelant.xls")
        MonFichierXls.Activate
        Set MonFichierXls = nothing
     
        Set MonAppli = Application
        MonAppli.Visible = True
        MonAppli.Quit SaveChanges:=wdDoNotSaveChanges
    End Sub
    La sortie de cette macro renvoie sur le fichier Excel du départ
    Tu peux tout faire à partir d'Excel mais là, je n'ai pas le code sous la main

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Merci Ouskel'n'or,

    Je regarde tout ça et je reviens

    Daniel

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    NB - J'ai écrit cette macro en 98, tu pourras simplifier, c'est pas interdit (!) En attendant elle fonctionne telle quelle
    A+

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Me revoila, depuis le temps !!!

    Je constate un petit pb, une fois le publipostage effectué si je choisis :

    - "oui" a la fenetre "editer le resultat de la fusion" il imprime mon courrier en 1 ex : OK, mais aussi le fichier de publipostage (avec les champs) en 4ex ? De plus une fois que je referme mes 2 fichiers word (la lettre et le fichier de publipostage) puis les 2 xls (la base de donnees et le temp) il m'ouvre une fenetre intitulée "fichier maintenant disponible" avec : "temp.xls est maintenant disponible pour modification" choix de "lecture-ecriture" ou "annuler"

    - "non" : même résultat en sortie de fichiers avec le pb de temp.xls

    - "annuler" : il referme les 2 words, les 2 xls, mais même pb pour le temp.xls

    Merci

    Danielh

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Quelle solution as-tu retenu ? Si c'est la mienne, je n'ai jamais eu ce type d'incident, à moins que dans ton "modèle.doc" tu aies une valeur par défaut pour le nombre d'éditions (je parle de "en 4ex"). Pour l'édition du modèle, je ne vois pas et je n'ai pas ça.
    A+

    Autre possibilité : Si tu ne nettoies pas le fichier xls temporaire entre tes essais et que tu en fais 4 fois de suite, tu auras 4 exemplaires. Le prochain essai, tu en auras 5
    Tu nous tiens au courant

  8. #8
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Récapitulatif de la procédure :

    Fichiers de travail :

    Base de donnée : RECAPITULATIFoctobre.xls
    fichier de travail xls : temp.xls
    fichier de publipostage : docpublipostage.doc

    j'ouvre ma base de données "RECAPITULATIFoctobre.xls", je me positionne sur la ligne que je veux copier dans mon fichier "temp.xls" et j'execute la macro suivante qui me copie ma ligne, ferme le "temp.xls", et me repositionne sur la base de donnée :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub copie2()
       Set MonFichierXls = GetObject("C:\genevieve\temp.xls")
        ActiveSheet.Select
        Selection.Copy
        Windows("temp.xls").Activate
        Rows("5:5").Select
        ActiveSheet.Paste
        MonFichierXls.Close SaveChanges:=True
    End Sub
    Ensuite j'execute la macro de fusion en question, à savoir :

    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
     
    Public NomLettreType
    Sub AutoOpen()
        Main
    End Sub
     
    Public Sub Main()
        Fusionner
    End Sub
     
    Sub Fusionner()
    Dim r, i
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .Execute
        End With
        'Un msgbox avec les boutons Oui et Annulé
        r = MsgBox("Fusion réalisée." & Chr(13) & "Souhaitez vous examiner le document avant impression ?" & Chr(13) & "(Annuler ferme Word et renvoie sur l'application Excel)", 51, "ÉDITER LE RÉSULTAT DE LA FUSION")
        If r = 6 Then
                    Exit Sub
            ElseIf r = 2 Then
                quitter
        End If
        NomLettreType = ActiveDocument.Name
        Application.PrintOut Filename:="", Range:=wdPrintAllDocument, Item:= _
            wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
            Collate:=True, Background:=False, PrintToFile:=False
        quitter
    End Sub
     
    Sub quitter()
     
        If NomLettreType <> "" Then
            Set MonFichier = GetObject(NomLettreType)
            MonFichier.Activate
            MonFichier.Close SaveChanges:=wdDoNotSaveChanges
        End If
     
        Set MonFichierXls = GetObject("C:\genevieve\temp.xls")
        MonFichierXls.Activate
        MonFichierXls.Close SaveChanges:=False
        'MonFichierXls.Close SaveChanges:=True
     
        Set MonFichierXls = GetObject("C:\genevieve\RECAPITULATIFoctobre.xls")
        MonFichierXls.Activate
        'Set MonfichierXls = False
        Set MonFichierXls = Nothing
     
        Set MonAppli = Application
        MonAppli.Visible = True
        MonAppli.Quit SaveChanges:=wdDoNotSaveChanges
    End Sub
    Le fichier "temp.xls"contient la macro suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Sub lettre()
     
    paramètre = "c:\genevieve\docpublipostage.doc"
        n = "WINWORD.EXE " + paramètre
        DemWord = Shell(n, 3) '3 pour maximized
        AppActivate DemWord
    '
    End Sub
    Voila, si vous voyez d'ou vient ma boulette !!

    Merci

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 7
    Par défaut
    Bonjour,

    Est ce qu' Ouskel'n'or voit le pb ? ou qqun d'autre ?

    Merci

    Danielh

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Regarde là, y'a (enfin) la solution
    http://www.developpez.net/forums/sho...02#post1864802
    Désolé de ne pas y avoir pensé plus tôt... Mais je ne suis pas sûr de ne pas avoir déjà vu la réponse...

Discussions similaires

  1. [Toutes versions] VBA : Ouvrir un fichier Word à partir d'Excel en désactivant la mise à jour des données.
    Par napidev dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/12/2014, 16h07
  2. [XL-2013] Publipostage Word à partir d'Excel : Création d'un nombre de pages illimité
    Par Chtik dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/03/2014, 19h20
  3. Publipostage Word à partir d'Excel
    Par Kara dans le forum Delphi
    Réponses: 30
    Dernier message: 17/08/2007, 17h39
  4. [VBA-E]Fermeture de windows à partir d'Excel
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/04/2007, 08h22
  5. [VBA-E]ouverture d'access à partir de EXCEL
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/08/2006, 12h40

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