T
ThierryR
Guest
Bonjour à tous,
J'ai créé un userform de saisie de données concernant la gestion de personnel.
J'ai un problème de retranscription de données sur la feuille après validation. Il met à vide certaines cellules type LstPostes, LstServices... et remplit les autres.
Merci d'avance
ThierryR
Voici mon code :
Quand je selectionne le salarié dans la listbox :
Private Sub LstEmployés_Click()
Dim I As Integer
Dim J As Integer
'Affichage de l'employé selectionné
BNouveau = False
I = LstEmployés.ListIndex + 2
With ThisWorkbook.Worksheets("Employés")
.Activate
MenuEmployés.TxtNom = .Cells(I, 1)
MenuEmployés.TxtPrénom = .Cells(I, 2)
For J = 0 To MenuEmployés.LstServices.ListCount - 1
If MenuEmployés.LstServices.List(J) = .Cells(I, 3) Then
MenuEmployés.LstServices.ListIndex = J
End If
Next J
For J = 0 To MenuEmployés.LstPostes.ListCount - 1
If MenuEmployés.LstPostes.List(J) = .Cells(I, 4) Then
MenuEmployés.LstPostes.ListIndex = J
MenuEmployés.LstPostes.Selected(J) = True
End If
Next J
For J = 0 To MenuEmployés.LstTypeContrat.ListCount - 1
If MenuEmployés.LstTypeContrat.List(J) = .Cells(I, 5) Then
MenuEmployés.LstTypeContrat.ListIndex = J
MenuEmployés.LstTypeContrat.Selected(J) = True
End If
Next J
MenuEmployés.LstTypeContrat = .Cells(I, 5)
For J = 0 To MenuEmployés.LstTypeEmploi.ListCount - 1
If MenuEmployés.LstTypeEmploi.List(J) = .Cells(I, 6) Then
MenuEmployés.LstTypeEmploi.ListIndex = J
MenuEmployés.LstTypeEmploi.Selected(J) = True
End If
Next J
MenuEmployés.CalendrierEntrée.Value = .Cells(I, 7)
TxtDateEntrée.Value = .Cells(I, 7)
End With
End Sub
Et voici quand je le valide après modification ponctuelle :
Private Sub CmdValider_Click()
Dim Rng As Range
Dim I As Integer
'Controle des données saisies
If TxtPrénom = "" Or TxtNom = "" Or IsNull(LstServices) Or IsNull(LstPostes) Then
MsgBox "Contrôlez les champs de saisie", vbExclamation, strAppName
TxtNom.SetFocus
Exit Sub
End If
With ThisWorkbook.Worksheets("Employés")
'Ajout de l'employé sur la première ligne vide
If BNouveau Then
Set Rng = .Range("A3").CurrentRegion
I = Rng.Rows.Count + 1
Else
'Modification de l'employé selectionné
I = LstEmployés.ListIndex + 2
End If
.Cells(I, 1) = MenuEmployés.TxtNom
.Cells(I, 2) = MenuEmployés.TxtPrénom
.Cells(I, 3) = MenuEmployés.LstServices
.Cells(I, 4) = MenuEmployés.LstPostes
.Cells(I, 5) = MenuEmployés.LstTypeContrat
.Cells(I, 6) = MenuEmployés.LstTypeEmploi
.Cells(I, 7) = CDate(MenuEmployés.TxtDateEntrée)
End With
End Sub
J'ai créé un userform de saisie de données concernant la gestion de personnel.
J'ai un problème de retranscription de données sur la feuille après validation. Il met à vide certaines cellules type LstPostes, LstServices... et remplit les autres.
Merci d'avance
ThierryR
Voici mon code :
Quand je selectionne le salarié dans la listbox :
Private Sub LstEmployés_Click()
Dim I As Integer
Dim J As Integer
'Affichage de l'employé selectionné
BNouveau = False
I = LstEmployés.ListIndex + 2
With ThisWorkbook.Worksheets("Employés")
.Activate
MenuEmployés.TxtNom = .Cells(I, 1)
MenuEmployés.TxtPrénom = .Cells(I, 2)
For J = 0 To MenuEmployés.LstServices.ListCount - 1
If MenuEmployés.LstServices.List(J) = .Cells(I, 3) Then
MenuEmployés.LstServices.ListIndex = J
End If
Next J
For J = 0 To MenuEmployés.LstPostes.ListCount - 1
If MenuEmployés.LstPostes.List(J) = .Cells(I, 4) Then
MenuEmployés.LstPostes.ListIndex = J
MenuEmployés.LstPostes.Selected(J) = True
End If
Next J
For J = 0 To MenuEmployés.LstTypeContrat.ListCount - 1
If MenuEmployés.LstTypeContrat.List(J) = .Cells(I, 5) Then
MenuEmployés.LstTypeContrat.ListIndex = J
MenuEmployés.LstTypeContrat.Selected(J) = True
End If
Next J
MenuEmployés.LstTypeContrat = .Cells(I, 5)
For J = 0 To MenuEmployés.LstTypeEmploi.ListCount - 1
If MenuEmployés.LstTypeEmploi.List(J) = .Cells(I, 6) Then
MenuEmployés.LstTypeEmploi.ListIndex = J
MenuEmployés.LstTypeEmploi.Selected(J) = True
End If
Next J
MenuEmployés.CalendrierEntrée.Value = .Cells(I, 7)
TxtDateEntrée.Value = .Cells(I, 7)
End With
End Sub
Et voici quand je le valide après modification ponctuelle :
Private Sub CmdValider_Click()
Dim Rng As Range
Dim I As Integer
'Controle des données saisies
If TxtPrénom = "" Or TxtNom = "" Or IsNull(LstServices) Or IsNull(LstPostes) Then
MsgBox "Contrôlez les champs de saisie", vbExclamation, strAppName
TxtNom.SetFocus
Exit Sub
End If
With ThisWorkbook.Worksheets("Employés")
'Ajout de l'employé sur la première ligne vide
If BNouveau Then
Set Rng = .Range("A3").CurrentRegion
I = Rng.Rows.Count + 1
Else
'Modification de l'employé selectionné
I = LstEmployés.ListIndex + 2
End If
.Cells(I, 1) = MenuEmployés.TxtNom
.Cells(I, 2) = MenuEmployés.TxtPrénom
.Cells(I, 3) = MenuEmployés.LstServices
.Cells(I, 4) = MenuEmployés.LstPostes
.Cells(I, 5) = MenuEmployés.LstTypeContrat
.Cells(I, 6) = MenuEmployés.LstTypeEmploi
.Cells(I, 7) = CDate(MenuEmployés.TxtDateEntrée)
End With
End Sub