Histoires de Shapes, Click, Module de classe ?

Bonjour,

Les Shapes n'ont pas d'Events dédiés :

Est-il possible de leur en créer un ? Avec un Module de classe par exemple ?

Le classeur joint possède une Shape : ShW ...Mais elle a aussi des copines !

L'idée est créer un module de classe qui gèrerait le clic droit et gauche pour exécuter les macros.

Est-ce possible ?

Por dégrossir un peu la question je sais qu'il est possible d'utiliser :

Worksheets(1).Shapes(ShW).OnAction = "ShapeClick" 

mais comment détecter si c'est un clic droit ou gauche ?

Merci

[EDIT]

Sorry...ce n'était pas le bon fichier : C'est réparé

19shapes-event.xlsm (16.80 Ko)

Bonjour,

je ne suis pas certain de bien comprendre mais ça existe déjà

Worksheet_Change

Worksheet_SelectionChange

Worksheet_BeforeRightClick... etc.

Bonjour,

Ces évènements ne s'appliquent pas aux shapes.

A+

Bonjour à tous,

Il y a une alternative au module de classe pour cet usage, en "trichant" un peu.

La méthode consiste à :

* recouvrir la zone des shapes avec un Label ActiveX (transparent, sans bordure)

* repérer la position de la souris avec l'API GetCursorPos() pour valider tel ou tel shape

* et enfin utiliser l'événement Label1_MouseDown qui intercepte la valeur du "Button"

Ou un label par shape (s'ils sont bien disjoints) pour éviter d'utiliser le GetCursorPos =>cf démo jointe

Ok, c'est tiré par les cheveux mais ça peu servir éventuellement

Pierre

Ps : pour rappel :

Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Edit version avec changement de couleur du shape au survol avant clic

Bonjour Pierre,

Bon finalement ce projet est pas né sous une bonne étoile. Je jette le gant...

J'arrive à peine à exécuter mes 2 macros mais il y trop de problèmes connexes. Les sélections je suppose que j'arriverai à m'en débarrasser mais impossible de draguer et puis même groupés le label et la shape se désolidarisent trop facilement pour peu que tu dragues un peu les 2 formes ne se recouvrent plus exactement et c'est le souk. Alors si j'invite les12 copines... je t'explique pas le binz !

Merci quand même...

Si tu as une syntaxe sans Select pour cette macro, je suis quand même preneur car j'ai souvent des trucs dans ce genre là :

Sub Rotation()
    ActiveSheet.Shapes.Range(Array("ShW")).Select
    Selection.ShapeRange.IncrementRotation 90
End Sub

A+

ActiveSheet.Shapes("Shw").IncrementRotation 90

Tout simplement!

Bonjour Galopin01,

Ce simple fichier te permettrait peut être de reprendre le gant?

On peut aussi par Application.Caller reconnaître si c'est le côté gauche ou droit qui a pris le clic et adapter l'action en conséquence.

Bons tests, bonne continuation.

17shapishapo.xlsm (15.18 Ko)

Merci Pierre : J'ai tellement vu de syntaxe tordue que celles qui sont trop simple j'en arrive à oublier de les tester !

XCellus : Ça ne me parait pas possible vu le genre de forme. De plus il faut gérer la transparence et les rotations et la symétrie. Euh... et le Glisser Déplacer ! Voire en pièce jointe toutes les formes. Les 7 formes de gauche pour l'instant je gère la symétrie avec les boutons. La rotation se fait pour tous par clic Gauche.

Si quelqu'un sait me débarrasser des menus contextuel sur le Clic Droit, ça ne serait pas pour me déplaire.

J'en ai essayé une bonne douzaine à partir de la liste en feuille 2... Mébon ça ne me parait pas évident !

A+

8shapes-event.xlsm (116.84 Ko)

A nouveau,

Oui, effectivement j'aurais dû télécharger au départ le fichier.

Cela me rappelle un jeu, murs de briques, il me semble.

Voir sur la feuille Formes et la macro en module 2 pour clic gauche.

Déjà pour ce soir. Et regarderais demain pour le clic droit.

Bonne continuation

Bonsoir @ tous !

Un petit tuto de la part de waard : ICI sur ce site L'idée reprend celle de Pierre56 !

Mais il n'y a qu'un seul label qui recouvre toute la zone du coup pas d'association avec le shape, le shape est libre en mouvement dessous.

Un code identifie où se trouve le clic de la souris, droit ou gauche, et identifie la cellule de la feuille correspondante aux coordonnées de la souris, puis identifie le shape qui se trouve sur cette cellule et du coup on en fait ce que l'on veut.

@ bientôt

LouReeD

XCellus : Cela me rappelle un jeu...

=> Tout sur les

Pour le clic gauche pas besoin de Caller ça se fait tout seul...

LouReed : Purée il y a du lourd il faut que je potasse... Mais je ne suis pas certain que ça convienne justement parce que mes shapes ne possèdent pas ces évènements. C'est ce qui me fait dire qu'il doit falloir passer par des API et les modules de classes.

Ici les formes ne doivent pas seulement être mobiles à l'intérieur des carrés, elles doivent aussi s'assembler et gérer la superposition !

Il y enfin le problème du WYSiWYG Les carrés Excel sont très approximatifs...

Merci les amis pour toutes ces pistes. Je vais creuser tout ça...

Prioritairement j'aimerai bien me débarrasser de ces menus contextuels sur clic droit !

A+

Bonjour Galopin01, le Forum

En retour une autre proposition, voir feuille formes et Clics.

Mais apparemment tu souhaites déplacer tes formes sur l'ensemble de l'écran. En t'affranchissant des cellules d'Excel.

J'ai pu apercevoir le modèle Waard, c'est surtout pour des "jeux statiques".

On n'est pas obligé de passer par des API et des modules de classe pour des "jeux dynamiques" ou l'on déplace des formes n'importe où sur l'écran.

J'en ai réalisé plusieurs sur Excel 2007 sans souci. Par contre je ne les ai pas fais évolué vers les versions 2016 et supérieures.

Il faudrait que je le fasse. J'ai cliqué sur le lien fourni et vu le besoin.

A+

Si mes Shapes devraient pouvoir s'aligner sur le quadrillage.

Les shapes de mon dernier fichier sont calculées sur un quadrillage de 43 pixels. voir l'exemple du fichier ci-dessus.

Comme je vois la chose à première vue si j'arrive à récupérer (le clic droit et le clic gauche)

il faut que je "balise" mes déplacements avec des API (car je ne crois pas que j'arriverai à le faire directement en Glisser/Déplacer (mébon ça il sera temps de voir quand j'aurai résolu les préliminaires.

Ensuite je compte me servir de TopLeftCell pour positionner exactement mes shapes dans le damier.

Après gérer la transparence, ça, ça peut rester purement visuel puisque les "gabarits cibles" sont pratiquement tous des rectangles. 6x10; 5x12; 4x15; 3x20 et le 8x8 qui a2 disposition possible...

De toute façon vu les problèmes de WYSIWYG je ne pense pas qu'on puisse gérer complétement l'assemblage des pièces (cf le dernier fichier. Apparemment les pixels horizontaux n'ont pas la même taille que les pixels verticaux ?

Bon je regarde ta production.

A+

Rechercher des sujets similaires à "histoires shapes click module classe"