Bonjour le fil, bonjour le forum,
Une autre proposition VBA avec la macro événementielle Change ci-dessous :
Private TEST As Boolean 'déclare la variable TEST
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim D As Worksheet 'déclare la variable D (onglet Data)
Dim DC As Date 'déclare la variable DC (Date Cherchée)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim NL As Integer 'déclare la variable NL (Nombre de Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim T As Boolean 'déclare la variable T (Trouvé)
Dim DT As Date 'déclare la variable DT (Date trouvée)
Dim LI As Integer 'déclare la variable LI (Ligne)
If TEST = True Then Exit Sub 'si la variable TEST est [Vrai], sort de la procédure
If Target.Address <> "$C$6" Then Exit Sub 'si le changement a lieu ailleurs qu'en C6, sort de la procédure
TEST = True 'définit la variable TEST
Range("C13:N24").ClearContents 'vide la plage C13:N24
Set D = Sheets("Data") 'définit l'onglet D
'définit la date cherchée (en numéro de série de date de la cellule C6)
DC = DateSerial(Year(Target), Month(Target.Value), Day(Target.Value))
TC = D.Range("A1").CurrentRegion 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de ligne NL du tableau de cellules TC
Application.ScreenUpdating = False 'masque les rafraîchissement d'écran
For I = 3 To NL 'boucle sur toutes les lignes I de TC
'définit la date trouvée DT (numéro de série de date de la valeur ligne I colonne 1 de TC)
DT = DateSerial(Year(TC(I, 1)), Month(TC(I, 1)), Day(TC(I, 1)))
If DT = DC Then T = True: Exit For 'si les date sont identiques, définit la varoable PT, sort de la boucle
Next I 'prochaine ligne de la boucle
If T = False Then MsgBox "Aucune donnée à cette date !": GoTo fin 'si T est [faux], message, va à l'étiquette "fin"
LI = I 'définit la ligne LI
For J = 1 To 12 'boucle sur les 12 lignes du tableau "Personnels planifiés"
Cells(12 + J, 3).Value = TC(LI, 2) 'récupère le nom
Cells(12 + J, 7).Value = TC(LI, 3) 'récupère l'heure de début
Cells(12 + J, 8).Value = TC(LI, 4) 'récupère l'heure de fin
Range(Cells(12 + J, 9), Cells(12 + J, 10)).Value = TC(LI, 5) 'récupère le poste
Cells(12 + J, 11).Value = TC(LI, 6) 'récupère l'événement
LI = LI + 1 'incrément la ligne LI
Next J 'prochaine ligne de la boucle
fin: 'étiquette
TEST = False 'réinitialise la variable TEST
Range("C6").Select 'sélectionne la date éditée
Application.ScreenUpdating = True 'affiche les rafraîchissement d'écran
End Sub