Génial ca
Exactement mon besoin
Bonne journée
David
Juste une modif
J'ai essayé en mettant les données en colonne
Et j'ai un message d'erreur
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E15:F20]) Is Nothing Then Exit Sub
Dim n%, Cx#, Cy#, ventMax#, vent#, d#, A&, Ar#, Q As Byte
Dim Quart As Byte, FlipH As Boolean, FlipV1 As Boolean, FlipV2 As Boolean
Dim x1#, y1#, x2#, y2#
For n = 1 To 6 'pour 6 cellules et 6 flèches
With [A5].Offset(, n) 'cellule carrée
Cx = .Left + .Width / 2 'centre
Cy = .Top + .Height / 2
ventMax = .Height 'cette taille correspond à la vitesse maximum de 40 m/s
End With
vent = ventMax * [F14].Offset(, n) / 40 'amplitude du vent en points
d = -vent / 2 'centre de la flèche au centre du carré en points
With [E14].Offset(, n)
If .Value < 0 Then .Value = Abs(.Value) 'nombre positif
A = .Value Mod 360 'angle en degrés entier
End With
Ar = A * Application.Pi / 180 'angle en radians
Q = 1 + Int(A / 90) 'quart utilisé
With ActiveSheet.Shapes("Vent" & n) 'j'ai renommé la shape
Quart = Evaluate("Quart" & n) 'nom défini
FlipH = Q < 3 And Quart > 2 Or Q > 2 And Quart < 3
FlipV1 = (Q = 1 Or Q = 4) And (Quart = 2 Or Quart = 3)
FlipV2 = (Q = 2 Or Q = 3) And (Quart = 1 Or Quart = 4)
If FlipH Then .Flip msoFlipHorizontal
If FlipV1 Or FlipV2 Then .Flip msoFlipVertical
ThisWorkbook.Names.Add "Quart" & n, Q 'mémorisation
x1 = Cx + d * Sin(Ar)
y1 = Cy - d * Cos(Ar)
x2 = Cx + (d + vent) * Sin(Ar)
y2 = Cy - (d + vent) * Cos(Ar)
.Width = Abs(x1 - x2)
.Height = Abs(y1 - y2)
.Left = Application.Min(x1, x2)
.Top = Application.Min(y1, y2)
End With
Next
End Sub