Redimensionnement Listbox (et touche f8)

Signaler
Messages postés
13
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
8 février 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour,

Je suis débutant sous VBA Excel et je souhaite redimensionner une Listbox en fonction du nombre de lignes qu'elle contient (en gros reproduire la propriété autosize). J'utilise pour cela le code suivant :

    Dim Fin As Integer
    Dim Haut As Double
   
    Fin = Sheet3.Cells(2, 7)         'correspond au nombre de lignes insérées dans la ListBox + 1
    Haut = 10.25 * (Fin - 1)
    
    With UFArchitecture.ListBoxForms
        .RowSource = "Sheet3!C2:C" & Fin
        .Move 10, 10, 154.5, Haut
        .IntegralHeight = True
    End With

Le problème est que lorsque j'execute ce programme, la listbox prend bien la position souhaitée mais ne se redimensionne pas.
En revanche, lorsque je l'éxécute "au ralenti" (avec la touche F8), elle se redimensionne sans aucun problème. Je n'y comprend rien .

Si quelqu'un a une solution, je lui serais grandement reconnaissant...

7 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Il me semble que la propriété IntegralHeight  est en lecture seule en mode exécution !!!
Enlève la ligne :
 .IntegralHeight = True
pour voir ...
Messages postés
13
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
8 février 2008

Tout d'abord merci pour ta réponse.


J'ai retiré la ligne mais ca ne change pas le résultat.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Ah ?

C'est alors peut-être ta variable haut qui ne vas pas !

Change, pour voir :

.Move 10, 10, 154.5, 1000

et si cela ne modifie toujours pas la hauteur, cela veut dire que tu "rétablis" ailleurs la hauteur par défaut !
Messages postés
13
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
8 février 2008

J'ai essayé :

.Move 10, 10, 154.5, 1000

et le résultat reste le même.

Je ne touche à la hauteur de cette Listbox qu'à cet endroit. Voici le code que j'utilise, placé dans un module :

'main
Sub MàJ_architecture()
    Call Architecture                        'la fonction architecture ne fait qu'effectuer des opération dans un feuillet
    Call Remplir_ListBoxForms
    UFArchitecture.Show                'UFArchitecture est le userform dans lequel se trouve cette ListBox
End Sub

Private Sub Remplir_ListBoxForms()
    Dim Fin As Integer
    Dim Haut As Double
   
    Fin = Sheet3.Cells(2, 7)
    Haut = 10.25 * (Fin - 1)
   
    Application.ScreenUpdating = False
    With UFArchitecture.ListBoxForms
        .RowSource = "Sheet3!C2:C" & Fin
        .Move 10, 10, 154.5, Haut
        .IntegralHeight = True
    End With
    Application.ScreenUpdating = True
End Sub

Peut-être que je n'appelle pas la fonction au bon endroit
Peut-être aussi que je n'ai pas placé mon main au bon endroit

En tout cas, merci de t'intéresser au problème.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Comprends pas ...

Qu'as-tu (par hasard) dans l'intialisation de ton usf UFArchitecture  ??
Messages postés
13
Date d'inscription
mercredi 11 juillet 2007
Statut
Membre
Dernière intervention
8 février 2008

bah rien pour l'instant...
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Mets ceci dans le UserForm_Initialize
.Move 10, 10, 154.5, Haut

Mais comme Haut ne sera pas reconnue dans le code du UserForm, déclare la variable en Public dans un Module standard plutôt que dans ta procédure comme tu le fais.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA.