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 :

Exporter d'Access sous Word avec MailMerge


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut Exporter d'Access sous Word avec MailMerge
    Bonjour à tous,

    Reconnaissons tout d'abord que je suis nul en VBA
    Voulant aller plus loin qu'une simple exportation d'un état Access vers Word.rtf qui ne prend que le texte (et laisse donc tous les dessins et objets ), je me suis tourné vers un module sous access qui exporte les champs de ma requete source de mon état vers un fichier Word "fusionné" qui contient ma si précieuse mise en page (inspiré par le tutto de Caféine et autres articles).
    Bon jusque là ça fonctionne pas mal, mais ce n'est pas très propre :
    Je voudrais envoyer le fichier Word directement en PJ d'un mail, en spécifiant au préalable un nom automatique de la PJ (et puis l'objet du mail tant qu'à y être ... ou alors si ce n'est pas possible, au moins enregistrer le tout nouveau document Word avec le nom auto et vers en emplacement spécifique.

    Voici mes derniers essais infructueux en ce sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function MergeIt()
    Set objWord = GetObject("C:\brice\Fiche_Non_Conformite.doc")
    ' Rend Word visible important puisque la fusion se fait à l'écran.
    objWord.Application.Visible = True
    ' Exécution de la fusion.
    objWord.MailMerge.Destination = wdSendToEmail
    objWord.MailMerge.Execute
    objWord.Close (wdDoNotSaveChanges)
    Set objWord = Nothing
    Set MyMerge = ActiveDocument.MailMerge
    MyMerge.Close (wdDoNotSaveChanges)
    Set MyMerge = Nothing
    End Function
    Ce que ça donne : Création du fichier Word fusionné final, mais pas en PJ mail (fermeture du fichier Word source de la fusion OK)... et ne parlons pas des SaveAs que j'ai tenté !

    Ma config : base partagée en réseau (data sur serveur et façade traitement sur les postes clients) sous Access 2000

    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je vais te donner de la lecture.

    C'est une façon comme une autre pour être relax un moment

    http://heureuxoli.developpez.com/off.../publipostage/

    http://heureuxoli.developpez.com/publipostage/

    http://heureuxoli.developpez.com/office/sondage/

    Tu trouveras dans ces tutos comment envoyer des données Access dans Word avec ou sans Mailmerge.
    Tu découvriras comment utiliser Outlook pour envoyer des documents.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    Merci pour ta réponse, j'ai tout repassé en revue et malheureusement je ne trouve pas la bonne solution
    Je n'arrive pas à enregistrer la nouveau document fusionné en spécifiant un nom automatique dans le code VBA... domage !

    Alors je me suis du coup retourné vers la pauvre commande export sous rtf... un petit truc complémentaire m'aiderait bien :
    - quel est le code vba qui renvoie la date du jour (pour intégrer au nom aitomatique de mon fichier) ?
    - comment faire pour que lors de l'enregistrement du fichier rtf, il me demande confirmation avant d'écraser un fichier qui aurait un même nom ?

    Voici mes lignes vba concernée :

    stDocName = "E exportation Fiche Non Conformite"
    DoCmd.OutputTo acReport, stDocName, acFormatRTF, [Texte56] & "\FNC - " & [Lot] & "-" & [code ana] & ".doc", True

    Merci et A+

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Dans le premier tuto, j'explique comment pour chaque enregistrement générer un document et lui donner un nom !
    Dès qu'on a le nom du document, on peut utiliser ce nom pour faire un fichier joint à un message Outlook.

    Pour récupérer la date c'est Pour le fichier tu dois faire un test sur le fichier avant, si le ichier Existe ou non.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Je te présente alors mes excuses, car je ne vois pas où... je dois avoir du ca.. dans les yeux désolé, peux tu me donner le n° de paragraphe STP ?
    Je dois en outre préciser que je suis sous Office 2000, et que donc certaines fonctionalités sont diffrentes voir inéxistentes

    Pour le champs Date() c'est ce que je pensais aussi mais quand je l'insère dans mon code VBA m'enlève automatiquement les paranthèses et cela me cré une erreur

    Pour finir, pour le test du fichier, je suis prêt à faire quelques lectures pour ne pas d'embêter plus que ça mais aurais tu un tutto sous le coude qui soit adapté STP ?

    Merci d'avoir pris le peine de me répondre.

    Damien

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Pour la sauvegarde avec un nom voilà la paragraphe qui en traite
    http://heureuxoli.developpez.com/off...ostage/#L8-D-1

    Pour la date, si tu reçois une erreur, on peut ruser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Format(Now(), "dd/mm/yyyy")
    Pour la version, il n'y a pas de spécificité dans le code, il devrait fonctionner à partir de la version 97.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci encore de m'avoir répondu, tu as de la patience et je vais essayer de ne pas trop en abuser !

    Pour ta ruse sur la date, cela ne fonctionne pas et j'ai même essayé cela :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim stDocName As String
    mydate = Format(Now(), "dd/mm/yyyy")    
    stDocName = "E exportation Fiche Non Conformite"
    DoCmd.OutputTo acReport, stDocName, acFormatRTF, [Texte56] & "\FNC  " & mydate & ".doc", True
    Sans succès ! Que j'enlève ou non le formatage et que je mette le terme Date à la place de Now (où les parenthèse sautent toujours) cela ne fonctionne pas.
    J'avais opté pour cette solution pour éviter l'écrasement systématique si création à date différente mais je commence un peu à désespérer !

    Pour ton tutto, j'avais déjà repéré le save as avec lequel j'ai fait quelques essais mes comme je passe par objWord.MailMerge.Execute, cela cré un nouveau fichier que je n'arrive pas à sélectionner puisque sans adresse (même pas dans les fichiers temp de Windows)... donc un peu coincé.
    Je crois (si je comprend bien) que tu l'utilises dans un mode de récup des données différent ce qui fait que tu peux sélectionner ton fichier word dès le début.

    Merci

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Possible qu'en 2000, il faille utiliser d'autres lettres.
    Fais F1 lorsque tu as ton curseur sur Format.

  9. #9
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    On va pour le fichier faire autrement, un peu plus simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub MonTestPublipost()
    Dim wApp as New Word.Application
    Dim oDoc as Word.Document
     
    Set oDoc = wApp.Open ("C:\brice\Fiche_Non_Conformite.doc")
     
    oDoc.SaveAs "c:\temp\Fiche" & Day() & "-" & Month() & ".doc"
    wApp.Visible = True
    End Sub
    Essaie ce code dans ta DB pour voir !

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Brèle, je suis une vraie brèle !!!

    Sais tu pourquoi ton code : Format(Now(), "dd/mm/yyyy") ne fontionnait pas dans le nom d'enregistrement d'un fichier !?
    Allé je te mets sur la piste, comme ça : Format(Now(), "dd.mm.yyyy") ça fonctionne !
    ... rappel de base de gestion de fichiers les caractères "/" sont interdits dans le nom des fichiers.

    Bon sinon pour ton dernier code pour l'enregistrement du .doc fusionné, j'ai un renvoie d'erreur déjà au noveau de la définition Dim : "Type définie par l'utilisateur non défini".
    Sinon, j'ai du mal à comprendre comment cela peu fonctionner puisque tu n'éxécutes à aucun moment le mailmerge ?

    En tous cas merci pour ton aide, tu m'as au moins résolu un problème !


    Merci encore

  11. #11
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    "Type définie par l'utilisateur non défini".
    Tu n'as pas déclaré la bibliothèque Word dans ton projet

    Access pense que c'est un type de données que tu as crée !

    Ajoute la bibliothèque Word à ton projet

    Outils => Référence => Microsoft Office Word xx.x .....

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Bon OK je suis une bille en VBA...
    ... désolé pour le temps de réponse mais pas eu le "temps".

    j'ai donc fait ce que tu m'as indiqué, mais pour info j'ai une erreur sur "wApp.Open "

    Est ce que la déclaration de la bibliothèque Word est à faire sur tous les postes clients qui vont utiliser cette base (ou est ce que c'est automatiquement enregistré dans la base) ?

    Ne te casse pas la tête à essayer de résoudre ce problème car j'ai trouvé un moyen détourné pour atteindre mon objectif. Mais rassure toi tu m'as bien aidé en ce qui concerne le chemin d'enregistrement (et ça c'est en place et opérationnel )

    Merci et A+

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    bonsoir,

    je voudrais faire une fusion publipostage access vers word. J'ai mis en place le tutoriel de Heureux oli qui fonctionne à merveille lorsque j'ai un contrat un soustraitant et un seul site mais qu'il me faudrait un petit coup de main pour fusionner plusieurs sites dans le même contrat. Les sites sont dans un sous formulaire du formulaire contrat/soustraitant)

    J'ai constaté qu'avec le transfert des données, access était capable d'envoyer un contrat et toutes ses clauses pour reprendre l'exemple. Je voudrais quelque chose de similaire mais en plublipostage pour avoir la mise en forme.

    Quelqu'un pourrait il m'aider ?

    merci
    isabelle

  14. #14
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Citation Envoyé par le.dams Voir le message
    Bon OK je suis une bille en VBA...
    ... désolé pour le temps de réponse mais pas eu le "temps".

    j'ai donc fait ce que tu m'as indiqué, mais pour info j'ai une erreur sur "wApp.Open "

    Est ce que la déclaration de la bibliothèque Word est à faire sur tous les postes clients qui vont utiliser cette base (ou est ce que c'est automatiquement enregistré dans la base) ?

    Ne te casse pas la tête à essayer de résoudre ce problème car j'ai trouvé un moyen détourné pour atteindre mon objectif. Mais rassure toi tu m'as bien aidé en ce qui concerne le chemin d'enregistrement (et ça c'est en place et opérationnel )

    Merci et A+


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oDoc = wApp.Documents.Open ("   ")
    Toutes mes excuses, j'ai oublié un morceau.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    Bonsoir Heureux Oli,

    J'essaie pour le moment de formater le module afin qu'il filtre les enregistrements pour n'afficher que celui qui m'intéresse. J'ai donc personnaliser le code de ton tuto comme suit :

    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
    Sub Mergecourrierst()
    Dim objWord As Word.Document
    Set objWord = GetObject("C:\Documents and Settings\isabelle\Mes documents\modeleCourrierSt.doc", "Word.Document")
    ' Rend Word visible important puisque la fusion se fait à l'écran.
    objWord.Application.Visible = True
    ' Sélectionne .la base de données chantier multisites comme source de données pour la fusion
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Documents and Settings\isabelle\Mes documents\CHANTIER MULTISITES 17.06.mdb", _
            LinkToSource:=True, _
            Connection:="query R_CourrierSt", _
            SQLStatement:="SELECT * FROM [R_CourrierSt]WHERE T_CONTRAT_SITE.ID_CONTRAT_SITE = [Formulaires]![F_CONTRAT]![F_CONTRAT_SITE].[Form]![ID_CONTRAT_SITE]"
    ' Exécution de la fusion.
    objWord.MailMerge.Execute
    Set objWord = Nothing
     
    End Sub
    mais il fusionne tous les enregistrements de ma requête

    qu'est ce qui cloche ?

    merci à toi
    isabelle

  16. #16
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je suppose que le formulaire est ouver au moment ou tu lance ton code?

    Essaie de mettre ton SQL Statement autrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim SqlS as string
    SqlS = "SELECT * FROM [R_CourrierSt]WHERE T_CONTRAT_SITE.ID_CONTRAT_SITE = " 
    SqlS = SqlS & [Formulaires]![F_CONTRAT]![F_CONTRAT_SITE].[Form]![ID_CONTRAT_SITE] & ";"
    ...
    ...
    SQLStatement:= SqlS
    A condition que ton ID_CONTRAT_SITE soit un nombre.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    Merci de m'avoir répondu si vite,

    j'ai essayé mais la requête donne Sqls ="" (quand ca se surligne en jaune)

    quand je lance la fusion vers word, elle ne prend pas en compte le critère (juste select * from R_courrierst) bien que j'ai mis le critère que tu m'as indiqué

    ca m'ouvre une boite "propriété de selection de données" lors de la fusion et me demande de choisir la base pour la connection

    si je ne met pas de critère tout fonctionne bien

    isabelle

  18. #18
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Si j'ai bien compris, tu lance ce code au départ de Word.

    C'est normal que ça ne fonctionne pas, tu fais appel à un critère que est donné par un formulaire qui n'est pas actif.

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 159
    Points
    159
    Par défaut
    Non je lance mon code depuis un bouton sur mon formulaire access ou figure l'iD contrat site

    mais lorsque word s'ouvre il indique qu'il va insérer les champs correspondants à la requete R courrier st.

    Alors que j'ai mis les critères que tu m'as indiqué, il n'en tient par compte

    si j'enlève le critère, ca fonctionne mais il me fusionne les 203 enregistrements !

    Je souhaite qu'il ne m'affiche que le critère du formulaire

  20. #20
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    On va faire autrement,

    Fais un debug.print sur la valeur de SqlS

    Et dans le critère, essaie de simplement mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim SqlS as string
    SqlS = "SELECT * FROM [R_CourrierSt]WHERE T_CONTRAT_SITE.ID_CONTRAT_SITE = " 
    SqlS = SqlS & Me.[ID_CONTRAT_SITE] & ";"
    
    Debug.print SqlS
    ...
    ...
    SQLStatement:= SqlS

Discussions similaires

  1. Export état access sous word
    Par laurent35 dans le forum Access
    Réponses: 4
    Dernier message: 08/04/2008, 12h05
  2. Importation/ exportation txt-->Access sous VB6
    Par moi_leila dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 02/12/2007, 14h43
  3. Manipulation d'un tableau sous Word avec vba
    Par Françoise Sagan dans le forum VBA Word
    Réponses: 1
    Dernier message: 02/12/2006, 13h54
  4. Exporter Etat Access2000 sous Word
    Par GoldHofer dans le forum Access
    Réponses: 2
    Dernier message: 05/05/2006, 15h08
  5. Envoi d'info d'Access vers Word avec des signets
    Par Laetis dans le forum Access
    Réponses: 1
    Dernier message: 03/05/2006, 19h04

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