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 :

Récupérer valeur d'un champs de fusion lors d'une erreur de fusion multiple [Toutes versions]


Sujet :

Word

  1. #1
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut Récupérer valeur d'un champs de fusion lors d'une erreur de fusion multiple
    Bonjour,

    J'ai une application qui déclenche un publipostage à partir d'un document maître et d'un fichier de données. Dans ce fichier de données j'ai un champs, que j'attrape dans une macro VB de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.MailMerge.DataSource.DataFields("NOM_CHAMPS").Value
    Au cours de ma fusion, ce champs va prendre plusieurs valeurs, il s'agit d'une fusion multiple, mon document résultat va comporter plusieurs fois le document mais initialisé par différentes valeurs.

    Mon fichier de données possède bien les n valeurs que mon champs de fusion doit prendre.

    En utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.MailMerge.DataSource.DataFields("NOM_CHAMPS").Value
    je n'attrape que la première initialisation.

    j'aimerai pouvoir intercepter la valeur courante de mon champs de fusion. C'est dans le but d'implémenter une gestion d'erreur. Il arrive que l'un des cas de la fusion multiple fasse partir en carafe toute la fusion, j'aimerais pouvoir afficher l'identifiant du cas qui est dans mon champs de fusion.

    Si quelqu'un a une idée je suis preneur.

  2. #2
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Il est possible de gérer l'évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub MailMergeApp_MailMergeBeforeRecordMerge(ByVal _
        Doc As Document, Cancel As Boolean)
    qui s'exécute avant la fusion de chaque enregistrement

    Cela peut toutefois augmenter considérablement le temps de traitement du publipostage.
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  3. #3
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut
    merci du conseil, j'ai cependant un soucis avec son utilisation, VB m'indique une erreur de compilation, cette sub n'est pas définie.

    j'ai créé un module de class : EventClassModule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public WithEvents appWord As Word.Application
    'Détection de l'evenement avant chaque merge des initialisations
    Private Sub appWord_MailMergeBeforeRecordMerge(ByVal Doc As Document, Cancel As Boolean)
        MsgBox "test 1"
        If compt = 0 Then
            table(0) = Doc.MailMerge.DataSource.DataFields("NOM_CHAMPS").Value
        Else
            compt = compt + 1
            ReDim Preserve table(compt)
            table(compt) = Doc.MailMerge.DataSource.DataFields("NOM_CHAMPS").Value
        End If
    End Sub
    Et j'ai mon module qui gère la fusion dans lequel j'ai rajouté :
    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 table() As String
    Dim compt As Integer
    Dim MyApp As New EventClassModule 'Définition de l'application pour la gestion d'evenement
     
    Public Sub main()
    ...
    ' Lancement de la fusion
        ActiveDocument.MailMerge.Destination = wdSendToNewDocument
     
        Set MyApp.appWord = Word.Application
        ActiveDocument.MailMerge.Execute
    ...
    End Sub
    J'ai visiblement mal fait quelque chose au niveau des déclarations, mais mes connaissances ne me permettent pas de trouver seul.

    Edit : je crois que ça vient du fait que mon module de class n'a pas accès à mes variables table et compt.

    Edit 2 : j'ai revu la visibilité de mes variables et les façons d'y accéder et tout fonctionne. J'ai bien le comportement voulu.

    Merci beaucoup,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/08/2008, 11h18
  2. Réponses: 9
    Dernier message: 05/08/2008, 09h12
  3. Réponses: 6
    Dernier message: 15/09/2006, 20h51
  4. Réponses: 10
    Dernier message: 11/03/2006, 01h51
  5. Réponses: 1
    Dernier message: 22/12/2005, 11h29

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