Sub MàJÀFormer()
Dim TR(), TE(), LRMax As Long ' Déclare ces deux tableaux dynamiques et un indice de lignes maxi effectif.
TE = Feuil2.[A2].ListObject.DataBodyRange.Value ' TE reçoit les valeurs de la plage des données couvertes par l'objet tableau auquel appartient la cellule A2 de l'objet Worksheet Feuil2 (Suivi formations)
ReDim TR(1 To UBound(TE, 1), 1 To UBound(TE, 2) - 1) ' Redimensionne le Tableau Résultant au nombre de lignes et de colonnes de la plage d'entrée cette fois.
GarnirTbÀFormer TR, TE, DateSerial(Year(Date), Month(Date) + 3, 1), LRMax ' Appelle la procédure pour TR et d'après TE, pour des dates inférieures au 1er jour du 2nd mois suivant celui en cours.
Feuil3.[A2].ListObject.DataBodyRange.Resize(LRMax).Value = TR ' Les valeurs du tableau résultant sont affectées la plage de données couvertes par l'objet tableau auquel appartient la cellule A2 de l'objet Worksheet Feuil3 (A former).
End Sub
Private Sub GarnirTbÀFormer(TR(), TE(), ByVal DateLim As Date, ByRef LRMax As Long)
Dim C As Long, LR As Long, LE As Long, ÀFormer As Boolean
LRMax = 0
For C = 2 To UBound(TE, 2)
LR = 0
For LE = 1 To UBound(TE, 1)
If VarType(TE(LE, C)) = vbDate Then
ÀFormer = TE(LE, C) < DateLim
Else
ÀFormer = Not IsEmpty(TE(LE, C)): End If
If ÀFormer Then
LR = LR + 1: If LRMax < LR Then LRMax = LR
TR(LR, C - 1) = TE(LE, 1): End If: Next LE, C
End Sub