Microsoft 365 UserForm maximiser la taille du formulaire par rapport à la taille de l'écran

Fab117

XLDnaute Impliqué
Hello,
Les dimensions de mon User form tel que je l'ai créé sont :
UserForm Size.png


Je voudrais maximiser sa taille lorsqu'il apparait à l'écran.
Google ne m'a pas permis de faire ça simplement => mon idée était :
1. Récupérer la dimension de l'écran utilisé (j'ai trouvé la function et le code VBA associé
VB:
Declare PtrSafe Function GetSystemMetrics32 Lib "User32" _
Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Sub ScreenResolution()
Dim wS As Long, hS As Long
    wS = GetSystemMetrics32(0) ' width in points
    hS = GetSystemMetrics32(1) ' height in points
    MsgBox ("hauteur : " & hS & Chr$(10) & "largeur : " & wS)
End Sub
2. Via un "If", maximiser le coté (haiuteur ou largeur) non limitant
Code:
' Dimensions du UserForm
If wS / hS > 1.291139 Then ' Cas où la limitation du formulaire sera sur sa hauteur
    Me.Height = hS
    Me.Width = hS * 1.291139
Else ' Cas où la limitation du formulaire sera sur sa largeur
    Me.Width = wS
    Me.Height = wS / 1.291139
End If

Problème, lorsque je mets la déclaration de la fonction dans le code du UserForm :
Declaration fonction.png


il n'accepte pas :
Error message.png


Quelqu'un saurait-il comment résoudre ce problème ?

Merci par avance et excellente soirée.

Fab
 

TooFatBoy

XLDnaute Barbatruc
Je comprends que l'utilisation du mode étendu n'est pas adapté à ce code et qu'il serait très compliqué d'obtenir une solution satisfaisante => pas de problème, l'utilisation du fichier se fera en mode Clone.
En fait, je pense que ce n'est pas tellement étendu ou clone le problème. C'est plus de savoir si les deux diffuseurs sont configurés avec la même définition. 😉

Peut-être que sur le forum, dans la partie ressources, tu peux trouver quelque chose qui pourra t'aider, car il me semble que Dudu2 avait bossé là-dessus et réussi à résoudre le problème.
 

patricktoulon

XLDnaute Barbatruc
re
c'est pareil pour tester ça il faut une usine a gaz avec getmonitorfrompoint etc...., qui se déclare vraiment différemment en 32 et 64
une vrai torture entre le longlong et le pointapi
oublie ça ce sera jamais stable

en mode clone y a plus simple
tu move le userform de la largeur de l'ecran 1 (converti en point bien sur) et tu fait un showWindow(handleuserform,3) et encore je ne suis pas sur que le userform ne revienne pas en plein écran dans l’écran 1
 

Modeste geedee

XLDnaute Barbatruc
pour tester ça il faut une usine a gaz avec getmonitorfrompoint etc...., qui se déclare vraiment différemment en 32 et 64
une vrai torture entre le longlong et le pointapi
oublie ça ce sera jamais stable
Bonsour®
nul besoin d'usine à gaz, ni d'api qui ne sont pas accessibles sur "MAC"

ce simple code :
VB:
Private Sub SpinButton1_Change()
'-------------(propriétés spinbutton min: 25 max: 100)
ratio = 50 + SpinButton1.Value
Me.Zoom = ratio
Me.Top = 40
Me.Left = 40
Me.Width = 800 * ratio / 100
Me.Height = 450 * ratio / 100
Lbl_zoom.Caption = ratio & " %"
Lbl_Zval.Caption = (ratio - 100) & " %"
End Sub
1683764352200.png


1683764405588.png
 

Pièces jointes

  • Zoom_Userform.xlsm
    18.8 KB · Affichages: 11

patricktoulon

XLDnaute Barbatruc
re
bonjour @Modeste geedee
oui dans un monde parfait
en ayant un userform avec un ratio identique à l’écran( chez moi (16/10)sur écran TV)
cela dit ça me donne une idée alternative pour un resize ;)
mais ça résout pas le problème de @Fab117 qui est une résolution différente de son 2d écran

edit :
sinon c'est sur que dans un monde parfait
VB:
Private Sub UserForm_Activate()
    Dim OldW#, OldH#, HwnD&, Ratio#
    With Me
        OldW = .Width
        
        OldH = .Height

        'Api GetActiveWindow
        HwnD = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")         'handle fenetre active

        'Api Showindow
        ExecuteExcel4Macro ("CALL(""user32"",""ShowWindow"",""JJJ"",""" & HwnD & """,""" & 3 & """)")    'l'argument"3"=plein ecran"

        Ratio = Application.Min(.Height / OldH, 4, .Width / OldW)
        
        .Zoom = (Ratio * 100)

    End With
End Sub
 
Dernière édition:

Fab117

XLDnaute Impliqué
Merci à vous 3 pour votre aide.
Je ne compte pas me lancer dans une usine à gaz pour l'instant.
Je vais tenter le warning à l'ouverture du fichier et on verra.

Je comprends qu'en mode étendu (avec 2 résolutions différentes), le UserForm puisse être tronqué. Mais ce qui pour moi est très étrange est qu'à ce stade, si tu sauves le fichier et que tu le ré-ouvre en mode clone, tu restes tronqué => il faut impérativement retourner dans l'éditeur VBA, redimentionner à la main le UserForm
 

TooFatBoy

XLDnaute Barbatruc
en ayant un userform avec un ratio identique à l’écran( chez moi (16/10)sur écran TV)
Je ne crois pas qu'il existe de téléviseurs vendus actuellement ayant une dalle en 16/10 (ou peut-être dans les références de très petite taille et les plus bas de gamme qui ont parfois des définitions farfelues).

À ma connaissance, c'est soit 16/9, soit 21/9.
Du coup, est-ce que ça veut dire que tu n'utilises pas la définition native de ton téléviseur et que tu es en mode clone de ton PC portable qui, lui, aurait un écran 16/10 ?
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
ma tv est une hisence hd 4 k 107
elle est bien en 16/10 c'est la résolution qui est calculée en 16/9 j'ai un switch dans le menu pour ça
le vendeur à l’époque (pas si lointaine)m'avais expliqué ça d'une manière peu convaincante je dirais
justement par ce que je n'arrivais pas a mettre le bureau sur tout l’écran
mais en touchant tout les menu j'avais fini par trouver
 

TooFatBoy

XLDnaute Barbatruc
elle est bien en 16/10 c'est la résolution qui est calculée en 16/9 j'ai un switch dans le menu pour ça
le vendeur à l’époque (pas si lointaine)m'avais expliqué ça d'une manière peu convaincante je dirais
Ça ne m'étonne pas qu'il n'était pas très convaincant car c'est assez incroyable. 🙃 🤔

Du coup tu dois être en 3840x2400 je suppose.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 187
Messages
2 086 024
Membres
103 097
dernier inscrit
Benduch