Soustraction et addition de dates dans un 2e userform
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:
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:
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
Code:
1 2 3
| Sub ouverture()
user.Show 0
End Sub |
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..).
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