Option Explicit
Const NomShape = "mafleche"
Const CelluleRatio = "H2"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ratio As Double, h0 As Double, top0 As Double
If Not Intersect(Target, Range(CelluleRatio)) Is Nothing Then
   With Me.Shapes(NomShape)
      ' on sauvegarde dans la propriété de la flèche "AlternativeText"
      ' les dimensions et positions initiale de la flèche
      ' si ce n'est pas déjà fait
      If .AlternativeText = "" Then
         .AlternativeText = .Height & " \" & .Width & "\" & .Top & "\" & .Left
      End If
      .Visible = Range(CelluleRatio) <> 0
      h0 = CDbl(Split(.AlternativeText, "\")(0))      'hauteur initiale
      top0 = CDbl(Split(.AlternativeText, "\")(2))    'Position verticale initiale
      .Height = h0 * Range(CelluleRatio) / 30     'Hauteur avec le ratio saisie dans la cellule CelluleRatio
      .Top = top0 + (h0 - .Height) / 2    'position verticale suite au redimensionnement
   End With
End If
End Sub
Sub RAZ()
   'RAZ des dimensions initiales
   ' 1) lancer RAZ
   ' 2) sur la feuille dimensionner la flèche
   ' 3) sauvegarder votre classeur
   Me.Shapes("mafleche").AlternativeText = ""
End Sub