Hello,
Juste une petite précision, par rapport au code de Petchy:
Me.Width = Application.Width...
Cela ne suffit pas pour être en plein écran. La preuve, Petchy, si tu dimensionnes ta fenêtre excel pour qu'elle ne soit pas de la taille de l'écran complet, alors ton Usf aussi n'aura pas la taille de l'écran complet.
Bon, cela n'amène pas grand chose de plus, c'était juste dans un souci de précision.
Maintenant, comme dit Thierry, pour centrer, en jouant sur les left et top, c'est assez fastidieux.
Alors voici un code qui va centrer l'ensemble des contrôles indépendemment de leur nombre et de leurs positions respective. (je n'ai mis que le code pour centrer horizontalement, il faudra faire exactement pareil en vertical.)
Private Sub UserForm_Initialize()
Dim MinLeft As Double
Dim MaxRight As Double
Dim Contrôle As Control
Dim ContrôleMinLeft As Integer
Me.Width = Application.Width
MinLeft = Me.InsideWidth
MaxRight = 0
i = 1
For Each Contrôle In Me.Controls
MinLeft = Application.WorksheetFunction.Min(MinLeft, Contrôle.Left)
If MinLeft = Contrôle.Left Then ContrôleMinLeft = i
MaxRight = Application.WorksheetFunction.Max(MaxRight, Contrôle.Left + Contrôle.Width)
i = i + 1
Next Contrôle
For Each Contrôle In Me.Controls
Contrôle.Left = Contrôle.Left + (Me.InsideWidth - (MaxRight - MinLeft)) / 2 - Me.Controls(ContrôleMinLeft).Left
Next Contrôle
End Sub
Je pense que ça marche à tous les coups.
Le principe: je recherche la position la plus à droite et celle la plus à gauche. La différence des 2 me donne la "largeur de la zone utile", c'est à dire la largeur de la zone comprenant TOUS les contrôles.
Ensuite, cette zone sera centrée, donc on déplace chaque contrôle vers la droite de la même distance que celui qui est le plus à gauche.
Bon, je suis pas sûr d'être très explicite, mais je crois que ça fonctionne.
Bonne soirée.
Laurent.
Voilà