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 :
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 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
Il y a trois points sur lesquels j’aurais besoin d’aide.
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
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 !
Partager