Lier les scrolls dans un userform

G

Gi²

Guest
Bonjour au Forum et à tous les cerveaux qui le font vivre: les lents - as mine - pour les questions, les brillants - que je sollicite aujourd'hui - pour les réponses! ;-)

Question:
Est-il possible de lier les scrolls de 2 objets dans un userform?

Exemple, peut-on piloter les scrolls de 2 frames distincts (qui ont bien un événement "quand scroll") en agissant sur l'un d'eux?

Question subsidiaire: est-ce possible avec 2 listbox? (qui elles, n'ont PAS d'événement "quand scroll")?

Version utilisée: XL 2003

Merci d'avance!

Gi².

P.S.: Bonjour à Thieb'! ;-)
 
L

LaurentTBT

Guest
Bonsoir à tous, salut Gigi…

Pour ta première question, ceci devrait te dépanner:

Private Sub Frame1_Scroll(ByVal ActionX As MSForms.fmScrollAction, ByVal ActionY As MSForms.fmScrollAction, ByVal RequestDx As Single, ByVal RequestDy As Single, ByVal ActualDx As MSForms.ReturnSingle, ByVal ActualDy As MSForms.ReturnSingle)
Frame2.ScrollLeft = Frame1.ScrollLeft
Frame2.ScrollTop = Frame1.ScrollTop
End Sub


Attention, ici, les 2 frames ont les mêmes dimensions, sinon, il faut peut-être trouver un facteur multiplicateur entre les 2.
Ensuite, si tu veux aussi qu'un scroll sur la 2 agisse sur la 2, tu refais pareil pour Private Sub Frame2_Scroll
MAIS, un scroll sur la 2 va déclencher un scroll sur la 1 qui va relancer la première procédure… Et j'ai eu un plantage.
Il faudra donc rajouter un booleen qui interdise la deuxième procédure de se déclencher à partir de la première et vice versa!

Pour le scroll d'une listBox, là, je ne vois pas trop comment l'intercepter. Je ne sais même pas s'il est possible pour une seule ListBox de connaître la valeur de son scroll!

Bon courage, et à demain (avec beaucoup de courage pour aborder notre avant-dernière semaine!!!!)
 
L

LaurentTBT

Guest
Bonjour à tous,

Je reviens sur ce fil après avoir revu le problème avec Gigi, car ma soluce n'était pas tout à fait satisfaisante:
l'événement Scroll de la frame1 n'entraînait la modification de scrolltop de frame 1 qu'après cette procédure terminée. En cliquant sous la bande du scroll, pour faire un LargeScroll, cela ne se répercutait pas correctement sur la Frame 2.
Voici donc la procédure modifiée:

Private Sub Frame1_Scroll(ByVal ActionX As MSForms.fmScrollAction, ByVal ActionY As MSForms.fmScrollAction, ByVal RequestDx As Single, ByVal RequestDy As Single, ByVal ActualDx As MSForms.ReturnSingle, ByVal ActualDy As MSForms.ReturnSingle)
Frame2.ScrollLeft = Frame2.ScrollLeft + RequestDx
Frame2.ScrollTop = Frame2.ScrollTop+RequestDy
End Sub


Cette fois, la frame 2 subit le même Scroll dans tous les cas: on prend l'ancienne valeur de scroll de la frame 2 et on lui ajout l'ordre de scroll appliqué à la frame 1.

Bonne soirée à tous.
 

Discussions similaires

Statistiques des forums

Discussions
312 466
Messages
2 088 663
Membres
103 910
dernier inscrit
amor57