Défilement avec la roulette de la souris

Bonjour,

Pardonnez moi si ma question est "idiote" ….

J'ai trouvé sur le NET des solutions pour activer le défilement par la roulette de la souris dans des Listbox ou Listview

Mais ceci serra valable uniquement sur mon PC, ou incorporé au classeur, et du coup actif sur tout PC sur lequel on a enregistré ce classeur ?

Bonjour Sauveur,

ta question n'est pas idiote, et d'après moi, les solutions que tu as trouvées sur le Net marcheront sur n'importe quel PC qui dispose d'une souris dotée d'une molette ; car bien sûr, si c'est une très ancienne souris qui a juste 2 boutons et pas d'molette, alors même la meilleure solution logicielle n'y pourra rien !

la prise en compte logicielle de la molette de la souris pour faire défiler la ListBox est incorporée au classeur, et sera active sur le PC d'une autre personne à qui tu passes ton fichier Excel, à condition qu'y'ait une souris à molette.

si ton copain a un Macintosh de table (non portable), j'crois bien qu'la souris a qu'un seul bouton et pas d'molette !

sur les ordinateurs portables, j'sais pas si le touchpad incorporé peut émuler une molette de souris, quelque soit le modèle.

(note : émuler, ça équivaut à une simulation logicielle)

dhany

Bonjour DHANY,

Merci pour ta réponse

Je vais faire le test, et ferai connaitre le résultat

Bonjour,

En fait, je n'ai pas trouvé la solution pour activer la roulette de la souris dans une ListBox ou une ListView !

Je vais donc poser la question

Bonjour Sauveur,

je te propose de lire mon post : https://forum.excel-pratique.com/viewtopic.php?p=654165#p654165

il contient un fichier où la molette marche dans une liste déroulante

dhany

Bonjour DHANY,

J'ai annulé mon autre message, c'est en fait un doublon avec cette discussion

Je n'arrive pas à exécuter le classeur

J'ai eut une erreur de compilation à l'ouverture - Mettre à jour pour 64 bit

J'ai tenté de corriger après recherche sur le NET (Le code d'origine est en commentaire)

'Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
'  (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
    (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
'Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
'  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
'  (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  (ByVal hwnd As Long, ByVal nIndex As Long) As Long
'Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
'  (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare PtrSafe Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _
  (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
'Private Declare Function CallNextHookEx Lib "user32" _
'  (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare PtrSafe Function CallNextHookEx Lib "user32" _
  (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
'Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

Mais j'ai alors d'autres erreurs ….

Le code est trop important pour que je puisse l'analyser

As tu un exemple plus simple ? Une UserForm avec juste une ListView et une ListBox où l'on peut faire du défilement avec la roulette de la souris ?

Merci d'avance

Bonjour Sauveur,

j'ai pas d'solution plus simple, mais essaye en remplaçant toute les lignes « Declare » par :

  Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
                              (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

  Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

  Declare PtrSafe Function GetForegroundWindow Lib "user32" () As Long

  Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                         (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

  Declare PtrSafe Function SetWindowsHookEx Lib _
                                    "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
                                                                        ByVal hmod As Long, ByVal dwThreadId As Long) As Long

  Declare PtrSafe Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
                                                ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

  Declare PtrSafe Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

  Declare PtrSafe Function GetLastError Lib "kernel32" () As Long  ' Used this one to crack the problem.

si y'a des lignes en rouge, ne t'en préoccupe pas, et laisse-les.

dhany

Merci

La ligne

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                         (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

est refusée (Erreur de compilation) Je l'ai remplacée par

  Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                         (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

mais j'ai ensuite une erreur d'incompatibilité de type

essaye avec ce fichier de BrunoM45 (salut) :

si t'arrives pas à l'adapter à ton cas réel, essaye de contacter BrunoM45

dhany

Merci Mais je retrouve les mêmes erreurs

Je vais essayer de contacter Microsoft

S'il réponde, je rendrais compte

Bonjour,

pourquoi as-tu installé la version 64 bits d'Office ?

On ne le fait que si on est obligé, pas parce que windows est 64 bits.

Si tu n'avais pas de raison désinstalle tout pour ré-installer la 32 bits, parce que tu auras d'autres incompatibilités encore plus gênantes que tu ne pourras pas outrepasser (ActiveX inexistants entre autre).

Si tu dois rester en 64 bits les déclarations des fonctions doivent utiliser d'autres type que Long.

Voir par exemple https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/longptr-data-type

eric

Bonjour,

Je suis en Windows 10 64 bit

Tous les classeurs que j'ai réalisés fonctionnent correctement

J'ai eut des applications que j'ai été obligé de réinstaller car j'avais choisit la version 32 bit ….

Bonjour,

Tous les classeurs que j'ai réalisés fonctionnent correctement

Sauf ceux qui posent des problèmes, la preuve.

Même MS dit qu'il faut installer la 32 bits de préférence, et c'est celle mise par l'installateur par défaut, même sur un système 64 bits.

Maintenant tu fais comme tu veux.

Ici tu trouveras les incompatibilités et modifs à effectuer : https://msdn.microsoft.com/fr-fr/library/office/ee691831%28v=office.14%29.aspx?f=255&MSPPError=-2147217396#odc_office2010_Compatibility32bit64bit_ActiveXControlCOMAddinCompatibility

eric

Voici la réponse de Microsoft

https://support.office.com/fr-fr/article/choisir-entre-les-versions-64-bits-et-32-bits-d-office-2dee7807-8f95-4d0c-b5fe-6c6f49b8d261

Ce n'est pas évident de choisir la version …..

C'est plutôt à Microsoft d'assurer la compatibilité

Mais en temps que vieil informaticien, je me méfie de l'utilisation de composant du système

Un jour ou l'autre, lors d'un changement de version, ils ne fonctionneront plus

Je suis un ANE !!!!

Je cherche un problème qui n'existe pas

Il n'y a rien de particulier à faire pour le défilement par la roulette de la souris ….

J'ai créé un classeur pour tester la modification de l'entête d'une colonne dans une ListView

Et puis, j'ai eut l'idée de rajouter des lignes pour dépasser la capacité de la liste

Sans rien faire de particulier, on peut agir sur le défilement en cliquant sur les flèches de l'ascenseur, ou avec la roulette de la souris

Par contre, cela ne fonctionne pas avec une ComboBox et une ListBox

Mais je pense qu'il faut privilégier la ListView à la ListBox, et qu'une ComboBox ne doit afficher qu'un petit nombre de ligne

238listview.xlsm (23.20 Ko)
13motpassebon.xlsm (51.17 Ko)

Bonjour scn68100,

je sais que le sujet et vieux, j'ai essayé d'adapté votre code a une combobox (en dessous de liste)sans y arrivé, evidement avec mes super compétence en programation.

ce serai trés gentille de votre pars si vous pouviez regarder le code du fichier joins.

Merci d'avance pour votre réponse

Cordialement

Rechercher des sujets similaires à "defilement roulette souris"