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 :

Identifier le contrôle actif dans une feuille de calculs


Sujet :

Macros et VBA Excel

  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut Identifier le contrôle actif dans une feuille de calculs
    Boujour,
    Peut-on identifier la macro active ?
    ou, mieux :
    comment connaître le nom d'un contrôle image placé dans une feuille de calculs par l'événement clic ou mousemove de l'image ?
    Par avance, merci

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour, Ousk

    1) Je ne vois pas d'autres possibilités (personnellement) que d'utiliser une variable en écriture/lecture ...

    2) en ce qui concerne ta 2ème question et à condition qu'il s'agisse bien d'un contrôle image sur un UserForm :
    Un contrôle image n'ayant pas de hwnd, le controle actif restera toujours le dernier actif, même lors du clic sur un contrôle image...
    Seule possibilité alors (mais ==>> usine à gaz) faire des calculs pour déterminer si la position du curseur correspond ou non à celle du contrôle image (ce qui veut dire qu'en cas de présence de nombreux contrôles de l'espèce, il faudrait faire un test pour chacun des dits contrôles, ou utiliser un Timer ... assez lourd)...

    EDIT : il en irait de même pour un Label, pour la même raison.

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par lui
    contrôle image placé dans une feuille de calculs
    Merci ucfoutu mais si le contrôle image a un clic et un mousemove, dans une feuille de calculs on ne peut pas connaître "l'ActiveControl" comme dans un userform. On n'a pas ça dans une feuille de calculs
    Mais j'ai vu passé quelque part, il y a fort longtemps, par SilkyRoad, je crois mais cépasûr, un code qui permettait de connaître le nom de la macro active (ici sur l'événement click du contrôle image) ce qui m'aurait permis de retrouver son nom.
    C'est un truc comme ça que je cherche à défaut de pouvoir avoir directement le nom du bouton. (Pas de caption ni de tag dans un contrôle image sur feuille de calculs.
    Donc, j'attends...
    Merci de t'être creusé la tête pour moi.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Je me suis donc apparemment mal exprimé.

    On recommence, alors :

    Même sous VB (pas VBA, mais bien VB), où un contrôle image subirait et reconnaîtrait tant le click que le MouseMove, ce type de contrôle étant inerte au sens de Windows, il serait impossible d'en connaître le nom lors de l'un ou de l'autre de ces deux évènements. Tout ce que pourrait faire alors Windows, serait de reconnaître le ClassName, mais pas le nom de la fenêtre (car elle ne serait jamais "active", la seule fenêtre reconnue alors comme "active" étant celle du container de ce contrôle !...ce qui ne serait pas le cas avec d'autres contrôles, tel un CommandButton ...).

    La seule solution qui s'offrirait alors serait un subterfuge (soit l'utilisation d'une variable (le plus simple), soit un calcul basé sur la position en cours du curseur de la souris...)

    Mais j'attends avec grand intérêt de voir quelle autre solution existerait ...Celà m'intéresse au plus haut point .

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai bien tout lu tes explications mais même la solution de la position de la souris me poserait pb : Pas d'événement MouseMove sur la feuille de calcul.
    Je crois avoir vu passer une question là-dessus mais je ne l'ai pas retrouvée et ne sais pas s'il elle avait trouvé une solution.
    Voilà.
    Mais je crois que je vais orienter tout ça vers un userform. Une "picture" dans un contrôle image dans un cadre... Le cadre, lui devrait être reconnu, non ?

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Le cadre ?

    Oui, bien sur... LUI, oui.... pour sûr ...

    Mais alors ? Continue...(tu vas découvrir seul pourquoi celà ne te mènera nulle part de mieux).... sauf (peut-être) à te "brancher" sur un problème en cours...(assez récent).

    Edit : mais, dis-moi.... si tu passes par un UserForm, ma foi... tu l'as, cette fois-ci, ta propriété tag, non ?
    Mais tu comptes en faire quoi de plus (puisque ton contrôle image n'aura jamais la qualité de contrôle actif !!!.... y compris au clic ...)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonsoir,ouskel'n'or

    je suis en train d' essayer de developper une application permettant de detecter le survol de la souris sur une ou plusieurs cellules.
    En l adaptant a controle image cela peut etre jouable
    c juste une idée


    le lien
    http://www.developpez.net/forums/sho...d.php?t=478834

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu n'as rien trouvé de mieux qu'un msgbox pour obtenir le handle de la feuille de calculs ?
    Je blague. Super ! Tu parles d'une ID. J'avais bien vu ce thread mais comme je n'en avais pas besoin, je l'avais oublié.
    Je crois avoir vu quelque chose donnant le nom de la macro, ce qui m'aurait comblé, mais c'est très vieux. Je vais voir si on peut enlever ce msgbox.
    Merci en grand.
    Je te tiens au courant.
    A+

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une question :
    Le fait de masquer les barres d'outils a-t-il une incidence sur le déroulement du code ? J'ai mis cette procédure en remarque (je tiens à conserver tous mes outils )
    A+

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour,

    Une question :
    Le fait de masquer les barres d'outils a-t-il une incidence sur le déroulement du code ? J'ai mis cette procédure en remarque (je tiens à conserver tous mes outils )
    en effet je recupere les coordonnées de la souris par rapport a l ecran ,
    si la barre d outil est affiché il faut soit recuperer la hauteur de celle ci
    (j ai vu une api qui je pense permet ceci) soit ajouter un offcet en trouvant
    manuellement la hauteur de la barre outil.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour


    comment connaître le nom d'un contrôle image placé dans une feuille de calculs par l'événement clic ou mousemove de l'image ?
    une solution en utilisant un module de classe
    (cet exemple gère les objets de la Feuil1)


    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
    19
    20
    21
    22
    23
    24
    '--------------------------------------
    'à placer au niveau de ThisWorbook pour que la classe soit
    'inialisée lors de l'ouverture du classeur
     
    Option Explicit
     
    Private Sub Workbook_Open()
    Dim Obj As OLEObject
    Dim Cl As Classe1
     
    Set Collect = New Collection
     
    'boucle sur les objets de la Feuil1
    For Each Obj In Feuil1.OLEObjects
        'verifie s'il s'agit d'un contrôle Image
        If TypeOf Obj.Object Is MSForms.Image Then
        Set Cl = New Classe1
        Set Cl.Img = Obj.Object
        Collect.Add Cl
        End If
    Next Obj
     
    End Sub
    '--------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '--------------------------------------
    'dans un module standard
    Option Explicit
     
    Public Collect As Collection
    '--------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '--------------------------------------
    'dans un module de classe nommé "Classe1"
    '
    Option Explicit
     
    Public WithEvents Img As MSForms.Image
     
    'exemple pour gerer l'evenement clic sur les objets type Image
    Private Sub Img_Click()
        'cet exemple affiche le nom de l'objet cliqué
        MsgBox Img.Name
    End Sub
    '--------------------------------------


    bonne journée
    michel

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Super Michel ! C'est extra ! Tu devrais mettre ça quelque part, qu'on puisse le retrouver.
    Une fois de plus, un grand merci.
    Je crois que tu avais déjà donné cette réponse mais je ne l'ai pas retrouvée.
    Je vais enfin pouvoir apporter une réponse à une âme en peine.
    Bonne journée à toi aussi

  13. #13
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Hé là ! Hé là !

    Ne surtout pas arrêter là cette discussion...

    Pourquoi ?

    Parce que cette splendide idée de Silky Road ouvre tout simplement la porte à la gestion, dans un userform, d'un substitut des groupes de contrôles indexés ...

    Il suffit de peu et celà marche (j'ai commencé pour voir et c'est très bon...).

    Je laisse de préférence Silky Road continuer lui-même sur sa lancée (à tout seigneur tout honneur)....

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    Rebonjour


    Tu devrais mettre ça quelque part, qu'on puisse le retrouver.
    C'est deja dans la FAQ:
    Comment identifier le contrôle utilisé dans la feuille de calcul ?




    Le principe est effectivement identique dans le userForms. il existe plusieurs exemples deja fournis sur le forum:

    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
    19
    20
    21
    '--------------------------------------
    'à placer dans le module objet du UserForm
    Option Explicit
     
    Private Sub UserForm_Initialize()
        Dim Obj As Control
        Dim Cl As Classe1
     
        Set Collect = New Collection
     
        'boucle sur les objets du UserForm
        For Each Obj In Me.Controls
            'verifie s'il s'agit d'un controle Image
            If TypeOf Obj Is MSForms.Image Then
                Set Cl = New Classe1
                Set Cl.Img = Obj
                Collect.Add Cl
            End If
        Next Obj
    End Sub
    '--------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '--------------------------------------
    'dans un module de classe nommé "Classe1"
    Option Explicit
     
    Public WithEvents Img As MSForms.Image
     
    'exemple pour gérer l'evenement clic de l'objet Image
    Private Sub Img_Click()
        MsgBox Img.Name
    End Sub
    '--------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '--------------------------------------
    'dans un module standard
    Option Explicit
     
    Public Collect As Collection
    '--------------------------------------

    bonne journée
    michel

  15. #15
    Membre averti Avatar de tomy7
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    540
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 540
    Points : 391
    Points
    391
    Par défaut mon idée est peut etre bête
    mais pourquoi ne pas utiliser une variable , par exemple x

    et vous faites evoluer sa valeur dans chaque macro

    ainsi si x =2 sa sera la macro 2 active ...etc

    je ne sais pas si c'est realisable....mais voici mon idée...
    tom

    "Barbar : The rest of the warrior"

    Into the wild....

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    @ Michel
    Ok pour les userforms, je connaissais la méthode, mais pas pour les feuilles de calculs. Et je n'ai pas su transposer.
    A présent je me débats avec la modification par macro des propriétés des objets en question. Shapes refuse ce que je lui dis, OleObjects aussi... Je cherche.
    Merci de ton aide.

    @ tomy7
    Citation Envoyé par tomy7
    mais pourquoi ne pas utiliser une variable , par exemple x et vous faites evoluer sa valeur dans chaque macro
    Précisément. Cela nécessite une gestion indépendante de chaque objet.
    La méthode recherchée consiste à n'avoir qu'un macro pour gérer les propriétés de tous les objets de manière indépendante.
    Une seule macro pour identifier l'objet quel qu'il soit
    Une seule gestion des propriétés pour tous les contrôles de la feuille et qui ne s'applique qu'à l'objet sélectionné.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonsoir,

    sur ta feuil ,tes objets sont de quel type ?

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par patbou Voir le message
    bonsoir,
    sur ta feuil ,tes objets sont de quel type ?
    Bonsoir,
    Ce sont des contrôles Image.
    J'ai renoncé à utiliser mousemove, la solution proposée par SilkyRoad correspondant mieux au problème qui se pose à moi.
    Mais je retiens ton code. A ce propos, as-tu vérifier que la vitesse de déplacement de la souris n'avait pas d'incidence sur les coordonnées ?
    J'ai remarqué ça sur un contrôle image couvrant la totalité de la feuille de calculs.
    Merci et bonne soirée.

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

Discussions similaires

  1. Identifier le contrôle utilisé dans la feuille de calcul
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2011, 15h35
  2. Adresser un contrôle dans une feuille de calcul
    Par jp014 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/12/2009, 20h04
  3. Affecter une couleur à un contrôle placé dans une feuille de calculs
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/03/2008, 19h22
  4. Identifier le contrôle actif dans une feuille de calculs
    Par ouskel'n'or dans le forum Général VBA
    Réponses: 2
    Dernier message: 03/03/2008, 18h08
  5. [VBA-E] Passer d'un contrôle à l'autre avec tab dans une feuille de calculs
    Par small_heart dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/02/2007, 20h57

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