Bonjour à tous !

Je souhaite réaliser du mailing en pilotant Word depuis Access.
Les lettres qui vont être envoyées doivent être adaptées selon la langue maternelle de la personne (Français, Allemand, et anglais pour les autres).
Pour ce faire j’ai écrit une requête qui contient les coordonnées et la langue maternelle. Le mailing doit se faire automatiquement lorsque l’utilisateur clic sur un bouton.
Pour l’instant mon code ressemble à ceci :

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
Private Sub Cmd_Publipostage_Click()
 
' Déclaration des variables
Dim db As DAO.Database, Dim rs As DAO.Recordset
Dim chemin As String, Dim publi As String, Dim myQuery As String
 
Dim chemin1 As String, chemin2 As String, chemin3 As String
Dim publi1 As String, publi2 As String, publi3 As String
Dim myQuery1 As String, myQuery2 As String, myQuery3 As String
 
' Initialisation des répertoires
chemin = chemin du document template
publi = chemin du fichier à enregistrer
myQuery = "SELECT * FROM [publipostage] WHERE langue="
 
' Affecte l'objet Base de donnée courante à la variable DB
Set db = CurrentDb
' Ouvre un recordset
Set rs = db.OpenRecordset("SELECT * FROM [publipostage]")
 
While Not rs.EOF
    ' Selon la langue maternelle
    Select Case rs.Fields(9)
        Case 1
            chemin1 = chemin & "francais"
            publi1 = publi & "francais" & Format(Date, "yyyymmdd")
            myQuery1 = myQuery & "1"
            Call MergeWordDoc(chemin1, publi1, myQuery1)
        Case 2
            chemin2 = chemin & "allemand"
            publi2 = publi & "allemand" & Format(Date, "yyyymmdd")
            myQuery2 = myQuery & "2"
            Call MergeWordDoc(chemin2, publi2, myQuery2)
        Case 3
            chemin3 = chemin & "anglais"
            publi3 = publi & "anglais" & Format(Date, "yyyymmdd")
            myQuery3 = myQuery & "3"
            Call MergeWordDoc(chemin3, publi3, myQuery3)
    End Select
 
rs.MoveNext
Wend
End Sub
Je mets également le code de la fonction MergeWordDoc (qui est en fait une adaptation de celle proposée sur ce site)

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
Function MergeWordDoc(chemin As String, publi As String, myQuery As String)
 
Const strDir As String = 
Const extension As String = ".docx"
' Déclaration des variables
Dim wdApp As Word.Application
Dim db As DAO.Database, Dim rs As DAO.Recordset
 
' Affecte un Objet Application à la variable wdApp
Set wdApp = New Word.Application
' Affecte l'objet Base de donnée courante à la variable DB
Set db = CurrentDb
' Ouvre un recordset
'Set rs = db.OpenRecordset(myQuery)
 
wdApp.Visible = True
' Ouverture du document 'template'
wdApp.Documents.Open strDir & chemin & extension
 
' Parcours du recordset
'While Not rs.EOF
    With wdApp
        With .ActiveDocument
        .MailMerge.OpenDataSource Name:=CurrentDb.Name, SQLStatement:=myQuery, SubType:=wdMergeSubTypeWord2000
        .MailMerge.Destination = wdSendToNewDocument
        .MailMerge.Execute
        End With
    End With
 
' Passe à l'enregistrement suivant
'rs.MoveNext
'Wend
 
' Sauve les informations dans un nouveau document Word
If Dir(strDir & publi & extension) <> "" Then
        wdApp.Documents(2).Close wdDoNotSaveChanges
        MsgBox ("Le document " & strDor & publi & extension & " existe déjà.")
        Application.FileDialog(msoFileDialogSaveAs).Show
    Else
        wdApp.ActiveDocument.SaveAs strDir & publi & extension
        wdApp.Documents(2).Close wdDoNotSaveChanges
End If
 
' Fermer et libérer les objets
'rs.Close
db.Close
'Set rs = Nothing
Set db = Nothing
Set wApp = Nothing
 
End Function
Il y a trois points sur lesquels j’aurais besoin d’aide.

Déjà, il y a autant de documents Word qui s’ouvrent que de lignes dans ma requête. Je voudrais n’ouvrir qu’un seul document Word par langue. Je suppose que la ligne Set wdApp = New Word.Application est à modifier mais je ne sais pas où.

Ensuite, ma requête retourne cinq lignes. Deux qui parlent allemand et trois qui parlent français. Lorsque je lance mon publipostage, je retrouve bien mes deux germanophones sur le document Word qui va avec. Cependant, je ne retrouve que deux de mes trois francophones sur l’autre document. (De plus la personne manquante n’est pas la dernière ligne de la requête). J’aimerais savoir d’où peut venir le problème.

Enfin, lorsque le document existe déjà, j’ouvre la fenêtre Windows Enregistrer sous… Comment je pourrais faire pour que le folder affiché soit celui où est situé le document déjà existant ? Là, le fenêtre s’ouvre sur My Documents.

Je vous remercie d’avance pour votre aider !