There is no need to select or copy/paste.
First of all I would propose to put all parameters like workbook names etc. as constants to the header of the module. By that it is much easier to fix renamings etc.
Within your copy routine you can define your source-range by using currentregion
:
Returns a Range object that represents the current region. The current region is a range bounded by any combination of blank rows and blank columns. Read-only. (https://learn.microsoft.com/en-us/office/vba/api/excel.range.currentregion)
Then define the target range - it depends on the size of the source range.
And finally write the values from source range to target range (no select, no copy, no paste).
Important: formatting is not transferred
Option Explicit
Private Const wbSourceName As String = "perimetrie.xlsx"
Private Const numberOfColumnsToCopy As Long = 6 'A - F
Private Const wbTargetName As String = "OP_COMMERCIALES.xlsm"
Private Const wsTargetName As String = "DETAIL"
Private Const cellTarget As String = "D2"
Sub copyTable()
Dim wsSource As Worksheet
Set wsSource = Application.Workbooks(wbSourceName).Worksheets(1)
Dim wsTarget As Worksheet
Set wsTarget = Application.Workbooks(wbTargetName).Worksheets(wsTargetName)
Dim rgSource As Range
'assumption to use currentregion: continous range, no empty rows and columns in area to copy
Set rgSource = wsSource.Range("A1").CurrentRegion
'resize range to the necessary number of columns (A-F)
set rgSource = rgSource.Resize(ColumnSize:=numberOfColumnsToCopy)
Dim rgTarget As Range
Set rgTarget = wsTarget.Range(cellTarget)
'resize rgTarget according to dimensions of rgSource
With rgSource
set rgTarget = rgTarget.Resize(.Rows.Count, .Columns.Count)
End With
'write values from rgSource to rgTarget - no copy/paste necessary!!!
rgTarget.Value = rgSource.Value
End Sub