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 :

Positionner le ScrollBar d'une Frame à sa gauche


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 192
    Par défaut Positionner le ScrollBar d'une Frame à sa gauche
    Bonjour à tous,

    Est-il possible de placer la scrollbar d'une frame sur la gauche ?

    Merci beaucoup

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Pas à ma connaissance, mais si tu as vraiment besoin de présenter ainsi les "choses", rien ne t'empêche de ne pas utiliser les ascenseurs de ce Cadre et de lui adjoindre tes propres ascenseurs, en les plaçant où tu le souhaites !
    Il est alors évident que tu vas ainsi compliquer significativement ton code (calculs, etc ...)

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 192
    Par défaut
    J'ai trouvé un début de piste ... Remplacer le Scrollbar par un bouton et capter les coordonnés pour faire bouger la Listbox. Mais malheuresment je n'arrive pas à l'adapter des que je passe sur le bouton ca me met une erreur (Listbox.index Invalid) Une idée ?


    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
    Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    'récupère position vertical curseur souris
    coordY = Y
     
    'longueur listbox = nombre éléments de la liste x 10px par éléments
    longueurlist = ListBox1.ListCount * 10
     
    'hauteur listbox
    htlistbox = CommandButton1.Height
     
    'transforme position curseur en position éléments de la liste par simple règle de trois
    'arrondir à un chiffre rond
    yyy = Int(Int(Y * ListBox1.ListCount / htlistbox) * 10)
     
    'sélectionne l'élément de la liste par rapport à la position du curseur
    ListBox1.ListIndex = yyy / 10
     
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Remplacer le Scrollbar par un bouton et capter les coordonnés pour faire bouger la Listbox.
    J'ai le don d' "adorer" les diables à ressort ...
    Elle sort d'où, d'un coup, cette listbox ?
    Allez ! Si tu veux mon aide, apprends à être précis et clair, sine qua non , hein ...

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    parfois l'estethique l'emporte sur la simplicité

    un userfrom, une frame,une listebox dans la frame et un controlsscrollbar a gauche je dis bien un control scrollbar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim firstop
    Private Sub ScrollBar1_Scroll()
    ListBox1.Top = firstop - ScrollBar1
    End Sub
    Private Sub UserForm_Activate()
    ListBox1.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    ScrollBar1.Max = ListBox1.Top + ListBox1.Height - Frame1.Height
    firstop = ListBox1.Top
    End Sub
    Nom : demo.gif
Affichages : 1552
Taille : 81,2 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 192
    Par défaut
    Merci pour ta réponse je pense pas etre très loin de la solution. Cependant ma Listbox Est très grande, elle a donc un scrollbar sur la doite. Ce que tu fais es correct sauf que ca ne va pas jusqu'à la fin de ma liste du coup ... As tu une idée ? Suis je clair ?

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    fait moi plaisir
    quand tu rempli ta listbox, met sa propriété "listrow au nombre d'items de ta liste et mon modelé fonctionnera très bien et tu n'aura pas la scroll a droite

    lol
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 192
    Par défaut
    ListBox1.ListRow = ListBox1.ListCount ne marche pas j'ai pas de propriété .ListRow

    Si ca peut aider :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    Private Sub UserForm_Initialize()
    
    Application.ScreenUpdating = False
    Call formatage
    Call Init
    Set f = Sheets("Sheet1")
    Set d = CreateObject("Scripting.Dictionary")
    Set d2 = CreateObject("Scripting.Dictionary")
    Set d3 = CreateObject("Scripting.Dictionary")
    ColVisu = ColToSelect
    Bd = f.Range("A2:BH" & f.[A65000].End(xlUp).Row).Value
    X = 15
    Y = Me.ListBox1.Top - 12
        For Each k In Split(ColVisu, ",")
            Set Lab = Me.Frame1.Controls.Add("Forms.Label.1")
            Lab.Caption = f.Cells(1, Val(k))
            Lab.Top = Y
            Lab.Left = X
            X = X + f.Columns(Val(k)).Width
            temp = temp & f.Columns(Val(k)).Width & ";"
        Next k
    temp = Left(temp, Len(temp) - 1)
    Me.ListBox1.ColumnCount = UBound(Split(ColVisu, ",")) + 1
    Me.ListBox1.ColumnWidths = temp
    Dim Tbl: ReDim Tbl(1 To nbrows, 1 To nbcol)
    j = 0
    
        For Each k In Split(ColVisu, ",")
        j = j + 1
            For i = 1 To nbrows - 1
               Tbl(i, j) = Bd(i, Val(k))
               If IsNumeric(Tbl(i, j)) Then Tbl(i, j) = format(Tbl(i, j), "0.00")
               On Error Resume Next
            Next i
        Next k
        
        'Me.ComboBox1.AddItem ("")
        'Me.ComboBox1.AddItem ("BRAZIL")
        'Me.ComboBox1.AddItem ("CHILE")
        'Me.ComboBox1.AddItem ("CHINA")
        'Me.ComboBox1.AddItem ("COLOMBIA")
        'Me.ComboBox1.AddItem ("CZECH REPUBLIC")
        'Me.ComboBox1.AddItem ("EGYPT")
        'Me.ComboBox1.AddItem ("GREECE")
        'Me.ComboBox1.AddItem ("HUNGARY")
        'Me.ComboBox1.AddItem ("INDIA")
        'Me.ComboBox1.AddItem ("INDONESIA")
        'Me.ComboBox1.AddItem ("KOREA, REPUBLIC OF")
        'Me.ComboBox1.AddItem ("MALAYSIA")
        'Me.ComboBox1.AddItem ("MEXICO")
        'Me.ComboBox1.AddItem ("PERU")
        'Me.ComboBox1.AddItem ("PHILIPPINES")
        'Me.ComboBox1.AddItem ("POLAND")
        'Me.ComboBox1.AddItem ("QATAR")
        'Me.ComboBox1.AddItem ("RUSSIAN FEDERATION")
        'Me.ComboBox1.AddItem ("SOUTH AFRICA")
        'Me.ComboBox1.AddItem ("TAIWAN, PROVINCE OF CHINA")
        'Me.ComboBox1.AddItem ("THAILAND")
        'Me.ComboBox1.AddItem ("TURKEY")
        'Me.ComboBox1.AddItem ("UNITED ARAB EMIRATES")
        'Me.ComboBox1 = ""
        
        ListBox1.List = Tbl
        column_country = associatecolumn("Country")
        For i = LBound(Tbl) To UBound(Tbl)
            d(Tbl(i, column_country)) = ""
        Next i
        temp = d.keys
        Tri temp, LBound(temp), UBound(temp)
        Me.ComboBox1.List = temp
        Me.ComboBox1.AddItem ("ALL")
        
        'Me.ComboBox2.AddItem ("")
        'Me.ComboBox2.AddItem ("Consumer Discretionary")
        'Me.ComboBox2.AddItem ("Consumer Staples")
        'Me.ComboBox2.AddItem ("Energy")
        'Me.ComboBox2.AddItem ("Financials")
        'Me.ComboBox2.AddItem ("Health Care")
        'Me.ComboBox2.AddItem ("Industrials")
        'Me.ComboBox2.AddItem ("Materials")
        'Me.ComboBox2.AddItem ("Real Estate")
        'Me.ComboBox2.AddItem ("Telecommunication Services")
        'Me.ComboBox2.AddItem ("Utilities")
        
        column_industry = associatecolumn("Sector")
        For i = LBound(Tbl) To UBound(Tbl)
            d2(Tbl(i, column_industry)) = ""
        Next i
        temp2 = d2.keys
        Tri temp2, LBound(temp2), UBound(temp2)
        Me.ComboBox2.List = temp2
    
        Set plage = Tbl
        Set plage = plage.Offset(1).Resize(plage.Rows.count - 1)
        Me.ListBox1.List = plage
        
      'Me.Frame1.Width = 300
        Me.Frame1.ScrollWidth = Me.ListBox1.Width + 10
        Me.Frame1.ScrollBars = 1
        
       TriMult Tbl, LBound(Tbl), UBound(Tbl), 1
       ComboBox3.Visible = False
       Me.ComboBox4.AddItem ("Best in Class: Qlty Bck[1,4] Valuation Group 1")
       Me.ComboBox4.AddItem ("Qlty Bck[1,4] Valuation Group 1&2")
       Me.ComboBox4.AddItem ("Quality Bck[1,4]")
       Me.ComboBox4.AddItem ("Qlty Bck[1,4] Valuation Group 1 Growth Bucket [1,5]")
       
       Me.TextBox5 = 0
       Label1.Font.Bold = True
       Label2.Font.Bold = True
       Label3.Font.Bold = True
       Label4.Font.Bold = True
       Label5.Font.Bold = True
       Label6.Font.Bold = True
       Label7.Font.Bold = True
       Label8.Font.Bold = True
       Label9.Font.Bold = True
       Label20.Font.Bold = True
       Label20.Font.Size = 16
       Label20.ForeColor = vbgrey
       Label25.Caption = Me.ListBox1.ListCount & " Stocks"
       Label25.Font.Bold = True
       Label25.Font.Size = 16
       Label25.ForeColor = vbgrey
       
            TextBox6.Visible = False
            TextBox7.Visible = False
            TextBox8.Visible = False
            TextBox9.Visible = False
            TextBox10.Visible = False
            TextBox11.Visible = False
            Label22.Visible = False
            Label23.Visible = False
            Label24.Visible = False
            CommandButton4.Visible = False
            ListBox1.ListRow = ListBox1.ListCount
            ScrollBar1.Max = ListBox1.Top + ListBox1.Height - Frame1.Height
            firstop = ListBox1.Top
    End Sub

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    autant pour moi c'est les combo qui ont cette propriété
    alors pirouettre cacahuette
    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
     
    Dim firstop
    Private Sub ScrollBar1_Change()
    ListBox1.Top = firstop - ScrollBar1
    End Sub
    Private Sub ScrollBar1_Scroll()
    ListBox1.Top = firstop - ScrollBar1
    End Sub
    Private Sub UserForm_Activate()
    For i = 1 To 1000: ListBox1.AddItem i: Next
    ListBox1.Height = ListBox1.FontSize * 1.238 * ListBox1.ListCount
    ScrollBar1.Max = ListBox1.Top + ListBox1.Height - Frame1.Height
    firstop = ListBox1.Top
    ScrollBar.SmallChange = 8
    End Sub
    Nom : demo.gif
Affichages : 1377
Taille : 63,7 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 192
    Par défaut
    J'ai 2100 ligne et 23 colonnes ... Ca freeze complètement

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    2100 ligne et 23 colonnes
    je dirais que le control devrait être une listview
    c'est quoi freeze
    chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim firstop
    Private Sub ScrollBar1_Change()
    ListBox1.Top = firstop - ScrollBar1
    End Sub
    Private Sub ScrollBar1_Scroll()
    ListBox1.Top = firstop - ScrollBar1
    End Sub
    Private Sub UserForm_Activate()
    For i = 1 To 2000: ListBox1.AddItem i: Next
    ListBox1.Height = ListBox1.FontSize * 1.238 * ListBox1.ListCount
    ScrollBar1.Max = ListBox1.Top + ListBox1.Height - Frame1.Height
    firstop = ListBox1.Top
    ScrollBar1.SmallChange = 8
    End Sub
    c'est nikel
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je ne voulais pas intervenir au-delà dès lors que l'on parlait de mettre à gauche l'ascenseur vertical d'un Frame pour finalement parler du déroulement d'une listbox.
    Je voudrais simplement appeler l'attention sur deux points concernant ce calcul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Height = ListBox1.FontSize * 1.238 * ListBox1.ListCount
    1) d'où sort ce coefficient correcteur arbitraire ?
    2) ce coefficient peut être exact avec une police de caractères et inexact avec une autre police de caractères ...
    je viens de m'amuser à quelques essais pour confirmer ce que je dis là. En voici un (entre autres) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Activate()
      With ListBox1
         For i = 1 To 10
           .AddItem i
           .FontName = "Arial"
           .FontSize = 8
         Next
      End With
      ListBox1.Height = ListBox1.FontSize * 1.238 * ListBox1.ListCount
    End Sub
    D'autres différences sont probables entre un écran et un autre écran
    3) j'appelle par ailleurs l'attention sur ce qu'expose l'aide VBA en ce qui concerne la propriété height d'un contrôle :
    La valeur affectée à Height ou Width doit être supérieure ou égale à zéro. Pour la plupart des systèmes, la plage de valeurs recommandée est de 0 à +32.767. Des valeurs supérieures peuvent également fonctionner selon la configuration de votre système
    Or, dans le cas qui nous intéresse (2000 articles), que se passerait-il avec une taille de police de 14 ? --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox 14 * 1.238 * 2000
    Il n'est jamais très bon de "jouer" ainsi, même si les aléas sont très peu nombreux.

    EDIT : je reviendrai lorsque le demandeur aura exprimé différemment et plus précisément son problème.
    J'exposerai alors qu'il n'est nullement besoin :
    - ni (bien au contraire et surtout pas) de fixer à son maximum la hauteur de la listbox
    - ni donc de calculs "approximatifs" de l'espèce

  13. #13
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Unparia : +1
    Bonjour Jacques,

    Je suis étonné, à la lecture de ce sujet, qu'ait été abandonné l'idée initiale du Frame.
    Frame = conteneur, peut donc aisément englober un Scrollbar (que l'on met ou l'on veut) et une listbox (à laquelle on ne touche pas).
    Après, il suffit de régler le width et le height de ce frame pour que tout soit "transparent"...

  14. #14
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 192
    Par défaut
    Merci à tous pour vos réponses elle sont très constructives.

    @unparia : C'est vrai que ce coefficient arbitraire est très dangereux si je pouvais stocker dynamiquement une variable ca serait idéal.

    Pour résumer un peu le problème J'ai une listbox dynamique. Elle peut aller jusqu'à 6000 lignes et 30 colonnes. Mais les utilisateurs ne sont pas satisfaits car le scroll de la Listbox(Inclu dans une frame) se trouve sur la droite. Ils doivent donc scrollé horizontallement jusqu'à la dernière colonne afin de pouvoir descendre dans la liste.

    L'idéal aurait été de gérer un event molette de souris qui permettrait à l'utilisateur de descendre dans la listbox mais cela semble impossible ou très difficile.
    La solution Listview est une alternative mais je suis passé en Excel 64 bits donc ce n'est pas possible.

    J'ai donc installer un bouton a droite de ma listbox et en fonction des coordonnés de la souris sur ce bouton la Listbox s'adapte. Voici le code en question :

    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
     Private Sub CommandButton5_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
    'récupère position vertical curseur souris
    coordY = Y
    'longueur listbox = nombre éléments de la liste x 10px par éléments
    longueurlist = ListBox1.FontSize * 1.238 * ListBox1.ListCount
     
    'hauteur listbox
    htlistbox = 401.25
     
    'transforme position curseur en position éléments de la liste par simple règle de trois
    'arrondir à un chiffre rond
    yyy = Int(Int(coordY * ListBox1.ListCount / htlistbox))
     
    'sélectionne l'élément de la liste par rapport à la position du curseur
    
    ListBox1.ListIndex = yyy - 1
    
    Label25.Caption = Me.ListBox1.ListIndex + 2 & "/" & Me.ListBox1.ListCount + 1 & " Stocks"
    End Sub
    Les éléments en rouge sont statiques. Si vous avez des idées pour les rendre dynamique ca m'aiderait grandement.
    De plus si je pouvais gerer le deplacement de la listbox uniquement si l'utilisateur maintient le clique gauche de sa souris.

    Un grand Merci

  15. #15
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Allons bon !
    Et si tu faisais comme au judo (où on met à son propre profit les avantages de l'adversaire) ?
    Regarde :
    - Un Frame sans bordure ni caption
    - Dans ce Frame : ta listbox (sans chercher à lui donner sa taille maximum)
    - tu réduis maintenant la largeur du Frame seul, en déplaçant sa bordure droite vers la gauche, jusqu'à cacher l'ascenseur
    - tu mets une scrollbar à gauche (et à l'extérieur) du Frame

    Et ce code tout bête :
    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
    Private Sub UserForm_Activate()
       With ScrollBar1
        .Max = ListBox1.ListCount
        .Min = 0
        .SmallChange = 1
        .LargeChange = 10 ' ou la valeur que tu juges plus "confortable". Je choisirais personnellement listbox1.listcount/10
      End With
    End Sub
    Private Sub ScrollBar1_Change()
       ListBox1.TopIndex = ScrollBar1
    End Sub
     
    Private Sub ScrollBar1_Scroll()
      ListBox1.TopIndex = ScrollBar1
    End Sub
    Aucun calcul, aucune approximation, etc ...
    Voilà tout ...

    EDIT : j'espère qu'il n'échappera à personne que le Frame n'est là que pour cacher l'ascenseur de la listbox *****(et rien d'autre).

    ***** Il est à ce propos dommage que les msforms.listboxes n'aient pas été construites comme celles de VB6.
    Avec une listbox de VB6, on pourrait :
    - supprimer carrément l'ascenseur de la listbox (en envoyant un message à sa fenêtre)
    - et donc ne même plus avoir besoin du Frame pour cacher l'ascenseur.

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re Bonjour a tous
    oui c'est plus simple
    je dois reconnaitre que j'ai complètement zappé la propriété topindex il faut dire que je ne m'en sert rarement des listbox préférant pour ma part les listview qui ont la gestion des trois boutons de la souris (roulette)en natif
    unparia a raison
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2016
    Messages : 192
    Par défaut
    Un grand merci ca marche totalement. Par contre je suis obligé de fixer une valeur de taille a ma listbox car le nombre de colonne est variable mais c'est futile. Un grand merci à vous.

    Cependant j'aimerai savoir comment mettre dynamiquement les chiffres en rouge dans mon précédent poste par curiosité car je trouve la solution bonne aussi (en terme de design).

    Merci unparia et patrick

    Ps patrick : Tu as raison pour les listviews je bossais dessus avant c'est beaucoup mieux mais je n'ai plus la possibilité dans un environnement 64 bits

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Ps patrick : Tu as raison pour les listviews je bossais dessus avant c'est beaucoup mieux mais je n'ai plus la possibilité dans un environnement 64 bits
    grosse erreur de l'avoir installé en 64 c'est bien connu que même Microsoft le déconseille
    en tout cas chapo a unparia c'est propre et Nikel
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Positionner le ScrollBar d'une Frame à sa gauche
    Par rampage92 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 03/05/2017, 21h16
  2. mettre une scrollbar dans une frame
    Par RyzenOC dans le forum Général Python
    Réponses: 21
    Dernier message: 22/06/2015, 16h38
  3. Réponses: 0
    Dernier message: 26/02/2009, 12h06
  4. Positionner la scrollBar d'une DataGrid
    Par aloha dans le forum Flex
    Réponses: 0
    Dernier message: 19/03/2008, 14h30
  5. [VB6] Scrollbar dans une frame avec des textbox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 44
    Dernier message: 01/03/2006, 08h16

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