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 :

Fusion de documents en VB .Net et caractère "-"


Sujet :

Word

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut Fusion de documents en VB .Net et caractère "-"
    Bonjour à tous,

    je touche au bout de mon code VB pour exécuter ma fusion de document (MailMerge.Execute), mais j'ai un dernier problème : Ma source de données est un fichier xml qui contient la liste de mes champs Fusion, ainsi que leur valeur.
    La syntaxe est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <field name="CHAMP_FUSION1">
            <![CDATA[VALEUR_CHAMPFUSION1]]>
        </field>
    Pour initialiser la variable HeaderRecord lors de l'appel de la méthode MailMerge.CreateDataSource, je "parse" mon fichier XML et je construis la liste de mes champs Fusion, en ayant au préalable récupéré le caractère séparateur défini dans les paramètres régionaux du Panneau de configuration. Dans mon cas, il s'agit du ";"
    Je me retrouve donc avec une chaîne de caractères qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CHAMP_FUSION1;CHAMP_FUSION2; CHAMP_FUSION3;...
    Par la suite, j'alimente mon fichier de données avec les valeurs contenues dans le fichier xml (cf la syntaxe ci-dessus). J'exécute la fusion via la ligne de code
    et tous les champs fusion du document sont parfaitement remplacés par leur valeur.

    Mon problème est : J'ai constaté que lorsque le champ fusion possède le caractère "-", lors de la création de la DataSource (MailMerge.CreateDataSource), le caractère "-" est supprimé !!!
    Du coup, comme dans mon document Word original, le champ Fusion s'appelle bien CHAMP_FUSION-TEST, Word affiche la boite de dialogue indiquant que ce champ n'existe pas dans la source de données.

    Est-ce une limite de syntaxe des champs Fusion ? Savez-vous comment traiter ce cas ?
    Existe t-il une solution, ou faut-il que je revoie TOUS les documents modèle WORD pour remplacer le caractère - par un autre (ou par rien d'ailleurs) ?

    Merci beaucoup de vos retours.

    Franck.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    En parcourant les champs de la DataSource, le caractère "-" est bien supprimé !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Dim modeleWd As Document = Globals.ThisAddIn.Application.ActiveDocument
     
    Dim idx_field As Integer
    For idx_field = 1 To modeleWd.MailMerge.DataSource.DataFields.Count
        Dim wname As String = modeleWd.MailMerge.DataSource.DataFields(idx_field).Name
        Dim wvalue As String = modeleWd.MailMerge.DataSource.DataFields(idx_field).Value
    Next
    Je ne peux pas modifier les documents modèle Word qui contiennent les champs Fusion (certains sont en Production).

    Du coup, je souhaitais essayer de "gratter" quelques trucs, juste avant la fusion. Pour ce faire, j'utilise les messages MailMergeBeforeMerge ou MailMergeBeforeRecordMerge, mais je ne passe jamais dans les méthodes !!??!!

    Pour info, voici mon code :

    Déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim WithEvents appWord As Word.Application
    Initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    appWord = Globals.ThisAddIn.Application
    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub appWord_MailMergeBeforeMerge(ByVal Doc As Document, ByVal StartRecord As Integer, ByVal EndRecord As Integer, ByRef Cancel As Boolean) Handles appWord.MailMergeBeforeMerge
        MsgBox("wrdApp_MailMergeBeforeMerge", MsgBoxStyle.Critical, "Erreur")
    End Sub
     
    Private Sub appWord_MailMergeBeforeRecordMerge(ByVal Doc As Document, ByRef Cancel As Boolean) Handles appWord.MailMergeBeforeRecordMerge
        MsgBox("wrdApp_MailMergeBeforeRecordMerge", MsgBoxStyle.Critical, "Erreur")
    End Sub
    Est-ce que quelqu'un a une idée ?

    Merci et bonne soirée.
    Franck.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    je suis toujours bloqué sur les événements liés à la Fusion de document.
    Je ne comprends plus rien. J'ai essayé de simplement au maximum le code, mais ça ne fonctionne toujours pas.
    Lorsque j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Class ThisAddIn
    ...
        Private Sub ThisAddin_WindowActivate() Handles Application.WindowActivate
        End Sub
     
        Private Sub ThisAddin_DocumentOpen() Handles Application.DocumentOpen
        End Sub
    End Class
    En mettant des points d'arrêt, je passe dans le code de ces méthodes, par contre, en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private Sub ThisAddin_MailMergeAfterMerge(ByVal Doc As Document, ByVal DocResult As Document) Handles Application.MailMergeAfterMerge
    End Sub
    Je ne passe pas dans la méthode !!

    Il faut écrire quelque chose de particulier pour lever les événements liés au MailMerge ?

    D'avance merci.
    Franck.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Je fais vivre mon post

    Je n'arrive toujours pas à lever les événements liés à la fusion de document (MailMerge). Comme mes compétences en VB ne sont pas suffisantes, j'ai changé encore une fois, de façon de faire.
    Je viens de trouver qu'on pouvait mettre à jour les champs Fusion du document Word.
    Cela ne sera peut-être pas "très" optimisé, mais c'est la seule solution que j'ai trouvé.

    Pour info, voici le problème original et la solution que j'ai trouvée :

    Problème initial
    J'ai un fichier xml en entrée. Ce fichier contient les champs Fusion, ainsi que leur valeur. Certains champs fusion ont comme syntaxe XX-YY_01 (présence du caractère "-")
    En parsant le fichier xml, je construis dynamiquement la DataSource sous forme de fichier .doc avec un tableau contenant les champs fusion et les valeurs.
    Cette DataSource sert au merge de Word (MailMerge)
    Problème = Les caractères "-" sont supprimés !!!!
    Dans mon fichier modèle Word, les champs Fusion doivent être en phase avec le fichier xml => comme le caractère "-" est supprimé, Word au moment de la fusion, ouvre une boite de dialogue indiquant que le champ Fusion XX-YY_01 (champ Fusion présent dans le fichier modèle Word) n'est pas trouvé dans la DataSource, puisque le caractère "-" a été supprimé.


    Solution trouvée

    Au moment de parser mon fichier xml, pour créer l'en-tête de ma DataSource, je recherche le caractère "-". Si celui-ci est trouvé, alors je stocke dans un tableau le nom du champ Fusion, ainsi que son nouveau nom : Je remplace le caractère "-" par le caractère "_"
    Après avoir rempli ma DataSource avec les valeurs des champs Fusion, et AVANT d'exécuter ma fusion, je regarde si mon tableau contient des éléments. Si c'est le cas, j'appelle une méthode de mise à jour des champs Fusion du fichier modèle Word.
    Je boucle sur tous les champs Fusions du fichier modèle Word et s'il est contenu dans le tableau, je le remplace par son nouveau nom.
    Ainsi, le merge de Word s'exécute correctement


    Conclusion

    J'aurais préféré faire ce traitement sur l'évènement MailMergeBeforeRecordMerge qui logiquement aurait du être reçu avant chaque traitement de champ Fusion, mais n'arrivant pas à le réceptionner dans mon programme (?!?), j'ai opté pour la solution ci-dessus.
    La solution est un peu plus coûteuse dans le sens où je balaye tous les champs Fusion du Document, mais je n'ai pas trouvé une autre solution.


    Pour finir, je laisse ce post encore ouvert, jusqu'à jeudi, au cas où quelqu'un m'aiderait à trouver une autre solution, peut-être plus logique à la philosophie VB que je maîtrise pas complètement.

    A+
    Franck

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Salut à tous, sujet résolu : cf la solution décrite au dessus.

    A+

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

Discussions similaires

  1. [VBA - W] fusion de documents word + garder les styles
    Par schuitonzo dans le forum VBA Word
    Réponses: 6
    Dernier message: 16/04/2011, 11h37
  2. Word 2003 et fusion de document par macro
    Par ValCouture dans le forum VBA Word
    Réponses: 2
    Dernier message: 16/05/2007, 12h15
  3. ou trouver la documentation c#(asp.net) ?
    Par H-bil dans le forum ASP.NET
    Réponses: 8
    Dernier message: 08/05/2007, 00h31
  4. [DOM] Récupérer contenu d'un objet de type org.w3c.dom.Document dans une chaine de caractèr
    Par danyboy85 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 18/01/2007, 10h38
  5. Réponses: 5
    Dernier message: 22/12/2005, 15h26

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