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 Word Discussion :

Fusion avec word


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Fusion avec word
    bonjour,


    Pour les besoins de mon cabinet, j'ai créé un bouton sur un formulaire qui a pour vocation à lancer une fusion pour le client concerné. Mes matrices WORD contiennent des champs de fusion. Par ailleurs, je ne voudrais pas éditer un courrier pour chaque fiche client que j'ai préparé, mais seulement dans le dossier dans lequel l'enregistrement sur lequel je me trouve.


    Dans VBA, au niveau du formulaire, pour l'objet de classe, j'ai établi le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cmdMergeIt_Click()
     
    Call MergeIt
     
    End Sub
    au niveau du module - macro convertie macro1, j'ai établi ceci :
    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
     
    Sub MergeIt()
     
    Dim objWord As Word.Document
    Set objWord = GetObject("C:\Users\MDelhalle\Desktop\matrix\lettre.dotm")
    ' Rend Word visible important puisque la fusion se fait à l'écran.
    objWord.Application.Visible = True
    ' Sélectionne .la base de données Comptoir comme source de données pour la fusion
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Users\MDelhalle\Desktop\cabinetavocat.accdb", _
            LinkToSource:=True, _
            Connection:="TABLE dossier", _
            SQLStatement:="SELECT * FROM [dossier]"
    ' Exécution de la fusion.
    objWord.MailMerge.Execute
    Set objWord = Nothing
     
    End Sub

    Lorsque je clique ensuite sur le bouton que j'ai préparé rien ne se passe, pas même le lancement de WORD.

    J'ai dû louper quelquechose, mais quoi...

    Merci d'avance pour votre aide.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bon j'ai avancé d'une étape en liant la procédure avec l'événement.

    Mais ACCESS me dit maintenant que la commande ou l'action "fusionnerdansword" n'est pas disponible pour l'instant...

  3. #3
    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 c'est pour une seul courrier, je pense que le plus simple est d'utiliser des signets et d'envoyer les informations sur les signets du document.

    On peut même au départ d'un formulaire récupérer les données du formulaire et les injecter dans le document.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim wApp as Word.Application
    Dim oDoc As Word.Document
     
    Set wApp = New Word.Application
    Set oDoc = wApp.Documents.Add "monModèle"
     
    oDoc.Bookmarks("monPremSignet").Range.Text = Me.MaPremièreDonnée
    ...
    ...
     
    wApp.Visible = True
    Ça reste plus "simple" comme code.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bien, j'ai avancé encore d'un pas (et j'en suis fier !).

    Word se lance.

    Il y a une erreur de compilation dans mon code : utilisation incorrecte de la propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub MergeIt_Click()
     
    Call MergeIt
     
    End Sub

    et pour le reste, j'en suis là :

    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
    Sub MergeIt()
     
    On Error Resume Next
    'Déclaration d'une instance Word
    Dim W_App As New Word.Application
    'Instance Word
    With W_App
    'Word est visible à l'écran ou non
    .Visible = True
    'Ouvre le document Word avec les signets
    .Documents.Open ("C:\Users\MDelhalle\Desktop\matrix\lettre.dotm")
     
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Users\MDelhalle\Desktop\cabinetavocat.accdb", _
            LinkToSource:=True, _
            Connection:="TABLE dossier", _
            SQLStatement:="SELECT * FROM [dossier]"
    objWord.MailMerge.Execute
    Set objWord = Nothing
     
    End With
     
    End Sub
    Merci d'avance.


    ps : je préfère mes champs de fusion aux signets ; toutes mes matrices existent déjà !

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 513
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 513
    Points : 16 441
    Points
    16 441
    Par défaut
    Bonjour

    Dans le cas d'une fusion avec un nombre réduit d'éléments (1 dans ton cas), le plus simple est de lier le fichier Word à une requête et de baser ta requête sur l'enregistrement affiché dans ton formulaire.

    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM [dossier]"

    Il faudrait filtrer selon ce principe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * from Table Where Clé Dossier=Dossier affiché

  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,

    Tu ne définis pas ta varialbe ObjWord et tu ne lui affecte rien.

    En plus de l'utilisation incorrecte de la propriété, tu as une autre erreur qui s'affiche ou qui va s'afficher.

    Aurais-tu la propriété qui pose problème ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    bonsoir,

    encore un pas en avant.

    Je travaille le module :cette fois, il me fusionne tous mes enregistrements.

    Je l'ai modifié ainsi :

    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
    Sub MergeIt()
     
    Dim wApp As Word.Application
    Dim oDoc As Word.Document
     
    Set wApp = New Word.Application
    Set oDoc = wApp.Documents.Add("C:\Users\cabinet\Desktop\matrices\lettre.dotm")
     
    Set objWord = GetObject("C:\Users\cabinet\Desktop\matrices\lettre.dotm")
    ' Rend Word visible important puisque la fusion se fait à l'écran.
    objWord.Application.Visible = True
    ' Sélectionne .la base de données Comptoir comme source de données pour la fusion
    objWord.MailMerge.OpenDataSource _
            Name:="\\FREEBOX\Disque dur\cabinetavocat.accdb", _
            LinkToSource:=True, _
            Connection:="TABLE dossier", _
            SQLStatement:="SELECT * FROM [dossier]"
    ' Exécution de la fusion.
     
     With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
                .LastRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord
            End With
            .Execute Pause:=False
    End With
     
    End Sub
    ...en pensant qu'il allait me fusionner les données dans l'enregistrement en cours.

    Peine perdue, il me fusionne toujours l'enregistrement n°1, alors que je suis positionné sur un autre.

    Je ne comprends pas comment m'y prendre avec le code de chris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * from Table Where Clé Dossier=Dossier affiché
    Comment coder dossier=dossier affiché.

    Je ne sais pas faire fonctionner les requêtes (eh oui, ce n'est pas mon métier...)

    Merci encore pour vos lumières.

  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,

    C'est pour ça que je pense que c'est plus facile avec des signets. On récupère "ce qui est à l'écran" pour envoyer dans le document.

    Dans ta sentence SQL, tu dois récupérer l'identifiant de l'enregistrement en cours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLStatement:="SELECT * FROM [dossier]"
    va devenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim SQL as String
    ...
    SQL = "SELECT * FROM [dossier] Where MonChamp = '" & Me.MonIdentifiant & "';"
    ...
    ...
    ...
     
    SQLStatement:= SQL
    Si c'est un texte qui te sert d'identifiant.

    Si ce n'est pas un texte, il faut enlever les '

    Me représente le formulaire et l'ensemble Me.MonIdentifiant le contrôle qui contient la donnée à utiliser.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,


    Je n'avance plus.

    Une âme compatissante accepterait-elle de jeter un coup d’œil sur ma base de données.

    Merci d'avance,

    bonne soirée.
    Fichiers attachés Fichiers attachés

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    un bout de BD qui fonctionne
    Fichiers attachés Fichiers attachés

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

    Comme ta procédure se trouve dans un module, la référence à Me ne fonctionne pas.

    Au moins trois solutions.

    Tu mets la procédure dans le formulaire et dans ce cas, le Me fonctionne.

    Tu fais référence au contrôle de formulaire qui contient la donnée.
    http://loufab.developpez.com/tutorie...ppelformulaire

    Tu peux aussi passer la donnée en argument lors d l'appel de ta procédure.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut fusion mais pas que
    Bonjour,


    je reviens vers vous tous concernant ce sujet.

    A l'usage, et puisque je fais des courriers pour un destinataire unique à chaque fois, je me suis aperçu que je pouvais me contenter de la fonction "aperçu des résultats" dans word, sans terminer le processus de fusion à proprement parler (ensuite j'imprime grâce à une macro personnalisée).

    Il me faut pouvoir "envoyer" le numéro d'enregistrement d'Access vers word, et pourquoi pas, actionner le bouton "aperçu des résultats".

    Le compte y sera, mais est-ce seulement possible ?

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

    Aperçu des résultats n'est pas une bonne solution. Si certains champs sont calculés, le résultat ne sera pas correct.
    Pour cette fois, ça ne posera pas de problème, mais la prochaine fois que tu vas faire un publipostage, tu risques d'oublier et tu vas te demander pourquoi ça ne fonctionne pas.

    Je viens de te faire un exemple.

    Il suffit de mettre les deux fichiers dans le même répertoire et de cliquer sur le bouton Créer Doc

    J'ai juste modifié ton formulaire.
    Pour le document, il est très simple, il ne contient que trois signets destinés à recevoir le texte.
    Fichiers attachés Fichiers attachés

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut aperçu des résultats
    Je reviens sur ce sujet où j'ai moins besoin de faire une fusion, que d'avoir un aperçu du résultat pour l'enregistrement en cours.

    J'ai le code suivant :

    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
    Sub Lettre1_Click()
     
    Dim wApp As Word.Application
    Dim oDoc As Word.Document
     
    Set wApp = New Word.Application
    Set oDoc = wApp.Documents.Add("\\FREEBOX\Disque dur\matrices\lettre 1.dotm")
     
    Set ObjWord = GetObject("\\FREEBOX\Disque dur\matrices\lettre 1.dotm")
     
    ObjWord.Application.Visible = True
     
    ObjWord.MailMerge.OpenDataSource _
            Name:="\\FREEBOX\Disque dur\cabinetavocat.accdb", _
            LinkToSource:=True, _
            Connection:="TABLE dossier", _
            SQLStatement:="SELECT * FROM [dossier]"
     
    With ActiveDocument.ActiveRecord.MailMerge.ViewMailMergeFieldCodes = wdToggle
     
    End With
     
    End Sub
    Faut-il utiliser activedocument voire même currentrecord... ?

    Et comment ?

    Comment rendre également la fenêtre word visible, alors qu'Access ne quitte pas l'écran ?

    Merci pour vos réponses.

  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,

    Et par rapport au dernier fichier que j'ai posté, ça donnait quoi ?

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    ça donnait un message d'erreur.

    J'aimerai vraiment faire aboutir le tout, car en réalité, je ne fais quasi plus de fusion, juste des "aperçu du résultat" que j'imprime sans sauvegarde.
    Fichiers attachés Fichiers attachés

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

    Il faut ajouter Word à la liste de références.

    Outils => Références => Cocher Word

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Peut-on simplement positionner le publipostage de word sur le numéro de l'enregistrement actuel ?

    J'ai vu qu'il existait une fonction currentrecord ?

  19. #19
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 513
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 513
    Points : 16 441
    Points
    16 441
    Par défaut
    Bonjour

    Et ce que je suggérais au post #5 ?

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2012
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    C'est ce que je mettais au post n°7, je ne sais pas comment coder dossier=dossier affiché.

    Je remets un bout de BDD.

    La lettre en question est la lettre au client dans l'onglet pour.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [AC-2010] Aprés une fusion avec Word, comment mettre la page crée au 1er plan ?
    Par Razmote dans le forum VBA Access
    Réponses: 0
    Dernier message: 29/01/2015, 11h26
  2. [2000] Fusion avec Word
    Par DamKre dans le forum VBA Access
    Réponses: 4
    Dernier message: 29/06/2007, 07h28
  3. Requête absente pour fusion avec Word
    Par stéphane_ais2 dans le forum Access
    Réponses: 5
    Dernier message: 05/12/2006, 15h08
  4. [fusion avec word] fusion pour publipostage (suite)
    Par Christophe93250 dans le forum Access
    Réponses: 17
    Dernier message: 13/01/2006, 11h47
  5. [fusion avec word] fusion pour publipostage via le mail auto
    Par Christophe93250 dans le forum Access
    Réponses: 6
    Dernier message: 06/01/2006, 16h27

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