optimiser automatiquement la taille de mon userform en fonction de l'écran

submarine22

XLDnaute Junior
Bonjour à tous.
voila je vais essayer de vous expliquer mon soucis le plus clairement possible.
j ais créer un petit programme avec un userform asser conséquent avec plusieurs combobox et textbox ce qui fait que sur certain écran ou il seras employer il dépasse faute à la résolution des divers écrans.
Donc ce que je voudrais c'est qu il s'optimise de lui même si possible.
J ais essayer ce code:
With UserForm1
.Height = Application.Height
.Width = Application.Width
End With

mais rien ne se passe. dite moi si c'est viable ou non et ou le coller la je nage en eau trouble.
Merci par avance de vos réponse et bonne journée à tous.
 

néné06

XLDnaute Accro
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Bonjour submarine22

Si tu souhaite "calibrer " ton USF à un pourcentage de l'écran,

Private Sub UserForm_Initialize()

Me.Width = Application.Width * .8'**pour 80% de l'écran**
Me.Height =Application.height* .8
Me.top=Application.height * .05
Me.left=(Application.Width -Me.Width)/2'** pour centrer l'USF

End Sub

Mais cela ne te calibrera pas les autres "Controls" (TextBox,ComboBox,..etc...)

A+

René
 

submarine22

XLDnaute Junior
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Merci rené pour ta réponse aussi rapide
Après essais cela marche super bien. Et effectivement cela ne redimensionne pas les objets compris dans ce userform serais t il possible que j y rajoute un barre de défilement afin d y naviguer dans la verticalité.
Merci encore.
 

néné06

XLDnaute Accro
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Re,

Le mieux serait que tu nous fasses parvenir une pièce-jointe avec ton USF ,Sans données confidentielles, pour que l'on vérifie l'avancé du projet et que l'on te propose des solutions.

A+

René
 

GeoTrouvePas

XLDnaute Impliqué
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Bonjour,

Tu peux effectivement rajouter une barre de défilement en change "ScrollBars" de ton Userform.

Concernant le redimensionnement de tes contrôles et polices de caractères, c'est tout à fait possible. Par contre ça complique un peu le développement de ton application.

Si ça t'intéresse toujours, je peux te retrouver le code que j'utilisais à une époque.
 

néné06

XLDnaute Accro
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Re,

Bonjour Géo,

Un petit exemple de USF plein écran et barre de défilement.

Examines le code !

A+

René
 

Pièces jointes

  • Barre def vert.xls
    47 KB · Affichages: 58

GeoTrouvePas

XLDnaute Impliqué
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Voici le code pour avoir un userform redimensionnable avec adaptation de la police et des contrôles en conséquence :

A mettre dans le Userform :
Code:
Private Sub UserForm_Initialize()
    Set User = Me: InitUSF
End Sub
Private Sub UserForm_Resize()
   Call ResizeUSF
End Sub
Private Sub UserForm_Terminate()
   Set User = Nothing
End Sub


A mettre dans un module :
Code:
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal NIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal NIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function GetSystemMetrics Lib "user32" (ByVal NIndex As Long) As Long
Const GWL_STYLE = (-16), GWL_EXSTYLE = (-20), WS_SIZEBOX = &H40000, WS_TROIS_BOUTON = &H70000, WS_EX_APPWINDOW = &H40000
Public L(), h(), f(), p(), s() As String, wLong As Long, hwnd As Long, i, c As Control, la As Long, ha As Long
Public User As Object
Sub InitUSF(Optional Arg_Fictif As Boolean)
    i = 0
    ha = User.Height
    la = User.Width
    For Each Ctrl In User.Controls
        i = i + 1
        ReDim Preserve L(i): L(i) = Ctrl.Width
        ReDim Preserve h(i): h(i) = Ctrl.Height
        ReDim Preserve p(i): p(i) = Ctrl.Top
        ReDim Preserve f(i): f(i) = Ctrl.Left
        If TypeName(Ctrl) <> "Image" Then ReDim Preserve s(i): s(i) = Ctrl.Width / Ctrl.Font.Size
    Next
    hwnd = FindWindow(vbNullString, User.Caption)
    wLong = GetWindowLongA(hwnd, GWL_STYLE) Or WS_SIZEBOX Or WS_TROIS_BOUTON
    SetWindowLong hwnd, GWL_STYLE, wLong
End Sub
Sub ResizeUSF(Optional Arg_Fictif As Boolean)
On Error Resume Next
    i = 0
    For Each Ctrl In User.Controls
        i = i + 1
        Ctrl.Width = User.Width / (la / L(i))
        Ctrl.Height = User.Height / (ha / h(i))
        If f(i) <> 0 Then Ctrl.Left = User.Width / (la / f(i))
        If p(i) <> 0 Then Ctrl.Top = User.Height / (ha / p(i))
        'If TypeName(Ctrl) <> "Image" Then ctrl.Font.Size = Ctrl.Width / S(i)
    Next
End Sub
Sub AutoResize(Optional Arg_Fictif As Boolean)
    If GetSystemMetrics(0) < 1280 Or GetSystemMetrics(1) < 1024 Then ShowWindow hwnd, 3
End Sub
 

submarine22

XLDnaute Junior
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Merci geo je viens d essayer ton code et cela m indique : "erreur de compilation variable non définie" et cela me surligne en jaune:'Sub InitUSF(Optional Arg_Fictif As Boolean)' ainsi que le Ctrl de :'For Each Ctrl In User.Controls 'plus bas???? aurais tu une idée sur ce que n ais pas fait correctement??
Merci par avance
 

GeoTrouvePas

XLDnaute Impliqué
Re : optimiser automatiquement la taille de mon userform en fonction de l'écran

Désolé j'avais déjà déconnecté.
Essaye de rajouter :
Code:
Dim Ctrl as Control
au début de la procédure.
Sinon tu peux enlever le "Option explicit"
 

Statistiques des forums

Discussions
312 199
Messages
2 086 160
Membres
103 148
dernier inscrit
lulu56