IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Intercepter l'évènement Scroll dans une fenêtre? [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut Intercepter l'évènement Scroll dans une fenêtre?
    Bonjour à tout le forum.

    Je suis confronté à une difficulté.
    Dans une fenêtre d'application avec 3 vues de classeur dont l'une des vues est fractionnée en 4 volets, j'aimerais pouvoir intercepter les Scrolls effectués par l'utilisateur.
    Comment?
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Je crains qu'on ne puisse solutionner votre demande en VBA. Peut être qu'un contributeur averti viendra me détromper.
    ******
    Cependant, en faisant de la programmation Windows (usage des APIs), il y a des chances d'y arriver mais cela est compliqué et n'est pas d'une lecture facile et compréhensible.
    Si vous êtes intéressé et que cela en vaille la peine, dites le moi, j'ai une idée de ce qu'il faut faire.

  3. #3
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonjour
    Merci de s'intéresser à la question.
    Les idées avec les APIS m'intéressent. J'avais effectué une recherche de ce côté.
    Une réponse de medev dans cette discussion #2 http://www.developpez.net/forums/d89...scroll-resolu/ m'avait inspiré à aborder le problème sous un autre angle.
    La solution que j'ai mis en oeuvre actuellement ne me dit pas grand chose:
    une boucle avec un Timer initialisé à 0.4
    Je me demandes si c'est idéal.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,
    Pouvez-vous m'adresser un message privé avec votre adresse E-mail pour que je puisse vous répondre ?
    Si vous désirez rester anonyme, créez une adresse E-mail temporaire.

    Ceci pour éviter d'encombrer inutilement le forum avec mes tentatives de résolution qui risque de ne pas aboutir dans l'immédiat.
    ***
    C'est très compliqué et il faudra également s'occuper des évènements de la roulette de la souris.
    Il faut, dans un premier temps :
    1) identifier les Windows Class Excel
    2) faire un SubClassing (Hook) et une procédure de rappel (CallBack)
    3) créer des évènements (Event, RaiseEvent)
    4) créer un timer avec les APIs SetTimer, KillTimer

    A plus.

  5. #5
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    et merci encore pour ton aide.
    Je penses qu'il est préférable de faire marcher la discussion si l'idée doit évoluer.
    Afin que d'autres puissent y mettre du sien, ou y trouver une résolution à un problème semblable qu'ils auraient.

    Alors je dois d'abord expliquer un peu plus clairement le problème, qui m'a conduit à construire un Objet de surveillance de zones affichées dans une des fenêtres afin d'agir conséquemment sur les deux autres.

    Le but final en fait est d'analyser le temps mort effectué dans l'affichage pour lire un passage ou observer une image.
    Une statistique pour déterminer l'intérêt de l'utilisateur sur ces consultations du classeur.
    _Première solution que j'ai abandonné:
    • Pour être tranquille j'avais commencé par désactiver l'Affichage des Contrôles ScrollBar des fenêtres du classeur afin d'obliger la navigation avec le clavier me permettant d'avoir simplement les évènements que je souhaites.
    • Cela semble avoir des répercussions pas appréciés dans l'aisance de la navigation. Le contrôle Visuel qu'est le ScrollBar est utile pour que l'utilisateur soupçonne rapidement que le reste de la page peut être défilée.(sans compter les reflexes Souris en plus...)

    _Deuxième solution sur laquelle j'ai buté d'emblée:
    • La Fenetre Excel ne fournissant pas un évènement clic sur Ses ScrollBars (à juste titre), je les gardes masquer et je places mes contrôles ScrolBars qui génèrent un clic.
    • Le problème est qu'au moins un des volets et une des fenêtres doivent être scrollés horizontalement.
    • Et les propriétés Orientation du contrôle ne sont pas disponibles.
    • Serait-il possible de le rendre disponible?

    _Troisième solution que j'ai adopté pour le moment:
    • C'est de créer ma propre Classe de Controle d'affichage et qui me permet du coup de laisser visible les ScrollBars de la fenêtre d'Excel qui son bien implémentés.
    • Le coeur du code est basé sur une boucle branché sur une valeur booléenne, avec un DoEvents permettant de passer la main aux autres processus de l'application.
    • A chaque itération vérification des valeurs d'affichage précédemment stockés


    Je publierais le code de cette classe à mon prochain retour pour que tu me dises s'il y a d'autres solutions plus acceptables avec les API ou sans.

    Merci
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Et les propriétés Orientation du contrôle ne sont pas disponibles.
    Serait-il possible de le rendre disponible?
    S'il s'agit d'un contrôle ScrollBar (Barre de défilement) inséré en tant qu'OLEObject dans la feuille Excel, la propriété Orientation existe bel et bien.
    Pour obtenir l'horizontalité :
    1) en mode création, sélectionnez l'objet
    2) faites un clic droit dessus et cliquez sur "Propriétés"
    3) dans la liste des propriétés, en face de la propriété "Orientation" choisissez "1 - fmOrientationHorizontal"

    ****
    Mais je penche plutôt pour une solution par le biais des APIs. J'y réfléchis.

  7. #7
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonsoir PMO2017,

    j'ai à nouveau essayé sur la base de ton message curieusement j'obtiens un menu contextuel complètement différent et un affichage de propriétés correspondant bien à ce que tu m'as décrit!
    Je n'en reviens pas. Pourtant auparavant c'était tout autre.
    Et bizarrement j'ai cherché à identifier le Premier ScrollBar que j'avais obtenu à partir de la boîte de dialogue AutresControles, j'obtiens le même que le nouveau. Je ne me l'explique pas.
    Y aurait-t-il 2 types de chargements de cet objet
    Du coup, cette alternative risque de m'amener à tout repenser. Je crois que cela simplifie grandement mon problème.
    ça me permet d'interagir avec l'évènement Change de ce contrôle pour gérer l'affichage et renseigner ma collecte de données.
    Mille merci!
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Tant mieux si ton problème est résolu avec un contrôle OLEOject ScrollBar.
    ***
    Cependant, je continue mes recherches d'une solution par les APIs car c'est cela qui m'avait interpellé et qui continue à m'intéresser.

    Bonne journée et à plus.

  9. #9
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    re,
    même si c'est tard, ça peut-être utile de dire que j'ai abandonné les contrôles activeX pour me rabattre sur le procédé que j'avais.
    Le code de base est publié dans cette contribution: http://www.developpez.net/forums/d13...a/#post7351501
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/11/2010, 14h13
  2. [WD15] Gestion des événements clavier dans une fenêtre.
    Par dvdbly dans le forum WinDev
    Réponses: 3
    Dernier message: 20/09/2010, 08h58
  3. Ncurse : Scrolling dans une fenêtre
    Par VITALTH dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 03/04/2008, 09h07
  4. Trapper les événements clavier dans une fenêtre
    Par NicoV dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 02/03/2008, 10h28
  5. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo