Forum Clubic

VBA Excel : Comment dessiner des flèches via macros

Bonjour à tous

je cherche désespérement à dessiner des flèches via une macro sous Excel.
En fait j’arrive à en dessiner une, mais ensuite pour la faire aller dans le sens où je veux (par macro), là c’est l’échec total et je galère…

Si quelqu’un a un bout de code, ou peut m’expliquer la démarche, je prends !
Merci

Tu as écrir quoi, comme code, pour le moment ?

Et ta macro, c’est une macro manuelle ou enregistrée ?

Pour démarrer j’ai utilisé l’enregistrement de macro, mais il me mets des '#" en fin de coordonnées, et pas tout le temps, et je ne sais pas à quoi çà correspond !..

exemple :
ActiveSheet.Shapes(“Line 24”).Select
Selection.ShapeRange.Item(“Line 24”).Left = 87# <- aucune idée à koi sert ce # à la fin
Selection.ShapeRange.Item(“Line 24”).Width = 23.25
Selection.ShapeRange.Item(“Line 24”).Top = 412.5
Selection.ShapeRange.Item(“Line 24”).Height = 32.25

Regarde l’aide intégrée d’Excel, tout y est
Voila par exemple comment il propose la création

Set myDocument = Worksheets(1)
With myDocument.Shapes.AddLine(100, 100, 200, 300).Line
    .DashStyle = msoLineDashDotDot
    .ForeColor.RGB = RGB(50, 0, 128)
    .BeginArrowheadLength = msoArrowheadShort
    .BeginArrowheadStyle = msoArrowheadOval
    .BeginArrowheadWidth = msoArrowheadNarrow
    .EndArrowheadLength = msoArrowheadLong
    .EndArrowheadStyle = msoArrowheadTriangle
    .EndArrowheadWidth = msoArrowheadWide
End With

Pour ce qui est du #, il semble être mis chaque fois que la valeur de l’argument ne possède pas de partie décimale

Tiens oui, je n’avais pas remarqué !!!

Par contre ton code permet de créer une flèche, et çà je sais le faire.
Ce que je cherche, c’est pouvoir la faire pivoter dans tous les sens, et c’est là que çà se gate .
en fait tant qu’on reste dans le même quart de plan, çà marche comme je veux, mais dès que je franchis les 90°, ou 180°, 270°, ou 0°, la flèche ne régit plus comme prévu, et il se passe comme des symétries horizontales ou verticales, avec changement de sens…

Tu fais comment pour changer de quadrant ? tu donnes des valeurs négatives à Width et/ou Height ?

bé non justement les valeurs négatives ne passent pas !
tu dois utiliser les fonctions flipvertical et fliphorizontal, mais çà te change aussi les point .top et left.
Bref c’est le bordel à gérer, et çà nécessiterait peut-être 20 lignes de code, et je trouve pas çà propre !

hier soir j’ai trouvé une autre technique plus simple, c’est en utilisant la fonction incrementRotation.
mais 2 hics :

  • la figure pivote sur son axe de rotation (centre de gravité) et non pas par rapport à une extrémité comme je le voulais
  • l’angle renseigné en en relatif (par rapport au dernier angle), et pas en absolu.

mais avec 2 petites astuces, j’ai remédié à tout çà, et j’ai un truc qui fonctionne
merci pour ton aide

Content que tu aies trouvé
De toute manière, la seule chose que je me préparais à te proposer, c’était de permuter origine et extrémité.

c’est effectivement ce qu’il aurait fallu faire, en conbinant cela avec les flip …
Mais avec le incrementRotation, c’est beaucoup plus facile à gérer !!!

En tous cas merci à toi d’avoir passer un peu de temps à étudier mon problème