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 :

Fermer le classeur Excel BD pour la fusion word


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Points : 29
    Points
    29
    Par défaut [VBA-W]Fermer le classeur Excel BD pour la fusion word
    Bonjour ,

    A partir de mon application (en PB 10.2.1) j'ouvre des document de publipostage (.doc).
    Info : Pour réaliser ces documents, j'ai employé la méthode décrite ici. Oui, j'ai fouillé avant de finir par vous exposer mon problème

    Pour lancer la fusion des documents automatiquement, cette macro a été développée puis installée sur chaque poste utilisateur :
    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
    Sub fusionner()
        docname = ActiveDocument.Name
     
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .MailAsAttachment = False
            .MailAddressFieldName = ""
            .MailSubject = ""
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                .LastRecord = wdDefaultLastRecord
            End With
            .Execute Pause:=True
        End With
        ' fermeture
        Documents(docname).Close SaveChanges:=wdDoNotSaveChanges
    End Sub
    Depuis mon application, je fais un Run de Winword avec le nom du fichier et la commande /mfusionner.
    Ceci fonctionne à merveille tant qu'un autre classeur Excel Lambda n'est pas ouvert (avant la demande de fusion). En effet, à partir de ce moment, le "datasource" ne se ferme pas automatiquement et de plus il devient l'écran actif.

    En résumé, je voudrais savoir comment je peux faire pour fermer mon datasource (fichier excel BD pour la fusion Word) lorsque celui-ci reste ouvert.
    J'ai bien essayé la fonction Close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.MailMergeDataSource.Close
    mais elle me renvoie l'erreur 438
    Propiété ou méthode non gérée par cette objet
    Merci de votre aide

    PS : La macro jointe n'a pas été développée par mes soins. Je me retrouve à la maintenir alors que je n'y connait absolument rien en VB.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    Alors j'ai testé et ... j'ai une erreur à l'exécution de la macro Word sur L'erreur est :
    Type défini par l'utilisateur non défini
    Est-ce que cela a un lien du fait que la macro est executé par Word et qu'il ne connait pas l'objet Worbook ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    Merci ça fonctionne mieux mais ...

    Pour tester l'ouverture et la fermeture du fichier, dans la macro j'ai remplacé "D:\xls\Liste pour fusion.xls" par un fichier toto.xls qui n'a rien à voir avec le fichier de fusion de ma lettre type.
    Toto.xls s'ouvre et se ferme ou peut-être qu'il ne s'ouvre pas du tout, je ne vois pas vraiment la différence
    Et du coup même sans avoir ouvert un fichier au préalable je me retrouve avec mon fichier excel de fusion de lettre type toujours ouvert.
    Alors je me suis dit que toto.xls devait bien s'ouvrir vu que je me retrouvai dans le cas. Donc, je me suis mise à tester uniquement l'ouverture de toto.xls sans fusion. Et j'ai absolument rien vu.

    Alors, j'ai cherché de nouveau et j'ai trouvé un Close sur Mailmergedatasource.
    Forcément et comme par hasard dans l'aide de VB, j'ai pas trouvé d'exemple sur mon cas, donc j'ai utilisé le joker où je suis tombé sur ça. Sauf que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.MailMerge.DataSource.Close
    ne fonctionne pas

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    Bon j'ai réussi à utiliser la méthode close mais ça donne rien de mieux.
    Le fichier excel de publipostage reste ouvert

    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
    Sub fusionner()
        Dim mailMergeDataSource1 As MailMergeDataSource
     
        docname = ActiveDocument.Name
        Set mailMergeDataSource1 = ActiveDocument.MailMerge.DataSource
     
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .MailAsAttachment = False
            .MailAddressFieldName = ""
            .MailSubject = ""
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                .LastRecord = wdDefaultLastRecord
            End With
            .Execute Pause:=True
        End With
        ' fermeture
        mailMergeDataSource1.Close
        Documents(docname).Close SaveChanges:=wdDoNotSaveChanges
    End Sub
    car je pense que je ne dois plus être très loin.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    Ayé !!! J'y suis arrivée !!!

    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
    Sub fusionner()
        Dim MyXL As Object ' Variable devant contenir la référence à Microsoft Excel.
     
        ' Récupération du nom du modèle de lettre
        docname = ActiveDocument.Name
        ' Récupération du nom du fichier excel
        xlsname = ActiveDocument.MailMerge.DataSource.Name
     
        ' Rendre invisible les modifications de Word à l'écran
        Application.ScreenUpdating = False
     
        ' Fusion
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .MailAsAttachment = False
            .MailAddressFieldName = ""
            .MailSubject = ""
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                .LastRecord = wdDefaultLastRecord
            End With
            .Execute Pause:=True
        End With
     
        ' Fermeture du modèle de lettre
        Documents(docname).Close SaveChanges:=wdDoNotSaveChanges
     
        '**********************************************************
        ' Fermeture du fichier excel :
        ' Si excel était déjà ouvert, le fichier BD du modèle de
        ' lettre reste ouvert.
        '**********************************************************
        If Tasks.Exists(Name:="Microsoft Excel") = True Then
            ' Définit la variable objet faisant référence au fichier
            Set MyXL = GetObject(xlsname)
     
            ' Fermeture du fichier sans enregistrer les modifications
            MyXL.Application.ActiveWorkbook.Close SaveChanges:=wdDoNotSaveChanges
     
            ' Libère la référence à l'application et à la feuille de calcul.
            Set MyXL = Nothing
        End If
     
        Application.ScreenUpdating = True
        ActiveDocument.ActiveWindow.WindowState = wdWindowStateMaximize
    End Sub

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

Discussions similaires

  1. [XL-2007] Fermer un classeur excel ouvert sur un autre poste
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2013, 15h59
  2. Impossible de fermer un classeur Excel
    Par seremei dans le forum Langage
    Réponses: 5
    Dernier message: 08/01/2013, 11h29
  3. Fermer un classeur Excel à la fin d'une macro
    Par alex830001 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2008, 19h29
  4. [OLE Excel] Fermer un classeur Excel
    Par Shuret dans le forum C++
    Réponses: 1
    Dernier message: 26/05/2008, 10h09
  5. Fermer les classeurs excel sauf celui actif
    Par Balian1412 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/10/2006, 10h35

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