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

IHM Discussion :

Problème publipostage ACCESS - Word


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut [A-02] Problème publipostage ACCESS - Word
    Bonjour,

    Voilà je suis novice en code VB mais j'aimerais faire un truc qui me simplifierais la vie !!
    J'ai une base de données où nous gérons nos adhérents (sous ACCESS), à partir d'un formulaire j'aimerais pouvoir générer un courrier automatiquement, juste en cliquant sur un bouton. Il faut que ce courrier ne sorte que pour l'adhérent sur lequel mon formulaire est ouvert.

    Donc j'ai créée un module avec cette commande : nom MergeIt ?

    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
     
    Option Compare Database
    Sub Publipostage_Vers_Document()
    Dim wdApp As Word.Application
    Dim strCheminDoc As String, strCheminFusion As String
    Dim strSQL As String
    strCheminDoc = "C:\Documents and Settings\FUSION.doc"
    strCheminFusion = "C:\Documents and Settings\RESULTAT.doc"
    strSQL = "SELECT * FROM [INTRO]"
    Set wdApp = New Word.Application
    With wdApp
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
    .OpenDataSource Name:=CurrentProject.FullName, _
    SQLStatement:=strSQL, _
    ReadOnly:=True
    .Destination = wdSendToNewDocument
    .Execute
    End With
     
    .ActiveDocument.SaveAs FileName:=strCheminFusion
    .Quit SaveChanges:=wdDoNotSaveChanges
    End With
    Set wdApp = Nothing
    End Sub
    Puis sur mon formulaire j'ai créée un bouton avec comme commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Option Compare Database
    Private Sub cmdPublipostage_Click()
     
    Call MergeIt
     
    End Sub
    Mais cela ne marche pas !
    J'ai apparemment réussi à le faire marcher une fois mais Word ne s'était pas ouvert il m'avait juste créé un nouveau fichier.

    D'avance merci, pour vos éclairages.

    Je suis en WORD2003 - Visual Basic6.3 et ACCESS2002

  2. #2
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Suite Publipostage
    Bonjour,
    J'ai évolué dans mon publipostage.
    Il me reste un problème (pas des moindres) à résoudre
    Donc j'ai créé un bouton qui me lance mon module Publipostage d'ACCESS vers Word. Le problème est que quand je lance mon publipostage tout les enregistrements du formulaire sont intégré dans le publipostage, alors que je souhaiterais que le publipostage ne se fasse que la page du formulaire en cours.
    Merci d'avance pour votre aide, je cale plus que sur ça !!

    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
    Public Sub Publipostage_Vers_Document()
    Dim wdApp As Word.Application
    Dim strCheminDoc As String, strCheminFusion As String
    Dim strSQL As String
    strCheminDoc = "C:\Documents and Settings\FUSION.doc"
    strCheminFusion = "C:\Documents and Settings\RESULTAT.doc"
    strSQL = "SELECT * FROM [INTRO]"
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
        .OpenDataSource Name:=CurrentProject.FullName, _
        SQLStatement:=strSQL, _
        ReadOnly:=False
        .Destination = wdSendToNewDocument
        .Execute
    End With
    .ActiveDocument.SaveAs FileName:=strCheminFusion
    End With
    Set wdApp = Nothing
     
    End Sub
    + bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Commande42_Click()
    Call Publipostage_Vers_Document
     
    End Sub

  3. #3
    Membre averti Avatar de dr_feelgood
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 292
    Points : 373
    Points
    373
    Par défaut
    J'ai trouvé ton post par hasard, car je suis moi même en train d'écrire une procédure de publipostage et j'avais un problème dans le code (ton post m'a bien aidé)

    Pour ton problème:
    Dans Word, lorsque tu crées ton document de publipostage, tu lies ton document avec une table d'Acces, en indiquant les champs de fusion, et tu peux indiquer les critères de sélection.

    Tu peux donc dans ta table access ajouter un champ Valide que tu mets sur Vrai ou Faux et seuls les lignes d'enregistrement valides seront fusionnés.

    Pour ma part, ayant une table à fusionner avec des critères de sélection complexes, j'ai choisi une autre solution: celle de créer une table temporaire xx_temp_publipostage où j'efface d'abord tous les enregistrements, puis je lance une requête ajout de ma table principale (donc je recopie uniquement dans la table provisoire les enregistrements à publiposter) avant de lancer le publipostage.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    dans ton Vb, on trouve un joli petit SQL comme source de publipostage, il suffit de le filtrer correctement avec un Where le_bon_champ = la_bonne_zone_du_formulaire

    En plus, tu peux mettre ton code directement dans l'évènement du bouton

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Merci
    Merci pour vos réponses...en effet il me manquait des paramètres d'exclusion/ inclusion pour me permettre de faire le tri. Donc j'ai rajouté des colonnes dans ma base...par contre je n'avais pas pensé à mettre directement le Where dans le bouton.

  6. #6
    Candidat au Club
    Inscrit en
    Février 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut et si que...
    as-tu pensé à transmettre à ta fct de publipostage une condition... style la clef de ton enregistrement en cours...

    puis dans ta fonction, tu colles cette condition à te requête sql...

    Moi pour mes publipostages avec access j'ai utilisé la méthode des RecSet et cela fonctionne super...
    j'ai tout trouvé là : http://heureuxoli.developpez.com/publipostage/

    Bon job

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Problème bouton de commande
    Mon projet ACCESS touche à sa fin et voilà qu'un nouveau problème apparait

    J'ai créé plusieurs boutons de commande qui actionne chacun un module ACCESS.
    Mon problème est que mon code du bouton se modifie dès que je crée un autre bouton. Savez-vous comment je peux le verrouiller ? D'avance merci

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par gds10 Voir le message
    J'ai créé plusieurs boutons de commande qui actionne chacun un module ACCESS.
    Mon problème est que mon code du bouton se modifie dès que je crée un autre bouton. Savez-vous comment je peux le verrouiller ? D'avance merci
    Expliques nous comment tu fais pour créer ce nouveau bouton de commande (en détaillant le plus possible), car c'est vraiment bizarre.

    Philippe

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Reproblème publipostage
    Bonjour,
    Donc pour créer mon bouton, j'ouvre mon formulaire. Je passe en mode création. Dans la boite à outils je vais chercher le bouton de commande et je l'insère dans mon formulaire.
    La boite de dialogue s'ouvre et là je fais "annuler" car aucun truc proposé ne me convient. Ensuite je fait un clic droit sur le bouton "créer code événement" puis "genérateur de code" et là j'insère la macro suivant que je copie à chaque fois et je modifie le chiffre (46) avec mon bouton correspondant puis derrière Document j'ajoute également un code (même référence que mon module)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Commande46_Click()
    Call Publipostage_Vers_Document
     
    End Sub
    Voilà, merci de ton aide

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Comment indiquer un critère de sélection SQL, finalement ?
    Bonjour,

    Je suis novice en VBA. Je m'entraîne donc avec les fameux Comptoirs avant de créer les modules ad hoc dans ma base de données.
    Mon souci actuel est d'indiquer au moment de la fusion vers Word, de ne prendre que l'enregistrement en cours (un petit bouton depuis le formulaire "Employés", par exemple"). Tout fonctionne, sauf lorsque j'essaie d'indiquer une condition "WHERE"...
    J'ai essayé plusieurs syntaxes, rien n'y fait... voici l'actuelle. Merci de m'aider à corriger !
    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
    Sub MergePUB4()
    Dim objword As Word.Document
    Set objword = GetObject(CurrentProject.path & "\Courriers aux employés Comptoir2.doc", "Word.Document")
    objword.Application.Visible = True
    objword.MailMerge.OpenDataSource _
        Name:=CurrentProject.path & "\Comptoir.mdb", _
        linktosource:=True, _
        Connection:="TABLE Employés", _
        sqlstatement:="SELECT * FROM [Employés]" & "WHERE 'N° employé'=  Me![N° employé]"
    objword.MailMerge.Execute
    objword.Close (wdDoNotSaveChanges)
     
    Set objword = Nothing
     
    End Sub

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut proposition
    Je suis novice aussi, mais voilà ce que j'ai écrit et ça marche ! Je n'ai plus qu'un problème avec mon bouton de commande qui change de commande !!
    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
    Public Sub Publipostage_Vers_Document()
    Dim wdApp As Word.Application
    Dim strCheminDoc As String, strCheminFusion As String
    Dim strSQL As String
    strCheminDoc = "F:\INTRODUCTION\CT02.doc"
    strCheminFusion = "F:\INTRODUCTION\COURRIER\CT02FUSION.doc"
    strSQL = "SELECT * FROM [INTRO] WHERE [Type de courrier]='CT02' AND [Courrier envoyé]='Non'"
    Set wdApp = New Word.Application
    With wdApp
    .Visible = True
    .Documents.Open strCheminDoc
    With .ActiveDocument.MailMerge
        .OpenDataSource Name:=CurrentProject.FullName, _
        SQLStatement:=strSQL, _
        ReadOnly:=False
        .Destination = wdSendToNewDocument
        .Execute
    End With
    .ActiveDocument.SaveAs FileName:=strCheminFusion
    End With
    Set wdApp = Nothing
     
    End Sub

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Re-Proposition gs10
    Merci, mais ça n'arrange pas mes bidons.
    J'aimerais une syntaxe correcte pour effectuer un filtre sur le formulaire/enregistrement en cours...

    Mon idée est de sortir un courrier automatique en Word.
    Par fusion et non via des bookmarks car j'ai, entre autres, des soucis de formatages de dates en plusieurs langues. (Suis belge et dois travailler en trois langues.)
    Les champs de fusions en Word sont formatables, en Access, je n'ai pas encore trouvé d'astuce pratique. Et de toute façon mes clients veulent du Word pour pouvoir peaufiner la mise en page avant impression....

    L'idée finale est donc d'avoir pour les 3 langues, 3 documents Word de fusion, appelables depuis 3 petits boutons de mon formulaire access....

    Merci de m'aider !

  13. #13
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello Marie
    la seule chose à vérifier quand on écrit du SQL dans un prog VB, c'est la syntaxe du texte réel qui est envoyé
    J'ai déjà eut l'occasion d'écrire que le débuggeur VB n'est pas un débuggeur SQL ! !
    pour ton cas, il me semble que tu devrait écrire plutôt ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        sqlstatement:="SELECT * FROM Employés WHERE [N° employé]=  " & Me![N° employé]
    4 changements:
    - enlevé les [ sur Employés: c'est un nom de table sans caractères spéciaux
    - enlevé la première cassure, en effet: pas besoin de concaténer des textes dont on spécifie le contenu entre guillemets, de plus, il manquait peut être un espace
    - remplacé les ' par des [ sur le nom du champ en effet, comme ça, SQL comprends un nom de champ alors qu'avec les ' SQL comprend un texte
    - sorti le Me![N° employé] ici deux possibilités:
    + + soit on transmet WHERE [N° employé]= 12
    + + soit on transmet WHERE [N° employé]= forms!super_formulaire![N° employé]
    il faut bien voir que ME signifie "le formulaire courant", ce qui a une valeur au moment ou le bouton fonctionne, par contre si on met ce texte dans le SQL, quand la requête va s'exécuter, on ne saura pas exprimer correctement ce ME

    quand c'est possible, je préfère la 1° (=12) le critère est plus simplement exprimé donc le SQL plus rapide
    par contre dans le problème des numériques décimaux provoque d'autres solutions à cause du point décimal: point ou virgule?
    certains utilisent la fonction replace, dans ce cas je préfère la deuxième solution: en interne Access se débrouille de l'interprétation des séparateurs décimaux

    plus généralement dans ces cas:
    - je place un espion sur la variable qui contient le SQL
    - je relève sa valeur juste avant utilisation
    - je l'essaye dans une requête
    - je la modifie éventuellement en mode création (le visuel, c'est pas mal)
    - je modifie le VB en conséquence

    Bonne chance

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Re Marie Polygone
    Bonjour,

    Alors je ne comprends pas ton problème. Mon truc me sert à faire un publipostage de ACCESS vers Word (plusieurs types de courriers différents) je pensais que tu cherchais la même chose.
    Bon courage


    Citation Envoyé par Marie-Polygone Voir le message
    Merci, mais ça n'arrange pas mes bidons.
    J'aimerais une syntaxe correcte pour effectuer un filtre sur le formulaire/enregistrement en cours...

    Mon idée est de sortir un courrier automatique en Word.
    Par fusion et non via des bookmarks car j'ai, entre autres, des soucis de formatages de dates en plusieurs langues. (Suis belge et dois travailler en trois langues.)
    Les champs de fusions en Word sont formatables, en Access, je n'ai pas encore trouvé d'astuce pratique. Et de toute façon mes clients veulent du Word pour pouvoir peaufiner la mise en page avant impression....

    L'idée finale est donc d'avoir pour les 3 langues, 3 documents Word de fusion, appelables depuis 3 petits boutons de mon formulaire access....

    Merci de m'aider !

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Merci à tous les deux
    Je teste... je teste... Mais ce n'est pas encore tout à fait ça.
    J'ai abandonné le Me!, ce sera en effet plus simple pour la suite.
    Par contre, je n'arrive pas encore à la bonne syntaxe.
    Soit la fusion se fait sur l'ensemble de la table, soit la liaison avec la table est perdue... soit le système se plante complètement !
    Je veux y arriver
    Je cherche encore et je vous dirai si je trouve !
    Encore merci pour les pistes et bonne journée
    Marie

  16. #16
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    j'ai oublié que je ne suis jamais arrivé à faire un publipostage avec des requêtes à critère externe, il faut donc se contenter de la 1° solution
    il faut donc y remettre Me ce qui revient à la syntaxe de mon dernier post

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Eurêka ! Publipostage sur un seul enregistrement résolu !
    Il m'a fallu du temps et pas mal de lectures, essais, énervements... puis, c'est tout con, comme toujours.
    L'astuce avec le mot-clé Me est de placer le code au niveau du formulaire d'où la commande doit partir, et non de créer un Public sub.

    La syntaxe est donc bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlstatement:="SELECT * FROM [Employés] WHERE [IdEmployé] =" & Me![IdEmployé]

    Merci à tous

    Marie

Discussions similaires

  1. [AC-2003] Problème publipostage Access-->Word
    Par jerome78330 dans le forum VBA Access
    Réponses: 2
    Dernier message: 14/04/2009, 17h40
  2. publipostage access / word
    Par gui-llaume dans le forum VBA Word
    Réponses: 35
    Dernier message: 23/10/2007, 17h03
  3. Publipostage Access Word
    Par Frenchguy dans le forum Access
    Réponses: 2
    Dernier message: 30/06/2007, 23h05
  4. Publipostage Access word (donnée requête)
    Par willytito dans le forum Access
    Réponses: 3
    Dernier message: 14/03/2007, 13h29
  5. publipostage access word
    Par imeys dans le forum Access
    Réponses: 5
    Dernier message: 14/02/2007, 10h26

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