1 pièce(s) jointe(s)
UserForm : listbox contenant les variables du doc (avec ajout / modification en direct depuis textbox)
Bonjour à tous,
C'est ma première question suite à mon inscription. En effet, je consulte très régulièrement le forum, où je trouve la plupart du temps des réponses pertinentes à mes besoins en VBA, langage sur lequel je suis complètement autodidacte (merci à tous les contributeurs pour cet investissement). Cette fois, j'ai eu beau chercher et chercher encore, essayer... je suis complètement bloqué, donc je me permets d'ouvrir un nouveau sujet. Merci d'avance à tous ceux qui voudront bien me donner un petit coup de main !
Je commence petit à petit à voir le bout du développement d'une extension qui me permet d'optimiser mon process rédactionnel. Ces jours-ci, je travaille sur une fenêtre non modale de gestion et d'insertion de "descripteurs" du document (j'entends par là des données qui sont à la fois, au sens Word, des propriétés et des variables). Voici une capture d'écran commentée qui vous permet de comprendre facilement le principe de ce que je cherche à faire :
Pièce jointe 359267
1 - Zone de propriétés
Résumé du principe :
- chaque élément est de type BuiltInDocumentProperties et peut-être inséré à l'emplacement du curseur dans le document ;
- lors de l'initialisation de la fenêtre, la textbox affiche la valeur existante de la propriété ;
- tout changement dans la textbox modifie en direct la valeur de la propriété.
Voici mon code actuel pour cette partie :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Option Explicit
Private Sub UserForm_Initialize() ' Opérations d'initialisation lors du chargement de la fenêtre
' Remplissage des textbox
Me.Titre_TextBox.Value = ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle).Value ' Récupération de la valeur du CDP Title
Me.Auteur_TextBox.Value = ActiveDocument.BuiltInDocumentProperties(wdPropertyAuthor).Value ' Récupération de la valeur du CDP Author
End Sub
Private Sub Titre_TextBox_Afterupdate() ' MAJ de la valeur du CDP Title à partir du contenu saisi dans la textbox
ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle).Value = Proprietes.Titre_TextBox.Text
End Sub
Private Sub InsererTitre_CommandButton_Click() ' Insertion du CDP Title à l'emplacement du curseur
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldTitle, PreserveFormatting:=True
Exit Sub
End Sub
Private Sub Auteur_TextBox_Afterupdate() ' MAJ de la valeur du CDP Author à partir du contenu saisi dans la textbox
ActiveDocument.BuiltInDocumentProperties(wdPropertyAuthor).Value = Proprietes.Auteur_TextBox.Text
End Sub
Private Sub InsererAuteur_CommandButton_Click() ' Insertion du CDP Title à l'emplacement du curseur
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldAuthor, PreserveFormatting:=True
Exit Sub
End Sub |
Je ne doute pas que ce code pourrait être grandement amélioré, mais au moins ça fait correctement ce que je veux ! Ce n'est pas le cas de ce qui suit...
2 - Zone d'affichage des variables
La listbox à deux colonnes est censée afficher les nom et valeur des variables du document lors de l'initialisation de la fenêtre. Je n'arrive même pas à coder cette opération de départ ! :oops: Donc à chaque ouverture de la fenêtre, la listbox est vide, alors que la création de variable fonctionne (voir ci-après).
Les boutons situés sous la listbox (ne tenez pas compte du bouton "Lister variables" barré, qui est juste une fonction de travail) doivent permettre de :
- créer une variable en la faisant s'afficher en direct dans la listbox (avec vidage des textbox de saisie en fin d'opération) ;
- insérer la variable sélectionnée dans la listbox à l'emplacement du curseur ;
- supprimer la variable sélectionnée (à la fois de la listbox et de la liste des variables du document).
À l'heure où j'écris, la création fonctionne avec ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Private Sub CreerVariable_CommandButton_Click()
' Ajout de la variable au document
ActiveDocument.Variables.Add Name:=Me.NomNouvelleVariable_TextBox.Text, Value:=Me.ValeurNouvelleVariable_TextBox.Text
' Ajout de la variable à la listbox
Me.ListeVariables_ListBox.ColumnCount = 2 ' Nombre de colonnes de la listbox
Dim element As Integer
Me.ListeVariables_ListBox.AddItem ' Ajout de ligne
element = ListeVariables_ListBox.ListCount - 1
Me.ListeVariables_ListBox.List(element, 0) = Me.NomNouvelleVariable_TextBox.Text ' Remplissage de la colonne "Nom"
Me.ListeVariables_ListBox.List(element, 1) = Me.ValeurNouvelleVariable_TextBox.Text ' Remplissage de la colonne "Valeur"
' Effacement du contenu des textbox
Me.NomNouvelleVariable_TextBox.Value = Null
Me.ValeurNouvelleVariable_TextBox.Value = Null
End Sub |
Je n'ai pas encore travaillé sur l'insertion d'une variable sélectionnée dans la listbox à l'emplacement du curseur, car je m'étais d'abord attaqué à la suppression et je suis bloqué. Je précise que je sais supprimer une variable spécifique dont on connaît le nom :
Code:
ActiveDocument.Variables("Nom de la variable").Delete
Mais ce n'est pas ce dont j'ai besoin dans ce contexte. À force de lectures ici et là et d'essais, j'ai fini par aboutir à ce code qui me supprime toutes les variables de la liste des variables et de la listbox, mais que je ne sais pas comment modifier de façon à supprimer seulement un élément sélectionné :
Code:
1 2 3 4 5 6 7 8
| Private Sub SupprimerVariable_CommandButton_Click()
Dim action
Dim x As Long
For x = ActiveDocument.Variables.Count To 1 Step -1
ActiveDocument.Variables(x).Delete
Next x
Me.ListeVariables_ListBox.RemoveItem Me.ListeVariables_ListBox.ListIndex
End Sub |
3 - Zone de saisie des variables (ajout/modification)
Pour l'instant, ces textbox jouent correctement leur rôle de cartouches de saisie des nouvelles variables pour la création (voir le code plus haut). Par contre, je voudrais également :
- qu'elles affichent le nom et la valeur de la variable sélectionnée dans la listbox ;
- qu'elles servent à modifier le nom et/ou la valeur de cette variable sélectionnée (comme c'est le cas avec les textbox de la zone 1, qui fonctionnent bien).
Je crois que j'ai fait le tour. Je sais que ça fait beaucoup du travail, je ne demande surtout pas à ce qu'on le fasse à ma place mais qu'on m'aide à comprendre comment venir à bout de cette listbox car cela fait deux jours que j'y suis sans succès. J'en suis au stade où je n'ai plus les idées claires et un regard extérieur me serait très précieux.
Merci d'avance à tous ceux qui prendront de leur temps pour m'aider :ave: