non @Dudu2 au contraireje l'ai dit, pour moi, ça n'a rien à voir avec un problème de bordures. C'est un problème de .Top et .Left du Userform.
Sub a()
Dim PointToPixel As Double
Dim PixelToPoint As Double
With ActiveWindow.ActivePane
PointToPixel = (.PointsToScreenPixelsX(Application.InchesToPoints(1)) - .PointsToScreenPixelsX(0)) / Application.InchesToPoints(1)
PixelToPoint = 1 / PointToPixel
'MsgBox PixelToPoint
End With
With UserForm1
.StartUpPosition = 0
.Left = ActiveWindow.PointsToScreenPixelsX(0) * PixelToPoint + [A1].Left
.Top = ActiveWindow.PointsToScreenPixelsY(0) * PixelToPoint + [A1].Top
.Show
End With
End Sub
Sub a()
Dim PixelToPoint As Double
With ActiveWindow.ActivePane
PixelToPoint = (.PointsToScreenPixelsX(72) - .PointsToScreenPixelsX(0)) / 72
End With
With UserForm1
.StartUpPosition = 0
.Left = ActiveWindow.PointsToScreenPixelsX(0) / PixelToPoint
.Top = ActiveWindow.PointsToScreenPixelsY(0) / PixelToPoint
.Show
End With
End Sub
Sub a()
Dim PixelToPoint As Double
With ActiveWindow.ActivePane
PixelToPoint = ((.PointsToScreenPixelsX(72) - .PointsToScreenPixelsX(0)) / 72)
End With
With UserForm1
.StartUpPosition = 0
.Left = (ActiveWindow.PointsToScreenPixelsX(0) / PixelToPoint) + (.Width - .InsideWidth)
.Top = (ActiveWindow.PointsToScreenPixelsY(0) / PixelToPoint) + (.Width - .InsideWidth)
.Show
End With
End Sub
Sub a()
pos = PointZeroGrille(UserForm1)
With UserForm1
.StartUpPosition = 0
.Left = pos(1) + [c1].Left * pos(3)
.Top = pos(2)
.Show
End With
End Sub
Function PointZeroGrille(usf)
Dim PixelToPoint As Double, z, pos(1 To 3)
With ActiveWindow
PixelToPoint = ((.ActivePane.PointsToScreenPixelsX(72) - .ActivePane.PointsToScreenPixelsX(0)) / 72)
z = .Zoom / 100
pos(1) = (.PointsToScreenPixelsX(0) / PixelToPoint) * z + (usf.Width - usf.InsideWidth)
pos(2) = (.PointsToScreenPixelsY(0) / PixelToPoint) * z + (usf.Width - usf.InsideWidth)
pos(3) = z
End With
PointZeroGrille = pos
End Function
Oui je sais, mais là c'était juste pour l'exemple et illustrer le décalage.ps tu a oublié de calculer le zoom dans tes model
Oui mais ça c'est la marge horizontale interne au UserForm dont tu te sers parce que ça tombe + ou - en marche chez toi, mais ça n'apporte rien de nouveau et ça ne peut pas me servir.4.7 et 3.2 exactement
.left -(application.usablewidth-activewindow.visiblerange.width)
'le top on le change pas la caption est plus haute
.left +(application.usablewidth-activewindow.visiblerange.width)
.top+(application.usablewidth-activewindow.visiblerange.width)
chez toi d'origine dans vbe le userform a des bordure epaisses et a l'affichage il a des bordures fine
chez moi c'est l'inverse
On peut donc en conclure que le UserForm est positionné par rapport à son Design VBE et que à l'affichage après positionnement, les marges sont soit ajoutées (pour toi) soit retirées (pour moi). C'est un grand pas dans la compréhension du problème ! |
Dans les 2 cas, il n'y a donc pas de cohérence entre la position technique du UserForm et sa position visuelle Et au moins dans mon cas (Windows 8+ ?) pas de cohérence entre ses dimensions techniques et ses dimensions visuelles. |