Reste à vérifier quand même en détail
Option Explicit
Sub aligner()
' hypothèse, les données sont bien triées
Dim tbl1(), tbl2()
Dim n As Double, p As Double, m As Double, j%, derL1 As Double, derL2 As Double, x As Double, maxi As Double, tps As Date
Sheets(1).Select
tps = Now
derL1 = Range("C" & Rows.Count).End(xlUp).Row
derL2 = Range("N" & Rows.Count).End(xlUp).Row
tbl1 = Range("C3:K" & derL1)
tbl1 = Application.Transpose(tbl1)
tbl2 = Range("N3:V" & derL2)
tbl2 = Application.Transpose(tbl2)
maxi = Application.Max(tbl1(1, UBound(tbl1, 2)), tbl2(1, UBound(tbl2, 2)))
x = 0 ' indicateur d'arrêt = plus grande valeur
n = 0 ' progression
Do Until x = maxi
n = n + 1
x = tbl1(1, n)
If tbl1(1, n) <> tbl2(1, n) Then
m = 1
If tbl1(1, n) < tbl2(1, n) Then
x = tbl1(1, n)
Do
m = m + 1
Loop While tbl1(1, n) = tbl1(1, n + m)
ReDim Preserve tbl2(1 To UBound(tbl2), 1 To UBound(tbl2, 2) + m)
For p = UBound(tbl2, 2) - m To n Step -1
For j = 1 To UBound(tbl2)
tbl2(j, p + m) = tbl2(j, p)
tbl2(j, p) = ""
Next
'tbl2(1, p) = tbl1(1, n)
Next
ElseIf tbl2(1, n) < tbl1(1, n) Then
x = tbl2(1, n)
Do
m = m + 1
Loop While tbl2(1, n) = tbl2(1, n + m)
ReDim Preserve tbl1(1 To UBound(tbl1), 1 To UBound(tbl1, 2) + m)
For p = UBound(tbl1, 2) - m To n Step -1
For j = 1 To UBound(tbl1)
tbl1(j, p + m) = tbl1(j, p)
tbl1(j, p) = ""
Next
'tbl1(1, p) = tbl2(1, n)
Next
End If
n = n + m
End If
Loop
fin:
Sheets(2).Select
Range("C3").Resize(UBound(tbl1, 2), UBound(tbl1)) = Application.Transpose(tbl1)
Range("N3").Resize(UBound(tbl2, 2), UBound(tbl2)) = Application.Transpose(tbl2)
MsgBox "Déjà terminé ! ... " & Format(Now - tps, "hh:mm:ss")
End Sub