PB Userform et retranscription données

  • Initiateur de la discussion Initiateur de la discussion ThierryR
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Voila le document.

Quand tu selectionne un salarié :

- Il existe un problème sur les éléments que le userform prend pour poste et contrat,
- Quand on modifie seulement la date d'entrée, il doit réinscrire chaque élément. Il le fait partiellement en laissant deux case vides ou non remplies.

Merci pour ceux qui se pencheront sur le problème.
Je me tiens disponible pour toute question

A plus

ThierryR
 

Pièces jointes

Re,

Le probléme vient de la saisie par exemple tu as Directeur Adjoint dans ta feuille Données et Directeur adjoint dans Employés c'est pas pareil tu peux passer en majascules avec UCASE pour ne pas respecter la casse.

Ensuite les contrats pourquoi remettre
MenuEmployés.LstTypeContrat = .Cells(I, 5)
aprés l'avoir sélectionner ?

A+++
 
J'ai fait la modification pour Directeur adjoint et cela résoud le premier point.
J'ai remis MenuEmployés.LstTypeContrat = .Cells(I, 5) pour essayer de remédier au point 2 : cela n'a eu aucune incidence pour la résolution du problème de retranscription du problème. Je n'ai pas pensé à le supprimer ensuite.

ThierryR
 
Re,

Je préfère travailler avec un Tableau VBA
en haut du module
Dim T


rajoutes ceci dans l'initialise


With Feuil1
T = Range(.[A2], .[G65536].End(xlUp)(1)).Value
End With

Private Sub LstEmployés_Click()
Dim I As Integer
Dim J As Integer

'Affichage de l'employé selectionné
BNouveau = False
I = LstEmployés.ListIndex + 1

TxtNom = T(I, 1)
TxtPrénom = T(I, 2)
LstPostes = T(I, 4)
LstServices = T(I, 3)
LstTypeContrat = T(I, 5)
LstTypeEmploi = T(I, 6)
CalendrierEntrée.Value = T(I, 7)
TxtDateEntrée.Value = T(I, 7)
End Sub



A+++
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
707
Réponses
4
Affichages
581
Réponses
8
Affichages
270
Réponses
8
Affichages
649
Réponses
2
Affichages
427
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
217
Réponses
10
Affichages
533
Réponses
2
Affichages
186
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
371
Retour