Procédure pour plusieurs userform
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:
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:
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