Déplacer Label en même temps que ScrollBar

Bonjour

Alors voilà, j'ai un UserForm avec une ListBox alimentée depuis une feuille du classeur. Il s’agit d'un tableau et ce dernier et très large. A l’initialisation du UserForm la ListBox affiche le tableau avec une ScrollBar vertical pour se déplacer.

De plus à l’initialisation, un Label est créé avec les entêtes des colonnes du tableau. Comme le tableau est très larges les entêtes ne passent pas tous dans le USerForm.

Ce que je voudrais faire, si possible, et que quand je scroll la barre verticale de la LisBox, récupérer la position de la ScrollBar pour l'appliquer au Label. Ainsi le Label se déplace et les entête restent alignées aux colonnes de la ListBox !

J'espère avoir été clair ! Je met une partie du code utilisé.

Par avance, merci de l’intérêt porté au sujet

INITIALISATION DE LA LISTBOX A L'OUVERTURE DU USERFORM

Set f = Feuil1
Set Rng = f.Range("A2:AG" & f.[A65000].End(xlUp).Row)
Titre = f.UsedRange.Rows(1).Value
NomTableau = "Tableau1"
ActiveWorkbook.Names.Add Name:=NomTableau, RefersTo:=Rng
NbCol = Range(NomTableau).Columns.Count
TabBD = Range(NomTableau).Resize(, NbCol + 1).Value
For i = 1 To UBound(TabBD): TabBD(i, NbCol + 1) = i: Next i
colVisu = Array(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)
Me.ListBox1.List = TabBD
Me.ListBox1.ColumnCount = NbCol + 1
EnteteListBox

CRÉATION DE L’ENTÊTE APRES INITIALISATION

Sub EnteteListBox()
   X = Me.ListBox1.Left + 8
   Y = Me.ListBox1.Top - 15
   For c = 1 To NbCol
     pos = Application.Match(c, colVisu, 0)
     If Not IsError(pos) Then
       'k = c
       Set Lab = Me.Controls.Add("Forms.Label.1")
       Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
       Lab.ForeColor = vbBlack
       Lab.Top = Y
       Lab.Left = X
       Lab.Height = 24
       Lab.Width = Range(NomTableau).Columns(c).Width * 1#
       X = X + Range(NomTableau).Columns(c).Width * 1
       tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"
     Else
       X = X + 0
       tempcol = tempcol & 0 & ";"
     End If
   Next c
   tempcol = tempcol & "20"
   On Error Resume Next
   Me.ListBox1.ColumnWidths = tempcol
   On Error GoTo 0
End Sub
63pourforum.xlsm (56.11 Ko)

Bonjour,

Le nombre maximum de colonnes pour un ListBox est 10...

A+

Je ne comprend pas, j'ai pourtant bien mes 32 colonnes dans ma ListBox !

Je met mon fichier dans mon poste d'explication

Perso j'en était resté à 10 ça me suffisait largement....

Au delà tu as le Listview...

Sorry !

A+

Ok mais que se soit avec 4, 10 ou 32 colonnes ça ne change pas mon problème, comment scroller (avec la scrollbar verticale de la ListBox) et qu'un Label suive le Scoll sur mon UserForm ?

Bonjour à tous,

Si j'ai bien compris ta demande ... ce que tu cherches à faire ne se fait pas avec un Listbox.

Mais fonctionne bien avec un Listview.

Un exemple ...

ric

Alors oui dans le principe c'est ce que je veux, sauf que comme mon ListBox n'est pas alimenté via un .RowSource, par conséquent je ne peux pas avoir les entêtes directement dedans. C'est pourquoi je suis passé avec ce code pour générer les entêtes via un Label (avec le code ci-dessous). donc comment faire pour que mon Label suive le mouvement du scroll ?

   X = Me.ListBox1.Left + 8
   Y = Me.ListBox1.Top - 15
   For c = 1 To NbCol
     pos = Application.Match(c, colVisu, 0)
     If Not IsError(pos) Then
       'k = c
       Set Lab = Me.Controls.Add("Forms.Label.1")
       Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
       Lab.ForeColor = vbBlack
       Lab.Top = Y
       Lab.Left = X
       Lab.Height = 24
       Lab.Width = Range(NomTableau).Columns(c).Width * 1#
       X = X + Range(NomTableau).Columns(c).Width * 1
       tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"
     Else
       X = X + 0
       tempcol = tempcol & 0 & ";"
     End If

j'ai bricolé un petit truc pour illustrer mes propos. Maintenant, dans le même principe, comment récupérer la position du scroll de la ScrollBar de la ListBox ?

70forumexemple.xlsm (16.10 Ko)

Bonjour à tous,

... comment faire pour que mon Label suive le mouvement du scroll ? ...

Peut-être que je n'ai pas bien compris ...

Mais, si c'est pour que les En-têtes suivent le mouvement horizontal du Scrollbar ... le ListView le fait naturellement sans l'aide des Labels.

Il faut donc changer le ListBox par un ListView; puis, modifier le code pour alimenter le ListView.

Si le ListView ne convient pas, excuse-moi d'être intervenu et de t'avoir fait perdre ton temps.

ric

A vrai dire je préfère utiliser les contrôles standard pour éviter des beugue pour les futures utilisateurs, de plus pour alimenter un ListBox ou un ListView il faut utiliser un .RowSource ! Malheureusement je n'utilise pas cette méthode...

Et puis tu ne me fais pas perdre de temps car tout est bon à prendre !

Le truc c'est que j'utilise un code pour effectuer différents filtres, pour ce faire je ne peux pas utiliser RowSource...

Bon de ce que je vois il n'est pas possible de récupérer l’événement Scroll d'un ListBox Alors est-il possible d'ajuster mon code afin d'utiliser RowsSource tout en permettant l’exécution de tris ?

Bon et bien je confirme que ce n'est pas possible, je suis allé fouiller dans mes vieux tiroirs, encore une fois MERCI Boisgontier Jacques qui fournis une alternative à mon problème.

Solution ici : http://boisgontierjacques.free.fr/fichiers/Formulaire/ListBoxEnteteScroll.xls

Bonjour à tous,

Très intéressant.

ric

Rechercher des sujets similaires à "deplacer label meme temps que scrollbar"