dionys0s
XLDnaute Impliqué
Bonjour le forum,
j'avais écrit il y a quelques mois une fonction servant à "aplatir" un ParamArray pouvant être rempli par des valeurs et/ou des arrays, chaque array étant potentiellement également composé de valeurs et/ou d'arrays.
Ma question est la suivante : existe-t-il une approche non récursive (itérative donc) pour arriver au même résultat à partir des même paramètres ? J'étais persuadé d'avoir trouvé par le passé des pages Internet à ce sujet, mais impossible de les retrouver.
D'avance, merci pour votre aide
dionys0s
j'avais écrit il y a quelques mois une fonction servant à "aplatir" un ParamArray pouvant être rempli par des valeurs et/ou des arrays, chaque array étant potentiellement également composé de valeurs et/ou d'arrays.
VB:
Public Sub TestAplatir()
Dim Str1 As String, Str2 As String
'Exemple sans array
Let Str1 = VBA.Join(Aplatir( _
1, _
2, _
3, _
4, _
5, _
6, _
7, _
8, _
9, _
10), ", ") 'Renvoie "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
'Exemple avec des valeurs et des arrays imbriqués
Let Str2 = VBA.Join(Aplatir( _
1, _
Array( _
2, _
3), _
Array( _
4, _
Array( _
5, _
6, _
7), _
8, _
9), _
10), ", ") 'Renvoie "1, 2, 3, 4, 5, 6, 7, 8, 9, 10" également
VBA.MsgBox Str1 & VBA.vbNewLine & Str2
End Sub
Public Function Aplatir(ParamArray Elements() As Variant) As Variant()
Dim vntElement As Variant
Let Aplatir = VBA.Array
For Each vntElement In Elements
Call sAplatir(Aplatir, vntElement)
Next vntElement
End Function
Private Sub sAplatir(ByRef Result() As Variant, ByRef Element As Variant)
Dim vntElement As Variant
If VBA.IsArray(Element) Then
For Each vntElement In Element
Call sAplatir(Result, vntElement)
Next vntElement
Else
ReDim Preserve Result(LBound(Result) To UBound(Result) + 1)
Let Result(UBound(Result)) = Element
End If
End Sub
Ma question est la suivante : existe-t-il une approche non récursive (itérative donc) pour arriver au même résultat à partir des même paramètres ? J'étais persuadé d'avoir trouvé par le passé des pages Internet à ce sujet, mais impossible de les retrouver.
D'avance, merci pour votre aide
dionys0s