Sub Transfert()
Dim ncol%, source As Range, dest As Range, tablo, resu(), a, n&, i&, j%, nn&
ncol = 3 'nombre de colonnes
Set source = Sheets("Template").[A1].CurrentRegion.Resize(, ncol)
Set dest = Sheets("Destination").Range("A" & Rows.Count).End(xlUp)(2) '1ère cellule vide
tablo = source 'matrice, plus rapide
ReDim resu(1 To UBound(tablo), 1 To ncol)
a = Array("Transporta", "Holdingb", "AutresDacom")
n = 1
For i = 2 To UBound(tablo)
If IsError(Application.Match(tablo(i, 1) & tablo(i, 2), a, 0)) Then
n = n + 1
For j = 1 To ncol
tablo(n, j) = tablo(i, j)
Next j
Else
nn = nn + 1
For j = 1 To ncol
resu(nn, j) = tablo(i, j)
Next j
End If
Next i
'---restitution des 2 tableaux---
If source.Parent.FilterMode Then source.Parent.ShowAllData 'si la feuille est filtrée
If dest.Parent.FilterMode Then dest.Parent.ShowAllData 'si la feuille est filtrée
source.Resize(n) = tablo
source.Offset(n).Resize(Rows.Count - n - source.Row + 1).ClearContents 'RAZ en dessous
If nn Then dest.Resize(nn, ncol) = resu
dest.Offset(nn).Resize(Rows.Count - nn - dest.Row + 1, ncol).ClearContents 'RAZ en dessous
MsgBox nn & " ligne(s) sur " & n - 1 + nn & " transférée(s)..."
End Sub