CHALLENGE : Action lors d'un redimensionnement ou déplacement d'un cadre

Résolu/Fermé
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 - 10 nov. 2018 à 11:52
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 - 18 nov. 2018 à 10:43
Bonjour,

je suis complètement bloqué dans mon projet en vba.

Je cherche a gérer un planning. Chaque tâche est représenté par une forme rectangulaire.

J'ai déjà géré la création, la modification et la suppression de tâche au travers de userForm.

A présent, je souhaite rendre plus didactique mon script.

Je souhaite exécuter une macro spécifique lorsque l'utilisateur redimensionne et/ou déplace n'importe quel carde représentant une tâche.

Peut-être détecter le fin du relâchement du bouton de la souris ?

D'habitude j'insert une partie du mon code mais là je n'ai rien à vous présenter car je suis complètement bloqué. Désolé.

Merci,

2 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
10 nov. 2018 à 16:15
Bonjour,

Chaque tâche est représenté par une forme rectangulaire.


Ceux sont certainement des Shapes

Tu mets dans un module ta macro comme ceci:

Option Explicit
Sub Mamacro()
MsgBox "Vous avez cliqué sur la shape : " & Application.Caller
End Sub



ensuite faire un clic droit sur ta forme rectangulaire.

Affecter une macro et tu sélectionnes Mamacro.

A chaque clic tu auras ton message

Voilà

1
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
15 nov. 2018 à 19:49
Merci cs_Le Pivert mais cette solution permet de lancer une macro quand l'utilisateur clique sur le rectangle. Mais pas quand il le redimensionne ou quand il le déplace.

Je vais essayer de mettre en oeuvre la solution de Partice33740 mais si je n'y arrive pas, cette solution cheap fera l'affaire.

Merci,
GDX
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 10 nov. 2018 à 18:30
Bonjour,

Je ne vois qu'une solution pour détecter le relâchement de la souris mais c'est assez complexe :
Pour tes rectangles, au lieu d'utiliser des formes (shape), il faut utiliser des contrôles activeX, par exemple des images ou des labels.

Tu peux alors utiliser MouseDown et MouseMove pour gérer le déplacement et/ou le dimensionnement du rectangle (image ou label), c'est pas simple car il faut créer/supprimer les 8 petits rectangles (coins et milieux) qui servent à redimensionner.
Et ensuite utilises le MouseUp pour exécuter ta macro.

Vu qu'il y a plusieurs rectangles, il vaut mieux gérer l'ensemble avec un module de classe.

1
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
15 nov. 2018 à 20:46
Merci Patrice,

en effet les ActiveX peuvent répondre à mon problème. En revanche une question me turlupine.

Si je créer 100 cadres ActiveX, est-ce que je devrai avoir 100 Sub mouseUp pour chacune des cadres ?

Sachant que les cardes sont créés de manière dynamique avec une macro, il faudra que cette macro génère le code mouseUp associé au carde pour chaque création.


Cela me semble assez lourd.
Y-a-t-il une solution pour avoir un seul Sub MouseUp qui gère tous les cadres ActiveX ?

Merci,
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
15 nov. 2018 à 21:08
Re,
un seul MouseUp, c''est dans ma réponse :
« Vu qu'il y a plusieurs rectangles, il vaut mieux gérer l'ensemble avec un module de classe. »
0
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
15 nov. 2018 à 21:29
OK merci, je n'ai jamais utilisé de module de classe je vais aller voir un cours sur le sujet.

Merci,
0
GDX Messages postés 219 Date d'inscription lundi 27 avril 2009 Statut Membre Dernière intervention 16 janvier 2020 9
15 nov. 2018 à 22:06
J'ai continué à travailler sur ce sujet mais j'ai encore une question.

Je souhaite que mon cadre activex ait le même comportement en mode normal que lorsque que le mode création est activé.

C'est-à-dire, laisser la possiblité de déplacer ou redimensionner le cadre.

Private Sub Label1_Click()
Label1.Select
End Sub


Ce code permet bien de sélectionner le cadre mais pas d'afficher les point aux coins du cadre pour le redimensionner.

Je pense que ce que je cherche à faire est impossible :-(

GDX
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié le 16 nov. 2018 à 00:14
Impossible Non, mais comme je te l'ai dit, complexe :
«Tu peux alors utiliser MouseDown et MouseMove pour gérer le déplacement et/ou le dimensionnement du rectangle (image ou label), c'est pas simple car il faut créer/supprimer les 8 petits rectangles (coins et milieux) qui servent à redimensionner. »
0