1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
Sub Test()
Dim Fe As Worksheet
Dim Max As Integer
Dim Cercle As Shape
Dim Pointe As Integer
Dim Trait As Shape
Dim Texte As Shape
Dim Arc As Single
Dim Angle As Single
Dim I As Integer
Dim LTexte As Single
Dim R_Cercle As Single, D_Cercle As Single, G_Cercle As Single, H_Cercle As Single
Dim X1 As Single, X2 As Single, Y1 As Single, Y2 As Single
Dim F_X1 As Single, F_X2 As Single, F_Y1 As Single, F_Y2 As Single
LTexte = 15
Const Pi As Single = 3.14159265358979
Set Fe = ActiveSheet
'supprime les shapes existants
For Each Cercle In Fe.Shapes: Cercle.Delete: Next Cercle
'nombre de segments
Max = 11
Pointe = 3
G_Cercle = 100 'position du bord du cercle par rapport au coté gauche de la feuille
H_Cercle = 100 'position du bord du cercle par rapport au coté haut de la feuille
D_Cercle = 500 'diamètre
R_Cercle = D_Cercle / 2 'rayon
'longueur de l'arc
Arc = D_Cercle * Pi / Max
'angle découlant de la longueur de l'arc
Angle = Arc / R_Cercle
'cercle principal
Set Cercle = Fe.Shapes.AddShape(msoShapeOval, G_Cercle, H_Cercle, D_Cercle, D_Cercle)
Cercle.Fill.Transparency = 1
For I = 1 To Max
'traits en pointillés depuis le centre
Set Trait = Fe.Shapes.AddLine(G_Cercle + R_Cercle, _
H_Cercle + R_Cercle, _
G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I), _
H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I)))
'formatage des traits
With Trait.Line
.Weight = 0.75
.DashStyle = msoLineSquareDot
.ForeColor.SchemeColor = 23 'couleur max 80
End With
'les zones de texte
Set Texte = Fe.Shapes.AddTextbox(msoTextOrientationHorizontal, _
G_Cercle + R_Cercle + (R_Cercle + 20) * Sin(Angle * I + (Angle / 2)) - LTexte / 2, _
H_Cercle + (R_Cercle - (R_Cercle + 20) * Cos(Angle * I + (Angle / 2))) - LTexte / 2, _
LTexte, _
LTexte)
With Texte
.TextFrame.Characters.Text = IIf(I < 11, I, 0)
.TextFrame.HorizontalAlignment = xlCenter
.TextFrame.VerticalAlignment = xlCenter
.Line.Visible = msoFalse
End With
Next I
'mémorisation du point de départ
X1 = G_Cercle + R_Cercle
Y1 = H_Cercle
'traçage des droites
For I = 1 To Max * Pointe
If I Mod Pointe = 0 Then
X2 = G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I)
Y2 = H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I))
Set Trait = Fe.Shapes.AddLine(X1, _
Y1, _
X2, _
Y2)
'couleurs des traits
Trait.Line.ForeColor.SchemeColor = I
'épaisseur des traits
Trait.Line.Weight = 1.5
F_X1 = X1 + (X2 - X1) / 2
F_Y1 = Y1 - (Y1 - Y2) / 2
F_X1 = X1 + (X2 - X1) / 2
F_Y1 = Y1 - (Y1 - Y2) / 2
'sens des flèches
If X1 < X2 Then
F_X2 = F_X1 + 10 * Cos(Atn((Y1 - Y2) / (X2 - X1)))
F_Y2 = F_Y1 - 10 * Sin(Atn((Y1 - Y2) / (X2 - X1)))
Else
F_X2 = F_X1 - 10 * Cos(Atn((Y1 - Y2) / (X2 - X1)))
F_Y2 = F_Y1 + 10 * Sin(Atn((Y1 - Y2) / (X2 - X1)))
End If
'trait des flèches
Set Trait = Fe.Shapes.AddLine(F_X1, _
F_Y1, _
F_X2, _
F_Y2)
'ajout des flèches
Trait.Line.EndArrowheadStyle = msoArrowheadTriangle
Trait.Line.Weight = 1.5
Trait.Line.ForeColor.SchemeColor = 2 'couleur rouge
'mémorise la position
X1 = G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I)
Y1 = H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I))
End If
Next I
End Sub |
Partager