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

Access Discussion :

MailMerge créé une nouvelle instance d'Access


Sujet :

Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut MailMerge créé une nouvelle instance d'Access
    Bonjour,

    je suis en galère avec un publipostage que je lance depuis Access:

    Quand je le lance, MailMerge créé une (voire plusieurs, parfois) instance(s) d'access.

    J'aimerais pouvoir fermer cette instance vide qui ne sert à rien, sauf à embrouiller l'utilisateur final...

    Voilà un bout de code (J'ai adapté ce que j'ai récupéré ici)

    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
    With wdApp
            ' Word est visible pendant les tests
            .Visible = True
     
            ' Ouvrir la lettre type
            .Documents.Open DOC_WORD
     
            ' Lier la lettre type à la source de données Access
            .ActiveDocument.MailMerge.OpenDataSource _
                Name:=CurrentProject.FullName, _
                SQLStatement:="SELECT * FROM [rContratCDDSaison]"
     
            ' La fusion doit se faire dans un nouveau document
            .ActiveDocument.MailMerge.Destination = wdSendToNewDocument
     
            ' Exécuter la fusion
            .ActiveDocument.MailMerge.Execute
            ' Redonner le focus à la lettre type et fermer sans enregistrer
            .Documents.Open DOC_WORD
     
            .ActiveDocument.Close wdDoNotSaveChanges
     
        End With
    *.Har(d)t
    ---
    "Je donnerais mon bras droit pour être ambidextre"
    Brian W. Kernighan

  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
    Un peu spécial, tu nous dis que tu as plusieurs instances d'access ouvertes et tu nous donnes la partie relative à Word ??
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par Heureux-oli
    Un peu spécial, tu nous dis que tu as plusieurs instances d'access ouvertes et tu nous donnes la partie relative à Word ??
    Je me suis dit que c'est le openDataSource du mailmerge qui devait créer ces instances en plus, mais je peux me tromper.

    Voici le code complet du bouton:

    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
    Private Sub cmdDUE_Click()
        'Lance le publipostage vers DUE
        Call creerRequeteDUE(CLng(Nz(Me.numContrat)))
        ' Variable pour gérer l'objet Word
        Dim wdApp As Word.Application
        ' Modifiez ce chemin en fonction de votre configuration
        Const DOC_WORD = "E:\toto\DUE.doc"
     
        ' Passer à la partie Publipostage
        Set wdApp = New Word.Application
        With wdApp
            ' Word est visible pendant les tests
            .Visible = True
     
            ' Ouvrir la lettre type
            .Documents.Open DOC_WORD
     
            ' Lier la lettre type à la source de données Access
            .ActiveDocument.MailMerge.OpenDataSource _
                Name:=CurrentProject.FullName, _
                SQLStatement:="SELECT * FROM [rDUE]"
     
            ' La fusion doit se faire dans un nouveau document
            .ActiveDocument.MailMerge.Destination = wdSendToNewDocument
     
            ' Exécuter la fusion
            .ActiveDocument.MailMerge.Execute
            ' Redonner le focus à la lettre type et fermer sans enregistrer
            .Documents.Open DOC_WORD
     
            .ActiveDocument.Close wdDoNotSaveChanges
     
        End With
     
        Set wdApp = Nothing
        MsgBox "Publipostage terminé !", vbInformation
    Exit_cmdPub2007_Click:
            Exit Sub
     
    Err_cmdPub2007_Click:
            MsgBox err.Description
            Resume Exit_cmdPub2007_Click
    End Sub
    Et la procédure creerRequeteDUE(), qui sert à créer une requête à partir de laquelle je lance le publipostage.

    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
    Sub creerRequeteDUE(unId As Long)
        'Créé une requête concernant la déclaration unique d'embauche qu'on veut imprimer
        Dim strSQL As String, requete As QueryDef
    On Error GoTo err_creationrequete
     
        strSQL = "SELECT tPersonne.numMatricule, tPersonne.nom, tPersonne.nomJeuneFille, tPersonne.prenom, tPersonne.sexe, tPersonne.numSSMSA, tPersonne.nationalite, tPersonne.dateNaissance, tPersonne.lieuNaissance, tPersonne.paysNaissance, tPersonne.adresse1, tPersonne.adresse2, tPersonne.codePostal, tPersonne.ville, tContrat.dateDebut, tContrat.heure, tContrat.coefficient, tContrat.numEmploi, tContrat.numTypeContrat"
        strSQL = strSQL & " FROM tPersonne INNER JOIN tContrat ON tPersonne.numPersonne = tContrat.numPersonne"
        strSQL = strSQL & " WHERE tContrat.numContrat=" & unId
        Set requete = CurrentDb.CreateQueryDef("rDUE", strSQL)
     
        Exit Sub
    err_creationrequete:
        If err.Number = 3012 Then
            CurrentDb.QueryDefs.Delete "rDUE"
            Resume 0
        Else
            MsgBox err.Description & " " & err.Number
        End If
     
    End Sub
    *.Har(d)t
    ---
    "Je donnerais mon bras droit pour être ambidextre"
    Brian W. Kernighan

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir;

    Lorsque j'ai mis en ligne ce code j'indiquais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'On met à jour la table acquéreursPub par les requêtes suppression et ajout
        DoCmd.OpenQuery "qrySup_Word", acViewNormal, acEdit
        DoCmd.OpenQuery "QryAjout_Word", acViewNormal, acEdit
    Ce qui mettait à jour la table ou se sert Word.

    Par contre ta requête m'inquiètes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call creerRequeteDUE(CLng(Nz(Me.numContrat)))
    Est elle paramétrée? D'une façon schématique il ne faut pas d'inter-action Requête/Utilisateur.

    D'autre part tu ne respectes pas l'ordre communiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Modifiez ce chemin en fonction de votre configuration
    Const DOC_WORD = "C:\Bases FrancisHop\HopRappel\HopValeurAnniversaire.doc"
     
    ' Variable pour gérer l'objet Word
    On Error GoTo Err_cmdPublipostage_Click
    Dim wdApp As Word.Application
    Tu inscrits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Variable pour gérer l'objet Word
        Dim wdApp As Word.Application
        ' Modifiez ce chemin en fonction de votre configuration
        Const DOC_WORD = "E:\toto\DUE.doc"
    Mais plus grave :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exit_cmdPub2007_Click:
            Exit Sub
     
    Err_cmdPub2007_Click:
            MsgBox err.Description
            Resume Exit_cmdPub2007_Click
    Tu te sers de mes boutons de commandes?

    Cordialement.

    Ps :Quand tu écris :
    Quand je le lance, MailMerge créé une (voire plusieurs, parfois) instance(s) d'access
    Ce sont des documents word qui s'ouvrent?
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par francishop
    Bonsoir;

    Lorsque j'ai mis en ligne ce code j'indiquais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'On met à jour la table acquéreursPub par les requêtes suppression et ajout
        DoCmd.OpenQuery "qrySup_Word", acViewNormal, acEdit
        DoCmd.OpenQuery "QryAjout_Word", acViewNormal, acEdit
    Ce qui mettait à jour la table ou se sert Word.

    Par contre ta requête m'inquiètes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call creerRequeteDUE(CLng(Nz(Me.numContrat)))
    Est elle paramétrée? D'une façon schématique il ne faut pas d'inter-action Requête/Utilisateur.

    D'autre part tu ne respectes pas l'ordre communiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ' Modifiez ce chemin en fonction de votre configuration
    Const DOC_WORD = "C:\Bases FrancisHop\HopRappel\HopValeurAnniversaire.doc"
     
    ' Variable pour gérer l'objet Word
    On Error GoTo Err_cmdPublipostage_Click
    Dim wdApp As Word.Application
    Tu inscrits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Variable pour gérer l'objet Word
        Dim wdApp As Word.Application
        ' Modifiez ce chemin en fonction de votre configuration
        Const DOC_WORD = "E:\toto\DUE.doc"
    Mais plus grave :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exit_cmdPub2007_Click:
            Exit Sub
     
    Err_cmdPub2007_Click:
            MsgBox err.Description
            Resume Exit_cmdPub2007_Click
    Tu te sers de mes boutons de commandes?

    Cordialement.

    Ps :Quand tu écris : Ce sont des documents word qui s'ouvrent?
    Merci de toutes ces remarques, effectivement j'ai pas mal bidouillé le code et je vais revoir le code de départ.

    Ma requête est créée à la volée pour récupérer les données à publiposter, qui ne concerne qu'un seul enregistrement en fait.

    C'est bien un document Word qui s'ouvre. Ce qui m'embête, c'est qu'une deuxième instance d'Access s'ouvre en même temps (je suppose qu'elle est la conséquence du MailMerge.OpenDataSource) et que je ne sais pas comment refermer celle-ci.
    *.Har(d)t
    ---
    "Je donnerais mon bras droit pour être ambidextre"
    Brian W. Kernighan

  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
    Publipostage

    Tu peux toujours faire un peu de lecture.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre averti Avatar de mcdotta
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    292
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 292
    Points : 324
    Points
    324
    Par défaut
    Hello,


    Pas trop suivi les échanges de mails mais pour éviter ces sessions ouvertes lors du publipostage, j'exporte ma query de base en fichier txt délimité et fais la fusion avec ce fichier.

    Je n'ai pas eu de problème depuis. En plus, selon les versions de Word les commandes de publipostage au niveau des strings de connection changent.... Avec cette solution, je ne crains plus les différences de version....

    Bonne journée

Discussions similaires

  1. lancer une nouvelle instance
    Par airod dans le forum Général Python
    Réponses: 2
    Dernier message: 10/12/2008, 07h31
  2. Connexion de Cognos à une nouvelle instance de BDD
    Par liberty- dans le forum Cognos
    Réponses: 1
    Dernier message: 18/09/2008, 14h13
  3. pb de creation d'une nouvelle instance SQL2005
    Par SandraG dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/07/2008, 14h57
  4. Creer une nouvelle instance d'un xmlreader
    Par chris81 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/01/2008, 10h11
  5. comment creer une nouvelle instance ?
    Par exyacc dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/04/2007, 09h54

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