je vais proposer au service Rh ce nouveau model et tester la macro pour l'ensemble des services !
s'ils n'ont pas eux besoin de la mécanique un peu plus complexe d'affectation à des services multiples, cela simplifie la macro, ce n'est pas négligeable pour des questions de maintenance.
Sub COMPILER(ok As Boolean)
Dim f As Worksheet, tbl, bdd As Worksheet, fam As Object, result()
' raz de la bas de données
Set bdd = Sheets("Recap")
If Not bdd.ListObjects(1).DataBodyRange Is Nothing Then bdd.ListObjects(1).DataBodyRange.Delete
' chargement des familles de code
cod = Range("Tcodes[#All]").Value
Set fam = CreateObject("Scripting.Dictionary")
For i = LBound(cod) + 1 To UBound(cod)
fam(cod(i, 1)) = cod(i, 3)
Next
n = 0
For Each f In Worksheets
If IsNumeric(Left(f.Name, 1)) Then
derL = f.Range("A" & Rows.Count).End(xlUp).Row
tbl = f.Range("A8:AF" & derL).Value ' importation globale de la plage dans tbl
For i = 4 To UBound(tbl) Step 3 ' ce qui donnera les noms en colonne 1
For j = 2 To UBound(tbl, 2) ' balayage de toutes les dates
If tbl(i + 1, j) <> "" Then ' motif présent le matin
n = n + 1
ReDim Preserve result(1 To 9, 1 To n)
result(1, n) = tbl(i, 1)
result(2, n) = Format(tbl(1, j), "mm/dd/yyyy")
result(3, n) = tbl(i + 1, 1)
result(4, n) = tbl(i + 1, j)
result(5, n) = 0.5
result(6, n) = fam(tbl(i + 1, j))
End If
If tbl(i + 2, j) <> "" Then ' motif présent l'apm
n = n + 1
ReDim Preserve result(1 To 9, 1 To n)
result(1, n) = tbl(i, 1)
result(2, n) = Format(tbl(1, j), "mm/dd/yyyy")
result(3, n) = tbl(i + 2, 1)
result(4, n) = tbl(i + 2, j)
result(5, n) = 0.5
result(6, n) = fam(tbl(i + 2, j))
End If
Next
Next
End If
Next
bdd.Cells(2, 1).Resize(UBound(result, 2), UBound(result)) = Application.Transpose(result)
End Sub