Bonjour à tous,
je suis en train de construire un outil pour faire des plannings. J'ai déjà été bien conseillé par un membre du site pour faire les soustractions et additions ds un userform -> "Lundi = FinMatin - DebMatin + FinAprem - DebAprem + formation" et cela pour tous les jours de la semaine
Un dernier textbox fait le total des jours de la semaine
Le code du 1er userform (User) est d'ailleurs parfait et j'essaye depuis des jours de le reproduire pour un autre userform (userform2) dans un lequel, il ne faudra faire que des soustractions pour les jours de la semaine -> Lundi = FinMatin - DebAprem" et cela pour tous les jours de la semaine
Un dernier textbox fait le total des jours de la semaine.
Il y aura dans cet userform 21 textbox (7 pour le total jrs semaine + 7 DebMatin + 7 FinAprem) et le 22e pour le total de la semaine.
Je vous donne les lignes de code du premier userform (User) qui fait les soustractions et additions avec un total jour et hebdo.
Dans Projet VBA/Feuilles/User
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 Option Explicit Dim txt(1 To 42) As New classe1, I As Byte <hr /> Private Sub UserForm_Initialize() For I = 1 To 42 Set txt(I).GroupeTxt = Controls("T" & I) Next I End Sub <hr /> Private Sub User_Initialize() For I = 1 To 5: Set txt(I).txt = Controls("T" & I): Next I End Sub
Dans le module de classe 1
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
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 Option Explicit Public WithEvents GroupeTxt As MSForms.TextBox <hr /> Private Sub GroupeTxt_Change() Dim DebMatin As Date Dim FinMatin As Date Dim DebAprem As Date Dim FinAprem As Date Dim Lundi As Date Dim Mardi As Date Dim Mercredi As Date Dim Jeudi As Date Dim Vendredi As Date Dim Samedi As Date Dim Dimanche As Date Dim Formation As Date Dim Total As Double Dim Total_formation As Double Dim I As Integer For I = 6 To 42 Step 6 'si la longueur du texte est égale à 5 pour tous If Len(user.Controls("T" & I - 5).Value) = 5 _ And Len(user.Controls("T" & I - 4).Value) = 5 _ And Len(user.Controls("T" & I - 3).Value) = 5 _ And Len(user.Controls("T" & I - 2).Value) = 5 _ And Len(user.Controls("T" & I - 1).Value) = 5 Then 'converti en date DebMatin = CDate(user.Controls("T" & I - 5).Value) FinMatin = CDate(user.Controls("T" & I - 4).Value) DebAprem = CDate(user.Controls("T" & I - 3).Value) FinAprem = CDate(user.Controls("T" & I - 2).Value) Formation = CDate(user.Controls("T" & I - 1).Value) 'totalise en convertissant en double Total = CDbl(FinMatin - DebMatin + FinAprem - DebAprem) + CDbl(Formation) 'affiche au format heures : minutes user.Controls("T" & I).Value = Application.WorksheetFunction.Text(Total, "hh:mm") End If Next I On Error Resume Next 'permet de totaliser ligne par ligne 'idem, conversion en date Lundi = CDate(user.T6.Value) Mardi = CDate(user.T12.Value) Mercredi = CDate(user.T18.Value) Jeudi = CDate(user.T24.Value) Vendredi = CDate(user.T30.Value) Samedi = CDate(user.T36.Value) Dimanche = CDate(user.T42.Value) 'puis en double Total = CDbl(Lundi + Mardi + Mercredi + Jeudi + Vendredi + Samedi + Dimanche) Total_formation = CDate(user.T5.Value) + CDate(user.T11.Value) + CDate(user.T17.Value) + CDate(user.T23.Value) + CDate(user.T29.Value) + CDate(user.T35.Value) + CDate(user.T41.Value) 'au format heures : minutes au delà de 24 h user.T43.Value = Application.WorksheetFunction.Text(Total, "[hh]:mm") user.T44.Value = Application.WorksheetFunction.Text(Total_formation, "[hh]:mm") End Sub <hr /> Private Sub GroupeTxt_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End Sub <hr /> Private Sub GroupeTxt_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode <> 8 Then 'suppression ! If Len(GroupeTxt) = 2 Then GroupeTxt = GroupeTxt & ":" If Len(GroupeTxt) > 5 Then GroupeTxt = Left(GroupeTxt, 5) End If End Sub
Puis dans le module 1
C'est ballot mais je bloque avec les "Private Sub UserForm_Initialize()" pour nommer l'userform2 dans le module 1 et les valeurs des variables (I dans le 1er userform etc..).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub ouverture() user.Show 0 End Sub
J'ai fais des tas d'essais avec la création d'un second module de classe et en renommant les variables I mais là, je suis arrivé au bout du bout...
J'aurais donc besoin de vos lumières, n'hésitez pas à me dire si un fichier joint serait plus utile...
Je vous remercie par avance pour vos conseils.
Danny







Répondre avec citation
Partager