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

VBA Word Discussion :

Problème dimensionnement d'une listbox


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Avril 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Problème dimensionnement d'une listbox
    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.

    Nom : Userform.png
Affichages : 134
Taille : 14,4 Ko

    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:
    Nom : Userform2.png
Affichages : 100
Taille : 10,2 Ko

    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

    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
    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.

    Voici ce que j'obtiens (exemple avec 15 champs) lorsque je lance la macro (exécution automatique, sans pas à pas):
    Nom : Userform3.png
Affichages : 124
Taille : 14,8 Ko

    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):
    Nom : Userform4.png
Affichages : 130
Taille : 19,0 Ko

    Voici le code actuel:
    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
    Est-ce que quelqu'un de vous aurait une solution à mon problème?

    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Avril 2015
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    J'ai, à priori, trouvé la solution.

    Il faut ajouter DoEvents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        If Hauteur_Liste > 200 Then
            Hauteur_Liste = 200
            DoEvents
            NewListe.Height = Hauteur_Liste
        Else
            DoEvents
            NewListe.Height = Hauteur_Liste
        End If

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

Discussions similaires

  1. Problème pour "réinitialiser" une listbox
    Par akapsy dans le forum VB.NET
    Réponses: 7
    Dernier message: 17/04/2012, 23h06
  2. Réponses: 8
    Dernier message: 21/10/2011, 13h31
  3. Problème pour vider une ListBox
    Par djames37 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/08/2011, 19h13
  4. [VBA-E] Problème pour remplir une listbox multicolonne
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/05/2007, 16h55
  5. [VB.NET] Problème pour alimenter une listbox.
    Par gueguen23 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/01/2005, 14h05

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