XL 2016 VBA - Déterminer la pente de la Forme ligne ou flèche ou mieux son équation

Dudu2

XLDnaute Barbatruc
Bonjour,

J'ai 2 Shapes msoLine.
Toutes les 2 ont les mêmes caractéristiques de position (Left, Top) mais ont des pentes opposées.
Comment puis-je déterminer la pente (ascendante ou descendante) de la ligne d'une Shape msoLine ?
 

Pièces jointes

  • Classeur2.xlsm
    24.4 KB · Affichages: 7
Solution
De toutes façons le but était de pouvoir positionner sur la Shape ligne, une autre Shape rectangle soit à partir de son .Left (x) soit à partir de son .Top (y).

Il a donc fallu déterminer l'équation de la droite (y = ax + b) représentée par la ligne pour avoir:
- .Top (y) en fonction de .Left (y = ax + b)
- .Left (x) en fontion de .Top ('y = ax + b => y - b = ax => x = (y - b) / a)

Edit: Sauf cas particuliers:
- Lorsque l'équation de la droite est celle d'une parallèle à l'axe des ordonnées (x = c)
- Lorsque l'équation de la droite est celle d'une parallèle à l'axe des absysses (a = 0 ou encore y = b)
qu'il faut traiter spécifiquement.

C'est la détermination de cette...

TooFatBoy

XLDnaute Barbatruc
I checked it by trying.
Did you try ?
Je n'ai pas vraiment compris #3, ni totalement compris #2, alors ce que j'ai essayé, c'est ça :
VB:
                MsgBox "TopLeftCell = " & .TopLeftCell.Address(0, 0) & vbCrLf & _
                       "Left = " & .Left & vbCrLf & _
                       "Top = " & .Top & vbCrLf & _
                       .VerticalFlip

Et ça m'affiche 0 pour le premier trait et -1 pour le deuxième alors qu'ils sont inclinés de la même façon (ou presque... ;)).
 

patricktoulon

XLDnaute Barbatruc
bonsoir @Dudu2
demo.gif
 

Pièces jointes

  • Classeur2(1).xlsm
    19.2 KB · Affichages: 5

Dudu2

XLDnaute Barbatruc
De toutes façons le but était de pouvoir positionner sur la Shape ligne, une autre Shape rectangle soit à partir de son .Left (x) soit à partir de son .Top (y).

Il a donc fallu déterminer l'équation de la droite (y = ax + b) représentée par la ligne pour avoir:
- .Top (y) en fonction de .Left (y = ax + b)
- .Left (x) en fontion de .Top ('y = ax + b => y - b = ax => x = (y - b) / a)

Edit: Sauf cas particuliers:
- Lorsque l'équation de la droite est celle d'une parallèle à l'axe des ordonnées (x = c)
- Lorsque l'équation de la droite est celle d'une parallèle à l'axe des absysses (a = 0 ou encore y = b)
qu'il faut traiter spécifiquement.

C'est la détermination de cette 'équation et donc de a et de b qui m'a fait galérer un bon moment pour trouver les bons repères. J'en ai fait une fonction indépendante dans ce code et illustré avec le positionnement en .Left d'un rectangle sur la Shape ligne à partir d'un .Top figé de ce rectangle.
 

Pièces jointes

  • Équation d'une ligne ou flèche d'une Shape.xlsm
    32 KB · Affichages: 0
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour @Dudu2 j'ai fait quelques tests
j'étais parti sur le théorème de pitagooorre
mais en fait c'est encore plus simple
A°) ta shape(ligne) occupe une surface rectangle(ou carré)
B°) ta shape curseur à placer a un top différent

donc moi bêtement
  1. j’enlève la différence de top au height du rectangle occupé par la shape ligne
  2. je réduit par conséquent au prorata de la réduction du height le width de la surface occupé
  3. il me suffit de prendre la différence de width des deux rectangles
  4. après je l'applique en plus du left de la ligne a gauche ou a droite du rectangle (ligne) en fonction du verticalflip, moins bien évidemment la moitié de la largeur de la shape à placerpour la centrer sur le trait
  5. le tout en partant du bottom bien sur
chez moi ça fonctionne
j'ajoute une shape verte pour le visuel du nouveau rectangle calculé

demo.gif
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87