Home
Home

---Soumis par Dev Ashish---

Mailmerge démarre une nouvelle instance d'Access.

(Q)    Quand j'utilise Mailmerge de Microsoft Word avec une base de donnée Access, une nouvelle instance d'Access démarre. Comment éviter cela?

(A)    Word Mailmerge utilise le DDE pour repérer une fenêtre dont le titre est "Microsoft Access".  En Access 95 et 97, si vous utilisez Application Title (menu Tools/Startup), le titre fourni remplace "Microsoft Access" et le lien  DDE est incapable de trouver l'application cherchée, Word démarre donc une nouvelle instance d'Access et essaie d'ouvrir la base de données.

    On peut controuner le problème comme suit:

a - Enlever le titre local de l'application pour la base de données.
b - Utiliser ODBC pour passer-outre Access et accéder ainsi aux tables de données.

    Dans la plupart des cas, changer temporairement le titre de l'application pour "Microsoft Access" fonctionne fort bien. Essayer cette fonction avant d'adopter la stratégie impliquant  ODBC.

'************* Module Start *************
'
Option Compare Database
Option Explicit
Dim mstAppTitle As String

Function fSetAccessCaption() As Boolean
Dim dbs As Database
Const cPropNotExit = 3270

    'Conserve le titre actuel
    Set dbs = CurrentDb
    On Error Resume Next
    mstAppTitle = dbs.Properties("AppTitle")

    'si la propriété n'existe pas...
    If Err = cPropNotExit Then
        fSetAccessCaption = False
    Else
        dbs.Properties("AppTitle") = "Microsoft Access"
        RefreshTitleBar
        fSetAccessCaption = True
    End If
End Function

Sub sRestoreTitle()
    CurrentDb.Properties("AppTitle") = mstAppTitle
    RefreshTitleBar
End Sub

Function fMailMerge()
Dim objWord As Word.Document
Dim stMergeDoc As String

    If fSetAccessCaption Then
        On Error Resume Next
        stMergeDoc = "J:\install\Access mdbs\mailmerge.doc"

        Set objWord = GetObject(stMergeDoc, "Word.Document")

        objWord.Application.Visible = True

        objWord.MailMerge.OpenDataSource _
                Name:=CurrentDb.Name, _
                LinkToSource:=True, _
                Connection:="TABLE Customers", _
                SQLStatement:="Select * from [Customers]"
        objWord.MailMerge.Execute

        'ramène le titre désiré
        Call sRestoreTitle
    End If
End Function
'************* Module End *************