Bouton suiveur 3

bonjour,

malgré ce sujet redondant dont je suis confuse de refaire

je souhaiterais que le bouton qui lance la macro se déplace en fonction de ma barre défilement vertical sans avoir forcément cliquer dans une cellule pour déclencher le déplacement du bouton. en fait le bouton doit être visible tt le temps que je monte ou descende dans la feuille.

je ne sais pas si je suis très claire

mais si qq pouvait m'aider sur le sujet

merci d'avance pour votre gentillesse

Un essai en pj

Cdt,

Darzou

bonjour,

merci pour ta réponse mais cela n'est pas ce que cherche

je souhaiterais que cela descende tout seul avec la barre de déplacement verticale sans clic dans une cellule.

j'ai vu cela une fois dans un fichier au boulot, mais je n'ai pas été assez rapide pour piquer la macro

je te remercie encore pour ta recherche ta solution me servira dans un autre projet

Voilà un autre code mais là aussi il faut cliquer

Cordialement

merci sdf34

cela me servira bien mais cela n'est pas toujours ce que je voulais

mais c'est déjà super

merci encore

Bonjour

En cherchant un peu

Regardes par ici http://www.cpearson.com/EXCEL/DetectScroll.htm

Pas réussi à faire fonctionner

L'anglais et moi ça fait 3

coucou banzai

walou

et moi ça au moins 8

je vais appeler un ami

c'est du préhistorique mes cours d'anglais

mais merci de ton aide

Bonsoir à tous,

mendeve, tu as relancé une discussion où je t'ai répondu.

La moindre des courtoisies aurait été d'y répondre...

En cherchant un peu

Regardes par ici http://www.cpearson.com/EXCEL/DetectScroll.htm

Pas réussi à faire fonctionner

Intéressant.

Si, ça fonctionne, mais le scrolling n'est détecté que sur clic des ascenseurs, apparemment celui de la molette de la souris et celui généré par les touche flèches et page-up/down ne le sont pas.

eric

bonjour eric

tout plein d'excuses mais je croyais que comme la discutions était en statut résolu la solution était de rouvrir une nouvelle

je vais de suite regarder ce que tu m'as fait

merci a toi


eriic,

je n'ai rien compris car mon anglais n'ai pas bon et mon niveau VBA et très bas

Certes la solution de figer la première ligne sera acceptable mais pas très adéquate quant a mon projet

dans tous les cas je te remercie du soins que tu as apporté a ma question

Re,

le challenge m'a paru intéressant.

Une proposition ci-joint, plus simple et plus complète qu'avec le module de classe (le scroll souris et touches est pris en compte).

Seule petite restriction : une latence qui peut aller jusqu'à 1 s.

eric

Edit: modification du fichier : désactivation de la macro sur désactivation de Feuil1. Inutile qu'elle tourne pour rien.

148scroll-detect.zip (12.98 Ko)

Puisque vous étiez plusieurs à avoir des difficultés à comprendre le lien de Banzai, voici sa traduction :

http://www.cpearson.com/EXCEL/DetectScroll.htm

(les hyperliens contenus dans la page originale n'ont pas été reportés dans la traduction)

Detecter un scrolling dans un onglet

Excel ne fournit aucune méthode ou évènement qui permette la détection d’un scrolling effectué par l’utilisateur dans une feuille. Si vous avez besoin de détecter un scrolling, pour, par exemple, repositionner certains contrôles (usf) dans la feuille, vous n’avez que peu d’options. La fonction qui s’en rapprocherait le plus est peut-être l’utilisation de l’évènement SelectionChange et ensuite la comparaison de la propriété VisibleRange de la fenêtre active à quelque valeur préalablement enregistrée. Plutôt lourd à gérer et pas très stable. Si l’on utilise uniquement les objets et méthodes fournis par Excel, il n’existe pas de solution convenable.

En utilisant une technique appelée “subclassing”, on peut détecter un scrolling dans une feuille. Le subclassing est un sujet compliqué, et ne sera ici décrit que dans ses termes les plus généraux et sur-simplifiés. En quelques mots, voici ce qu’est le subclassing : lorsque l’utilisateur initie une action dans une fenêtre ou sur un contrôle, Windows envoie un message à cette fenêtre ou ce contrôle indiquant ce qu’à fait l’utilisateur afin que la fenêtre puisse correctement répondre.

Par exemple, lorsque vous cliquez sur la barre verticale de scrolling, Windows envoie un message appelé WM_VSCROLL à cette fenêtre lui demandant d’effectuer un scrolling vertical. Un message Windows consiste en 4 Long(ues ?) variables Entières : la « window handle » ou identifiant (HWnd) de la fenêtre recevant le message, le N° du message lui-même (exp : WM_VSCROLL = 277), et 2 valeurs aditionnelles appelées wParam et lParam.

Les significations des valeurs wParam et lParam dépendent du N° du message envoyé. Pour un message WM_VSCROLL, par exemple, wParam indique la façon dont le scrolling est effectué (en haut ou en bas et par ligne ou par page). La valeurlParam indique quelle barre de scrollingest utilisée. Le subclassing permet d’intercepter ces messages de la fenêtre, examiner leur contenu et agir en conséquence. Ces messages viennent directement de Windows sans être filtrés par des des méthodes, procédures ou objets VBA.

Le classeur ScrollEvents.xls contient un module de classe appelé CDetectScroll qui « subclasse » la fenêtre active d’Excel et intercepte le message WM_VSCROLL généré lorsque l’utilisateur fait un scrolling vertical et le message WM_HSCROLL généré lorsque l’utilisateur fait un scrolling horizontal. Bien qu’il soit techniquement possible d’écrire du subclassing code en VBA, ce n’est pas vraiment une solution envisageable.

Le VBA n’est tout simplement pas suffisamment rapide pour prendre en charge le flot de messages générés par Windows. A la place, le principe de ScrollEvents utilise une tierce partie de subclassing appelée SSubTimer6, implémentée dans un fichier DLL appelé SSubTmr6.dll. Ce DLL gratuit est disponible sur le site vbAccelerator. Vous pouvez télécharger le fichier zip ici, celui-ci contient le DLL et des exemples de code en VB6 et vous trouverez bien plus d’informations sur la façon dont ça fonctionne ici (lien). Consultez cette page (lien) pour les informations concernant le téléchargement et l’installation du SSubTmr6 sur votre PC et son référencement dans votre projet VBA. Ce DLL est requis afin d’utiliser le code dans la classe CDetectScroll.

CDetectScroll fonctionne toujours avec la fenêtre active et uniquement avec un scrolling initié par l’utilisateur cliquant sur la barre de scrolling. Il ne fonctionnera pas à partir d’un scrolling commandé par VBA.

La classe CDetectScroll activera l’un des 12 évènements, en fonction de la façon dont la fenêtre est scrollée :

ScrollLineUp

ScrollLineDown

ScrollPageDown

ScrollPageUp

ScrollLeft

ScrollRight

ScrollLineLeft

ScrollLineRight

ScrollPageLeft

ScrollPageRight

ScrollEndHorizontalScroll

ScrollEndVerticalScroll

Chacun de ces évènements envoie une référence à la cellule la plus en haut à gauche dans la VisibleRange de la fenêtre et une référence à la fenêtre scrollée. Pour utiliser CDetectScroll et ses évènements, il faut déclarer une variable WithEvents de la classe CDetectScroll dans un module objet, comme un module de classe distinct (comme dans le classeur ScrollEvents.xls ), le module ThisWorkbook, un module de code pour Userform ou un des modules de code pour les feuilles. Il faut déclarer la variable de la façon suivante :

Public WithEvents ScrollEvents As CDetectScroll

Une fois la variable déclarée dans un module d’objet, tous les évènements deviennent disponibles. Il suffit de déclarer les procédures évènementielles et de coder dans ces procédures les actions requises par l’application. Par exemple :

Private Sub ScrollEvents_ScrollPageLeft(ByVal TopLeftCell As Range, ByVal Wnd As Window)

' do something when the user scrolls one page to the left

End Sub

La classe CDetectScroll est complètement indépendante. Elle contient toutes les constantes, variables, définitions de fonctions et procédures nécessaires pour détecter le scrolling. A part le fichier SSubTmr6.dll, elle ne requiert pas d’autre code (autre que la déclaration et les procédures évènementielles). Elle détecte automatiquement les changements de fenêtres, et interceptera donc les évènements quelle que soit la fenêtre active. Cela inclut toutes les fenêtres de tous les classeurs ouverts. Elle ne se restreint pas au fenêtres du classeur dans lequel le code est rédigé.

Le classeur ScrollEvents contient un Userform qui affichera les résultats des messages des évènements relatifs au scrolling lors du scrolling d’une fenêtre. Ceci dans un but de démonstration uniquement, cette procédure n’étant pas nécessaire pour l’utilisation de la classe CDetectScroll. Le usferform est montré ci-dessous (voir photo sur le lien). Il sera affiché lorsque vous cliquez sur les barres de scrolling horizontale et verticale.

Si vous scrollez en cliquant sur la barre de scrolling, vous déclencherez 2 évènements : l’évènement normal Haut/Bas/Gauche/Droite par Page/Ligne suivi par un évènement EndScrollHorizontalScroll ou EndScrollVerticalScroll. Si vous scrollez en utilisant le bouton de la barre de scrolling, vous déclencherez uniquement l’évènement EndScrollHorizontalScroll ou EndScrollVerticalScrol. Le code devra être écrit de façon à accepter les 2 évènements : l’évènement normal (Haut/Bas/Gauche/Droite) suivi d’un évènement EndScroll d’une part, et l’évènement EndScroll uniquement d’autre part. Vous pouvez faire ceci en enregistrant le dernier évènement, ci celui-ci est un EndScroll et le suivant est un EndScroll également, vous saurez que l’utilisateur a scrollé en utilisant les boutons des barres de scrolling.

Il est à noter que le SSubTmr6 peut occasionnellement faire planter Excel. Cela peut arriver lorsque vous « subclassez » une fenêtre Excel en même temps que vous éditez le code du projet de « subclassing ». Tant que vous n’éditez pas le code pendant que vous « subclassez » une fenêtre Excel, vous ne devriez pas avoir de problème.

Bonjour,

Merci Game Over, c'est tout de suite plus facile et plus complet

eric

eriiic a écrit :

Merci Game Over, c'est tout de suite plus facile et plus complet

Avec plaisir, mais je ne promets pas de faire ça à chaque fois

merci a toi game over

je vais précieusement garder ta traduction


merci eriic

je l'essaye

cela sera peut être dispo dans une future version d'Excel car ce type de déplacement des bouton c'est tout de même pratique

j'aurais pu créer un macro personnal et la coller dans ma barre d'outil. mais qui personnal dit personnal

merci encore

Bonjour

Merci Game Over

Je comprends mieux pourquoi je n'arrivais pas à le faire fonctionner

Il me manquait "SSubTmr6.dll"

Mais comme je n'en vois pas une utilité personnelle je laisse tomber

Bonne journée

Banzai64 a écrit :

Merci Game Over

Je comprends mieux pourquoi je n'arrivais pas à le faire fonctionner

Il me manquait "SSubTmr6.dll"

Mais comme je n'en vois pas une utilité personnelle je laisse tomber

Bonne journée

Salut Banzai, disons que je m'acquitte d'une petite dette

Rechercher des sujets similaires à "bouton suiveur"