Option Explicit
Private Const cPointToPixel = 1.333333
Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Sub RoundCorners(ByRef oFrm As UserForm, lWidth As Long, lHeight As Long, Optional ByVal Angle As Byte = 15)
Dim lRet As Long
Dim LHwnd As Long
With oFrm
LHwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", .Caption)
' on travaille en pixels
lWidth = lWidth * cPointToPixel
lHeight = lHeight * cPointToPixel
' découpe
lRet = CreateRoundRectRgn(0, 0, lWidth, lHeight, Angle, Angle)
Call SetWindowRgn(LHwnd, lRet, True)
Call DeleteObject(lRet)
End With
End Sub