Handle d'un contrôle en VBA [Résolu]

cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 14 oct. 2008 à 06:24 - Dernière réponse : cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention
- 15 oct. 2008 à 05:03
Bonjour tout le monde

Je souhaiterais récupérer des handle d'objets sous Excel, par exemple les contrôles d'un formulaire, ou encore les objets picture, shape, etc d'une feuille de calcul.
A la différence de VB6, seul l'objet application a une propriété hwnd sous Excel. J'ai réussi à récupérer le handle d'un UserForm par la fonction API FindWindow, mais rien de plus. Je n'ai rien trouvé sur le site et sur Internet.

Si quelqu'un peut m'aider, je le remercie par avance

Philippe

Il faut quarante-sept muscles pour froncer les sourcils et seulement treize pour sourire
 
Afficher la suite 

3 réponses

Répondre au sujet
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 15 oct. 2008 à 05:03
+3
Utile
Malheureusement, en cherchant dans d'autres forums, je viens de tomber sur une discussion d'où il ressort qu'Excel n'expose pas les handle des contrôles des formulaires.

Pour oublier tout ça, ce soir, je vais me soûler. Mais pas avec n'importe quoi, car comme disait Pierre Dac :

Les bons crus font les bonnes cuites
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Orohena
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 14 oct. 2008 à 08:12
0
Utile
Bonjour,


Celà m'étonneraot assez que tu puisses, sous Excel, récupérer le handle d'une ... PictureBox placée sur un formulaire !!!!... Explique ...


Sinon, la solution toute bête est de donner le focus à ton contrôle puis d'utiliser (dans la foulée) la fonction GetFocus de l'Api de Windows ... Si, à la fois, le contrôle peit recevoir le focus et est une fenêtre non "inerte" (donc dotée d'un hwnd) son handle te sera retourné.
Commenter la réponse de jmfmarques
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 14 oct. 2008 à 23:28
0
Utile
Bonjour jmfmarques

Merci pour cette réponse.

Voici l'explication demandée. Je prends l'exemple d'une image dans une feuille de calcul ou dans un formulaire Excel, et une référence de cette image est attribuée à une variable par une instruction telle que :

   set c = activesheet.pictures("monImage")

s'il s'agit d'un objet dans une feuille de calcul , et

   set c = userform1.image1

si l'objet est dans un formulaire Excel.


Pour obtenir des infos sur mon image, les propriétés de mon objet sont suffisantes dans beaucoup de cas, et je n'ai pas besoin du handle de l'image. Mais si, par exemple, je veux lire un pixel, mon objet ne me le permet pas. Je dois alors faire appel à la fonction GetPixel de l'API de Windows, ce qui nécessite, comme tu le sais, de récupérer le handle de l'objet, ce que je ne sais pas faire.

En VB6, il me semble que les objets ont souvent une propriété hwnd. Mais sous VBA Excel, seul l'objet application dispose cette propriété.

Concernant la fonction GetFocus() que tu me suggères, je lis sur le site MSDN :

The GetFocus function retrieves the handle to the window that has the keyboard focus, if the window is attached to the calling thread's message queue

ce qui, si je ne me trompe pas, correspond à la propriété application.hwnd de VBA Excel.

Mais l'objet de cette discussion est bien le Handle d'un contrôle, et non le Handle d'une fenêtre.

Est-ce que tu connais la solution ?

Cordialement
Commenter la réponse de cs_Orohena

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.