Bonjour à tous,

Je crée actuellement un tableau de bord munit d'un userform qui fait office de page d'acceuil, et qui par le biais de boutons ouvre différents userform (7 au total).

Afin d'adapter l'outil aux différents utilisateurs, j'ai codé de telle sorte que l'userform principal s'adapte à la résolution de l'écran et que sa taille soit modifiable par action de la souris (comme une fenêtre classique).

Je voudrais faire de même pour les autres userform du programme, mais je ne voudrais pas avoir à copier coller 7 fois le code (imaginez la lourdeur).

Est-il possible de créer les procédures avec comme paramètre le userform ?

Un exemple concret :

Dans un module standard :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public largeurbouton(), hauteurbouton(), leftbouton(), topbouton() As String
Public w As Integer
Public ctrl As Control
Public largeure_usf, hauteure_usf As Long
Sub determine()
 
hauteure_usf = UserForm1.Height
largeure_usf = UserForm1.Width
w = 0
For Each ctrl In UserForm1.Controls
 w = w + 1
    ReDim Preserve largeurbouton(w)
    largeurbouton(w) = ctrl.Width
ReDim Preserve hauteurbouton(w)
    hauteurbouton(w) = ctrl.Height
ReDim Preserve topbouton(w)
    topbouton(w) = ctrl.Top
ReDim Preserve leftbouton(w)
    leftbouton(w) = ctrl.Left
Next
 
End Sub
Puis dans le module de l'userform :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub UserForm_Initialize()
    Ouverture = True
    Usf_Visible = True
    Nom_Classeur = ThisWorkbook.Name
 
determine   'appele la procedure qui va memoriser la taille et position de chaque controls
hwnd = FindWindow(vbNullString, Me.Caption)
wLong = GetWindowLongA(hwnd, GWL_STYLE) Or WS_SIZEBOX Or WS_TROIS_BOUTON  'si apostrophe devand il n'y a plus de bouton juste un cadre mince
SetWindowLong hwnd, GWL_STYLE, wLong 'applique le style a l'userform
With UserForm1
       .StartUpPosition = 3
       .Width = Application.Width - 2
      .Height = Application.Height - 3
  End With
 
 
End Sub
Je voudrais pouvoir écrire
Call determine (userform)

Merci d'avance pour votre réponse