Ajuster un userform à la taille de l'écran

missLaura

XLDnaute Junior
Bonjour,
Quelqu'un saurais comment faire pour ajuster un userform à la taille de l'écran ?

Merci <3 <3
 

Ratatouil

XLDnaute Nouveau
Re : Ajuster un userform à la taille de l'écran

Bonjour missLaura,
il y a quelque temps j'ai cherché la mem chose que toi et j'ai trouvé ça j'espère que ça t'aidera.
Option Explicit

'Ce programme montre comment adapter un Userform
'à la taille d'un ecran quelque soit la résolution



'Fonctions API
Private Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "User32" (ByVal hMenu As Long, ByVal iditem As Long, ByVal wflags As Long) As Long
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function IsIconic Lib "User32" (ByVal hWnd As Long) As Long
Private Declare Function IsZoomed Lib "User32" (ByVal hWnd As Long) As Long 'non utilisée ici
Private Declare Function DrawMenuBar Lib "User32" (ByVal hWnd As Long) As Long
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "User32" ()

'
Private Const SW_MAXIMIZE = 3 'constantes pour la fonction
Private Const SW_MINIMIZE As Long = 6 'ShowWindow
'
Private Const GWL_STYLE As Long = (-16) 'The offset of a window's style
Private Const WS_MINIMIZEBOX = &H20000 'Style to add a Minimize box on the title bar
Private Const WS_CAPTION As Long = &HC00000 'Style to add a titlebar
'
Private Const SC_MOVE = &HF010 'constantes
Private Const SC_CLOSE = &HF060 'pour la fonction
Private Const MF_BYCOMMAND = &H0 'DeleteMenu
'
Private Const WM_NCLBUTTONDOWN = &HA1 'constantes pour
Private Const HTCAPTION = 2 'déplacement form sans titre
'
Dim hWnd As Long 'le handle de la form
Dim wInit As Long, hInit As Long 'ses dimensions d'origine
Dim FormInit As Boolean 'définit l'étape d'initialisation de la form
Dim FormSansTitre As Boolean 'définit l'étape d'enlèvement du titre
Dim FormST As Boolean 'definit l'état de la form

Private Sub CommandButton4_Click()
Unload Me
End Sub

Private Sub UserForm_Activate()
ShowWindow hWnd, SW_MAXIMIZE 'on veut maximiser la form au démarrage,
'ce qui est en fait la raison d'être de ce code...


Dim hMenu As Long 'empêche le mouvement de la forme
hMenu = GetSystemMenu(hWnd, 0) 'le handle du system menu
DeleteMenu hMenu, SC_MOVE, MF_BYCOMMAND
End Sub

Private Sub UserForm_Initialize()
Dim iStyle As Long, hMenu As Long
hWnd = FindWindow(vbNullString, Me.Caption) 'le handle de la form
hMenu = GetSystemMenu(hWnd, 0) 'le handle du system menu
iStyle = GetWindowLong(hWnd, GWL_STYLE) 'trouve le style du system menu

SetWindowLong hWnd, GWL_STYLE, iStyle 'applique le nouveau style
DeleteMenu hMenu, SC_CLOSE, MF_BYCOMMAND 'désactive le bouton supprime
wInit = Me.Width: hInit = Me.Height
FormInit = True
End Sub

Private Sub UserForm_Resize()
Dim RW As Single, RH As Single
'rapports d'agrandissement
RW = Me.Width / wInit: RH = Me.Height / hInit
'redimensionnement et replacement de l'ensemble des contrôles voulus en fonction de l'écran
Dim Ctl As MSForms.Control
For Each Ctl In Me.Controls
Ctl.Move Ctl.Left * RW, Ctl.Top * RH, Ctl.Width * RW, Ctl.Height * RH
Ctl.Font.Size = Round(Ctl.Font.Size * RH) 'redim des polices
Next
End Sub
 

laetitia90

XLDnaute Barbatruc
Re : Ajuster un userform à la taille de l'écran

bonjour missLaura,Ratatouil,jeanpierre,carcharodon-carcharias, le forum

le code d'un ami patrick toulon sur un autre forum interessant trés court redefinis les controls on peut reduire ect... j'ai seulement rajoute ce code pour qu'a l'ouverture il se mette en plein ecran a adapter

Code:
With UserForm3
       .StartUpPosition = 3
       .Width = Application.Width - 2
      .Height = Application.Height - 3
  End With
 

Pièces jointes

  • resize patrick.zip
    24 KB · Affichages: 1 050

patricktoulon

XLDnaute Barbatruc
Re : Ajuster un userform à la taille de l'écran

Bonjour a tous
je constate que depuis le temps mon exemplaire a fait le tour du monde
cela dit depuis j'ai fait plus simple beaucoup plus simple
pour mettre directement un userform en plein ecran l'ors du load de celui ci
pour cela on va utiliser 2 apis que l'on va repiquer dans la user32.dll

pour commencer on va utiliser la "getactivewindow" pour capter le handle de la fenetre
ensuite on va utiliser la fonction showWindow de la meme dll

exemple de code tout simple
'a mettre tout en haut du module de l'userform
'declaration des apis
' Fonction d'acquisition de l'identifiant de la fenêtre active
Private Declare Function GAW Lib "User32" Alias "GetActiveWindow" () As Long
'Fonction d'affichage
Private Declare Function show Lib "User32" Alias "ShowWindow" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

et dans le activate du userform
Private Sub UserForm_Activate()
show gaw,3
End Sub


voila maintenant le userform au load sera en plein ecran sans rien ajouter
apres si il vous faut le redimentionnement des controls en meme temps je vous donnerais le code
 

patricktoulon

XLDnaute Barbatruc
Re : Ajuster un userform à la taille de l'écran

bonjour

lol!! de rien, je devrais passer plus souvent c'est vrai cela dit je travaille beaucoup sur un autre forum

mais je vous promet de vous faire plus de cadeau puisque ca vous plait
je suis en train justement de regrouper toutes ces petites astuces dans une seule classe afin d'en fair un complement
mais patience c'est du boulot et il faut avoir le temps
et puisque le sujet de l'userform resizable avec les controls redimentionnés avec est encore un sujet d'ecole
je vous donne ma toute derniere version
- plus de variable a mémoriser
- je n'utilise plus le getwindowlongA pour rapatrier les propriétés de la caption car j'utilise une variable long au formay (HEX) qui m'ajoute les propriétés voulues

je n'utilise plus "findwindow "histoire encore d'économiser une ligne de code lol!!!
ensuite toute les propriétés des controls sont inscrites dans leur tags respectifs(plus besoins de variables de type tableau

et dans le resize j'utilise le tag respectifs de chaque controls

enfin je vous laisse juger du minimum de code pour arriver au meme resultat avec mes anciens models
A!... j'oubliais voici les variables que l'on peu utiliser en fonction de la modification voulue des propriétés de la caption
maximiser_et_minimiser =&H94CB0080
maximiser_et_minimiser_elastic =&H94CF0080
maximiser =&H94C90080
minimiser =&H94CA0080
maximiser_et_elastic = &H94CD0080
élastic =&H94CC0080
Sans_bouton_elastic =&H94C40080
Sans_bouton_pas_elastic =&H94C00080
Sans_Caption_elastic =&H940C0080
Sans_Caption =&H94080080
minimiser_et_elastic =&H94CE0080
voila voila
au plaisir
 

Pièces jointes

  • userform resizable new version .xls
    49 KB · Affichages: 1 439
Dernière édition:

theconquer

XLDnaute Nouveau
Re : Ajuster un userform à la taille de l'écran

Bonjour a tous

Je me permet de relancer le sujet qui correspond exactement a ce que je recherche :D seulement je n'arrive pas a adapter le code au miens je ne vois pas d'ou peu venir le problème.
j'avais déjà bidouiller un truc pour minimiser/maximiser c'est le redimensionnement des Control qui me pose problème je joins mon fichier si quelqu'un suit encore ce sujet et qu'il a une idée,ça m’intéresse !!!

A plus et merci a ceux qui prendrons un peut de leur temps pour me filer un coup de main
 

Pièces jointes

  • DET 2014 NG .xlsm
    78.8 KB · Affichages: 426

mohsin.stat

XLDnaute Nouveau
Re : Ajuster un userform à la taille de l'écran

re bonjour tous. j'ai rationnalisée le code... Laura na pas forcement l'utilité de réduire & d'agrandir l'user seulement en plein écran
Bonjour à toutes et à tous,

Merci laetitia90 pour votre collaboration !

Je voudrais juste dire que le programme marche très bien sauf qu'avec le Height d'un contrôle "ListBox" qui ne se redimensionne pas !!! comme observé sur le fichier ci-joint.
Pourquoi ne marche pas avec les "ListBox" , est ce qu'il y a une solution à ce problème?

Merci d'avance !
 

Pièces jointes

  • patrick resize screen 3.xls
    40 KB · Affichages: 85

GClaire

XLDnaute Occasionnel
Supporter XLD
Hello le forum, Laeticia90, Patrick, Victor, mohsin.stat, Theconquer, JeanPierre, Ratatouille, Misslaure

Désolé de immiscer dans ce post.

Je suis tombé sur ce post en cherchant cette même solution.

J'ai pu adapter, mais un truc persiste.

J'ai mes controls qui sont dans des Frame, forcément cela bloque a ce niveau, d’autant plus que certaines se changent de taillent.

Mais pas tous, juste 1 seul a priori, celui dont la taille change.

Que faudrait il que je rajoute pour que cela fonctionne?

Je vous remercie par avance.

G'Claire
 

patricktoulon

XLDnaute Barbatruc
re
non laisse tomber c'est même pas l'exemplaire original de mon ancienne méthode
un exemplaire plus frais avec methode plus simple

voila le methode simple décanté sous 3 sous versions code intra ou extra userform + un model sans api
voila
demo4.gif
 

Pièces jointes

  • userform control redimentionnés methode ultra simple2019 .xlsm
    49.1 KB · Affichages: 198

Discussions similaires

  • Résolu(e)
Microsoft 365 Taille UserForm
Réponses
3
Affichages
327

Statistiques des forums

Discussions
312 099
Messages
2 085 282
Membres
102 848
dernier inscrit
boum