Bonjour à tous,
Bon voilà j'utilise ce bout de code ci-dessous, rien de bien compliqué, il ouvre un formulaire, l'utilisateur renseigne son nom à partir d'une liste déroulante, un nombre d'heure, et éventuellement un commentaire.
Ceci fait il a le choix de trois boutons Enregistrer & nouveau, Enregistrer, et Annuler.
Le fait de cliquer sur l'un des trois boutons passe une propriété du formulaire sur une des trois valeur OK, OKAndNew, Cancel, qui sont du type Enumération.
Là ou je me pose une question c'est sur le retour après [Enregistrer & nouveau] Dans ce code on ne sort pas du Select Case (Le debug.print me le prouve).
Le code fonctionne il ajoute bien les lignes dans le tableau. (Merci à Pierre sa fonction me sert toujours aussi bien.)
Je pense que l'on peut faire mieux si quelqu'un à une ou des idées je suis preneur.
Voici le code qui se trouve dans un module
Ici le code sur le bouton Enregistrer & nouveau
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 Public Sub Hours_Add() With usfHoursManagement With .txtHours .Text = 0 End With .Show Select Case .ReturValue ' // Le bouton Enregistrer a été cliqué Case vaReturnValue.ok basTS.TS_AddRow Worksheets("vs_Pointages").Range("vt_Pointages"), VBA.Array("ID", Application.WorksheetFunction.Max(Worksheets("vs_Pointages").Range("vt_Pointages[ID]")) + 1 _ , "Prénom", .cmbWorker.Column(1), "Nom", .cmbWorker.Column(2), "Date", Format(Date, "Short Date"), "Type", "Hours", "Mouvement", .txtHours.Value, "Object", .txtNotes) Worksheets("vs_Pointages").Range("vt_Pointages").ListObject.Range.Columns.AutoFit ' // Le bouton annuler a été cliqué Case vaReturnValue.Cancel MsgBox "L'action a été annulée par l'utilisateur, aucune donnée n'a été enregistrée." ' // Le bouton Enregistrer & nouveau a été cliqué Case vaReturnValue.OkAndNew basTS.TS_AddRow Worksheets("vs_Pointages").Range("vt_Pointages"), VBA.Array("ID", Application.WorksheetFunction.Max(Worksheets("vs_Pointages").Range("vt_Pointages[ID]")) + 1 _ , "Prénom", .cmbWorker.Column(1), "Nom", .cmbWorker.Column(2), "Date", Format(Date, "Short Date"), "Type", "Hours", "Mouvement", .txtHours.Value, "Object", .txtNotes) Worksheets("vs_Pointages").Range("vt_Pointages").ListObject.Range.Columns.AutoFit .cmbWorker.ListIndex = -1 .txtNotes = vbNullString .txtHours.Text = 0 .Show Debug.Print .ReturValue End Select End With End Sub
Et la propriété de retour.
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 Private Sub cmdValidAndNew_Click() With Me If .cmbWorker.ListIndex = -1 Then MsgBox "Veuillez sélectionner un employé" ElseIf Val(.txtHours) = 0 Then MsgBox "veuillez renseigner les heures" With .txtHours .SetFocus .SelText = 0 .SelStart = 0 .SelLength = Len(.Text) End With ElseIf .txtNotes = vbNullString Then Select Case MsgBox("Vous avez omis les commentaires." & vbCrLf _ & "" & vbCrLf _ & "Voulez-vous continuer l'enregistrement ?", vbYesNo Or vbQuestion Or vbDefaultButton2, "Demmande de confirmation.") Case vbYes mReturValue = OkAndNew .Hide Case vbNo With .txtNotes .SetFocus .SelText = "Renseignez un commentaire." .SelStart = 0 .SelLength = Len(.Text) End With End Select Else mReturValue = OkAndNew .Hide End If End With End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private mReturValue As VBAProject.vaReturnValue Public Property Get ReturValue() As VBAProject.vaReturnValue: ReturValue = mReturValue: End Property Public Property Let ReturValue(ByVal vaNewValue As VBAProject.vaReturnValue): mReturValue = vaNewValue: End Property
Partager