concaténer la gamme 3d dans Excel

Comment cette UDF peut-elle être modifiée pour tenir count de la gamme 3d de plusieurs feuilles?

Function ConcatenateRange(ByVal cell_range As range, _ Optional ByVal seperator As Ssortingng) As Ssortingng Dim cell As range Dim newSsortingng As Ssortingng Dim cellArray As Variant Dim i As Long, j As Long cellArray = cell_range.Value For i = 1 To UBound(cellArray, 1) For j = 1 To UBound(cellArray, 2) If Len(cellArray(i, j)) <> 0 Then newSsortingng = newSsortingng & (seperator & cellArray(i, j)) End If Next Next If Len(newSsortingng) <> 0 Then newSsortingng = Right$(newSsortingng, (Len(newSsortingng) - Len(seperator))) End If ConcatenateRange = newSsortingng End Function 

cela marche 🙂

 =ConcatenateRange(C4:C16) 

Mais celui-ci ne fonctionne pas 🙁

 =ConcatenateRange(sheet1:sheet5!B1) 

Voici une version qui couvrira plusieurs feuilles, mais comme elle utilise une variable Ssortingng comme input, elle aura des problèmes potentiels de volatilité:

 Option Explicit Function ConcatenateRange(ByVal cell_ssortingng As Ssortingng, _ Optional ByVal separator As Ssortingng) As Ssortingng Application.Volatile Dim newSsortingng As Ssortingng Dim ary1 As Variant, ary2 As Variant Dim cell_range As Range Dim cellArray As Variant Dim i As Long, J As Long, K As Long Dim sh As Worksheet ConcatenateRange = "" Dim sheet_col As Collection Set sheet_col = New Collection If InStr(cell_ssortingng, "!") > 0 Then ary1 = Split(cell_ssortingng, "!") If InStr(ary1(LBound(ary1)), ":") > 0 Then ary2 = Split(ary1(LBound(ary1)), ":") For i = LBound(ary2) To UBound(ary2) sheet_col.Add Sheets(ary2(i)) Next i Else sheet_col.Add Sheets(ary1(LBound(ary1))) End If Else sheet_col.Add Sheets(Application.Caller.Parent.Name) ReDim ary1(1 To 1) ary1(1) = cell_ssortingng End If For K = 1 To sheet_col.Count Set sh = sheet_col(K) Set cell_range = sh.Range(ary1(UBound(ary1))) If cell_range.Count = 1 Then ReDim cellArray(1 To 1, 1 To 1) cellArray(1, 1) = cell_range.Value Else cellArray = cell_range.Value End If For i = 1 To UBound(cellArray, 1) For J = 1 To UBound(cellArray, 2) If Len(cellArray(i, J)) <> 0 Then newSsortingng = newSsortingng & (separator & cellArray(i, J)) End If Next Next If Len(newSsortingng) <> 0 Then newSsortingng = Right$(newSsortingng, (Len(newSsortingng) - Len(separator))) End If ConcatenateRange = ConcatenateRange & newSsortingng Next K End Function 

Doit être utilisé avec la syntaxe comme:

 =ConcatenateRange("A1:E1",".") =ConcatenateRange("Sheet1!A1:E1",".") =ConcatenateRange("Sheet2!A1:E1",".") =ConcatenateRange("Sheet2!A1:E1",".") =ConcatenateRange("Sheet1:Sheet2!A1",".")