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