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

Word Discussion :

Lien relatif entre Access et Word pour publipostage


Sujet :

Word

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut Lien relatif entre Access et Word pour publipostage
    Bonjour,

    J'aimerais avoir une lien relatif entre mon fichier Access et mes fichiers Word (publipostage), et ainsi pouvoir les déplacer sans perdre les liens, je m'explique :-)

    Configuration
    * Un répertoire (REP-TEST_1)
    ** avec 1 fichier Access (Base.accdb), contenant une table (Table1) et une requête (Requete1)
    ** avec 1 sous-répertoire (Fichiers-Pub) contenant 2 fichiers Word (fusion1.docm & fusion2.docm)

    Fusion1.docm, sera un publipostage de type lettre (Table1),
    Fusion2.docm, sera un publipostage de type étiquette (Requetes1),


    Les deux fichiers Word fonctionnent très bien, car pour le moment le répertoire REP-TEST_1 est à la racine de mon C:\ et que j'ai créé les liens à cette emplacement ! Maintenant si je déplace le répertoire (REP-TEST_1) par exemple dans mon répertoire (Mes Documents), les liens ne sont plus valides ! J'aimerais donc pouvoir créer des liens relatifs et non absolus ! Est-il possible de faire cela en vba ou autre...

    J'ai trouvé ce code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub DocAjoutSource()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:="C:\REP-TEST_1\base.accdb"
    End Sub
    .. que j'ai placé dans (ThisDocument) - éditeur Visual Basic de Word. Cela semble fonctionner une fois et en plus je dois obligatoirement ouvrir l'éditeur VBA et la lancer.

    Ma question:
    Est-il possible d'avoir un lien relatif entre mes fichiers Word et les fichiers ACCES ? Si oui, comment ? Quel est le code à mettre des le VBA de Word pour que cela fonctionne ?

    Pourriez-vous m'aider ?

    Ps : Dans Access, j'utilise ce code pour pouvoir ouvrir le fichier Word via un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Ouvrir le fichier Word Dim oAppli
       Dim oDoc
    Set oAppli = CreateObject("Word.Application")
    Set oDoc = oAppli.Documents.Open(CurrentProject.Path & "\Fichiers-Pub\" & "fusion1.docm", False, False, False)
    oAppli.Visible = True
    End Sub
    Grand merci

  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
    Salut,

    tu peux toujours concaténer le nom de la db avec le Path du document.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=Activedocment.Path & "\base.accdb"

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Bonjour,

    Merci pour ta réponse, mais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub DocAjoutSource()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=Activedocment.Path & "\base.accdb"
    ActiveDocument.MailMerge.Execute
    End Sub
    Il ne se lance toujours pas automatiquement et j'ai le message : objet requis

    EDIT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub DocAjoutSource()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=ActiveDocument.Path & "\base.accdb"
    ActiveDocument.MailMerge.Execute
    End Sub
    Plus de message d'erreur, je test...

    EDIT 2
    YES ! Il ne reste plus qu'à trouver comment lancer se code automatiquement, sans devoir aller appuyer sur le bouton play de l'éditeur VBA... une idée ?

    EDIT 3
    Je crois avoir trouvé ! Il faut mettre AutoOpen
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub AutoOpen()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=ActiveDocument.Path & "\base.accdb"
    ActiveDocument.MailMerge.Execute
    End Sub
    EDIT 4
    Grand merci :-)

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Il me reste un problème,

    Ce code fonctionne nickel, mais...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub AutoOpen()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=ActiveDocument.Path & "\base.accdb"
    ActiveDocument.MailMerge.Execute
    End Sub
    ... maintenant, j'aimerais reculer de deux niveaux et cela ne fonctionne pas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub AutoOpen()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:="../../" & ActiveDocument.Path & "\base.accdb"
    ActiveDocument.MailMerge.Execute
    End Sub
    EDIT
    J'ai trouvé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub AutoOpen()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=ActiveDocument.Path & "\..\..\base.accdb"
    ActiveDocument.MailMerge.Execute
    End Sub

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Encore un problème... je viens de créer une deuxième table et évidemment maintenant lors de l'ouverture du fichier word, il me demande de choisir le tableau, la table ou la requête...

    Comment lui dire aussi dans le code VBA ?

    Encore un grand merci d'avance :-)

    EDIT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub AutoOpen()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=ActiveDocument.Path & "\..\..\base.accdb", _
        SQLStatement:="SELECT * FROM [Table]"
     
    ActiveDocument.MailMerge.Execute
    End Sub
    :-)

  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
    Salut,

    AutoOpen n'est pas la bonne solution.

    Document_Open me semble plus approprié.

    Pour la table, il faut aller plus loin dans les arguments de la méthode OpenDataSource, on peut y mettre du SQL.

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Sais-tu alors me modifier ce code pour qu'il fonctionne avec Document_Open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub AutoOpen()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=ActiveDocument.Path & "\..\..\base.accdb", _
        SQLStatement:="SELECT * FROM [Table]"
     
    ActiveDocument.MailMerge.Execute
    End Sub
    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
    Salut,

    La différence est que
    Document_Open ne se produira que pour ce document

    AutoOpen se produit à l'ouverture de tous les documents.

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    MERCI :-)

    Une dernière pour la route... lors de l'ouverture du fichier Word, deux fichiers sont ouverts, le fichier source et le ficher avec fusion. Est-il possible de fermer le fichier source pour ne garder que le fichier avec fusion ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Document_Open()
    ActiveDocument.MailMerge.OpenDataSource _
        Name:=ActiveDocument.Path & "\..\..\base.accdb", _
        SQLStatement:="SELECT * FROM [Table]"
     
    ActiveDocument.MailMerge.Execute
    End Sub

  10. #10
    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,

    Si tu connais son nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Documents("SonNom.dotm").close

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Merci mais, est-il possible de lui dire de passer la fenêtre de demande d'enregistrement ?

    Une autre question, plus haut, j'explique que j'utilise un code pour ouvrir via un formulaire Access un fichier Word. ce code fonctionne sur certain PC, mais pas sur tous, sur certain, Access bloque jusqu'à ce que j'ouvre Word et à ce moment là, il me demande le chemin d'Access. Sauriez-vous me dire pourquoi ? Ou me donner un autre code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Ouvrir le fichier Word Dim oAppli
       Dim oDoc
    Set oAppli = CreateObject("Word.Application")
    Set oDoc = oAppli.Documents.Open(CurrentProject.Path & "\Fichiers-Pub\" & "fusion1.docm", False, False, False)
    oAppli.Visible = True
    End Sub
    Grand merci d'avance :-)

    EDIT
    J'ai trouvé ceci, mais je dois encore tester...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim ObjWord As Word.application
        Dim DocWord As Word.Document
     
        ''Export Document Data To Active document
        Set ObjWord = CreateObject("Word.Application")    '-- ouvrir une session Word
        Set DocWord = ObjWord.Documents.Open(FilePath)   '-- ouvrir le document Word

  12. #12
    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,

    Pour ne pas avoir la fenêtre d'enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activedocument.Close SaveChanges:=false
    Pour ouvrir une application au départ d'une autre, je préfère passer par la bibliothèque de l'appli.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim wApp As Word.Application
    Dim oDoc as Word.Document

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Re...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activedocument.Close SaveChanges:=false
    Ferme la page avec fusion, il faudrait que la commande ferme la page avant fusion...

    Vous serait-il possible de me donner le code qui ferait la même chose que celui-ci mais avec vos commandes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Commande6_Click()
    ' Créer la table - lancer la requête
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "Groupe logement - intervention financière 3 Etiquettes", acViewNormal, acEdit
    DoCmd.SetWarnings True
     
    ' Ouvrir le fichier Word Dim oAppli
       Dim oDoc
    Set oAppli = CreateObject("Word.Application")
    Set oDoc = oAppli.Documents.Open(CurrentProject.Path & "\Publipostages\Financiers\" & "Etiquettes01.docm", False, False, False)
    oAppli.Visible = True
    End Sub
    avec vos commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim wApp As Word.Application
    Dim oDoc as Word.Document
    Merci :-)

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2009
    Messages : 380
    Points : 134
    Points
    134
    Par défaut
    Les dernières nouvelles... :-)

    I. En ce qui concerne la fermeture du fichier source *.docm pour ne garder que le résultat de la fusion, j'ai trouvé ces deux commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisDocument.Close SaveChanges:=wdDoNotSaveChanges
    Ferme bien le document source sans demander d'enregistrer et ne garde que la fusion, mais je n'arrive pas à le lancer d'Access (Bouton/formulaire)... ???!!!@#|?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
    Ferme malheureusement le fichier actif, c'est-à-dire le fichier avec fusion...

    II. Comme dit plus haut, mon code pour lancer un fichier *.docm d'Access, semble fonctionner aléatoirement (fonctionne pourtant très bien avec des *.docx)... Pourquoi ? Y aurait-il une autre solution ? Il semblerait que oui vu le message de (Hier, 15h35 - Heureux-oli), mais je n'y arrive pas :-/ Voici mon code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' Ouvrir le fichier Word 
    Dim oAppli
    Dim oDoc
    Set oAppli = CreateObject("Word.Application")
    Set oDoc = oAppli.Documents.Open(CurrentProject.Path & "\Publipostages\Financiers\" & "Etiquettes01.docm", False, False, False)
    oAppli.Visible = True
    Pourriez-vous m'aider sur ces deux points ?

    Grand merci :-)

  15. #15
    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,

    Dans le code que tu nous donnes, tu utilises le LateBinding ce qui signifie que la bibliothèque n'est pas référencée dans ton projet et que le lien vers cette bibliothèque est fait par un appel dans le code avec ton CreateObject. L'avantage est que l'on dispose de l'intellisense pour l'écriture du code (proposition dans le éditeur des méthodes, propriétés et événements disponibles pour un objet.

    Pas certain que passer par une autre méthode va supprimer le phénomène aléatoire.

    on peut aussi tout faire au départ d'Access et ne pas utiliser de code dans le document.

    Mais de toute façon, quand on utilise plusieurs objets d'un même type, l'idéal est des les nommer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim wApp as Word.Application
    Dim oDoc1 As Word.Document
    Dim oDoc2 as Word.document
     
    set wApp = New(Word.Application)
    Set odoc1 = wApp.documents.Add "MonModèle.dotm"
    Set odoc2 = wApp.documents.Opent "MonDocument.docx"
     
     
    ...
     
    ...
     
    odoc1.Close .....
    Si tu prends le plis d'utiliser activedocument, probable que le document qui sera fermé ne sera pas le bon.

Discussions similaires

  1. [AC-2000] Lier la base Access au document Word pour publipostage
    Par TweeKs dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/04/2013, 09h20
  2. [AC-2007] Lien entre access et word
    Par sandralep84 dans le forum IHM
    Réponses: 1
    Dernier message: 11/10/2012, 22h04
  3. Lien entre Access et Word
    Par amartik dans le forum IHM
    Réponses: 3
    Dernier message: 23/02/2010, 14h50
  4. [AC-2007] Equivalent de publipostage entre access et word
    Par Wanaka dans le forum IHM
    Réponses: 2
    Dernier message: 29/09/2009, 16h54
  5. Pb de lien entre Access et Excel pour des fonctions VBA
    Par favien dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2005, 01h00

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