1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
Private Sub UserForm_Initialize()
Dim Ctrl As Control
Dim MaPlage As Range
Dim Cel As Range
Dim Tbl
Dim I As Integer
Dim Haut As Integer
Dim Gauche As Integer
Dim Largeur As Integer
Dim Hauteur As Integer
Dim Espace As Integer
Dim Rangee As Integer
Dim MaxHaut As Integer
'empêche l'évènement Click au moment de l'affectation de la valeur à la CheckBox correspondante
Initialise = True
'défini la plage sur la colonne de la cellule active
With Sheets("Planning")
Set MaPlage = .Range(.Cells(1, ActiveCell.Column), .Cells(.Rows.Count, ActiveCell.Column).End(xlUp))
End With
'initialise les dimensions et positions
Largeur = 50
Hauteur = 30
Espace = 10
Gauche = Espace
Haut = Espace
'noms des bureaux, adapter ici mais attention, le processus de recherche est basé sur la fonction Split avec comme délimitateur le tiret bas
'il est donc nécessaire que ce dernier sépare le numéro du bureau de son nom ou destination (réception ou administratif)
Tbl = Array("Recep_1.01", "Recep_1.02", "Recep_1.03", "Recep_1.04", "Recep_1.05", "Recep_1.06", "Recep_1.07", "Recep_1.08", "Recep_1.09", _
"Recep_2.01", "Recep_2.02", "Recep_2.03", "Recep_2.04", "Recep_2.05", "Recep_2.06", "Recep_2.07", "Recep_2.08", "Recep_2.09", _
"Recep_3.01", "Recep_3.02", "Recep_3.03", "Recep_3.04", "Recep_3.05", "Recep_3.06", "Recep_3.07", "Recep_3.08", "Recep_3.09", _
"Admin_4.01", "Admin_4.02", "Admin_4.03", "Admin_4.04", "Admin_4.05", "Admin_4.06", "Admin_4.07", "Admin_4.08", "Admin_4.09", _
"Admin_5.01", "Admin_5.02", "Admin_5.03", "Admin_5.04", "Admin_5.05", "Admin_5.06", "Admin_5.07", "Admin_5.08", "Admin_5.09", _
"Admin_6.01", "Admin_6.02", "Admin_6.03", "Admin_6.04", "Admin_6.05")
Rangee = 1
'création des 50 cases à cocher
For I = 1 To 50
Set Ctrl = Me.Controls.Add("Forms.ToggleButton.1", _
Tbl(I - 1), _
True)
'affectation au module de classe pour gérer l'évènement commun
ReDim Preserve TblBtn(1 To I)
Set TblBtn(I).Bouton = Ctrl
'sépare en deux partie
If I = 1 Then
Haut = Espace
ElseIf Rangee < Left(Split(Tbl(I - 1), "_")(1), 1) Then
Haut = Espace
Gauche = Gauche + Espace + Largeur
Rangee = Left(Split(Tbl(I - 1), "_")(1), 1)
Else
Haut = Haut + Hauteur + Espace / 2
End If
'paramètre...
With Ctrl
.Left = Gauche
.Top = Haut
.Width = Largeur
.Height = Hauteur
.Caption = Split(Tbl(I - 1), "_")(0) & " - " & Split(Tbl(I - 1), "_")(1)
Set Cel = MaPlage.Find(Split(.Caption, " - ")(1), , xlValues, xlWhole)
.BackColor = IIf(Cel Is Nothing, &HFF00&, &HFF&)
.Value = IIf(Cel Is Nothing, False, True)
End With
Haut = Haut + Espace / 2
'mémorise la hauteur maximale
If MaxHaut < Haut Then MaxHaut = Haut
Next I
'défini la largeur et hauteur de la Form
Me.Width = Gauche + Espace + Largeur
Me.Height = MaxHaut + Hauteur + Espace * 2
'---> ou avec des ScrollBars...
' If Gauche + Espace + Largeur > Me.Width Then
'
' Me.ScrollBars = 1
' Me.ScrollWidth = Gauche + Espace + Largeur
'
' End If
' If MaxHaut + Hauteur + Espace > Me.Height Then
'
' If Me.ScrollBars = 1 Then Me.ScrollBars = 3 Else Me.ScrollBars = 2
' Me.ScrollHeight = MaxHaut + Hauteur + Espace
'
' End If
End Sub |