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
 

patricktoulon

XLDnaute Barbatruc
bonjour cp4
et si l'app n'est pas maximisée ou ne doit pas l’être ben t es chocolat
et le must c'est cette ligne
ctl.Font.Size = ctl.Font.Size * ratioH
et tu fait quoi quand certains controls n'ont pas cette propriété du genre une scrollbars ou un spinbutton ou image et bien d'autres encore hein tu fait quoi ????


j'utilise ce code depuis un bout de temps
ben depuis un bout de temps tu fait une connerie :p :p :p

re
Ah ben celle là pour le coup je l'ai pas vu tout de suite
ratioW As String, ratioH As String

tu peux définitivement me jeter ca a la poubelle
 
Dernière édition:

cp4

XLDnaute Barbatruc
bonjour cp4
et si l'app n'est pas maximisée ou ne doit pas l’être ben t es chocolat
et le must c'est cette ligne
ctl.Font.Size = ctl.Font.Size * ratioH
et tu fait quoi quand certains controls n'ont pas cette propriété du genre une scrollbars ou un spinbutton et bien d'autres encore hein tu fait quoi ????



ben depuis un bout de temps tu fait une connerie :p :p :p
Re Patrick:),

J'ai bien dit que j'utilise le code. Je n'ai pas dit que j'en étais l'auteur. Vu, mon niveau basique:oops:, disons initié, je ne suis pas en mesure de te donner une réponse. J'ai compris que le Font.Size concerne la taille de la police.

J'ai ouvert ton fichier du post#22, pas de chance tu utilises une Listview qui ne passe pas chez moi.
Bien que pour mscomctl et mscomct2 l'enregistrement a réussi. La listview présente est dans la boite à outil mais impossible de l'insérer dans un formulaire. message d'erreur "classefactory ne peut pas fournir la class demandée".

J'ai eu beaucoup de soucis avec ces activex, alors je ne les utilise plus, je me contente de la listbox.

A+
 

patricktoulon

XLDnaute Barbatruc
tient fait moi plaisir jette ton truc et prends ceci
VB:
Private Sub UserForm_Initialize()
    Dim ctl As Control, ratioW#, ratioH#, wstate&
    With Application: wstate = .WindowState: .WindowState = xlMaximized:
        ratioW = Application.Width / Me.Width
        ratioH = Application.Height / Me.Height
        .WindowState = wstate
    End With
    With Me
        .StartUpPosition = 0: .Left = 0: .Top = 0
        .Width = (.Width * ratioW) - (.Width - .InsideWidth)
        .Height = (.Height * ratioH) - (.Height - .InsideHeight) + (.Width - .InsideWidth)
    End With
    For Each ctl In Me.Controls
        ctl.Move ctl.Left * ratioW, ctl.Top * ratioH, ctl.Width * ratioW, ctl.Height * ratioH
        Select Case TypeName(ctl)
        Case "TextBox", "Label", "Frame", "CommandButton", "MultiPage", "ListBox", "ComboBox", "CheckBox", "OptionButton"
            ctl.Font.Size = ctl.Font.Size * ratioH
        End Select
    Next

End Sub
bien que pour le font je ferais plutot ceci
ctl.Font.Size = ctl.Font.Size * Application.Min(ratioH, ratioW)
 

cp4

XLDnaute Barbatruc
@patricktoulon
Trop gentil de ta part. Je ne suis pas resté les bras croisés. J'ai fait ceci et ça a l'air de fonctionner.
VB:
Private Sub UserForm_Activate()
   Dim ctl As Control, ratioW As String, ratioH As String
   ratioW = Application.Width / Me.Width
   ratioH = Application.Height / Me.Height
   Me.Left = 0
   Me.Top = 0
   Me.Width = Application.Width
   Me.Height = Application.Height
   For Each ctl In Me.Controls
      ctl.Left = ctl.Left * ratioW
      ctl.Top = ctl.Top * ratioH
      ctl.Width = ctl.Width * ratioW
      ctl.Height = ctl.Height * ratioH
      If TypeOf ctl Is MSForms.ScrollBar Then GoTo suite
      If TypeOf ctl Is MSForms.SpinButton Then GoTo suite
      If TypeOf ctl Is MSForms.Image Then GoTo suite
      ctl.Font.Size = ctl.Font.Size * ratioH
suite:
   Next
End Sub
Merci beaucoup pour ton code que je vais mettre de suite dans mes archives.

Bonne soirée.
 
Dernière édition:

cp4

XLDnaute Barbatruc
re
cp4
Dim ctl As Control, ratioW As double, ratioH As double

et il n'y a pas que ces 3 qui n'ont pas de font

relis bien le mien et pose toi les bonnes questions
Ok, merci pour l'info. J'ai mis dans mon userform les quelques contrôles de ma boite à outils et effectuer des tests, d'où le complément de code. J'approfondirai plus tard car je suis un peu pris sur autre chose en ce moment.

Un grand merci pour ton partage.
 

cp4

XLDnaute Barbatruc
voila
teste les deux userforms
Bonjour Patrick;),

Merci beaucoup, ça va me permettre de m'améliorer. J'avoue que n'étant pas un As du codage je me contentais d'utiliser les codes proposés. J'ai commencé à mieux comprendre les codes mais sans y déceler les éventuelles erreurs.

Encore merci pour ta gentillesse et ton partage.

Bonne journée.

edit: ce que je comprends moins, c'est pourquoi le code que j'ai proposé fonctionne bien (s'il n'y a pas de contrôles n'ayant pas de propriétés 'Font'). Alors qu'il y a une erreur dans la déclaration des variables (String au lieu de Double). Comme tu me l'as souligné au post#36.
 
Dernière édition:

marg55

XLDnaute Nouveau
Bonjour @patricktoulon,

J'essaie tans bien que mal d'adapter votre programme à un programme personnel très complexe que je n'ai pas le droit de partager. J'e réussis parfaitement à utiliser le votre mais chez moi, ca coince au niveau de maForm_Resize. Le logiciel me demandait d'abord de déclarer Ctl et ppe (ce qu'ils ne demande pas dans l'autre ? 🤔 ) et lorsque je déclare ppe (de quelque manière que ce soit) il m'indique qu'au niveau du split il y a une incompatibilité de type...Je ne suis pas sure de bien comprendre d'où vient le problème! Sauriez vous m'aider ? J'ai vu que GClaire avait eu le même type de soucis mais je ne comprend pas la solution !
J'utilise cette version de maForm_Resize :

Sub maForm_Resize(Initialisation As UserForm)
Dim multi, newhauteur As Single, newlargeur As Single
'ici on détermine le multiplicateur qui differencie la dimension de base à celle actuelle de l'userform
newlargeur = Initialisation.InsideWidth / old_largeur: newhauteur = Initialisation.InsideHeight / old_hauteur
'ici on boucle sur tous les controls
Dim Ctl As Control
For Each Ctl In Initialisation.Controls
Dim ppe() As Single
ppe = Split(Ctl.Tag, ";") 'on coupe le tag par les ";"
'et on applique le multiplicateur au controls pour la largeur et la hauteur en une seule ligne
Ctl.Move ppe(0) * newlargeur, ppe(1) * newhauteur, ppe(2) * newlargeur, ppe(3) * newhauteur
'l'element(4) de ppe contient le font size du controls
multi = Application.Min(newhauteur, newlargeur) 'on recupere le plus petit multiplicateur par rapport au height ou width
If UBound(ppe) = 4 Then Ctl.Font.Size = Round(ppe(4) * multi)
Next
End Sub
 

marg55

XLDnaute Nouveau
J'ai finalement réussis à adapter le code, mais je crée dynamiquement des controles au fur et à mesure de mon programme... Vous sauriez ou le placer pour qu'il continue de prendre en compte les nouveaux controles qui apparaissent ?
 

Discussions similaires

Réponses
3
Affichages
204
Réponses
4
Affichages
468

Statistiques des forums

Discussions
315 134
Messages
2 116 613
Membres
112 811
dernier inscrit
shade1452