Bonjour à tous et à toutes,
Afin d'insérer des renvois vers les propriétés d'un document word, sans avoir à passer par Insertion / Quickpart / Champ / DocProperty..., j'ai créer un Userform qui affiche dans une ListBox toutes les propriétés que j'ai créées.
Mon code fonctionnait jusque là correctement.
Néanmoins, dans cette ListBox, je n'indiquais que le nom de la propriété mais pas sa valeur. Ainsi, suivant le nom adopté, on peut se retrouver à faire des erreurs sur le renvoi lorsque 2 noms sont similaires. C'est pourquoi, j'ai modifié la ListBox pour qu'elle affiche le nom et la valeur:
Ceci fait, le code fonctionne toujours comme je le souhaite, quand je sélectionne une ligne de la ListBox, ça insère bien le renvoi voulu dans le document.
Mon problème est dans le dimensionnement de la hauteur de la ListBox et de l'userform.
Lorsque j'avais une ListBox a une seule dimension, j'avais placé le code ci-dessous qui fonctionnait très bien. Ceci permettait de limiter la taille de la ListBox (et de l'Userform également) lorsque sa hauteur était supérieure à 200 (Au-delà, je la figeait à 200 et c'était affiché avec la barre de défilement verticale). ça me convenait très bien.
Nota: A chaque item inséré dans la ListBox, j'incrémentais la variable Hauteur_Liste de 10
Mon problème actuel est que désormais, depuis que la ListBox est à 2 dimensions, la hauteur de la liste ne fonctionne plus correctement. Le plus bizarre est que si je lance la macro en pas à pas, ça fonctionne. Mais pas de fonction automatique. Je ne comprends pas où ça bug.
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 ' On créé une liste Set NewListe = Renvoi_vers_champs_Userform.Controls.Add("forms.ListBox.1") With NewListe .Top = 20 .Left = 10 .Width = 230 End With Hauteur_Liste = 10 NewListe.Clear ' On balaye toutes les propriétés personalisées du template ' et on ajuste la hauteur de la liste au contenu For Each Propriété In ActiveDocument.CustomDocumentProperties NewListe.AddItem Propriété.Name Hauteur_Liste = Hauteur_Liste + 10 Next Propriété ' Ici, on ajuste la hauteur de l'Userform et de la liste ' Si la hauteur de la liste est supérieure à 200, on la met en liste déroulante If Hauteur_Liste > 200 Then Hauteur_Liste = 200 NewListe.Height = Hauteur_Liste Else NewListe.Height = Hauteur_Liste End If Renvoi_vers_champs_Userform.Height = 55 + Hauteur_Liste Hauteur_Userform = Renvoi_vers_champs_Userform.Height
Voici ce que j'obtiens (exemple avec 15 champs) lorsque je lance la macro (exécution automatique, sans pas à pas):
Et quand je lance la macro en pas à pas, je retrouve bien le résultat escompté (c'est à dire que la hauteur de la ListBox est < à 200, ce qui fait que je n'ai pas besoin de l'afficher avec la barre de défilement verticale):
Voici le code actuel:
Est-ce que quelqu'un de vous aurait une solution à mon problème?
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 ' On créé une liste Set NewListe = Renvoi_vers_champs_Userform.Controls.Add("forms.ListBox.1") With NewListe .Top = 20 .Left = 10 .Width = 230 .ColumnCount = 2 End With Hauteur_Liste = 10 NewListe.Clear ' On balaye toutes les propriétés personalisées du template ' et on ajuste la hauteur de la liste au contenu iList = 0 For Each Propriété In ActiveDocument.CustomDocumentProperties NewListe.AddItem NewListe.List(iList, 0) = Propriété.Name NewListe.List(iList, 1) = Propriété.Value Hauteur_Liste = Hauteur_Liste + 10 iList = iList + 1 Next Propriété ' Ici, on ajuste la hauteur de l'Userform et de la liste ' Si la hauteur de la liste est supérieure à 200, on la met en liste déroulante If Hauteur_Liste > 200 Then Hauteur_Liste = 200 NewListe.Height = Hauteur_Liste Else NewListe.Height = Hauteur_Liste End If Renvoi_vers_champs_Userform.Height = 55 + Hauteur_Liste Hauteur_Userform = Renvoi_vers_champs_Userform.Height
Merci d'avance
Partager