1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| Option Explicit
Sub Test()
Dim Tbl(1000, 4), res As String, t#, s$
RempliTab Tbl, "Un string"
s = ";"
'pijaku : double boucle + Join
t = Timer
res = Join2D3(Tbl, s, 1)
Debug.Print "Double boucle + Join ByRow : " & Len(res) & " " & Timer - t
res = vbNullString
'PatrickToulon
t = Timer
res = Join2D4(Tbl, s, True)
Debug.Print "Index (Patrick) ByRow : " & Len(res) & " " & Timer - t
res = vbNullString
'pijaku : double boucle + Join
t = Timer
res = Join2D3(Tbl, s, 2)
Debug.Print "Double boucle + Join ByColumn : " & Len(res) & " " & Timer - t
res = vbNullString
'PatrickToulon
t = Timer
res = Join2D4(Tbl, s, False)
Debug.Print "Index (Patrick) ByColumn : " & Len(res) & " " & Timer - t
End Sub
Private Sub RempliTab(Tb, maVar As Variant)
Dim i&, j&
For i = LBound(Tb, 1) To UBound(Tb, 1)
For j = LBound(Tb, 2) To UBound(Tb, 2)
Tb(i, j) = maVar
Next
Next
End Sub
Private Function Join2D3(Tbl, Sep As String, Optional Order As Integer) As String
'Tbl : la variable tableau 2 dimensions à joindre
'Sep : le séparateur à utiliser
'Order : le sens
'ignoré : Order = 1 ==> par ligne
'par ligne : Order = 1
'par colonne : Order = 2
Dim i&, j&, StrTemp()
If Order = 1 Or Order = 0 Then
ReDim StrTemp(UBound(Tbl, 1))
For i = LBound(Tbl, 1) To UBound(Tbl, 1)
For j = LBound(Tbl, 2) To UBound(Tbl, 2)
StrTemp(i) = StrTemp(i) & Tbl(i, j) & Sep
Next
Next
ElseIf Order = 2 Then
ReDim StrTemp(UBound(Tbl, 2))
For i = LBound(Tbl, 2) To UBound(Tbl, 2)
For j = LBound(Tbl, 1) To UBound(Tbl, 1)
StrTemp(i) = StrTemp(i) & Tbl(j, i) & Sep
Next
Next
Else
Exit Function
End If
Join2D3 = Join(StrTemp, vbNullString)
End Function
Private Function Join2D4(vtest, Sep$, ByRow As Boolean) As String
'PatrickToulon
Dim temp$, i&
If ByRow Then
For i = LBound(vtest) To UBound(vtest)
temp = temp & Join(WorksheetFunction.Index(vtest, i + 1, 0), Sep)
Next
Else
For i = LBound(vtest, 2) To UBound(vtest, 2)
temp = temp & Join(Application.Transpose(WorksheetFunction.Index(vtest, 0, i + 1)), Sep)
Next
End If
Join2D4 = temp
End Function |
Partager