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

Macros et VBA Excel Discussion :

ListBox - Propriété Width dynamique [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut ListBox - Propriété Width dynamique
    Bonjour,
    Dans le but d'automatiser le calcul de la largeur de chaque colonne, propriété ColumnWidths, d’un ListBox, j’ai écrit une petite procédure qui construit cette propriété dynamiquement en fonction de la largeur de chaque colonne de la feuille Excel qui alimente ce ListBox.
    En fin de procédure, je rectifie la largeur du ListBox en fonction du total de la largeur de chaque colonne.
    Au départ j’ai dessiné le ListBox avec une largeur à 200.
    La rectification dynamique de la largeur ne s’effectue pas sauf si je place un point d’arrêt pendant l’exécution.
    Si je dessine le ListBox avec une largeur supérieure à la valeur qu’elle doit prendre cela fonctionne.
    J’ai donc pris le parti de la dessiner ainsi mais évidemment quand j’ai copié le code dans le projet dans lequel elle doit tourner cela ne fonctionne plus. C’est-à-dire que la largeur reste à sa valeur initiale mais si je place un point d’arrêt cela fonctionne.
    Pour mon test, j’utilise une feuille dont la propriété CodeName est shtTest. La plage commence à A1, la première ligne contient les étiquettes de champs et j’ai placé une dizaine de colonnes et 5 lignes.
    Je m’arrache les cheveux depuis plus de 3 heures avec ce problème.
    J’ai cherché en vain une méthode équivalente à Repaint que j’utilise de temps en temps pour les UserForm
    Quelqu’un parmi vous a-t-il déjà rencontré ce 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
    Option Explicit
    Private Sub UserForm_Initialize()
     Me.Caption = "Test ListBox AutoWith"
     InitListOrder
    End Sub
    Sub InitListOrder()
     Dim tblSrce As String
     Dim tbl As Range
     Dim c As Long, cw As String, tw As Double
     Set tbl = shtTest.Range("A1").CurrentRegion
     With tbl ' Rectifie tbl pour ne pas englober la ligne d'en-tête
      Set tbl = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
     End With
     With lstBox
     .RowSource = tbl.Parent.Name & "!" & tbl.Address
     .ColumnCount = tbl.Columns.Count
     ' Point d'arrêt à partir d'ici
     .ColumnHeads = True
      For c = 1 To .ColumnCount
       cw = cw & tbl.Cells(1, c).Width & ";"
       tw = tw + tbl.Cells(1, c).Width '+ 1
      Next
      cw = Left(cw, Len(cw) - 1): .ColumnWidths = cw
     .Width = tw + 3 ' Rectifie la largeur du ListBox
     End With
     Set tbl = Nothing
     Debug.Print lstBox.Width & " tw = " & tw + 3
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    rajoute un DoEvents.. pour laisser "la main" au système ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (..)
     .ColumnCount = tbl.Columns.Count
     ' Point d'arrêt à partir d'ici
     DoEvents
     .ColumnHeads = True
    (...)

  3. #3
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    re le forum, bonjour bbil, Philippe,

    J'ai testé ton code et ajouté simplement un AutoFit, au départ, comme toi je fixe la largeur de la Listbox à 200 et n'ai eu aucun problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Set tbl = shtTest.Range("A1").CurrentRegion
     tbl.Columns.AutoFit
    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Dominique,
    Citation Envoyé par casefayere Voir le message
    re le forum, bonjour bbil, Philippe,
    J'ai testé ton code et ajouté simplement un AutoFit, au départ, comme toi je fixe la largeur de la Listbox à 200 et n'ai eu aucun problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Set tbl = shtTest.Range("A1").CurrentRegion
     tbl.Columns.AutoFit
    Bonne journée
    Merci pour ta réponse mais chez moi, cela n'a pas modifié la largeur du ListBox par contre le DoEvents proposé par bbil à résolu mon problème
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Regardes le fichier bidon que j'ai fait, je t'assure ne rencontrer aucun problème même en changeant les textes dans les colonnes et sans toucher à l'AutoFit au départ
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Dominique,
    Merci pour le fichier Test mais je confirme que cela ne résout pas mon problème initial qui était de faire en sorte que le ListBox prenne la largeur qui corresponde à la somme des colonnes de ma source de données. Somme (variable Tw) que je calcule dans une boucle.
    Avec le DoEvents proposé par bbil, cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     With Me.lstBox
     .RowSource = tbl.Parent.Name & "!" & tbl.Address
     .ColumnCount = tbl.Columns.Count
     .ColumnHeads = True
      ReDim tcol(.ColumnCount - 1)
      For c = 1 To .ColumnCount
       tcol(c - 1) = CStr(tbl.Cells(1, c).Width): tw = tw + tcol(c - 1)
      Next
     .ColumnWidths = Join(tcol, ";")
     DoEvents
     .Width = tw + 3 ' Rectifie la largeur du ListBox
     Me.Width = Abs((Me.Width < .Width)) * .Width + 20 ' Modifie la largeur de la UserForm
     End With
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Bbil,
    Mille mercis.
    Je n'avais utilisé cette commande.
    Philippe
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [CSS/Javascript] Changement des propriété CSS dynamiquement
    Par heladar dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/02/2009, 12h33
  2. Propriété "width" d'un label
    Par Faladin dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/07/2008, 21h39
  3. Changement de la propriété Width (en l'occurence) après une animation
    Par Marcolinho dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 29/07/2008, 10h47
  4. propriété width zappée dans un echo php
    Par skyangel20 dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2007, 11h30
  5. [CSS / FireFox] Balise de lien <A> et propriété width
    Par DemonKN dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/08/2005, 10h54

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