XL 2019 Recentrer Shape après rotation

Twing83

XLDnaute Junior
Bonjour,
Je suis confronté à un petit problème que je n'arrive pas à résoudre, mais comme on dit : "S'il n'y à pas de solution c'est qu'il n'y à pas de problème..." :)

Dans mon fichier en exemple, je veux faire pivoter d'un certain angle une zone rectangle tout en m'assurant qu'elle reste incluse dans ma zone graphique (que ça ne déborde pas en fin de compte) et qu'elle soit centrée à l'origine de mon repère (le problème...).

J'ai un peu triché en positionnant mon repère de telle sorte que ça m'arrange....mais ça me va !

J'ai à peu près résolu la question du redimensionnement , mais si quelqu'un peut me donner la solution plus propre pour connaitre la dimension exacte de la zone graphique je suis bien évidemment preneur (à défaut je l'ai déclarée dans une variable x).

Bref pour en venir au coeur de mon problème, aux point cardinaux ma zone rectangle semble à quelque chose près bien centrée, mais uniquement aux points cardinaux, après c'est la bérézina...

J'en appelle donc à votre temps et vos compétences pour solutionner mon problème.

D'avance merci...
 

Pièces jointes

  • TestShape.xlsm
    36.2 KB · Affichages: 3
Solution
J'ai progressé un poil : en limitant la longueur de mon shape à 640, autrement dit entre 31° & 60°, 121° & 151°, 211° & 240° et 301° & 330° je n'ai donc plus de décalage mais je n'utilise pas pour autant l'espace escompté...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Twing,
tout en m'assurant qu'elle reste incluse dans ma zone graphique (que ça ne déborde pas en fin de compte) et qu'elle soit centrée à l'origine de mon repère (le problème...).
En d'autres termes que la position du centre de gravité soit immobile ?
Un essai en PJ si j'ai bien compris. La rotation s'effectue sans translation horizontale ou verticale, avec :
VB:
Sub ExempleRotation()
ActiveSheet.Shapes("Groupe 11").IncrementRotation [R2]
End Sub
Je me suis inspiré de :
 

Pièces jointes

  • TestShape.xlsm
    33.7 KB · Affichages: 2

Twing83

XLDnaute Junior
Bonjour sylvanu,
L'effet recherché est effectivement le bon, le centre de gravité de la forme reste au centre des débats.J'avais bien pensé à IncrementRotation, je l'avais écarté car je dois visualiser des données dynamiques et je ne souhaitais pas forcément stocker la valeur n-1 et faire l'incrément de la différence n-(n-1), d'où le ShapeRange.Rotation.
Autre inconvénient de cette solution (pour ce qui me concerne uniquement) c'est que la forme doit être toujours présente sur le graphe et dans mon cas (bien particulier je l'accorde...), elle ne l'est que dans certains cas biens précis, sinon je la supprime et la recréé automatiquement.
Je ne clôture pas encore mon appel à l'aide (on ne sait jamais), mais je garde sous le coude ta solution qui malgré tout fait le job.
Merci de ton soutien et du temps consacré.
Cordialement,
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
je ne souhaitais pas forcément stocker la valeur n-1 et faire l'incrément de la différence
je ne comprends pas. Où est stockée la valeur n-1 dans :
ActiveSheet.Shapes("Groupe 11").IncrementRotation [R2] ?

elle ne l'est que dans certains cas biens précis, sinon je la supprime et la recréé automatiquement.
Pourquoi la supprimer ? Il vous suffit de faire ActiveSheet.Shapes("Image").Visible = True ou False ?
 

Twing83

XLDnaute Junior
Sylvanu,
IncrementRotation donne une incrémentation par rapport à la position courante.
Donc si je voulais donner une rotation (0 à 360°) à la forme, il me faut absolument stocker la la référence courante.
Dans ton exemple, si je saisi 0 (ce qui pour moi correspond au nord, la forme ne bouge pas, normal un incrément de 0 = 0...
Ma donnée d'entrée est une direction (un gisement pour être précis), c'est pour cette raison qu'initialement j'avais opté pour le Shape.Rotation.
Tout à fait d'accord avec la remarque sur .Visible = True ou False, je ne suis juste pas parti dans cet optique mais il n'y a que les imbéciles qui ne changent pas d'avis...
 

patricktoulon

XLDnaute Barbatruc
RE
re
je pige pas trop là
la rotation d'une shape est opérée sur son axe central me semble t il
ou est donc le besoin de recentrer cette shape
ceci dit dans le cas ou il faudrait recentrer (je me demande toujours pourquoi mais bon )
il faut déterminer son axe et l'axe de la surface dans dans la quelle est centrée avant la rotation
et s'en servir pour la replacer
 

Twing83

XLDnaute Junior
Bonsoir patricktoulon,
C'est ce que je pensais aussi, mais dès lors que je redimensionne mon shape et que je l'oriente différemment qu'aux cardinaux, j'ai un décalage du centre.
J'ai l'impression que le problème vient du redimensionnement car sans tout est OK
 

Twing83

XLDnaute Junior
Malheureusement oui je suis obligé de redimensionner mon shape.
Je veux absolument que mon shape affleure la bordure de la zone graphique.
Aux cardinaux c'est simple puisque la longueur est celle de la zone, mais dès que l'on incline l'angle, il faut rallonger...
J'ai fait un essai en déplaçant vers le bas de ma feuille (environ 9 lignes : centre initial ligne 23 déplacé en ligne 32) et là pour le coup c'est correct.
Ça veut dire que je n'étais pas loin de la vérité, mais pour le coup ça ne m'arrange pas du tout de devoir décaler vers le bas.
Il semblerait, mais peut-être que je me trompe que le calcul renvoie une coordonnée erronée...piste à creuser...
 

Twing83

XLDnaute Junior
J'ai progressé un poil : en limitant la longueur de mon shape à 640, autrement dit entre 31° & 60°, 121° & 151°, 211° & 240° et 301° & 330° je n'ai donc plus de décalage mais je n'utilise pas pour autant l'espace escompté...
 

Statistiques des forums

Discussions
313 240
Messages
2 096 477
Membres
106 637
dernier inscrit
jpdupont