Sub Transferer()
Dim i As Integer
Dim j As Integer
Dim Ind As Integer
Dim NbLig As Integer
Dim Trouvé As Boolean
Dim LigDest As Integer
Dim RefDev As String
Dim TSCommande As ListObject
Dim TSMaj As ListObject
Dim TabCommande() As Variant
Dim TabMaj() As Variant
Dim LastLine As Integer
Dim TabNew() As Variant
Dim NbNew As Integer
Dim NbCol As Integer
Application.ScreenUpdating = False
Set TSCommande = Sheets("Commande").ListObjects("TbCommande")
Set TSMaj = Sheets("MAJ").ListObjects("TbMaj")
With TSCommande
TabCommande = .DataBodyRange.Value
End With
With TSMaj
If .ListRows.Count = 0 Then
.ListRows.Add
.DataBodyRange(1, 1).Resize(UBound(TabCommande, 1), UBound(TabCommande, 2)) = TabCommande
Application.ScreenUpdating = True
Exit Sub
Else
TabMaj = Application.WorksheetFunction.Transpose(.DataBodyRange)
NbLig = UBound(TabMaj, 2)
End If
End With
NbCol = UBound(TabCommande, 2)
NbNew = 0
For i = LBound(TabCommande, 1) To UBound(TabCommande, 1)
RefDev = TabCommande(i, 1)
Trouvé = False
For Ind = LBound(TabMaj, 2) To UBound(TabMaj, 2)
If TabMaj(1, Ind) = RefDev Then
LigDest = Ind
Trouvé = True
Exit For
End If
Next Ind
If Not Trouvé Then
NbNew = NbNew + 1
ReDim Preserve TabNew(1 To NbCol, 1 To NbNew)
For j = LBound(TabCommande, 2) To UBound(TabCommande, 2)
TabNew(j, NbNew) = TabCommande(i, j)
Next j
Else
For j = 1 To 10
TabMaj(j, LigDest) = TabCommande(i, j)
Next j
For j = 16 To 18
TabMaj(j, LigDest) = TabCommande(i, j)
Next j
For j = 42 To 48
TabMaj(j, LigDest) = TabCommande(i, j)
Next j
End If
Next i
With TSMaj
Dim ListCol
Dim ExtractCol
Dim TabTransp
ListCol = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
If .ListRows.Count = 1 Then
ReDim TabTransp(1 To 1, 1 To NbCol)
For j = LBound(TabMaj, 1) To UBound(TabMaj, 1)
TabTransp(1, j) = TabMaj(j, 1)
Next j
Else
TabTransp = Application.WorksheetFunction.Transpose(TabMaj)
End If
ExtractCol = Application.Index(TabTransp, Evaluate("row(1:" & UBound(TabTransp) & ")"), ListCol)
.DataBodyRange(1, 1).Resize(UBound(ExtractCol, 1), 10) = ExtractCol
ListCol = Array(16, 17, 18)
ExtractCol = Application.Index(TabTransp, Evaluate("row(1:" & UBound(TabTransp) & ")"), ListCol)
.DataBodyRange(1, 16).Resize(UBound(ExtractCol, 1), 3) = ExtractCol
ListCol = Array(42, 43, 44, 45, 46, 47, 48)
ExtractCol = Application.Index(TabTransp, Evaluate("row(1:" & UBound(TabTransp) & ")"), ListCol)
.DataBodyRange(1, 42).Resize(UBound(ExtractCol, 1), 7) = ExtractCol
If NbNew <> 0 Then
LastLine = .ListRows.Add.Index
.DataBodyRange(LastLine, 1).Resize(UBound(TabNew, 2), UBound(TabNew, 1)) = Application.WorksheetFunction.Transpose(TabNew)
End If
End With
Application.ScreenUpdating = True
End Sub