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 :

Word Mailmerge Opendatasource Jet.OLEDB


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Par défaut Word Mailmerge Opendatasource Jet.OLEDB
    Bonjour bonjour,

    Voila j'ai une BDD access séparé en deux
    - un fichier client (dans le dossier : file_bddc) avec requetes formulaires etats
    - un fichier serveur (dans le dossier : file_bdd) avec les tables
    - un fichier sécurité .mdw (dans le dossier file_bddw)

    Je souhaiterais faire un publipostage dans word en cliquant sur un bouton dans Access. J'ajoute la librairie "Microsoft Word Object Library" afin de me servir du mail merge.

    Voila le début de mon code qui fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim objDoc As Word.Document
    Dim file As String
     
    file = "adresse de mon fichier a publier"
    fermer_fichier_word (file) 'ferme le fichier si ouvert
    Set objDoc = GetObject(file, "Word.document")
    objDoc.Application.Visible = True
    C'est a partir de la que ca se complique.
    - Ou bien je reussi a me connecter directement au fichier serveur file_bdd
    - Ou bien je cree une table en local sur file_bddc et connecte word a cette table
    Aucune des deux solutions ne fonctionne, a savoir que je preferai me connecter directement a la base pour ne pas avoir a modifier le fichier en local.

    1 SOLUTION : connection au fichier distant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim strConnection As String
    strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Password=""motdepasse"";" & _
        "User ID=user;Data Source=" & file_bdd & ";" & _
        "Mode=Read;Jet OLEDB:System database=" & file_bddw & ";"
     
    Dim sql As String
    sql = "Requete SQL qui fonctionne parfaitement en la mettant directement dans access"
     
    objDoc.MailMerge.OpenDataSource _
           Name:=file_bdd, _
           Connection:=strConnection, _
           SQLStatement:=sql
    Cela m'ouvre une fenetre me permettant de choisir une table de file_bdd.
    J'en choisi une bien que je souhaite prendre des informations de plusieurs tables liées entre elles.

    Apres cela : Erreur 5922 "Word n'a pas pu ouvrir la source de données." (déboguage sur le OpenDataSource)

    2 SOLUTION : Creation d'une table en local replique de la requete
    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 strConnection As String
    strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Password=""motdepasse"";" & _
        "User ID=user;Data Source=" & file_bddc & ";" & _
        "Mode=Read;Jet OLEDB:System database=" & file_bddw & ";"
     
    Dim sql As String
    sql = Requete SQL qui fonctionne parfaitement en la mettant directement dans access creant "MergeTable"
    DoCmd.RunSQL (sql)
     
    objDoc.MailMerge.OpenDataSource _
            Name:=CurrentDb.Name, _
            Connection:=strConnection, _
            SQLStatement:="SELECT * FROM [MergeTable]"
    Erreur => "Une erreur s'est produite: La base de données a été placée par l'utilisateur "Admin" sur "Pc-utilisateur" dans un état l'empechant d'etre ouverte ou vérouillée."
    Puis m'ouvre une fenetre "proprietes des liaisons de données", je reconfigure avec l'assistant, toujours la meme erreur.
    Derriere Access a toujours la meme erreur 5922.

    Si quelqu'un pouvait m'aider a configurer correctement cette OpenDataSource. Le mieux serait de se connecter directement au fichier distant. Ou bien pouvoir directement transmettre un Recordset a Word sans avoir a réouvrir la base.

    Merci pour votre aide cela fait une semaine que je recherche une solution a mon problème !

    Gabvoir

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Par défaut
    Je viens également d'essayer de créer localement une requete et en mettant tous les paramètres de Jet

    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
     
    sql = "SELECT * FROM Clients2 WHERE N° = 243;"
    Dim qd As QueryDef
    supprimer_requete ("QRYTMP")
    Set qd = CurrentDb.CreateQueryDef("QRYTMP", sql)
     
    With objDoc.MailMerge
        .MainDocumentType = wdFormLetters
        .OpenDataSource _
            Name:=file_bddc, _
            ConfirmConversions:=False, ReadOnly:=False, _
            LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
            PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", _
            Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
            "Provider=Microsoft.Jet.OLEDB.4.0;Password=""psw"";User ID=user;Data Source=" & _
            file_bdd & ";Mode=Read;Extended Properties="""";Jet OLEDB:System database=""" & file_bddw & """;" & _
            "Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5", _
            SQLStatement:="SELECT * FROM `QRYTMP`", SubType:=wdMergeSubTypeAccess
     
            With .DataSource
                .FirstRecord = iFirst
                .LastRecord = iLast
            End With
    End With
    La requete se cree, une fenetre de Word s'ouvre et me demande de "confirmer la source de données", j'ai essayé : "OLE DB" et "MS Acess vie DDE", plantage et toujours erreur 5922.

    Je viens de penser que la reference que j'ai ajouter a mon projet est "OLE automation" , "Microsoft ADO 2.8 library" et " Microsoft ADO recordset 2.8 library" ?!

    Merci de votre aide

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juillet 2006
    Messages : 133
    Par défaut Reponse
    Bon a force de chercher j'ai enfin trouvé !
    Il faut que je passe obligatoirement par un fichier odc vide !

    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
     
    With objDoc.MailMerge
        .MainDocumentType = wdFormLetters
         .OpenDataSource _
            Name:="U:\BDD\empty.odc", _
            ConfirmConversions:=False, ReadOnly:=True, _
            LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
            PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", _
            Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
            "Provider=Microsoft.Jet.OLEDB.4.0;Password=""pwd"";User ID=user;Data Source=" & _
            file_bdd & ";Mode=Read;Extended Properties="""";Jet OLEDB:System database=""" & file_bddw & """;" & _
            ";Jet OLEDB:Engine Type=5", _
            SQLStatement:=sql, SubType:=wdMergeSubTypeAccess
     
            With .DataSource
                .FirstRecord = iFirst
                .LastRecord = iLast
            End With
    End With
    J'ai essayé cela avec une requete simple. Cependant la requete que je souhaite utiliser pour mon publipostage est relativement grande est dépasse trés largement les 255 caractères.
    J'ai donc pensé revenir sur mon idée precedente : créer une requete [QueryMerge] sur ma base, et acceder à cette requete avec un "SELECT * FROM [QueryMerge]"
    Quand je cree cette requete bien entendu elle se cree sur mon fichier local (file_bddc). Et quand je tente de connecter le mailmerge

    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
     
    With objDoc.MailMerge
        .MainDocumentType = wdFormLetters
         .OpenDataSource _
            Name:="U:\BDD\empty.odc", _
            ConfirmConversions:=False, ReadOnly:=True, _
            LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
            PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", _
            Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
            "Provider=Microsoft.Jet.OLEDB.4.0;Password=""pwd"";User ID=user;Data Source=" & _
            file_bddc & ";Mode=Read;Extended Properties="""";Jet OLEDB:System database=""" & file_bddw & """;" & _
            ";Jet OLEDB:Engine Type=5", _
            SQLStatement:="SELECT * FROM [QueryMerge]", SubType:=wdMergeSubTypeAccess
     
            With .DataSource
                .FirstRecord = iFirst
                .LastRecord = iLast
            End With
    End With
    L'assistant de connexion Word s'ouvre, je verifie les informations de conexion.
    Je clique "Tester la connexion" : "Echec du test de connexion en raison d'un erreur survenue lors de l'initialisation du fournisseur. La base de données a ete placée par l'utilisateur "Gab" sur "Pc-utilisateur" dans un etat l'empechant d'etre ouverte ou vérouillé". Le nom dutilisateur que j'ulise pour cette conexion est un autre que celui utilisé pour ovurir la base.

    J'ai essayé d'ouvrir la base une deuxieme fois. Paf meme message !
    On ne peut donc pas ouvrir deux fois la meme base.

    Y a til une solution a mon probleme ?

Discussions similaires

  1. Microsoft Jet oledb 4.0 sur Windows 7
    Par leeloo95 dans le forum Windows 7
    Réponses: 0
    Dernier message: 17/11/2009, 09h33
  2. Réponses: 6
    Dernier message: 02/05/2009, 16h40
  3. Microsoft.Jet.OLEDB & Pilote ISAM
    Par Ryansoldier dans le forum Débuter
    Réponses: 0
    Dernier message: 28/04/2009, 13h43
  4. Table introuvable avec jet oledb
    Par hellbilly dans le forum C#
    Réponses: 0
    Dernier message: 19/11/2008, 22h37
  5. [VBA WORD] Mailmerge et protection formulaire
    Par Marc Driver dans le forum VBA Word
    Réponses: 2
    Dernier message: 03/08/2005, 12h51

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