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 :

Problème publipostage vers Word / source de données constamment déplacée


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Opérateur CN
    Inscrit en
    Août 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Opérateur CN

    Informations forums :
    Inscription : Août 2018
    Messages : 27
    Points : 11
    Points
    11
    Par défaut Problème publipostage vers Word / source de données constamment déplacée
    Bonjour,

    Je me permets de vous demander de l'aide car je suis coincée depuis plusieurs jours ...

    J'ai développé une base de données intitulée "Etudes.accdb".

    A chaque nouvelle étude reçue, je suis obligée de copier/coller la BDD "Etudes.accdb" dans un répertoire spécifique (répertoire différent pour chaque étude), en modifiant son nom : "Etudes_NomClient.accdb". Je remplis ensuite le formulaire "FDA_Brchts" présent dans cette BDD.

    Sur le bouton "Courriers" du formulaire FDA_Brchts, j'ai placé le code ci-dessous (me permettant d'ouvrir un document Word pour du publipostage) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Courriers_Click()
    DoCmd.Close acForm, "FDA_Brchts"
    Dim strFichier As String
    Dim objWord As New Word.Application
    strFichier = "C:\Users\Desktop\Documents principaux\Courriers.docx"
    objWord.Documents.Open strFichier
    objWord.Visible = True
    End Sub
    Je pensais que les données saisies dans le formulaire seraient directement envoyées dans le fichier "Courriers.docx" mais Word me demande de choisir la source de données ...

    Je pense que ce problème est lié au fait que ma BDD a été déplacée dans un nouveau répertoire.

    Etant donné que le fichier Word (qui sert au publipostage) a toujours la même place (sur C:\Users\Desktop), comment pourrais-je faire pour que les données saisies dans le formulaire soient directement envoyées dans ce fichier Word, sans devoir, à chaque fois, rechercher la source de données ?

    En espérant avoir été suffisamment claire et en vous remerciant d'avance pour votre réponse !

    Ingrid

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    En complément, pouvez-vous nous indiquer le fichier (type de fichier et chemin) qui sert de source de données pour votre document de fusion "Courriers.docx" ?

    Merci bien !
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre à l'essai
    Homme Profil pro
    Opérateur CN
    Inscrit en
    Août 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Opérateur CN

    Informations forums :
    Inscription : Août 2018
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Mon document de fusion "Courriers.docx" est basé sur la requête "R_Courriers" contenue dans ma BDD "Etudes.accdb".

    Voici le chemin de ma BDD "vierge" ("Etudes.accdb") : \\serveur\Volume_1\CORRESPONDANCES

    Voici le chemin de la copie de la BDD (copie renommée "Etudes_NomClient.accdb") : \\serveur\Volume_1\ETUDES - 2019\TOULOUSE\CORRESPONDANCES

    Pour chaque nouvelle étude, je copie/colle la BDD vierge, en ajoutant le nom du client après "Etudes", et je déplace cette nouvelle BDD dans un répertoire particulier, en fonction de la commune.

    Voici, enfin, le chemin de mon document de fusion : C:\Users\Desktop\Documents principaux\Courriers.docx

    Vous faut-il d'autres renseignements ?

    Merci d'avance pour votre aide !

    Ingrid

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Il vaudrait mieux conserver l'ensemble des données dans une seule base et ajouter un champ "nomClient" dans la table correspondances qui servirait de filtre dans la requêtes correspondances.

    Sinon, vous pourriez utiliser une commande de ce style pour mettre à jour dynamiquement le lien entre le document et la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    objWord.MailMerge.OpenDataSource _
    		Name:=Currentproject.Path & "\Etudes_NomClient.accdb", _...
    https://heureuxoli.developpez.com/pu...tage/#LI-B-5-e

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre à l'essai
    Homme Profil pro
    Opérateur CN
    Inscrit en
    Août 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Opérateur CN

    Informations forums :
    Inscription : Août 2018
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci beaucoup pour avoir pris le temps de me répondre.

    Je vais essayer la commande que vous m'avez indiquée et je reviendrai vers vous si jamais je n'y parviens pas.

    Très bonne journée.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Entendu, bon courage !
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre à l'essai
    Homme Profil pro
    Opérateur CN
    Inscrit en
    Août 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Opérateur CN

    Informations forums :
    Inscription : Août 2018
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Tout d'abord, merci beaucoup pour votre aide car cela fonctionne à présent (grâce à votre commande qui met à jour dynamiquement le lien entre le document et la requête).

    A présent, il ne reste qu'un petit problème ... lorsque je lance le publipostage pour la seconde fois, l'erreur d'exécution 462 s'affiche systématiquement ("Le serveur distant n'existe pas ou n'est pas dispo").

    J'ai essayé de modifier le code grâce aux éléments trouvés sur le forum à ce sujet mais je n'y suis pas arrivée ...

    Pourriez-vous m'aider ?

    En vous remerciant d'avance.

    Bien cordialement,

    Ingrid

    PS : voici mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub MergeItCourriers()
     
    Dim objWord As Word.Document
    Dim iR As Integer
    Dim I As Integer
    Dim DocName As String
    Dim fso, f
     
    Set objWord = GetObject("\\serveur\ACCESS\Documents principaux\Courriers.docx", "Word.Document")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.CreateFolder(CurrentProject.Path & "\Courriers")
     
    objWord.Application.Visible = True
     
    objWord.MailMerge.OpenDataSource _
            Name:=CurrentProject.Path & "\FDA_Brchts.accdb", _
            LinkToSource:=True, _
            Connection:="R_Courriers", _
            SQLStatement:="SELECT * FROM [R_Courriers]"
     
    iR = objWord.MailMerge.DataSource.RecordCount
    Debug.Print iR
    For I = 1 To iR
        With objWord.MailMerge
            .DataSource.FirstRecord = I
            .DataSource.LastRecord = I
            .Destination = wdSendToNewDocument
            .Execute
            .DataSource.ActiveRecord = I
             DocName = "COUR " & .DataSource.DataFields(1).Value
             DocName = DocName & " - " & .DataSource.DataFields(6).Value
             DocName = DocName & " " & .DataSource.DataFields(7).Value
             Debug.Print DocName; I
        End With
     
        With objWord.ActiveDocument
            .SaveAs CurrentProject.Path & "\Courriers\" & DocName & ".doc"
            .Close
        End With
    Next I
     
    objWord.Close
    Set objWord = Nothing
     
    End Sub

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    bonjour,
    lorsqu'on relance une 2ème fois le publipostage, il faudrait veiller à ce que le nom du document produit soit différent du précédent.
    Le plus simple: chronodater le nom du document à la seconde près.

    A voir
    CDLT,
    "Always look at the bright side of life." Monty Python.

  9. #9
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    De mémoire ça se passe beaucoup mieux quand la source de données est dans un fichier Excel, il y a moins de conflits.

    Car quand c'est avec Access, la base est ouverte 2 fois.

    Ce que je te proposerais c'est de transférer ta requête dans un fichier excel "courriers.xlsx" qui servirait de source à ton document :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
     
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "R_Courriers", CurrentProject.Path & "\Courriers\Courriers.xlsx", True, "Courriers"
     
    objWord.MailMerge.OpenDataSource _
            Name:=CurrentProject.Path & "\Courriers\Courriers.xlsx"
     
    ...
    Je te joins un dossier avec la base de publipostage Access, contenant le code et un dossier courriers à côté contenant le document et la source Excel.

    A tester...

    Cdlt,
    Fichiers attachés Fichiers attachés
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  10. #10
    Membre à l'essai
    Homme Profil pro
    Opérateur CN
    Inscrit en
    Août 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Opérateur CN

    Informations forums :
    Inscription : Août 2018
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse.

    Je n'ai pas très bien compris ... faut-il créer le fichier excel avant de lancer le publipostage ? Ou se crée-t'il tout seul ?

    A quoi correspond exactement "Courriers" à la fin de la ligne commençant par "DoCmd.TransferSpreadsheet" ?

    En vous remerciant d'avance.

    Bien cordialement,

    Ingrid

  11. #11
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Le fichier excel courriers.xlsx se crée automatiquement à partir de votre requête r_courriers.

    Il se crée dans votre dossier courriers situé à côté de la base.

    Dans le code que je vous ai donné, il faut remplacer mon fichier docx par votre fichier docx sur le serveur en indiquant son chemin comme vous l'aviez fait auparavant.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  12. #12
    Membre à l'essai
    Homme Profil pro
    Opérateur CN
    Inscrit en
    Août 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Opérateur CN

    Informations forums :
    Inscription : Août 2018
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    Bonjour et merci beaucoup pour votre réponse.

    Je vais donc essayer de transférer la requête dans un fichier excel.

    Si cela fonctionne, je reviendrai pour indiquer que le problème a été résolu .

    Mille mercis pour avoir pris le temps de me répondre.

  13. #13
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Entendu

    Les éléments à modifier dans votre code sont donc principalement ceux-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
     
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "R_Courriers", CurrentProject.Path & "\Courriers\Courriers.xlsx", True, "Courriers"
     
    objWord.MailMerge.OpenDataSource _
            Name:=CurrentProject.Path & "\Courriers\Courriers.xlsx"
     
    ...
    Et bien sûr vous devez avoir le dossier "Courriers" à côté de la base.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je n'ai jamais rencontré de problèmes entre Access et word pour le publipostage. Le seul intérêt que je verrais à la chose serait d'extraire dans Excel en alimentant toujours le même fichier, de manière à ne pas devoir toucher au publipostage qui utiliserait donc toujours une source placée au même endroit.

    Mais le problème vient pour moi de ce que User a souligné dans un de ses posts. Quelle est l'utilité de multiplier les bases Access, ce qui oblige à manipuler par code la source du publipostage alors qu'il serait si simple de tout mettre dans UNE base de données et de filtrer le client choisi (soit dans une requête Access avant d'ouvrir le publipostage, soit dans word).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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. Problème publipostage ACCESS - Word
    Par gds10 dans le forum IHM
    Réponses: 16
    Dernier message: 13/11/2008, 22h25
  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