Grandeur UserForm

Résolu/Fermé
Philou73.CH - 14 sept. 2014 à 23:20
 Philou73.ch - 3 mars 2015 à 09:56
Bonjour à vous toutes et tous,

Mon problème est le suivant. J'ai dans une UserForm, une liste déroulante à 3 colonnes. Cette liste est donc assez large. Je l'ai créé depuis un écran large.
Mais comme ce programme est utilisable depuis plusieurs postes et que tous les écrans ne sont pas identiques, j'ai sur certain d'entre eux, une liste qui n'est pas utilisable, puisque pas complète.
Pouvez-vous me dire, dans propriété, si il existe une fonction qui met la grandeur de l'userForm en fonction de la taille de l'écran.

Merci à vous.
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
15 sept. 2014 à 08:43
Bonjour,

Tu as la possibilité de dimensionner ton UserForm en plein écran.
Une seconde solution est de le dimensionner en utilisant certaines constantes (largeur et hauteur d'écran), solution plus délicate et plus compliquée à mettre en place.
A voir ce que tu préfères.
0
Bonjour pijaku,
Merci pour avoir pris du temps de me lire et de me répondre.
Peux-tu me dire si c'est au niveau des paramètres de l'userform que cela se décide et si oui, sous quelle instructions( paramètres) je dois jouer. Car à part prendre les uns après les autres les différents paramètres possibles, je n'ai aucune idée ou je dois travailler.
Merci à toi,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
Modifié par pijaku le 15/09/2014 à 16:35
En fait, pour agrandir ou diminuer la taille d'un UserForm, il faut "jouer" avec ses propriétés Width et Height.

Pour mettre un UserForm en "plein écran", il te faut deux choses :
1- mettre l'application (ici Excel) en format Plein écran
2- compléter les propriétés Width et Height de ton UserForm en leur donnant les valeus de largeur et de hauteur de l'application.
En code, à l'initialisation de l'UserForm, cela donne ceci :

Private Sub UserForm_Initialize()
Application.WindowState = xlMaximized
UserForm1.Width = Application.Width
UserForm1.Height = Application.Height
End Sub 


Et voici un exemple de dimensionnement en fonction de la résolution d'écran.
Ce code est d'UcFoutu, collègue de chez CodeS-Sources :

Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Const HWND_DESKTOP As Long = 0
Private Const LOGPIXELSX As Long = 88
Private Const LOGPIXELSY As Long = 90

'*************** A ADAPTER ********************
Const RH  As Integer = 1680 '====>> La résolution horizontale du pc de création
Const RV As Integer = 1050 '====>> La résolution verticale du pc de création
'************************************************
Private Sub UserForm_Initialize()
  Dim hwnd As Long, Style As Long, larg As Single, X As Integer, Y As Integer
  Dim coefx As Single, coefy As Single
  Dim lngDC As Long, tppx As Integer, tppy As Integer
  lngDC = GetDC(HWND_DESKTOP) ' ton écran
  tppx = 1440& / GetDeviceCaps(lngDC, LOGPIXELSX) ' nombre de twips par pixel horizontalement
  tppy = 1440& / GetDeviceCaps(lngDC, LOGPIXELSY) ' nombre de twips par pixel verticalement
  ReleaseDC HWND_DESKTOP, lngDC ' on libère la mémoire
  coefx = GetSystemMetrics(0) / RH
  coefy = GetSystemMetrics(1) / RV
  coef = IIf(coefx >= coefy, coefx, coefy)
  If coef < 0.96 Then
    coef = coef * (GetSystemMetrics(1) / (GetSystemMetrics(0)) * (RH / RV) * 0.8)
  End If
  Me.Width = Me.Width * coef
  Me.Height = Me.Height * coef
  Me.Left = (GetSystemMetrics(0) / (20 / tppx) - Me.Width) / 2
  Me.Top = (GetSystemMetrics(1) / (20 / tppy) - Me.Height) / 2
End Sub


Cordialement,
Franck
0
pijaku,

Dans un premier temps, je te suis sincérement reconnaissant pour ce que tu as mis ci-dessus.
Car les infos tu m'en as donnés.
Et en faire plus, c'est faire ma macro :-)
Donc merci à toi, je ne marque pas encore cette question comme résolut, car je veux prendre connaissance correctement de ce que tu as pris la peine de me donner. Une fois cela fait, c'est avec grand plaisir que je ferai le nécessaire pour clore cette question.
Un grand merci à toi pijaku
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
16 sept. 2014 à 08:34
Salut,

Pas de souci.
Prend ton temps.
Juste pour ton information, dans le second exemple, la première partie du code sert à calculer le coefficient par lequel multiplier la largeur et la hauteur de ton Userform, mais également de tous tes contrôles. Attention également de penser à régler, pour chacun des contrôles, les propriétés Left et Top. En cas de souci, demande...

Private Sub UserForm_Initialize()
  Dim hwnd As Long, Style As Long, larg As Single, X As Integer, Y As Integer
  Dim coefx As Single, coefy As Single
  Dim lngDC As Long, tppx As Integer, tppy As Integer
'************ CALCUL DU COEFFICIENT
  lngDC = GetDC(HWND_DESKTOP) ' ton écran
  tppx = 1440& / GetDeviceCaps(lngDC, LOGPIXELSX) ' nombre de twips par pixel horizontalement
  tppy = 1440& / GetDeviceCaps(lngDC, LOGPIXELSY) ' nombre de twips par pixel verticalement
  ReleaseDC HWND_DESKTOP, lngDC ' on libère la mémoire
  coefx = GetSystemMetrics(0) / RH
  coefy = GetSystemMetrics(1) / RV
  coef = IIf(coefx >= coefy, coefx, coefy)
  If coef < 0.96 Then
    coef = coef * (GetSystemMetrics(1) / (GetSystemMetrics(0)) * (RH / RV) * 0.8)
  End If

'************* REGLAGE DES PROPRIETES Width et Height en fonction du coeff
  Me.Width = Me.Width * coef
  Me.Height = Me.Height * coef
  Me.Left = (GetSystemMetrics(0) / (20 / tppx) - Me.Width) / 2
  Me.Top = (GetSystemMetrics(1) / (20 / tppy) - Me.Height) / 2
End Sub
0
Bonjour pijaku,

Le projet dans lequel j'avais besoin de ces informations a passé à la trappe.
Je te remercie pour ce que tu m'as expliqué et du temps que tu as consacré à m'expliquer tout cela.
Avec mes meilleures salutations.
0