Dim bench As cBenchmark
Sub test2()
Dim tx(1 To 50000, 1 To 100) 'même dimension que dudu2 avec application transpose
Set bench2 = New cBenchmark
bench2.TrackByName "debut de transposition avec vba transpose version patricktoulon"
T2 = TransposeXV1(tx, 0)
texte = "Avant" & vbCrLf & "base dim 1 : " & LBound(tx) & vbCrLf & "base dim 2 : " & LBound(tx, 2) & vbCrLf
bench2.TrackByName "fin de transposition avec vba transpose version patricktoulon"
MsgBox texte & "Après" & vbCrLf & "base dim 1 : " & LBound(T2) & vbCrLf & "base dim 2 : " & LBound(T2, 2)
End Sub
Function TransposeXV1(t, Optional lBase& = -1)
'patricktoulon V 1.2 -- 08/07/2021
'Ajout du change base V1.2.1 -- 08/12/2024 méthode Addition nombre relatif
Dim y&, i&, C&, T2(), b1&, b2&
If lBase > 1 Then lBase = 0 ' au cas ou il vous prendrez l'envie de faire n'importe quoi
On Error Resume Next
y = UBound(t, 2)
On Error GoTo 0
'b1 et b2 deviendront les reducteurs ou augmenteur de dimension (++/+-) selon lBase
If lBase > -1 Then b1 = Sgn(lBase - LBound(t))
If y = 0 Then
On Error GoTo 0
ReDim T2(LBound(t) + b1 To UBound(t) + b1, LBound(t) + b1 To LBound(t) + b1)
Else
If lBase > -1 Then b2 = Sgn(lBase - LBound(t, 2))
ReDim T2(LBound(t, 2) + b2 To UBound(t, 2) + b2, LBound(t) + b1 To UBound(t) + b1)
End If
For i = LBound(t) To UBound(t)
If y = 0 Then
T2(i + b1, 1) = t(i)
Else
For C = LBound(t, 2) To UBound(t, 2)
T2(C + b2, i + b2) = t(i, C)
Next
End If
Next
TransposeXV1 = T2
End Function