Property Get TableÀRendre(Table() As Double) As Variant
Dim RgAC As Range, N As Long
Dim OrientésTousDeux As Boolean, TbVertical As Boolean, RgVertical As Boolean
On Error Resume Next
TbVertical = UBound(Table, 2) = LBound(Table, 2)
If Err Then
OrientésTousDeux = UBound(Table, 1) > LBound(Table, 1)
TbVertical = False
Else
OrientésTousDeux = UBound(Table, 1) = LBound(Table, 1) Xor TbVertical
End If
On Error GoTo 0
If TypeName(Application.Caller) = "Range" Then
Set RgAC = Application.Caller
RgVertical = RgAC.Columns.Count = 1
If RgVertical Eqv RgAC.Rows.Count = 1 Then OrientésTousDeux = False
Else
OrientésTousDeux = False
End If
If OrientésTousDeux And (RgVertical Xor TbVertical) Then
TableÀRendre = WorksheetFunction.Transpose(Table)
Else
TableÀRendre = Table
End If
End Property
'
Property Let TableÀRendre(Table() As Double, ByVal V As Variant)
Dim Rg As Range, LMax As Long, CMax As Long, L As Long, C As Long, dL As Long, dC As Long
If TypeName(V) = "Range" Then
Set Rg = V: V = Rg.Value
LMax = Rg.Rows.Count: CMax = Rg.Columns.Count
While WorksheetFunction.IsNA(V(LMax, 1)) And LMax > 1: LMax = LMax - 1: Wend
While WorksheetFunction.IsNA(V(1, CMax)) And CMax > 1: CMax = CMax - 1: Wend
V = Rg.Resize(LMax, CMax).Value
End If
On Error Resume Next
dL = 1 - LBound(V, 1): LMax = UBound(V, 1) + dL
If Err Then dL = 0: LMax = 0
dC = 1 - LBound(V, 2): CMax = UBound(V, 2) + dC
If Err Then dC = 0: CMax = 0: Err.Clear
If LMax > 1 Then
If CMax > 1 Then
ReDim Table(1 To LMax, 1 To CMax) As Double
For L = 1 To LMax: For C = 1 To CMax: Table(L, C) = V(L - dL, C - dC): Next C: Next L
ElseIf CMax = 1 Then
ReDim Table(1 To LMax) As Double: C = 1 - dC
For L = 1 To LMax: Table(L) = V(L - dL, C): Next L
Else
ReDim Table(1 To LMax) As Double
For L = 1 To LMax: Table(L) = V(L - dL): Next L
End If
ElseIf LMax = 1 Then: L = 1 - dL
If CMax > 1 Then
ReDim Table(1 To CMax) As Double
For C = 1 To CMax: Table(C) = V(L, C - dC): Next C
ElseIf CMax = 1 Then: C = 1 - dC
ReDim Table(1 To 1) As Double: Table(1) = V(L, C)
Else
ReDim Table(1 To 1) As Double: Table(1) = V(L)
End If
Else
ReDim Table(1 To 1) As Double: Table(1) = V
End If
End Property