Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not IsDate("1/" & Sh.Name) Then Exit Sub
Dim d As Object, P As Range, tablo, i&, x$, source, n&, j%
'---analyse de la feuille du mois---
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set P = Sh.ListObjects(1).Range
tablo = P.Resize(, 5) 'matrice, plus rapide
For i = 2 To P.Rows.Count - 1
x = tablo(i, 2)
If x <> "" And LCase(tablo(i, 1)) = "am" Then If Not d.exists(x) Then d(x) = i 'mémorise la ligne
Next i
'---feuille AGENTS et mise à jour de la feuille du mois---
Application.ScreenUpdating = False
source = Sheets("AGENTS").UsedRange.Resize(, 5) 'matrice, plus rapide
For i = 2 To UBound(source)
x = source(i, 2)
If x <> "" And LCase(source(i, 1)) = "am" Then
If d.exists(x) Then 'mise à jour
n = d(x)
For j = 1 To 5
tablo(n, j) = source(i, j)
tablo(n + 1, j) = source(i + 1, j)
Next j
Else 'crée 2 nouvelles lignes sous le tableau
If P(2, 1) = "" Then n = 2 Else n = P.Rows.Count + 1 '1ère ligne vide
For j = 1 To 5
P(n, j) = source(i, j) 'copie les valeurs
P(n + 1, j) = source(i + 1, j)
Next j
P.Rows(n).Resize(, 5).Font.Color = P(n, 1).Font.Color 'police visible
P.Rows(n + 1).Borders(xlEdgeBottom).Weight = xlThin 'bordure du bas
Set P = P.Resize(n + 1)
End If
End If
Next i
'---restitution des mises à jour---
P.Resize(UBound(tablo), 5) = tablo
End Sub