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
Là tu dis des bêtises mon @patricktoulon !faut pas oublier que c'est moi qui t' ai donné cette astuce
donc celui qui sait le mieux c'est moi je pense
[RAPPEL] -> J'ai dû adapter ton code pour:quelle autre manière a tu de l'exploiter ? a part de faire une boucle avec incrémentation du pixel
Tu sais quoi ? Ton principe de César l'empereur qui domine le monde... tu peux te le garder avec ton hubris.rend à cesar ce qui est a cesar tu utilise exactement mon principe avec des nom de variable différente
@Dudu2 t es pas sérieux tu te fou de moi laPartir de .PointsToScreenPixelsX/Y(.VisibleRange.Left/Top) et non pas .PointsToScreenPixelsX/Y(0) car ton
Function GetRectangleVisibleRange() As rectanglePlus
'fonction created by patricktoulon
Dim G#, T#, Vr As Range, LastCell As Range, D#, B#, Large#, Hauteur#, rect As rectanglePlus, PtoPx, z#
PtoPx = PixelToPoint
With ActiveWindow.Panes(1)
z = .Parent.Zoom / 100
G = .PointsToScreenPixelsX(0): T = .PointsToScreenPixelsY(0)
Set Vr = .Parent.Panes(.Parent.Panes.Count).VisibleRange
Set LastCell = Vr.Cells(Vr.Cells.Count).Offset(-1, -1)
D = .PointsToScreenPixelsX(LastCell.Left): B = .PointsToScreenPixelsY(LastCell.Top)
Do While Not .Parent.RangeFromPoint(D, B) Is Nothing: B = B + 1: DoEvents: Loop: B = B - 1
Do While Not .Parent.RangeFromPoint(D, B) Is Nothing: D = D + 1: DoEvents: Loop: D = D - 1
rect.LeftPixel = G: rect.TopPixel = T: rect.RightPixel = D: rect.BottomPixel = B
rect.LeftPoint = G * PtoPx: rect.TopPoint = T * PtoPx: rect.RightPoint = D * PtoPx: rect.BottomPoint = B * PtoPx
rect.WidthPixel = D - G: rect.WidthPoint = (D - G) * PtoPx
rect.HeightPixel = B - T: rect.HeightPoint = (B - T) * PtoPx
GetRectangleVisibleRange = rect
End With
End Function
Sub test()
With ActiveWindow.Panes(1)
MsgBox .PointsToScreenPixelsX([P18].Left)
MsgBox .Parent.Panes(4).PointsToScreenPixelsX([P18].Left)
MsgBox .Parent.Panes(.parent.panes.count).PointsToScreenPixelsX([P18].Left)
End With
End Sub
Dans la solution il y a ta méthode que j'ai effectivement dû adapter car insuffisante pour satisfaire les objectifs.mais ne dis pas que c'est ta méthode c'est la mienne que tu a réécrite a ta sauce c'est tout
window descendantes de Excel :
Handle: 198050, Classe: "EXCEL2 " [hauteur en point : 16,5]& [largeur en point : -628,5]
Handle: 198204, Classe: "MsoCommandBar " [hauteur en point : 16,5]& [largeur en point : -628,5]
Handle: 329124, Classe: "MsoWorkPane " [hauteur en point : 16,5]& [largeur en point : -628,5]
Handle: 198196, Classe: "NUIPane " [hauteur en point : 16,5]& [largeur en point : -628,5]
Handle: 198092, Classe: "NetUIHWND " [hauteur en point : 16,5]& [largeur en point : -628,5]
Handle: 263614, Classe: "EXCEL2 " [hauteur en point : 110,25]& [largeur en point : 3]
Handle: 198080, Classe: "MsoCommandBar " [hauteur en point : 110,25]& [largeur en point : 3]
Handle: 329222, Classe: "MsoWorkPane " [hauteur en point : 110,25]& [largeur en point : 3]
Handle: 198172, Classe: "NUIPane " [hauteur en point : 110,25]& [largeur en point : 3]
Handle: 198178, Classe: "NetUIHWND " [hauteur en point : 110,25]& [largeur en point : 3]
Handle: 198164, Classe: "EXCEL< " [hauteur en point : 34,5]& [largeur en point : 181,5]
Handle: 198170, Classe: "NUIScrollbar " [hauteur en point : 0]& [largeur en point : 198,75]
Handle: 198100, Classe: "NetUIHWND " [hauteur en point : 0]& [largeur en point : 198,75]
Handle: 198098, Classe: "EXCEL; " [hauteur en point : 34,5]& [largeur en point : -107,25]
Handle: 198166, Classe: "ComboBox " [hauteur en point : 18]& [largeur en point : -111]
Handle: 198106, Classe: "Edit " [hauteur en point : 13,5]& [largeur en point : -111]
Handle: 198180, Classe: "EXCELG " [hauteur en point : 0]& [largeur en point : -628,5]
Handle: 198160, Classe: "EXCELG " [hauteur en point : 0]& [largeur en point : 1058,25]
Handle: 198176, Classe: "EXCELG " [hauteur en point : 0]& [largeur en point : -141,75]
Handle: 198174, Classe: "EXCELG " [hauteur en point : 0]& [largeur en point : -141,75]
Handle: 590486, Classe: "EXCEL2 " [hauteur en point : 0]& [largeur en point : 1058,25]
Handle: 393384, Classe: "EXCEL2 " [hauteur en point : 0]& [largeur en point : -141,75]
Handle: 263212, Classe: "XLDESK " [hauteur en point : 486,75]& [largeur en point : -141,75]
Handle: 198102, Classe: "EXCEL7 " [hauteur en point : 486,75]& [largeur en point : -141,75]
Handle: 263580, Classe: "NUIScrollbar " [hauteur en point : 468]& [largeur en point : 1044]
Handle: 198048, Classe: "NetUIHWND " [hauteur en point : 468]& [largeur en point : 1044]
Handle: 198202, Classe: "NUIScrollbar " [hauteur en point : 12]& [largeur en point : 119,25]
Handle: 590682, Classe: "NetUIHWND " [hauteur en point : 12]& [largeur en point : 119,25]
Handle: 198046, Classe: "XLCTL " [hauteur en point : 21]& [largeur en point : 573]
Handle: 590590, Classe: "XLCTL " [hauteur en point : 3]& [largeur en point : 1041,75]
Handle: 198088, Classe: "XLCTL " [hauteur en point : 20,25]& [largeur en point : 102]
Handle: 393822, Classe: "EXCEL6 " [hauteur en point : 0]& [largeur en point : -141,75]
Handle: 198104, Classe: "MsoWorkPane " [hauteur en point : 75]& [largeur en point : 3]
Handle: 198090, Classe: "MsoWorkPane " [hauteur en point : 75]& [largeur en point : 3]
Sub test()
Dim shap As Shape, r As rectanglePlus, z#, vrx As Range
z = ActiveWindow.Zoom / 100
Set vrx = ActiveWindow.Panes(1).VisibleRange
r = GetRectangleVisibleRange ' get le rectangle de base
'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, r.WidthPoint / z, r.HeightPoint / z)
With shap
.Name = "cobaie"
.Fill.Transparency = 0.9
.Fill.ForeColor.RGB = vbGreen
.Line.Weight = 1
.Line.ForeColor.RGB = vbRed
.Line.Transparency = 0
.ZOrder msoSendToBack
'base
.Left = .Line.Weight + vrx.Left
.Top = .Top + .Line.Weight + vrx.Top
.Width = .Width - (.Line.Weight)
.Height = .Height - (.Line.Weight)
'corrections
.Left = .Left + 1 * Abs(Not ActiveWindow.DisplayHeadings)
.Top = .Top + 1 * Abs(Not ActiveWindow.DisplayHeadings)
.Width = .Width - 1 * Abs(Not ActiveWindow.DisplayHeadings)
.Width = .Width + .Line.Weight * Abs(.Line.Weight = 1)
.Width = .Width + ((-3) * Abs(Not ActiveWindow.DisplayVerticalScrollBar) And Application.WindowState = xlMaximized)
.Width = .Width - 4 * Abs(ActiveWindow.SplitColumn > 0) 'correction splitcolumn
.Width = .Width + 3 * Abs(ActiveWindow.FreezePanes) 'correction width freezpanes
.Height = .Height - 4 * Abs(ActiveWindow.SplitRow > 0) 'correction splitrow
.Height = .Height + 3 * Abs(ActiveWindow.FreezePanes) 'correction height freezpanes
.Height = .Height - 1 * Abs(Not ActiveWindow.DisplayHeadings)
End With
End Sub