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 :

Ouverture d'une liste au passage de la souris [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut Ouverture d'une liste au passage de la souris
    Bonsoir à tous,

    Je souhaiterais savoir s'il existe une méthode simple pour ouvrir une liste déroulante (Type validation de données) au survol de la souris.

    Merci d'avance et bonne fin de journée !

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Salut à toi,

    Une méthode simple, je ne pense franchement pas... En passant par des API pour récupérer la position du curseur et cliquer sur ta liste déroulante afin de l'afficher quand le curseur la survole, je pense que c'est possible, mais très probablement pas "simple"

    A moins qu'il y ait un moyen simple d'obtenir l'événement MouseMove sur une Worksheet, mais je ne connais pas ça

    Désolé... Mais quelqu'un a peut-être une solution pour toi !!

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Merci pour ta réponse Quentin ! J'ai cherché dans ton sens mais je trouve des solutions Access...

    Ma demande a pour but de trouver une solution pour ouvrir plus rapidement une série de listes afin d'éviter de cliquer à chaque fois dessus.
    Si l'un de vous a une idée !

    Merci et bonne journée.

  4. #4
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut
    Bonjour,

    J'ai eu une fois une fonction pour connaitre la position du curseur.

    Je pense qu'avec ca tu pourras faire quelque chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ' Position de la souris par rapport à l'cran
    Private Declare Function GetCursorPos Lib "user32" ( _
        lpPoint As POINTAPI) As Long
     
    Private Type POINTAPI
        X As Long
        Y As Long
    End Type
     
    Sub XY() 
    Dim cel As Range, pos As POINTAPI
    Set cel = Range("A65536").End(xlUp)(2)
    GetCursorPos pos
    cel = pos.X
    cel.Offset(, 1) = pos.Y
    End Sub
    avec ceci la postion quand tu lance la macro s'affiche pour X et Y. il suffit de mettre un if then je pense avec l'evenement mousemove de la feuille de calcul.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Justement... Il n'y a pas d'événement MouseMove pour la feuille de calcul ...

    Pour le fun, j'ai tenté d'insérer une image (contrôle ActiveX) sur ma feuille pour obtenir un événement MouseMove... Ca marche un peu mais c'est vraiment de la bidouille et ça ne promet pas du tout quelque chose de joli, lol.

    Désolé Peut-être que quelqu'un viendra avec une solution plus prometteuse !

  6. #6
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut
    Ah oui exact!! désolé c'est vrai que c'est pas sur les feuille de calcul...
    tiens un code qui te donne la position à tout moment!
    lancer la macro XY et voilà.
    il suffira avant de fermer excel de stopper la macro


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Declare Function GetCursorPos Lib "user32" _
    (lpPoint As POINTAPI) As Long
    Public Type POINTAPI
    x As Long
    y As Long
    End Type
     
    Sub PositionXY()
    Dim lngCurPos As POINTAPI
    Do
    GetCursorPos lngCurPos
     
    'Ligne temporaire pour afficehr les position. et c'est là que tu mets des if position = X Y then
    Range("G1").Value = "X: " & lngCurPos.x & " Y: " & lngCurPos.y
     
    DoEvents
    Loop
    End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Tu peux, en bidouillant un peu, obtenir la cellule concernée par ces coordonnées à l'aide de la fonction ActiveWindow.RangeFromPoint(X,Y) qui te donne une Range (donc tu peux mettre .Select par exemple)

    Attention, cette fonction sélectionne à l'aide de coordonnées "absolues" il me semble... donc par rapport à la résolution de ton écran (0,0 étant le coin supérieur gauche de l'écran, de mémoire)...

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Si tu pose un contrôle ActiveX sur ta feuille, tu auras alors un évènement MouseMove :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
        ComboBox1.DropDown
     
    End Sub
    un clic sur la liste la fera disparaître à nouveau.

    Hervé.

  9. #9
    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
    Je souhaiterais savoir s'il existe une méthode simple pour ouvrir une liste déroulante (Type validation de données) au survol de la souris.
    Bonjour,

    C'est faisable avec une méthode compliquée par le biais des Apis comme le suggère Quentin77170.

    Mais avant de m'employer à construire un exemple fastidieux, je voudrais savoir si la question est-elle toujours d'actualité et si vous êtes toujours intéressé ?

  10. #10
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonjour,

    Survol d'une cellule: ouverture automatique d'une liste de validation

    Avec la boîte à outils Contrôles:
    -Créer dans la cellule B2 un label Label1 avec A.
    -Modifier la propriété BackStyle avec Transparent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
      [b2].Select
      SendKeys "%{down}"
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut
    bonjour
    la solution de jacques est encore la meilleure et la moins lourde

    re
    et pour une interreaction dynamique si il y a plusieures listes
    faire la meme chose pour toutes les listes en changeant le nom du label bien entendu voir une class control label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    SendKeys "%{Up}" ' ou  selection.offset(0,1).activate pour relacher la liste 
    [b2].Select
      SendKeys "%{down}"
    End Sub
    Edit :
    bon visiblement ma demarche ne fonctionne pas le focus du label est perdu des l'ors du dropdown

    une idée jacques pour palier a ce soucis
    j'ai essayer avec la touche esc aussi mais rien n'y fait le focus est sur la liste ,on est obligé de cliquer sur un choix pour lacher le focus de la liste

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Excellente méthode, je n'avais pas pensé au Sendkeys !!

    Par contre, je me permets de rajouter un peu de "dynamisme" à la formule à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
      Label1.TopLeftCell.Select
      SendKeys "%{down}"
    End Sub
    Le TopLeftCell permet, comme son nom l'indique, de travailler avec la cellule dans laquelle le coin supérieur gauche du label se situe.. ainsi, il faut juste s'arranger pour que ce coin soit dans la bonne cellule et peu importe où tu places ton label, il fonctionnera ! L'idée est juste de se détacher de la notion d'adresse de cellule

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Points : 93
    Points
    93
    Par défaut
    Bonjour et merci pour vos réponses !

    J'ai opté pour la solution de Jacques agrémentée de la formule de Quentin !

    Merci à vous, problème résolu !

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

Discussions similaires

  1. Redimensionner une TextBox au passage de la souris
    Par FredMines dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/01/2008, 19h05
  2. sens d'ouverture d'une liste déroulante en javascript
    Par arnogef dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/05/2007, 21h09
  3. Ouvrir une fenêtre au passage de la souris sur une image
    Par debie1108 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 02/05/2007, 05h11
  4. [listbox] changer la couleur d'une ligne au passage de la souris
    Par amatollah dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/10/2006, 15h25
  5. Agrandir une image au passage de la souris
    Par matika dans le forum C++Builder
    Réponses: 7
    Dernier message: 09/03/2006, 00h10

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