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 Access Discussion :

Mail merge conditionnel


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Femme Profil pro
    Gestionnaire de données
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Mail merge conditionnel
    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 !

  2. #2
    Candidat au Club
    Femme Profil pro
    Gestionnaire de données
    Inscrit en
    Novembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon je double poste mais je n'ai pas trouvé le moyen d'éditer.

    J'ai résolu le problème de la ligne disparue (c'était dû à un Next Record qui se baladait dans mon template de publipostage en fait...).
    J'ai également réussi à faire mon FileDialog Save As comme je le voulais.

    Il ne me reste plus que le problème du nouveau document Word qui se crée autant de fois qu'il y a de requêtes.
    (Pour info au cas ou qqn lise mon post).

    Bonne soirée !

Discussions similaires

  1. [AC-2007] Envoi de mail conditionnel.
    Par fragglerick dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/05/2011, 20h42
  2. Réponses: 0
    Dernier message: 21/04/2011, 21h05
  3. Limite de 20 caractères pour le mail merge dans word
    Par Hélène Penders dans le forum Word
    Réponses: 2
    Dernier message: 08/08/2008, 12h41
  4. Mail Merge en VBS
    Par suckthewindow dans le forum VBScript
    Réponses: 16
    Dernier message: 15/01/2008, 14h01
  5. [Mail] [Débutant] Test conditionnel
    Par pugnator dans le forum Langage
    Réponses: 10
    Dernier message: 18/07/2006, 10h46

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