Sub test()
Dim shap As Shape, dims
dims = ExactVisibleRangeVpat2
'supprime la shape si elle existe
On Error Resume Next
ActiveSheet.Shapes("cobaie").Delete
On Error GoTo 0
DoEvents
Set shap = ActiveSheet.Shapes.AddShape(1, 0, 0, dims(0), dims(1))
shap.Name = "cobaie"
shap.Fill.Transparency = 0.5
End Sub
Function ExactVisibleRangeVpat2()
'fonction created by patricktoulon
Dim G#, T#, Vr As Range, LastCell As Range, D#, B#, Large#, Hauteur#
With ActiveWindow.Panes(1)
G = .PointsToScreenPixelsX(0) 'point gauche de depart(base ecran en pixel)
T = .PointsToScreenPixelsY(0) 'point top de depart(base ecran en pixel)
Set Vr = .VisibleRange 'range visible
Set LastCell = Vr.Cells(Vr.Cells.Count).Offset(-1, -1) 'avant dernière cellule du visiblerange
D = .PointsToScreenPixelsX(LastCell.Left) '.left de cette cellule(base ecran en pixel)
B = .PointsToScreenPixelsY(LastCell.Top) '.top de cette cellule(base ecran en pixel)
'on boucle vers le bas tant que rangefrompoint ne donne pas nothing
Do While Not .Parent.RangeFromPoint(D, B) Is Nothing: B = B + 1: DoEvents: Loop
B = B - 1 'on est sorti on revient de 1
'on boucle vers la droite tant que rangefrompoint ne donne pas nothing
Do While Not .Parent.RangeFromPoint(D, B) Is Nothing: D = D + 1: DoEvents: Loop
D = D - 1 ' on est sorti on revient de 1
Large = (D - G) * 0.75 ' la droite - la gauche en point
Hauteur = (B - T) * 0.75 ' le bas - le top en point
ExactVisibleRangeVpat2 = Array(Large, Hauteur)
End With
End Function