Déplacement d'un objet shape dans feuille excel

Soyez le premier à donner votre avis sur cette source.

Vue 10 473 fois - Téléchargée 1 047 fois

Description

A l'occasion d'un programme, j'ai eu besoin de déplacer en cours d'exécution un objet shape dans une feuille Excel.
Il n'y a pas d'évènements Mouse pour une feuille Excel, il faut donc suivre le curseur avec une fonction API.
Mais le pb, c'est que les coordonnées du curseur sont par rapport à l'écran entier, et non pas la zone de la feuille de calcul active...
Il m'a donc fallu trouver un moyen de trouver les coordonnées de la feuille par rapport à l'écran, et cela qq soit la résolution ou l'état de la fenêtre active (plein écran, en-têtes lignes et colonnes, etc).
Mes recherches sur le web n'ont conduit à rien, si ce n'est un constat d'échec.
J'ai enfin trouvé un moyen de résoudre ce pb en utilisant un userform provisoire positionné sur la 1ère cellule, et une API me donnant les coordonnées écran du rectangle associé à la form...
Il restait à établir une relation entre les pixels et les points pour associer les coordonnées du curseur (en pixels) avec celles de la shape (en points)!
Tout cela est expliqué dans le code.
L'exemple est avec une zone de texte, mais n'importe quelle autre shape (image, figure géométrique créée avec les outils dessins de Excel, etc) peut être utilisée.

Source / Exemple :


Voir zip

Conclusion :


Il peut paraitre inutile de déplacer un objet shape dans une feuille Excel, car on peut en effet le faire en le sélectionnant et en le bougeant avec la souris.
Cependant, en le faisant par programmation, on a accès à toutes les propriétés de l'objet que l'on peut donc mémoriser ou modifier (sa position par ex).
Il est évident que l'on peut remplacer le timer API par mon timer VBA (cf ma source correspondante), mais je n'ai pas voulu l'imposer et rester dans le cas général de Excel...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

mimiZanzan
Messages postés
309
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
17 décembre 2017
-
Salut COYOTE26,

Je pense que j'ai résolu ton pb et je vais déposer sur le site VB France un code qui devrait te convenir. Il s'appellera "Manipulations Formes sur Graphes Excel avec VBA".
Merci de me donner ton avis.

Cdt
cs_coyote26
Messages postés
4
Date d'inscription
mardi 19 août 2003
Statut
Membre
Dernière intervention
22 juillet 2011
-
Salut MIMIZANZAN,

Je te remercie de ta réponse, même si j'espérais pouvoir l'adapter à mon cas.

En fait je veut positionner un rectangle là ou je clique sur le graphique.

Pour cela, j'utilise les évènements mousedown et je récupere les coordonnées X et Y
Actuellement, je fais une transformation des coordonnée écran en coordonnée de mon chartarea avec des valeurs fixes qui correspondent à mon PC et mon niveau de Zoom dans excel.
Mais j'aimerais que mon code fonctionne sur n'importe quel PC ou n'importe quel niveau de zoom.

Il faudrais pour celà que j'arrive à créer une correspondance entre le X Y de la souris et le TOP,LEFT,WIDTH,HEIGHT de Chartarea
Pour déterminer le 0,0 de ChartArea et le coefficent entre les pixel et les point écran(qui semble être 4/3, quelque soit les PC)

Cordialement,
mimiZanzan
Messages postés
309
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
17 décembre 2017
-
Salut COYOTE26,
En effet, le code est écrit pour des feuilles de calcul Excel.
Pour les feuilles graphiques, j'ai réfléchi, mais je ne vois pas comment t'aider.
Désolé, peut-être que qq aura une idée, mais je ne vois pas l'intérêt de ce que tu veux faire avec les shapes sur une feuille graphique...

Cdt
cs_coyote26
Messages postés
4
Date d'inscription
mardi 19 août 2003
Statut
Membre
Dernière intervention
22 juillet 2011
-
Salut,

bravo pour ton code, je suis moi même intéressé mais sur un onglet activechart or toutes tes références sont en activesheet.
Car j'ai le même problème de transformation coordonnée fenêtre et coordonné souris, je ne vois pas comment modifier pour l'adapter

J'aimerais en fait commencer à tracer une shape à l'endroit ou j'ai cliqué

Cordialement,
cs_Godzestla
Messages postés
9
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
19 mai 2011
-
Salut MIMIZANZAN,

c'est très clair.
Merci beaucoup pour ta réponse rapide.

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.