Sub MàJ()
Dim CMax As Long, TSrc(), C As Long, CVoy As Long, DicTitSrc As New Dictionary, TTit(), TMvt(), N As Long, _
TCNV() As Long, TRésu(), Voy As SsGr, L As Long, Détail, DétMvt(), DétDst(), Cas
TSrc = Feuil2.UsedRange.Rows(1).Value
For C = 1 To UBound(TSrc, 2): DicTitSrc(TSrc(1, C)) = C: Next C
TSrc = ColUti(Feuil2.Cells(2, 1).Resize(, UBound(TSrc, 2))).Value
TTit = Feuil1.UsedRange.Rows(1).Value
ReDim TMvt(1 To UBound(TSrc, 1), 1 To UBound(TTit, 2))
For C = 1 To UBound(TTit, 2)
If DicTitSrc.Exists(TTit(1, C)) Then
GarnirColonne TMvt, C, TSrc, DicTitSrc(TTit(1, C))
If TTit(1, C) = "Voyage" Then CVoy = C
ElseIf TTit(1, C) Like "*ancienne valeur" Then
N = N + 1: ReDim Preserve TCNV(1 To N): TCNV(N) = C - 1
End If
Next C
ReDim TRésu(1 To 5000, 1 To UBound(TTit, 2))
For Each Voy In Gigogne(TableUnique(Feuil1.Cells(2, 1).Resize(, UBound(TTit, 2)), TMvt), CVoy)
L = L + 1: Cas = 0
For Each Détail In Voy.Co
If Détail(0) = 0 Then DétDst = Détail: Cas = 1 Else DétMvt = Détail: Cas = Cas Or 2
Next Détail
Select Case Cas
Case 1: ' N'existe qu'en Dst
For C = 1 To UBound(DétDst): TRésu(L, C) = DétDst(C): Next C
For N = 1 To UBound(TCNV): C = TCNV(N)
TRésu(L, C + 1) = DétDst(C): TRésu(L, C) = Empty: Next N
Case 2: ' N'existe qu'en Mvt
For C = 1 To UBound(DétMvt): TRésu(L, C) = DétMvt(C): Next C
Case Else: 'Existe des deux cotés
For C = 1 To UBound(DétMvt): TRésu(L, C) = DétMvt(C): Next C
For N = 1 To UBound(TCNV): C = TCNV(N)
If DétMvt(C) <> DétDst(C) Then TRésu(L, C + 1) = DétDst(C)
Next N: End Select: Next Voy
Feuil3.[A10].Resize(5000, UBound(TRésu, 2)).Value = TRésu ' (emplacement provisoire, en définitive Feui1.[A2])
End Sub