XL 2016 Adapter USF à la résolution d'écran

lolobo

XLDnaute Nouveau
Bonjour à tous,

je me suis inspiré d'un post ancien pour adapter mon application aux différentes résolutions d'écran des utilisateurs de mon application.
Tout se passe bien pour l'USF initial, toutefois je rencontre plusieurs difficultés.

- Lors de la création dynamique d'un contrôle, l'application du facteur de Zoom n'est pas totalement satisfaisante
- Par ailleurs, je dois faire précéder l'appel à ce facteur d'un MsgBox pour obtenir un affichage approximatif
- Enfin, la sortie de l'application par le bouton Quitter implique de le cliquer deux fois

Dans l'exemple joint, je place en création un ListBox sur la form avec les références suivantes : H120, L258, T48,W246.
Un clic sur le bouton 'Création ListBox dynamique' créé un nouveau contrôle au même emplacement que le précédent mais d'une couleur différente pour le distinguer.

Je ne suis pas un spécialiste du VBA, (plutôt orienté C++) et votre aide serait la bienvenue.
 

Fichiers joints

Roland_M

XLDnaute Barbatruc
bonjour,

essayer comme ceci, beaucoup plus simple ! dans ce Sub (mais je n'ai pas essayé ton classeur !?)
Private Sub Userform_Initialize()
ComboBox1.AddItem ""
ComboBox1.AddItem "M."
ComboBox1.AddItem "Mme"
ComboBox1.AddItem "Mlle"
'ZoomEcran ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

'rajout Roland '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
With Application
.WindowState = xlMaximized
Me.Zoom = 100 * IIf(.Width / Me.Width <= .Height / Me.Height, .Width / Me.Width, .Height / Me.Height)
Me.Height = .Height - 18: Me.Width = .Width - 18
Me.StartUpPosition = 0: Me.Top = 1: Me.Left = 1
End With

End Sub

EDIT: j'ai fais un peu vite !
concernant l'emplacement du nouveau contrôle il faudrait déjà préparer la place nécessaire !
placer ceux déjà présents de manière plus judicieuses !
 

lolobo

XLDnaute Nouveau
Bonjour Roland_M, merci pour ce retour rapide.

Je ne vois pas ou placer ce rajout.

Le ListBox créé dynamiquement devrait se superposer à celui déjà existant sur la Form sans qu'il soit nécessaire de lui laisser préalablement de la place. Avez-vous testé mon exemple joint qui décrit parfaitement le problème que je rencontre ?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Avant de répondre à une autre discussion j'avais aussi commencé à tester des bout de codes mais seulement dans l'UserForm.
Alors je les indique :
VB:
Option Explicit
Private EchX As Double, EchY As Double
Private Sub UserForm_Initialize()
   Dim Ctl As MSForms.Control
   EchX = Me.InsideWidth: EchY = Me.InsideHeight
   Me.Width = Application.Width - 12: Me.Height = Application.Height - 12
   EchX = Me.InsideWidth / EchX: EchY = Me.InsideHeight / EchY
   For Each Ctl In Me.Controls
      Ctl.Left = Ctl.Left * EchX: Ctl.Width = Ctl.Width * EchX
      Ctl.Top = Ctl.Top * EchY: Ctl.Height = Ctl.Height * EchY
      Ctl.Font.Size = Ctl.Font.Size * EchY
      Next Ctl
   ComboBox1.List = Array("", "M.", "Mme", "Mlle")
   End Sub
Private Sub ListBoxDyn_Click()
'création dynamique d'un ListBox
   Dim MylistBox As MSForms.ListBox
   Set MylistBox = Controls.Add("Forms.ListBox.1")
   With MylistBox
      .Left = 102 * EchX
      .Top = 36 * EchX
      .Height = 120 * EchY
      .Width = 246 * EchX
      .Name = "maboite"
      .BackColor = &H8080FF
      .AddItem ("eee")
           'mis on omet ce MsgBox, le ListBox dynamique n'est pas rdimensionné
   '        MsgBox "Si on met ce Msgbox en commentaire, le redimensionnement du listbox ne se fait pas"
           Label1.Caption = "Le redimensionnement du Listbox a lieu mais pas au bon endroit"
      End With
   End Sub
'Private Sub Quitter_Click()
'    Me.Hide
'    Label1.Caption = "Il faut cliquer deux fois le bouton 'Quitter' pour sortir"
'  End Sub
'Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'    If CloseMode = vbFormControlMenu Then Cancel = True
'   End Sub
Remarque: fenêtre de propriétés UserForm1: StartUpPosition: 0 - Manuel, Left: 0, Top: 0.
 

lolobo

XLDnaute Nouveau
Bonjour Dranreb.
Merci de vous intéresser à mon sujet.

Si j'utilise votre code, êtes-vous d'accord avec le fait que le ListBox dynamique devrait se superposer au ListBox déjà présent sur la Form ?
Ci-jointes les captures d'écran Avant et Après le clic du bouton Création ListBox Dynamique.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Avec mon code c'est à peu près le cas, chez moi, mais pas parfaitement (verticalement, lélèrement trop bas.).

Édition: Et en plus je viens de trouver pourquoi: j'avais mis .Top = 36 * EchX au lieu de .Top = 36 * EchY. Maintenant c'est pile-poil.
 
Dernière édition:

lolobo

XLDnaute Nouveau
Cette fois c'est parfait.
Cependant, le texte du ListBox dynamique n'est pas redimensionné !
Que manque-t-il ?
 

Roland_M

XLDnaute Barbatruc
re

sauf erreur, ici, dans le code Dranreb
.Name = "maboite"
.BackColor = &H8080FF
.AddItem ("eee")
.Font.Size = .Font.Size * EchY ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 

Discussions similaires


Haut Bas