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

VB.NET Discussion :

Pilotage Word Création Champ IF incluant une DOCVARIABLE - Modification auto du genre d'un document


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Par défaut Pilotage Word Création Champ IF incluant une DOCVARIABLE - Modification auto du genre d'un document
    Bonjour,

    Je programmais en VBA et j'essaye de passer ma solution en VBNET.

    Mon but est de piloter word à partir d'un windows Form, de créer un champs IF qui contiendrait une variable DOCVARIABLE. Il s'agit de permettre à des rédacteurs de choisir une phrase qui changerait en fonction du genre. Le genre est renseigné dans une variable Wgenre. Une fois la macro éxécuté et les codes IF créés si on change le genre dans la windows form tout le document se met au masculin, féminin, masculin pluriels....

    Donc en code champs :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {IF DOCVARIABLE{WGENRE}="M." "représenté" ""}
    {IF DOCVARIABLE{WGENRE}="Mme" "représentée" ""}
    ....


    Mon code en VBA était
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim NameWordmodele as object 
    Set NameWordmodele = wordApp.ActiveDocument
    'le document word
     
    Dim expresm as string 
    ' l'expression a changé en fonction du genre
     
     
    NameWordmodele.ActiveWindow.Selection.Fields.Add Range:=NameWordmodele.ActiveWindow.Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
    NameWordmodele.ActiveWindow.Selection.TypeText Text:="IF "
    NameWordmodele.ActiveWindow.Selection.Fields.Add Range:=NameWordmodele.ActiveWindow.Selection.Range, Type:=wdFieldDocVariable, Text:="" & "Wgenre"
    NameWordmodele.ActiveWindow.Selection.TypeText Text:="=""M."" """ & expresm & """"
    NameWordmodele.ActiveWindow.Selection.MoveRight Unit:=wdCharacter, Count:=2

    Soit adapté en VBNET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                NameWordmodele.ActiveWindow.Selection.Fields.Add(NameWordmodele.ActiveWindow.Selection.Range, WdFieldType.wdFieldEmpty, False)
                NameWordmodele.ActiveWindow.Selection.TypeText("If ")
                NameWordmodele.ActiveWindow.Selection.Fields.Add(NameWordmodele.ActiveWindow.Selection.Range, WdFieldType.wdFieldDocVariable, "" & "Wgenre") 
                NameWordmodele.ActiveWindow.Selection.TypeText("=""M."" """ & expresm & """")
                NameWordmodele.ActiveWindow.Selection.MoveRight(, 2)
    Le problème est que lorsque VBNET ajoute un champs vide, il le ferme aussitôt et n'ajoute pas le code IF + la variable. Aussi le code champs écrit suite au code est le suivant :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    {0 \ MERGEFORMAT} IF {DOCVARIABLE{WGENRE}="M." "représenté"

    Je peux écrire le IF dans le champs vide pour en faire un champs IF, ou même faire du champs vide un champs IF natif mais cela ne résout pas le problème d'y inclure une docvariable à l'intérieur.

    Quelqu'un pourrait-il m'aider ? Je vous remercie par avance

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Par défaut
    Bon apparemment la solution est de passer par les range. Ce n'est pas très intuitifs mais ça marche. Je publie le résultat quand j'ai terminé.

    Merci à celui qui édité mon texte pour remettre les champs code que je n'ai pas trouvé lors du post du message.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 8
    Par défaut
    Le but de la procédure était de créer un moyen pour les rédacteurs de changer automatiquement des phrases d'un document Word en fonction du genre du destinataire. Une variable de genre a été créé dans le document ("Wgenre").

    Ils sélectionnent une phrase d'un document Word puis revienne à un Windows form et clique sur un bouton. La procédure ci dessous se lance et leur pose quatres questions de genre. S'ils ne remplissent pas pour un genre le champs IF ne sera pas créé. Pour chaque genre renseignée la procédure créé un champ qui sera par la suite rempli d'un champ DOCVARIABLE correspondant au genre auquel on ajoutera un champ IF qui permettra de mettre la condition du genre.

    Une fois les phrases genrées insérées, le document pourra être modifié par une combobox genre qui sera inclue dans le Windows Form.


    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
     
    Imports Microsoft.Office.Interop
    Imports Microsoft.Office.Interop.Word
     
    Imports Microsoft.Office.Interop.Word.WdColor
     
    Sub Wordphrasegenree
     
     
    wordapppub = GetObject(, "Word.application")
            wordapppub.Visible = True
            wordapppub.Application.Activate()
            NameWordmodele = wordapppub.ActiveDocument
     
     
     
     
            Dim expresm As String = ""
            Dim expresmme As String = ""
     
            Dim expresmmes As String = ""
            Dim expresmms As String = ""
     
            Dim oldselecstring As String = ""
     
     
     
     
            If NameWordmodele.ActiveWindow.Selection.Range is Nothing Then
            oldselecstring = ""
     
            Else
     oldselecstring = NameWordmodele.ActiveWindow.Selection.Range.Text 'mémorise le texte surligné pour le proposer aux différents genres
                NameWordmodele.ActiveWindow.Selection.Range.Text = ""
     
            End If
            NameWordmodele.Bookmarks.Add("Signetprovisoire", NameWordmodele.ActiveWindow.Selection) 'créé un signet pour retrouver l'emplacement qu'on a supprimé et réinjecter la phrase si aucun champs de créer
     
     
            AddMyVar(NameWordmodele, "" & Genrevar, "M.", False) 'crée la variable genre si elle n'existe pas, AddmyVar est une fonction trouvée ailleurs
     
     
     
     
                expresmms = InputBox("Indiquer une expression de genre pour un couple de requérants. Ex : Les requérants demandent. En cas d'annulation, l'expression de genre n'apparaitra pas.", "M. et Mme", oldselecstring)
                expresmmes = InputBox("Indiquer une expression de genre pour un couple de requérantes. Ex : Les requérantes demandent. En cas d'annulation, l'expression de genre n'apparaitra pas.", "Mme et Mme", expresmms)
     
     
            expresm = InputBox("Indiquer une expression de genre pour un requérant. Ex : Le requérant demande. Si vide, l'expression n'apparaitra pas.", "M.", expresmmes)
            expresmme = InputBox("Indiquer l'expression à retenir pour une requérante. Ex : La requérante demande. Si vide, l'expression n'apparaitra pas.", "Mme", expresm)
     
     
     
     
     
            NameWordmodele.ActiveWindow.Selection.Font.Color = wdColorBlue
     
     
            Dim champs As Word.Field
            Dim nbchamps As Byte
            Dim champRange As Range
            Dim champsacreer As Byte = 1
            Dim phrasegenree, sujetgenre As String
     
     
     
     
     
            Do
     
                Select Case champsacreer 'on retient 4 genres possible
                    Case Is = 1
                        If expresmms = "" Or expresmms = " " Then
    expresmms = ""
                            champsacreer = 2
                        Else
                            sujetgenre = "M. et Mme"
                            phrasegenree = expresmms
     
                        End If
                    Case Is = 2
                        If expresmmes = "" Or expresmmes = " " Then
    expresmmes = ""
                            champsacreer = 3
                        Else
                            sujetgenre = "Mme et Mme"
                            phrasegenree = expresmmes
     
                        End If
                    Case Is = 3
                        If expresm = "" Or expresm = " " Then
    expresm = ""
                            champsacreer = 4
                        Else
                            sujetgenre = "M."
                            phrasegenree = expresm
     
                        End If
     
                    Case Is = 4
                        If expresmme = "" Or expresmme = " " Then
    expresmme = "" 
                            champsacreer = 5
                        Else
                            sujetgenre = "Mme"
                            phrasegenree = expresmme
     
                        End If
     
                    Case Is = 5
                        GoTo endy
     
                End Select
     
                'création du champs
                NameWordmodele.ActiveWindow.Selection.Range.Fields.Add(NameWordmodele.ActiveWindow.Selection.Range, WdFieldType.wdFieldDocVariable, "Newfield")
                nbchamps = NameWordmodele.Fields.Count
     
     
                If nbchamps > 0 Then 'gestion d'erreur au cas où mais normalement au moins un champs a été créé
                    nbchamps = 1
                    For Each champs In NameWordmodele.Fields 'on va rechercher le champs créé
     
                        If InStr(1, NameWordmodele.Fields(nbchamps).Code.Text, "Newfield") > 0 Then 'quand on l'a trouvé
                            NameWordmodele.Fields(nbchamps).Code.Fields.Add(NameWordmodele.Fields(nbchamps).Code, WdFieldType.wdFieldDocVariable, "Wgenre", False) 'on retire le code et on ajoute un code doc variable
                            champRange = NameWordmodele.Fields(nbchamps).Code 'on met le code du champs en range pour mettre un début et une fin
                            champRange.InsertBefore("If") 'on met au début IF
                            champRange.InsertAfter("=" & Chr(34) & sujetgenre & Chr(34) & Chr(34) & phrasegenree & Chr(34)) 'et on met la définition de IF
     
     
     
                            Exit For
     
                        End If
     
                        nbchamps = nbchamps + 1
                    Next
     
     
     
                Else
                    MessageBox.Show("Une erreur a été trouvée : aucun champs n'a été créé")
                    GoTo endy
                End If
     
                champsacreer = champsacreer + 1
            Loop Until champsacreer = 5
     
    endy : 
     
      If expresmms = "" and expresmmes = "" And expresm = "" And expresmme = ""  and Then 'si aucun champs n'a été rempli on remet le texte original
                NameWordmodele.ActiveWindow.Selection.Text = oldselecstring 
     
            End If
     
     NameWordmodele.Bookmarks("Signetprovisoire").Select()
            NameWordmodele.Bookmarks("Signetprovisoire").Delete()
     
    NameWordmodele.ActiveWindow.Selection.WholeStory() 'met à jour le champs
     
            NameWordmodele.ActiveWindow.Selection.Fields.Update() 'met à jour le champs
     
     
     
    End Sub

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

Discussions similaires

  1. Création d'un Champ Rang dans une rqt
    Par jmde dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/12/2008, 04h53
  2. création d'une radio liste incluant une variable
    Par lestathor dans le forum Langage
    Réponses: 1
    Dernier message: 15/05/2007, 19h56
  3. [VB.NET] pilotage word : champ de formulaire
    Par Kropernic dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/07/2006, 12h15
  4. Réponses: 4
    Dernier message: 10/04/2006, 16h12
  5. [Word] Création d'un champs de formulaire
    Par Oberown dans le forum Word
    Réponses: 2
    Dernier message: 18/04/2005, 11h10

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