Bonjour le forum . bonjour a tous.
j'ai le code que j'ai pris dans ce forum. malheureusement, il agrandit tout. mais, les listbox restent identiques. que faire
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 * Application.Min(ratioH, ratioW)
End Select
Next
Le code vient d'ici sans aucune note de création sinon je t'aurais cité comme je l’ai fait sur des précédents postes.
Je l'ai repris et essayé avec un listbox puis j'ai posté ici que la partie qui correspondait à la demande de l'utilisateur.
Bonjour à tous
mon intervention dans cette discussion se limitera à rappeler avec insistance qu'il est hasardeux de traiter des éléments graphiques (ce que sont les contrôles activex) dans une procédure évènementielle (initialize) déclenchée alors que le chargement de tous les éléments est encore en cours.
Utilisez l'évènement Activate
(sans préjudice du reste du code, que je n'ai pas regardé, ni de la "justesse" même de la démarche, qui aboutira forcément (si écrans de proportions différentes) non à une homothétie, mais à une distorsion).
@MAN : PatrickToulon (que je remercie) avait attiré mon attention sur un point essentiel, à savoir certains contrôles n'avaient pas de propriétés Font. Et m'avait proposé un code, cependant j'avais bricolé le mien entretemps. Je préfère le sien mais il doit être utiliser dans Activate en non initialize.
si cela sous-entend lors de l'évènement initialize : réponse/exemple dans une discussion relativement récente (avec un contrôle affiché carrément en dehors de l'userform ! )
Bonjour PatrickToulon, pourrais-tu éclairer ma lanterne? Quelle différence y a-t-il, plus que l'application s'affiche à la dimension de l'écran? Merci.
si cela sous-entend lors de l'évènement initialize : réponse/exemple dans une discussion relativement récente (avec un contrôle affiché carrément en dehors de l'userform ! )
Bonjour PatrickToulon, pourrais-tu éclairer ma lanterne? Quelle différence y a-t-il, plus que l'application s'affiche à la dimension de l'écran? Merci.
ben la difference elle est simple
a quel moment dans ton code tu vérifie que l'app excel est en plein ecra et a quel moment tu la met en plein ecran
jamais donc si ton app excel est en mode fenêtre ben tu n'aura pas ton userform plein ecran
ton code
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
mon code
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
c'est donc si obscure que cela ???
et je dirais même que dans cet exemple il manque quelque chose (je parle du mien bien sur) le tiens n’étant absolument pas efficient dans le sens ou comme il n'y a pas de surveillance app il est donc nul et non avenu dans un contexte de full screen
je te laisse un moment pour deviner ce qui manque
je l'ai déjà donné dans une autre discussion
pour répondre a jmfmarques
si on peut le faire dans le initialyse
on le fait bien en mode edition avant pourquoi ne pourrait on pas le faire
je te fait un exemple avec les defauts pour le tiens et ce qui manque au mien puis un avec la correction je reviens tout a l'heure et j'explique
maintenant démo
cp4 --> has a problem' ne fait pas le job an d font size no correct
patricktoulon1 --> has a problem' with font size no correct
patricktoulon2 --> has not a problem'
et que je n'ai pas a revenir sinon je vais commencer la distribution des heures de colle
ben la difference elle est simple
a quel moment dans ton code tu vérifie que l'app excel est en plein ecra et a quel moment tu la met en plein ecran
jamais donc si ton app excel est en mode fenêtre ben tu n'aura pas ton userform plein ecran
ton code
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
mon code
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
c'est donc si obscure que cela ???
et je dirais même que dans cet exemple il manque quelque chose (je parle du mien bien sur) le tiens n’étant absolument pas efficient dans le sens ou comme il n'y a pas de surveillance app il est donc nul et non avenu dans un contexte de full screen
je te laisse un moment pour deviner ce qui manque
je l'ai déjà donné dans une autre discussion
pour répondre a jmfmarques
si on peut le faire dans le initialyse
on le fait bien en mode edition avant pourquoi ne pourrait on pas le faire
je te fait un exemple avec les defauts pour le tiens et ce qui manque au mien puis un avec la correction je reviens tout a l'heure et j'explique
Magistrale démonstration. N'ayant pas ton niveau, dans ma petite tête, étant donné que généralement on travaille sur Excel en plein écran (non en mode fenêtre), mon code (qui n'est pas exactement le mien, sauf la fin du code) répondait bien à mon attente --> avoir userform qui occupe tout l'espace de l'application d'où implicitement tout l'écran (illusion d'optique).
J'ai bien dis que je préférais le tien au moins. Tu me poses une colle à laquelle je crois ne pas avoir les bagages requis pour y répondre (ce qui manque à ton code). Je donne ma langue au chat.
J'insiste et n'insisterai jamais assez en ce qui concerne cet aspect.
NON
et ce n'est pas le fait que cela "puisse" passer de temps à autre qui en changera le fondement.
Ne JAMAIS traiter les éléments graphiques contenus dans un userform lors de l'évènement initialize.
Ne pas observer cette discipline, c'est jouer à la roulette russe.
Ceci étant dit : d'aucuns pourraient aimer le jeu de la roulette russe et les risques induits. Libre à eux de le faire.
J'invite les plus sages à ne jamais jouer à ce jeu-là.
re
ce qui manque je l'ai mis dans patricktoulon2
et encore ca n'est pas complètement sécurisé
je cherche depuis des années a créer un code qui ne soit pas une usine a gaz je n'ai toujours pas réussi a faire quelque chose d'absolu
il faudrait que je m'y remette