XL 2016 Dézoomer un USF

dodineau

XLDnaute Occasionnel
Bonjour à toutes et tous,
J'utilise un USF dans mon classeur mais comme il peut être ouvert sur plusieurs PC mon problème est que suivant la taille de l'écran le USF ne s'affiche pas en entier.
Est-il possible de zoomer ou dézoomer un USF ?
Existe-t-il une commande VBA pour qu'à son ouverture il puisse s'ajuster à la taille de l'écran du PC qui l'ouvrira ?
Merci pour votre aide.
A+
 

youky(BJ)

XLDnaute Barbatruc
Bonjour Dodineau
Voici un bout de code à mettre en initialize de l'user
Bruno
VB:
Private Sub UserForm_Initialize()
Dim ctl As Control
Dim ratow As String
Dim ratioh As String
On Error Resume Next
ratiow = Application.Width / Me.Width
ratioh = Application.Height / Me.Height
Me.Left = -6
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
  ctl.FontSize = ctl.Font.Size * ratioh
Next
End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonsoir @Dudu2 oui sur l'original il sont en double et long pour certains
et en fait il en manque une partie qui maximize et remet l'app à l’État initial
y compris aussi dans la dernière version la prise en charge complète des listbox
columnwidths,etc.....
je l'ai pourtant donné bon nombre de fois mais c'est toujours cette vielle version qui date un peu maintenant qui tourne
 

patricktoulon

XLDnaute Barbatruc
tiens je l'ai repêché dans une de mes app
VB:
'2016 PatrickToulon code proposé dans initialize
'Plein Ecran UserForm au démarrage

Private Sub UserForm_Initialize()


    Dim ctl As Control, ratioW#, ratioH#, wstate&, i&, ClW
   ' pour l'exemple j'ajoute une listbox avec 2 colonnes
    With ListBox1: .List = [A1:B5].Value: .ColumnCount = 2: .ColumnWidths = "10;60": End With
    
    With Application: wstate = .WindowState: .WindowState = xlMaximized:
        ratioW = Application.Width / Me.Width
        ratioH = Application.Height / Me.Height
    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 * Application.Min(ratioH, ratioW)
        End Select

        If TypeOf ctl Is msforms.ListBox Then
            If ctl.ColumnWidths = "" Then ClW = Split(Trim(Application.Rept(70 & " ", ctl.ColumnCount)), " ") Else ClW = Split(Replace(ctl.ColumnWidths, " pt", ""), ";")
            For i = 0 To UBound(ClW): ClW(i) = Val(ClW(i)) * ratioW: Next
            ctl.ColumnWidths = Join(ClW, ";")
            MsgBox ctl.ColumnWidths
        End If
    Next
    Application.WindowState = wstate
End Sub
 

youky(BJ)

XLDnaute Barbatruc
Bonjour Patrick et Dudu,
Patrick comme tu vois j'ai appréciè ton code qui remonte puique je le remets mais malgrès tout
Je reste convaincu que le zoom reste la meilleur solution pour que l'écran reste fidèle.
Donc ici sur ce fichier je test le ratio le plus petit entre le ratio hauteur et largeur.
Je zoom en fonction du plus petit et ensuite je mets l'user en plein écran
Bien sur il va parfois rester du vide en bas ou à droite mais c'est pour la bonne cause.
voici 2 fichiers avec 2 user différents
Bruno
 

Pièces jointes

  • userPleinEcran.xlsm
    69.4 KB · Affichages: 8
  • userPleinEcran2.xlsm
    69.6 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
Bonjour @youky(BJ)
je regarde tes deux fichiers tout de suite
mais regarde la last version que j'ai mis en post #6

a vrai dire que fait le zoom dans un userform
1] il faut savoir que la limite est 400
2] en fait il fait peut etre plus complètement que ma macro mais il fait pareil que ma dernière avec application.min , il zoom mais il arrange le font size
mais avec mon zoom les bordures de controls elles ne changent pas

bon je regarde tes deux fichiers et je te dis
 

patricktoulon

XLDnaute Barbatruc
re bon deja pour ton premier
ca zoom oui mais pas proportionnellement
en redimensionnant le userform autrement on s'en rend bien compte
et puis tu pars du principe que l'app est forcement maximisée c'est pas forcement le cas
regarde ton fichier 1
avant
1631992960606.png


après affichage on vois bien que les control ne prennent plus tout la largeur du userform
1631993067805.png


mais c'est une solution en effet
je regarde le 2d fichier maintenant
 

patricktoulon

XLDnaute Barbatruc
bon ben le 2d fichier démontre le problème que j'ai cité dans mon précédant message
j'avais fait une version pour un membre de DVP qui zoomait aussi par le plus petit coeef pour les taille mais zoomait les emplacement au prorata height et width
pour qu'il occupe au même prorata qu'avant l'agrandissement

je vais essayer de le retrouver
 

dodineau

XLDnaute Occasionnel
Bonjour et merci pour toutes ces propositions.
Le souci c'est que mon formulaire n'a pas une taille fixe au lancement.
Les contrôles ont des places et des nombres qui diffèrent en fonctions de données lues à l'ouverture du formulaire.
Donc moi j'aurai voulu qu'une fois le formulaire ouvert et tous les contrôles placés, il puisse être redimensionné automatiquement en fonction de l'écran.
Merci.
A+
 

patricktoulon

XLDnaute Barbatruc
Bonjour
il te faut alors utiliser ma méthode dans l'event "Resize" tu devrais la trouver facilement je l'ai donné plusieurs fois dans ce forum et même ailleurs
ceci me laisse dubitatif
VB:
Les contrôles ont des places et des nombres qui diffèrent en fonctions de données lues à l'ouverture du formulaire.
pourquoi tu ajoute dynamiquement des controls ??

bref il faudrait faire un peu plus d'effort dans la description dans la demande sinon on va patauger longtemps comme ça ;)
peut être avec un fichier en exemple anonymisé histoire que l'on ai pas a ce taper la construction d'un fichier modèle selon ton besoins
 

dodineau

XLDnaute Occasionnel
et même ailleurs
ceci me laisse dubitatif
VB:
Les contrôles ont des places et des nombres qui diffèrent en fonctions de données lues à l'ouverture du formulaire.
pourquoi tu ajoute dynamiquement des controls ??
Les contrôles sont ajoutés en fonction d'une liste qui peut varier de 0 à 60 éléments. Pour la lisibilité je ne peux pas faire un USF avec 60 contrôles en permanence.
Je vais rechercher ta solution.
Merci.
 

Discussions similaires

Réponses
11
Affichages
490

Statistiques des forums

Discussions
311 721
Messages
2 081 928
Membres
101 842
dernier inscrit
seb0390