Rem. —— Chargement des paramètres en Tableau. Plages multizones et tableaux de variants supportés. Ces fonctions sont concues pour mettre en un tableau
' unique de Variant des valeurs de plages exactement comme le fait DictionnArbo mais pour d'autres usages, ou non, depuis VBA, à partir
' de paramètres à analyser soit spécifiés par la procédure appelante soit simplement transmis par elle selon un ParamArray récupéré.
Public Sub CréerTabSpécif(TabRésu() As Variant, ParamArray Param() As Variant): CréerTableau TabRésu, Param: End Sub
Public Sub CréerTabDicoSpécif(ParamArray Param() As Variant): CréerTableau TabDico, Param: End Sub
Public Sub CréerTabDico(ByVal Param As Variant): CréerTableau TabDico, Param: End Sub
Public Function TabSpéc(ByVal Param As Variant) As Variant(): CréerTableau TabSpéc, Param: End Function
Public Sub CréerTableau(TabRésu() As Variant, ByVal Param As Variant)
Dim P As Long, Z As Long, VZon() As Variant, C As Long, CFnA As Long
LMax = 0
For P = 0 To UBound(Param)
If TypeName(Param(P)) = "Range" Then
For Z = 1 To Param(P).Areas.Count
If LMax = 0 Then
TabRésu = Param(P).Areas(1).Value: LMax = UBound(TabRésu, 1): CMax = UBound(TabRésu, 2)
Else
VZon = Param(P).Areas(Z).Value
If UBound(VZon, 1) <> LMax Then MsgBox "Paramètre " & P & ", zone " & Z & ": " & UBound(VZon, 1) & " lignes au lieu de " & LMax _
& vbLf & "==> Débogage obligatoire", vbCritical, "Fabriquer tableau": Stop: Exit Sub ' Déroulez en pas à pas
ReDim Preserve TabRésu(1 To LMax, 1 To CMax + UBound(VZon, 2)) As Variant
For C = 1 To UBound(VZon, 2)
CMax = CMax + 1
For L = 1 To LMax: TabRésu(L, CMax) = VZon(L, C): Next L
Next C
End If
Next Z
ElseIf Not IsArray(Param(P)) Then
On Error Resume Next: CFnA = Param(P): If Err Then CFnA = CMax
On Error GoTo 0
ElseIf LMax = 0 Then
TabRésu = Param(P): LMax = UBound(TabRésu, 1): CMax = UBound(TabRésu, 2)
ElseIf UBound(Param(P), 1) <> LMax Then
MsgBox "Paramètre " & P & ": " & UBound(Param(P), 1) & " lignes au lieu de " & LMax _
& vbLf & "==> Débogage obligatoire", vbCritical, "Fabriquer tableau": Stop: Exit Sub ' Déroulez en pas à pas
Else
ReDim Preserve TabRésu(1 To LMax, 1 To CMax + UBound(Param(P), 2)) As Variant
For C = 1 To UBound(Param(P), 2)
CMax = CMax + 1
For L = 1 To LMax: TabRésu(L, CMax) = Param(P)(L, C): Next L
Next C
End If
Next P
If CFnA <> 0 Then CMax = CFnA
End Sub