A tester :
Sub Résultats()
Dim d As Object, Trés(), clé, dsg, n%, i%, k%
Set d = CreateObject("Scripting.Dictionary")
With Worksheets("Elèves")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
For k = 2 To 3
dsg = dsg & "|" & .Cells(i, k)
Next k
dsg = dsg & "|" & CLng(.Cells(i, 4))
d(.Cells(i, 1).Value) = dsg: dsg = ""
Next i
ReDim Trés(d.Count, 5)
For k = 2 To 4
Trés(0, k + 1) = .Cells(1, k)
Next k
End With
With Worksheets("Profs")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
clé = .Cells(i, 1)
If d.exists(clé) Then
For k = 2 To 3
dsg = dsg & "|" & .Cells(i, k)
Next k
dsg = dsg & d(clé)
d(clé) = dsg: dsg = ""
End If
Next i
For k = 1 To 3
Trés(0, k - 1) = .Cells(1, k)
Next k
End With
n = 0
For Each clé In d.keys
n = n + 1
Trés(n, 0) = clé
dsg = Split(d(clé), "|")
For i = 1 To 5
Trés(n, i) = dsg(i)
Next i
Next clé
With Worksheets("résultats")
.UsedRange.ClearContents
.Range("A1").Resize(UBound(Trés, 1) + 1, UBound(Trés, 2) + 1).Value = Trés
.Cells(UBound(Trés, 2) + 1, 2).Resize(UBound(Trés, 1)).NumberFormat = "dd/mm/yyyy"
.Activate
End With
End Sub
Il a fallu contourner un peu pour conserver les dates...
Cordialement.
Une petite modif à faire ici :
[...]
With Worksheets("Elèves")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
For k = 2 To 4
dsg = dsg & "|" & .Cells(i, k).Value2
Next k
d(.Cells(i, 1).Value) = dsg: dsg = ""
Next i
[...]
On gagne une ligne !