Const VerticalScrollBarBordersPixels As Long = 2 * 2.5 'Borders around the Vertical Scroll Bar
Const HorizontalScrollBarBordersPixels As Long = 2 * 4 'Borders around the Horizontal Scroll Bar
Const StatusBarHeightPixels = 26
10 points, c'est énorme, je me demande où est le surplus, difficile à vérifier sans tester sur la config.toujours pareil en mode maximisé sans les displays, tu est trop large de 10 points a peu près
Sub test()
'idée et creation de patricktoulon the best of the bidoudouille :):):)
' Dim G#, T#, Vr As Range, LastCell As Range, D#, B#, Large#, Hauteur#, shap As Shape
'supprime la shape si elle existe
On Error Resume Next
ActiveSheet.Shapes("cobaie").Delete
On Error GoTo 0
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 donne un range
Do While TypeName(.Parent.RangeFromPoint(D, B)) = "Range": B = B + 1: DoEvents: Loop
B = B - 1 'on est sorti on revient de 1
'on boucle vers la droite tant que rangefrompoint donne un range
Do While TypeName(.Parent.RangeFromPoint(D, B)) = "Range": D = D + 1: DoEvents: Loop
D = D - 1 ' 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
'ajoute la shape aux dimensions
DoEvents
Set shap = ActiveSheet.Shapes.AddShape(1, 0, 0, Large, Hauteur)
shap.Name = "cobaie"
shap.Fill.Transparency = 0.5
End With
'ET CEST NICKEL!!!!!!!!!!!!!!
End Sub
Sub test()
Dim G#, T#, Vr As Range, LastCell As Range, D#, B#, Large#, Hauteur#, shap As Shape
'supprime la shape si elle existe
On Error Resume Next
ActiveSheet.Shapes("cobaie").Delete
On Error GoTo 0
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 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
'ajoute la shape aux dimensions
DoEvents
Set shap = ActiveSheet.Shapes.AddShape(1, 0, 0, Large, Hauteur)
shap.Name = "cobaie"
shap.Fill.Transparency = 0.5
End With
'ET CEST NICKEL!!!!!!!!!!!!!!
End Sub
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
Moi j'ai l'impression que ça fonctionne chez moi (à un ou deux pixels près).Je suis déçu que mon code ne fonctionne nulle part sauf chez moi.
De la bouillie pour le p'tit dej'.Mais qu'est-ce que vous faites à 4 heures du mat avec ces foutu pixels ?
This is perfect !Alors une remarque... sur ExactVisibleRangeRECTToWindow() j'ai dû ajouter 2 pixels (SM_CXEDGE, SM_CYEDGE) par rapport à ExactVisibleRangeRECTToScreen() pour avoir la bordure Left et Top de la Shape dans le cadre.