bonjour, l'idée de Yvouille avec une macro plus facile à maintenir
Option Compare Text
Sub Strepen()
'***********************************************************************
'il est important pour bien détecter les formes ""connecteur droit avec flèche ..."
' - qu'ils commencent un petit peut plus haut que la ligne avec les valeurs
' - qu'ils terminent un petit peut en bas de la ligne des valeurs
'Maintenant le valeur se trouve en colonne B et les limites dans les colonnes F:G
'***********************************************************************
Dim MyLeft, dPrediction
With Sheets("Feuil1")
MyLeft = Array(.Range("C1").Left, .Range("F1").Left, .Range("B1").Left, .Range("G1").Left) 'IMPORTANT : les mesures "left" pour ces 4 cellules pour bien prédire la position des shapes
For Each shp In .Shapes 'boucle les formes
If shp.Name Like "connecteur droit avec flèche*" Then 'ils sont nommés comme ça
With shp.TopLeftCell
Set c = .Offset(1, 2 - .Column) 'la cellule B de la ligne suivante
End With
If shp.Top <= c.Top And shp.Top + shp.Height > c.Offset(1).Top Then 'ce shape commence u petit peut avant la ligne et se termine un petit peut après la ligne
If WorksheetFunction.Count(c.Offset(, 4).Resize(, 2)) = 2 And c.Offset(, 4).Value <> c.Offset(, 5).Value Then 'min et max sont connu
dPrediction = WorksheetFunction.Forecast(c.Value, Array(0, 1), Array(Array(c.Offset(, 4).Value, c.Offset(, 5).Value)))
shp.Left = Application.Min(MyLeft(3), Application.Max(MyLeft(2), MyLeft(0) + (MyLeft(1) - MyLeft(0)) * dPrediction))
shp.Line.DashStyle = IIf(WorksheetFunction.Median(0, 1, dPrediction) <> dPrediction, msoLineSysDash, msoLineSolid)
Else
MsgBox "impossible forecast avec les valeurs de la ligne " & c.Row
End If
Else
MsgBox shp.Name & vbLf & shp.TopLeftCell.Address & vbLf & "en hauteur moins que la ligne " & c.Row
End If
End If
Next
End With
End Sub