Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim R As Range 'déclare la variable R (Recherche)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DS As Long 'déclare la variable DS (Date Source)
Dim TEST As Boolean 'déclare la variable TEST
Set OS = Worksheets("EXTRACTION") 'définit l'onglet source OS
Set OD = Worksheets("planning") 'définit l'onglet destination OD
OD.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
D(TV(I, 1)) = "" 'aimente le dictionnaire D avec les valeurs en colonne 1 de TV (le matricule)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
LI = OD.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'définit la ligne LI (première ligne vide de la colonne A de l'onglet OD)
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) = TMP(J) Then 'condition 1 : si la donnée ligne I colonne 1 de TV est égale à l'élément J de TMP
If TEST = False Then 'condition 2 : si TEST est [faux]
OD.Cells(LI, "A").Value = TV(I, 1) 'renvoie le matricule dans la cellule ligne LI colonne A de l'onglet OD
OD.Cells(LI, "B").Value = TV(I, 2) 'renvoie le nom dans la cellule ligne LI colonne B de l'onglet OD
OD.Cells(LI, "C").Value = TV(I, 3) 'renvoie le prénom dans la cellule ligne LI colonne C de l'onglet OD
OD.Cells(LI, "D").Value = TV(I, 6) 'renvoie la dir dans la cellule ligne LI colonne D de l'onglet OD
OD.Cells(LI, "E").Value = TV(I, 7) 'renvoie la section dans la cellule ligne LI colonne E de l'onglet OD
TEST = True 'définit la variable TEST
End If 'fin de la condition 2
If TV(I, 5) <> "" Then 'condition 3 : si l'événement planning n'est pas vide
DS = CLng(DateSerial(Year(TV(I, 4)), Month(TV(I, 4)), Day(TV(I, 4)))) 'définit la date de la source DS (en entier long)
'définit la recherche R (recherche la date DS dans la ligne 1 de l'onglet destination)
Set R = OD.Rows(1).Find(CDate(DS), , xlFormulas, xlWhole)
If Not R Is Nothing Then 'condition 4 : si au moins une occurrence est trouvée
COL = R.Column 'définit la variable COL, colonne de la première occurrence trouvée
OD.Cells(LI, COL).Value = TV(I, 5) 'renvoie l'événement planning dans la cellule ligne LI colonne COL de l'onglet OD
End If 'fin de la condition 4
End If 'fin de la condition 3
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 2
TEST = False 'redéfinit la variable TEST
Next J 'prochain élément de la boucle 1
OD.Activate 'active l'onglet destination OD
End Sub