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
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
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.
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 calculsEnvoyé par lui
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.
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 .
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 ?
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 ...)
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
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+
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+
bonjour,
en effet je recupere les coordonnées de la souris par rapport a l ecran ,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 )
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.
bonjour
une solution en utilisant un module de classecomment 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 ?
(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
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
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)....
Rebonjour
C'est deja dans la FAQ:Tu devrais mettre ça quelque part, qu'on puisse le retrouver.
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
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....
@ 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
Précisément. Cela nécessite une gestion indépendante de chaque objet.Envoyé par tomy7
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é.
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager