Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulette)

  • Initiateur de la discussion Compte Supprimé 979
  • Date de début

thomashty

XLDnaute Occasionnel
Re : Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulet

Bizarre car cela ne fonctionne pas chez moi...
Avez vous effectué des modifications ?
 

bidochon34800

XLDnaute Junior
Re : Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulet

Non je pas fait aucune modification, mais je vous confirme que ça fonctionne parfaitement.
 

saiya

XLDnaute Nouveau
Re : Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulet

Non je pas fait aucune modification, mais je vous confirme que ça fonctionne parfaitement.

Et bien dans ce cas tu as un win64 mais un office32 bits...

moi j'ai modifié pour 64 bits le code, mais j'ai un bug, ça ne défile que vers le bas, pas vers le haut (le haut réagis comme si j'allais vers le bas aussi).
 

thomashty

XLDnaute Occasionnel
Re : Mouse Wheel Hook (faire défiler le contenu d'une combobox/listbox avec la roulet

Exactement pareil !
 

zoumi

XLDnaute Nouveau
bonjour,
Sous excel 2013 64 bits ca marche pas.

et :
 

Pièces jointes

  • scroll sur excele 2013 64 bits.jpg
    572.5 KB · Affichages: 41

Dranreb

XLDnaute Barbatruc
Bonjour.
Essayez en déclarant RtlMoveMemory comme ceci :
VB:
Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByRef Destination As Any, ByRef Source As Any, ByVal Length As LongPtr)
Édition: Sachant qu'à l'utilisation si c'est une adresse dont on dispose en guise d'argument il faut préciser ByVal devant.
Ou bien comme cela :
VB:
Declare PtrSafe Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByVal Destination As LongPtr, ByVal Source As LongPtr, ByVal Length As LongPtr)
sachant qu'alors à l'utilisation il faut je suppose préciser ByRef devant un des paramètres si on ne dispose pas de son adresse.

Édition 2: D'une façon générale, pour ne pas avoir d'incompatibilité de type, une expression AddressOf quelquechose ou VarPtr(quelquechose) doit s'affecter à un LongPtr. C'est en quelque sorte un 'méta-type' de donnée automatiquement équivalent à Long en 32 bits et à LongLong en 64 bits.
 
Dernière édition:

zoumi

XLDnaute Nouveau
Bonjour, merci Dranreb
Je suis sous Windows 8.1 64 bits et excel 2013 64 bits.
Je vais réessayer.
Cordialement
 

Dudu2

XLDnaute Barbatruc
Merci beaucoup BrunoM45 pour tes fichiers. Je tournais en rond sur Internet avec des trucs complexes et non fonctionnels.

Y a-t-il un moyen de rentrer directement dans la ListBox pour ne pas avoir à sélectionner un Item pour que le Scroll soit opérationnel ?
J'ai essayé un .SetFocus, puis un .ListItem = 0 mais rien à faire. Il faut cliquer dans la ListBox pour déclencher le Scroll souris.
 
Dernière édition:
C

Compte Supprimé 979

Guest
Salut Dudu2

Il ne faut malheureusement surtout pas, car dans mes souvenirs, ça faisait planter Excel
 

Dudu2

XLDnaute Barbatruc
Comment tu faisais ? Tu t'en souviens ? Un placement de curseur sur la ListBox et simulation d'un Clic Souris ?
 

Dudu2

XLDnaute Barbatruc
Sur ce sujet, JM27 a réussi en entrer directement en ComboBox en cette instruction insérant Me.ComboBox1.DropDown dans cette fonction:
VB:
Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' Définir les noms des objet à l'ouverture de l'USF
  ' sont utilisés dans le code du hook
  Set ObjUSF = Me: Set ObjList = Me.ComboBox1
  'Store the first TopIndex Value
  intTopIndex = Me.ComboBox1.TopIndex
  Me.ComboBox1.DropDown
  '
  Hook_Mouse
End Sub

Par contre, il n'y a ps l'équivalent pour le ListBox !
 

Lorenzini

XLDnaute Occasionnel
Bonjour Bruno,

Les fichiers ont l'air super mais je n'arrive pas à les faire fonctionner... j'ai à chaque fois le message "incompatibilité de type"...
Pouvez-vous éclairer mon chemin de débutant sur quoi faire pour solutionner le problème ?
(Utilisant une version 64 bits, j'ai rajouté "PtrSafe" devant Function)
 

Pièces jointes

  • MouseWheelHookV2a_64bit (1).xlsm
    30.5 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
Bonsoir.
Dans les Declare sur version 64bits les arguments ByVal destinés à recevoir des expressions AddressOf ou VarPtr doivent être déclarés As LongPtr.
Et, à ma connaissance, pour CopyMemory, tous doivent l'être, y compris Length parce qu'on pourrait en théorie lui demander de déplacer une zone de mémoire dont la taille en octets dépasse la capacité d'adressage sur 32bits
Édition: Je m'aperçois que j'en avais d'ailleurs déjà parlé au poste #37.
 
Dernière édition:
C

Compte Supprimé 979

Guest
Bonjour Lorenzini,
Salut Dranreb

J'ai modifié la version 64bits en v2b pour prendre en compte le LongPtr et une ou 2 petites modifs.

La mise à disposition des fichiers date et je n'avais pas de version 64bits à l'époque

@+
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…