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 :

Excel et publipostage ( problème de "récursion" )


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut Excel et publipostage ( problème de "récursion" )
    Bonjour à tous, pour mon travail, je dois réaliser un petit "logiciel" de calcul pour les employé d'une grande entreprise .

    Ca comprend un tableau de contrats sous excel, quelques calculs ( tout ca ne pose pas de problème ) . Et ensuite un publipostage en vue d'impression des données travaillé sous excel précédement .

    Histoire de faire le plus simple possible pour les futurs utilisateurs de mon logiciel, j'aimerai que ce publipostage soit exécuter a l'aide d'une macro dans le document excel .

    Pour cela :

    j'ouvre word ( pas de pb )
    j'ouvre le document ( pb )
    j'effectue le publipostage / impression ( pas encore cherché comment faire )
    je ferme le document ( pas de pb )
    je ferme word ( pas de pb )

    Mon problème principal est donc que lorsque jouvre mon document word depuis excel ... celui-ci étant un document de publiposage, il va tenter d'ouvrir le document excel ... ca va ramer une minute, et je vais avoir un message d'erreur à passer, me disant que le fichier est déja ouvert ... et donc ca m'empeche de finir mon traitement automatique ...

    Comment réaliser un publipostage a partir de excel sachant que ma source de donnée est le document qui me sert à déclancher le publipostage .

    Merci d'avance, je précise que je suis sous windows NT, excel et word 97 .

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    La macro ci dessous permet de lancer l'impression du document de publipostage depuis Excel. Pour les essais , j'ai placé cette procedure dans le classeur contenant la base de données et je n'ai pas rencontré de problème particulier .
    J'ai utilisé une connection OLE DB (par défaut) pour la fusion entre le document Word et la base de données Excel .

    Testé avec OfficeXP


    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
    Private Sub CommandButton3_Click()
    Dim DocWord As Word.Document
    Dim AppWord As Word.Application
     
    Application.ScreenUpdating = False
    Set AppWord = New Word.Application
    AppWord.Visible = False
    Set DocWord = _
    AppWord.Documents.Open(ThisWorkbook.Path & "\docPublipostage.doc")
     
    With DocWord.MailMerge
    .Destination = wdSendToPrinter
    .SuppressBlankLines = True
    With .DataSource
    .FirstRecord = wdDefaultFirstRecord
    .LastRecord = wdDefaultLastRecord
    End With
    .Execute Pause:=False
    End With
     
    Application.ScreenUpdating = True
    DocWord.Close False
    AppWord.Quit
    End Sub


    bonne soiree
    michel

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Merci de la réponse, mais le problème persiste .
    ( sans même tenir compte des instruction liées à l'impression du publipostage même )

    L'erreur donné est la suivante :

    "Réservation de fichier"

    Le fichier truc.xls ( mon fichier excel contenant la macro ET les données de publipostage ) est modifié par "MonLogin"

    -> ouvrir lecture seule
    -> notifier
    -> annuller

    Bref, la mêm chose qu'avant , il tente d'ouvrir automatiquement mon doc excel deja ouvert et plante ...
    C'est du à quoi ? Au restriction de mon environement de travail ? ( je ne suis pas dans un service "informatique" a proprement parlé dans ma boite, et je n'ai pas vraiment de moyen de savoir quels sont les restrictions utilisateurs ).
    Ca peut aussi venir du fait que ce sit excel/word 97 sous NT ? Ou alors ca vient de moi
    Bref ... :camarchepas:

    Edit: je suis entrain de penser à une solution visant à mettre un fichier secondaire en donnée source de mon fichier word et à effectuer une copie de mon fichier courant vers celui-ci juste avant le publipotage ( si c'est possible de faire cela en VBA bien sur ...)

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Le problème persiste, et la solution du copige de fichier pose le même problème, a savoir que le fichier a coier est deja utilisé par excel et donc la copie refuse de se faire .

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Je suis toujours à la recherche d'une solution à ce problème ...

    Je suis capable d'effectuer un publipostage sous Word, a partir de Word .

    Je suis capable d'ouvrir un document Word depuis Excel ... sauf dans mon cas ou mon doc word de publipostage cherche a ouvrir le doc Excel qui a commandé son ouverture...Et hop problème

  6. #6
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Je procède autrement pour faire ce que tu souhaites.
    La macro qui lance le publipostage est dans un autre fichier que la base de données et je mets les macros de publipostage dans le doc word en Auto_Open
    J'ouvre le doc word depuis Excel et quand Word est fermé, je ferme le fichier xls sans enregistrer (Close false) et je ferme Excel (Application.quit)
    La macro dans le doc word :

    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
    Sub Document_Open()
    ActiveDocument.RunAutoMacro Which:=wdAutoOpen
    End Sub
     
    Sub AutoOpen()
        ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
        ActiveDocument.MailMerge.OpenDataSource Name:= _
            "D:\xls\adresses diverses.xls", ConfirmConversions:=False, ReadOnly:= _
            True, LinkToSource:=True _
            , Connection:="Feuille de calcul entière"
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .Execute
        End With
        DoEvents 'tu mets ça si tu ne poses pas la question de la ligne suivante
        If MsgBox("Consulter le document avant de l'éditer ?", vbYesNo, "Edition") = vbYes Then Exit Sub
        Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
            wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
            Collate:=True, Background:=True, PrintToFile:=False
        DoEvents
    End Sub
    A toutes fins utiles (sinon je ne vois pas comment tu peux éviter les problèmes que tu rencontres )

    Edit :
    Tu dois préparer ton doc afin que les données soient présentées comme tu le souhaites (!!!) Ça paraît évident mais faut mieux dire, on ne sait jamais

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Si j'ai bien comprit, tu met tes macro dans un 3eme fichiers autres que ta base de donne excel et ton doc word de publipostage ? En effet ca va marcher , mais j'essaie de faire le plus simple possible pour les employé de la boite dans lequel je suis ... mon but est de tout faire depuis le fichier excel si possible ...

    Au pire je préfère en rester la ou j'en suis ( le doc excel pour le traitement, et la macro de publipostage/impression/fermeture de word en auto-open a louverture du fichier word ).

    L'idée serait d'ouvrir la source de publipostage en lecture seul je pense ... mais je n'ai pas vu comment faire dans word 97 ...je vais voir si il y des options supplémentaire dans word 2003, on ne sait jamais !

  8. #8
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Dans la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ActiveDocument.MailMerge.OpenDataSource Name:= _
            "D:\xls\adresses diverses.xls", ConfirmConversions:=False, ReadOnly:= _
            True, LinkToSource:=True _
            , Connection:="Feuille de calcul entière"
    ReadOnly:= True
    ouvre le fichier en lecture seule

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    En fait j'ai mis mon document Word en mode publipostage grace au option de Word, sans macro ...

    Je vais voir a faire ca directement en macro ... ce qui me permettrai peut-etre ( avec la lecture seule ) de résoudre mes problème ... je vais de ce pas voir ce que ca donne !

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    En fait, la problème est le même, lors de la phase ou il va chercher les donnée de publipostage, il va planter car le fichier est déja ouvert ... meme si je lui indique en lecture seule, ca ne lui plait pas plus :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Set appWD = CreateObject("Word.Application")
        appWD.Visible = True
        appWD.Documents.Open FileName:=ThisWorkbook.Path & "/Publipostage.doc", ReadOnly:=True
     
        ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
        ActiveDocument.MailMerge.OpenDataSource Name:= _
            ThisWorkbook.Path & "\BAC.xls", ConfirmConversions:=False, ReadOnly:= _
            True, LinkToSource:=True _
            , Connection:="_FilterDatabase"
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .Execute
        End With

  11. #11
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Désolé mais c'est bien ce qu'il me semblait.
    Ce que je fais : Je crée un fichier xls contenant les macros
    La macro Workbook_Open ouvre la base de donnée si celle-ci est à modifier et masque les feuilles de son propre fichier
    Ainsi, tu as ta base de données ouverte, que tu peux modifier.
    Ensuite, tu lances la macro de publipostage
    la macro :
    - ferme la base de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(LaBase).close true 'pour enregistrer les modifs, false dans le cas contraire
    - ouvre le document Word contenant la macro de fusion en auto_open
    Et quand tu fermes Word, la suite de la macro dans Excel se poursuit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveWorkbook.close false
    DoEvents
    Application.quit
    Je te dis tout ça de tête mais je crois que je n'ai rien oublié

  12. #12
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    j'ai les meme problème et je galère
    je voudrais savoir se que vous déclarer dans le module pour les types "Word.Document" et "Word.Application"

    et je ne vois pas comment ca peut fonctionner etant donné qu'on demande l'ouverture du fichier qui est déjà ouvert

    merci de vos réponses

  13. #13
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello koko80,
    Tu devrais poser ta question dans une nouvelle discussion.
    On ne connais pas le contexte, ni ce que tu veux faire.
    Donne à ta discussion un sujet Explicite qu'on puisse la retrouver en recherche : Si toutes les discussions avait pour sujet "Help me", tu n'aurais pas retrouvé cette réponse
    Explique ton cas avec précision et mets éventuellement le code que tu utilises, le message d'erreur, la ligne sur laquelle elle se produit... etc.
    A bientôt sur le forum.

    PS - Pour ajouter du texte à un message tu as le bouton "Editer"

Discussions similaires

  1. [Wamp] Problème d'insertion avec quote d'un formulaire
    Par cyberdevelopment dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/08/2006, 19h55
  2. [SQL-Server] Problèmes de guillemets et quotes dans un INSERT
    Par gregb34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/05/2006, 10h40

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