[VBA] SendMessage ListBox

Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 - 2 août 2010 à 15:59
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 - 2 août 2010 à 16:04
Bonjour,
Je voudrais savoir pourquoi la ligne sendmessage du code suivant ne fonctionne pas. Ce code est extrait d'une macro vba pour excel. Le code suivant ne retourne pas d'erreur, c'est juste que sendmessage ne fonctionne pas. Son but est normalement de faire défiler le scroll bar d'une listebox grâce à l'api sendmessage. Je sais utiliser sendmessage et j'ai déjà vérifié que la macro fonctionnait avec d'autres messages (WM_ ...). Je ne veux pas réussir à tout pris à scroller une listebox mais plutot savoir pourquoi le sendmessage suivant ne fonctionne pas. Je connais d'autres méthodes pour scroller une listbox dans vba. Cependant, je veux utiliser cette méthode via sendmessage (je répète pour éviter les ambigüités). J'ai préalablement bien sélectionné un item au milieu d'une listebox contenant beaucoup d'éléments. De plus, sous vb6, j'ai vérifié que ce code fonctionne bien, en changeant hListBox par Form1.ListBox1.hWnd évidemment. J'ai besoin de vos lanternes pour éclairer ce point qui ne me semblait pas obscure à l'origine. Merci d'avance.

' Dans un module
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetFocus Lib "user32" () As Long

' Procédure à appeler pour scroller ma listebox d'un cran
Private Sub ScrollerMaListeBox()
    Dim hListBox As Long
    Const SB_LINEDOWN As Long = 1
    Const WM_VSCROLL As Long = &H115

    ' SetFocus sur notre listbox pour récupèrer son handle
    UserForm1.ListBox1.SetFocus
    
    ' Récupère son handle
    hListBox = GetFocus
    
    ' Envois le message pour faire scroller d'un cran
    SendMessage hListBox, WM_VSCROLL, SB_LINEDOWN, 0&
    
    DoEvents
End Sub

1 réponse

Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
2 août 2010 à 16:04
Pour info complémentaire, j'ai vérifié que sendmessage fonctionnait bien dans ma macro avec le code suivant :
 ' Réduit la fenêtre userform
    Const SC_MINIMIZE As Long = &HF020&
    SendMessage hUserForm, WM_SYSCOMMAND, SC_MINIMIZE, 0&
0
Rejoignez-nous