Défilement simultané de plusieurs listbox sous vba
ggt_jarre
Messages postés6Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention24 avril 2006
-
21 avril 2006 à 09:20
ggt_jarre
Messages postés6Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention24 avril 2006
-
24 avril 2006 à 08:28
bonjour,
j'ai plusieurs listbox cote à cote dans un userform qui se remplissent en même temps à partir de combobox
ces listbox réagissent comme un tableau (quand on sélectionne une ligne d'un des listbox ça sélectionne la même ligne sur tous les autres)
par contre je voudrai pouvoir les faire défiler en même temps quand on joue avec la scrollbar (à partir du moment où elle apparait quand il y a trop d'éléments à afficher)
si vous aviez une solution ça m'aiderai pas mal
merci !
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 avril 2006 à 09:48
En VB6, il existe la propriété TopIndex qui permet de connaître et définir l'item affiché en premier, ainsi, tu n'aurais qu'à modifier le topindex des autres listbox lors d'un événement scroll d'une des listbox.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 avril 2006 à 11:24
Arf, à ce moment là, les méthodes bourrins :
1/ (méthode difficile) utiliser le subclassing pour capturer les événements WM_VSCROLL à destination de ton listbox afin de gérer toi même un événement scroll (fiable, mais très instable sous VB6 en mode debug, donc sûrement encore plus instable sous VBA !!!).
2/ Utiliser un timer pour espionner les changement de la propriété TopIndex (simulation de l'événement scroll en fait), beaucoup moins fiable, prend beaucoup plus de ressources, mais au moins ca fera pas planter ton application.
ggt_jarre
Messages postés6Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention24 avril 2006 21 avril 2006 à 11:38
oula ... ça a l'air bien mais je ne vois pas du tout par où commencer
ça serait sympa si tu pouvais m'aider mais je veux pas te faire perdre ton temps non plus, donc si ça t'emmerdes laisse tomber (je pourrais toujours essayer de me débrouiller autrement) :)
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 avril 2006 à 12:51
C'est pourtant très simple (si tu as le contrôle timer dans vba) :
Place un contrôle timer dans ta feuille
Met la propriété Interval à 100
Dans l'événement Timer, rajoute ceci :
Static oldValue As Integer
if oldValue <> List1.TopIndex Then
let oldValue = List1.TopIndex
let List2.TopIndex = oldValue