Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/03/2007, 16h01   #1
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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 :
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 :
ActiveDocument.MailMergeDataSource.Close
mais elle me renvoie l'erreur 438
Citation:
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.
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 10h06   #2
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
Alors j'ai testé et ... j'ai une erreur à l'exécution de la macro Word sur L'erreur est :
Citation:
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 ?
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2007, 16h15   #3
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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 :
ActiveDocument.MailMerge.DataSource.Close
ne fonctionne pas
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 16h02   #4
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

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

Code :
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.
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2007, 16h29   #5
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
Ayé !!! J'y suis arrivée !!!

Code :
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
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h01.


 
 
 
 
Partenaires

Hébergement Web