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

Conception Discussion :

Problème de proportionnalité


Sujet :

Conception

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Points : 234
    Points
    234
    Par défaut Problème de proportionnalité
    Bonjour,

    J'utilise un UserForm qui ne comporte qu'un Controle : Un ListBox.
    Tous deux utilisent une Font Tahoma 12
    Ce ListBox est chargé à chaque appel du UserForm par un Dictionnary (actuellement env 30 éléments maxi)
    Sélectionner un item du ListBox décharge le Userform.
    Mais à chaque appel le Dico se décrémente (remove) d'un item (le dernier cliqué...) et ce jusqu'à être complètement vidé.
    Sur le principe, pas de problème.

    Le problème c'est d'adapter la hauteur du ListBox au nombre d'éléments.
    Et d'adapter également la hauteur du UserForm à celle du ListBox. (à une vache près... !)

    Or il semble qu'ils n'utilisent pas la même unité : A formule équivalente la hauteur du UserForm diminue plus rapidement que celle du ListBox.
    Avez vous une formule qui permet de calculer la hauteur de chacun par rapport au nombre d'items du ListBox?
    Pour l'instant j'en suis là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Me
    .LAnim.List = Dico.keys
    k = Dico.Count
    Ws.Range("P2:P" & Ws.[P65000].End(xlUp).Row).ClearContents
    Ws.Range("P2:P" & Dico.Count + 1) = Application.Transpose(Dico.keys)
    k = Dico.Count + 1
       .LAnim.Height = k * 13 + 10 * (k / 9)  '+ 5 * (k / 6)
       .Height = .LAnim.Height + 40
    End With
    ...Mais si quelqu'un à une formule moins capillo-tractée, (et une explication ?) je prend !

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Un bout de code qui vous devriez pouvoir exploiter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Activate()
        Me.ListBox1.Height = Me.ListBox1.ListCount * Me.ListBox1.Font.Size * 1.25
        Me.Height = Me.ListBox1.Height + 30
    End Sub
    Je ne sais pas pourquoi il faut multiplier par 1.25, je l'ai trouvé empiriquement.
    Cordialement.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Points : 234
    Points
    234
    Par défaut
    Bonjour et merci de ce retour.

    Une constante n'est pas satisfaisante. Déjà cela semble varier d'un poste de travail à l'autre. Chez moi 1.25 est trop petit.
    Mais surtout quand c'est Ok au départ (avec ListCount = 30)
    Quand on décrémente ListCount (c'est le but de la question) si ListCount = 1 l'affichage est tronqué.
    Donc idéalement le but est de trouver une formule qui est exacte pour ListCount = 50 et qui rajoute peanuts à chaque -1...

    A+

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bon, quelque chose qui marche à peu près.
    Fonctionne avec plusieurs police si l'on reste dans la gamme des Font.Size entre 10 et 12.
    Mais pas possible pour moi de tester sur plusieurs écrans différents !
    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
    Option Explicit
     
    Private Sub UserForm_Activate()
        Dim k
        k = 1.2 * ListBox1.ListCount * ListBox1.Font.Size
        k = k + (30 - ListBox1.ListCount) / 10
        ListBox1.Height = k
        UserForm1.Height = ListBox1.Height + 40
    End Sub
     
    Private Sub UserForm_Click()
        ListBox1.RemoveItem ListBox1.ListIndex
        UserForm_Activate
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim i As Long
        For i = 1 To 30
            ListBox1.AddItem "Ligne " & i
        Next i
        ListBox1.Value = ListBox1.List(0)
        Debug.Print ListBox1.Font.Name, ListBox1.Font.Size
    End Sub
    Petite application test en attaché.
    Bonne continuation.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Points : 234
    Points
    234
    Par défaut
    Balaize !
    Et en plus ça tombe pile-poil même chez moi...
    Merci

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

Discussions similaires

  1. Problème de redimensionnement d'une form avec proportionnalité
    Par Basile le disciple dans le forum Débuter
    Réponses: 5
    Dernier message: 03/05/2013, 20h00
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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