Bonjour le fil, bonjour le forum,
Une autre proposition. J'ai changé certains contrôles car ils ne me semblaient pas bien appropriés.
Le code :
Private D As Worksheet 'déclare la varaible D (onglet Données)
Private SD As Worksheet 'déclare la varaible D (onglet Saisie de Données)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Set SD = Sheets("Saisie de données") 'définit l'onglet SD
Set D = Sheets("Données") 'définit l'onglet D
Me.ComboBox1.List = Range("Creneau").Value 'alimente la ComboBox1
Me.ComboBox2.List = Range("Equipe").Value 'alimente la ComboBox1
End Sub
Private Sub ComboBox2_Change() 'au changement de la ComboBox2
If Me.ComboBox2.Value = "" Then Me.TextBox3.Value = "": Exit Sub 'si la ComboBox2 est effacée, vide la TextBox3 et sort de la procédure
Me.TextBox3.Value = D.Cells(Me.ComboBox2.ListIndex + 2, 2).Value 'récupère les personnes concernées
End Sub
Private Sub CommandButton1_Click() 'bouton "Valider"
Dim PV As Integer 'déclare la variable PV (Première ligne Vide)
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
PV = IIf(SD.Range("B4").Value = "", 4, SD.Range("B3").End(xlDown).Row + 1) 'définit la première ligne vide PV du tableau de l'onglet SD
For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du controle dans le tableau ligne : PV, colonne : propriété [tag] du contrôle convertie en byte
If CTRL.Tag <> "" Then SD.Cells(PV, CByte(CTRL.Tag)).Value = CTRL.Value
Next CTRL 'prochaine controle de la boucle
End Sub
Private Sub CommandButton2_Click() 'Bouton "Annuler"
Unload Me 'vide et ferme l'UserForm
End Sub
Le Fichier :