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 :

Publipostage vers word pour un seul enregistrement


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Publipostage vers word pour un seul enregistrement
    Bonjour,
    j'ai actuellement une base de donnée utilisée pour envoyer des notifications de jugement (entre autre). Ces notifications doivent être envoyée au comparant, à son avocat et à tout un tas d'administration. Un document word avec publipostage a donc été créé avec les modèles pour chaque partie.
    A l'heure actuelle, je peux ouvrir ce document word via access avec le publipostage. Voici le code:

    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
    ' Voici pour la déclaration du code :
    Dim wdapp As Word.Application
    Dim stword As String
    Dim stsql As String
    stsql = [Forms]![vu jugement sas]![Texte154] 'contient la clé affaire
    stword = Me.Texte4
    ' Démarrer Word
    Set wdapp = CreateObject("Word.application")
    With wdapp
           .Visible = True
     .Documents.Open stword
           .ActiveDocument.MailMerge.OpenDataSource _
                Name:=CurrentProject.FullName, _
                LinkToSource:=True, _
                Connection:="Table Jugement", _
                SQLStatement:="SELECT * FROM [Jugement] WHERE [CLE_AFFAIRE]=stsql"
     
               ' Diriger le publipostage vers un nouveau document
         .ActiveDocument.MailMerge.Execute
    End With
     
    ' Fermer et libérer les objets
    Set wdapp = Nothing
    Je rencontre cependant 3 problèmes:

    -le premier est que, bien que la table soit spécifiée dans le code, je dois tout de même la sélectionnée dans word;
    -le deuxième, ça ne marche que si la base est sous forme mdb sinon il ne trouve pas du tout la base de donnée
    -Enfin, il ne sélectionne absolument pas l'enregistrement en cours. J'ai droit à toute la table! J'ai pensé à créer une table temporaire mais c'est lourd et j'ai peur que ça ne soit pas très gérable.

    Auriez-vous une idée pour palier à ces problèmes? Merci d'avance

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 9
    Points
    9
    Par défaut Même problème
    Bonjour,
    J'ai le même souci que toi. J'ai essayé d'adapter le super tutoriel fait par Olivier Lebeau mais je pense que je manque d'expérience.

    Je ne souhaite pas mettre le code dans Module mais dans le VB d'un bouton à cliquer puis lui indiquer quels champs de l'enregistrement en cours parser avec word et tout droit dans des signets définis.

    Ce publipostage me semble logique mais j'éprouve énormément de difficultés mais ça me passionne.

    Si je trouve une piste je tiendrais au courant.

    Cordialement.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Personnellement j'ai réussi à le faire, j'ai tout d'abord créé un document word relié a ma table grâce au publipostage, j'y ai inséré les champs au endroit ou je le souhaitais et ensuite, dans Access, j'ai créé un module contenant la fonction de publipostage word ci-dessous et j'appel cette fonction que j'ai placé sur un bouton.

    Cette fonction ouvre le document word de publipostage (CheminDocument) et va executer la requete sql (SQL) ceci ouvre un autre document Word contenant juste l'enregistrement avec le bon publipostage.

    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
    52
    53
    54
    55
     
    ' ---
    ' PUBLIPOSTAGE AVEC WORD 2007
    ' ---
    ' Le résultat de la fusion reste affiché à l'écran.
    '
    ' CheminDocument = Chemin du document Word à ouvrir
    ' SQL = Instruction SQL que l'on veut
    Function Publipostage(CheminDocument As String, sql As String)
    On Error GoTo errorPubli
        Dim wdApp As Object
        Dim wdDoc As Object
     
        ' Démarrer Word
        Set wdApp = CreateObject("Word.Application")
        With wdApp
            ' Rendre Word visible pour faciliter la mise au point
            .Visible = True
            ' Ouvrir le document de publipostage
            .Documents.Open CheminDocument
     
            ' Paramétrer le publipostage
            With .ActiveDocument.MailMerge
                .OpenDataSource Name:=CurrentProject.FullName, SQLStatement:=sql, ReadOnly:=True
     
                ' Diriger le publipostage vers un nouveau document plutôt que vers l'imprimante, le fax ou le mail
                .Destination = wdSendToNewDocument
     
                ' Lancer la fusion
                .Execute
            End With
        End With
     
        ' Fermer et libérer les objets
        Set wdApp = Nothing
     
        'Fermer Le document de Publipostage Word
        'Récupère l'objet Word correspondant au document
        Set wdDoc = GetObject(CheminDocument)
        'On ferme le document sans enregistrer les changements
        wdDoc.Close wdDoNotSaveChanges
        'Libérer les objets
        Set wdDoc = Nothing
    Exit Function
    errorPubli:
        MsgBox "Une erreur est survenu !" & vbCrLf & _
            "Erreur : " & Err.Number & " - Erreur sur le publipostage" & _
            vbCrLf & Err.Description
     
            wdApp.Close wdDoNotSaveChanges
            wdDoc.Close wdDoNotSaveChanges
            Set wdApp = Nothing
            Set wdDoc = Nothing
        Exit Function
    End Function
    Enfin je remarque aussi que ta requête SQL est mauvaise, tu utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLStatement:="SELECT * FROM [Jugement] WHERE [CLE_AFFAIRE]=stsql"
    Alors qu'il faudrait l'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLStatement:="SELECT * FROM [Jugement] WHERE [CLE_AFFAIRE]='" & stsql & "';"
    car tu essaye d'utiliser une variable déclaré plus haut a ce que je vois mais ta requete tu lui dit de chercher spécifiquement "stsql" et non le contenu de la variable, je pense que ceci peux résoudre ton problème aussi.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci de ta réponse mais absolument rien ne marche. Le problème viens je pense du fait que word ne trouve pas la table même si je la note dans le code.
    Si j'ouvre le document à part, no problem. si je l'ouvre à partir d'access, il me met une liste de toutes mes tables et me demande d'en choisir une.

    J'ai beau tourner le probleme dans tous les sens, je ne comprends pas.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 15
    Points : 22
    Points
    22
    Par défaut
    Tu utilise bien le même document word et tu n'en créer pas un nouveau j'espère.
    De plus, ta requête marche bien si tu la teste dans Access?

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Pris en pièces détachées tous marche. C'est à l'assemblage que ça coince.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 9
    Points
    9
    Par défaut Réglé pour moi
    Bonjour,

    C'est réglé pour moi. Vous pouvez lire le tout ici.

    J'ai été très aidée grâce à ce forum.

Discussions similaires

  1. [AC-2003] code VBA pour publipostage vers word
    Par Melchiorjl dans le forum Access
    Réponses: 0
    Dernier message: 09/08/2012, 15h14
  2. Requête ajout pour un seul enregistrement.
    Par galtitou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 26/01/2009, 09h09
  3. Publipostage vers Word
    Par surrounded dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/11/2007, 14h51
  4. Réponses: 3
    Dernier message: 12/09/2006, 05h54
  5. Réponses: 3
    Dernier message: 21/08/2006, 13h03

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