'/!\ Active la référence Microsoft Scripting Runtime
Private Function Dispatch(ByVal Tb, ByVal Typ As String)
Dim Ouvrage As New Scripting.Dictionary
Dim PosteDirect As New Scripting.Dictionary
Dim C As Integer, m As Integer, R As Integer, n As Integer
Dim p As Integer, i As Integer, j As Integer, k As Integer
Dim Res(), Tmp, Vemp
p = UBound(Tb, 1)
For i = 1 To p
If Tb(i, 2) = Typ Then
Ouvrage(Tb(i, 3)) = ""
PosteDirect(Tb(i, 4) & "|" & Tb(i, 9)) = ""
End If
Next i
C = Ouvrage.Count
m = 5 + 2 * C
R = PosteDirect.Count
n = 2 + R
ReDim Res(1 To n, 1 To m)
Res(1, 1) = "N°Poste Localisation"
Res(1, 2) = "Redresseur"
Res(1, 3) = "Redresseur"
Res(2, 2) = "Tension (V)"
Res(2, 3) = "Courant (A)"
For j = 0 To 2 * C - 1
k = Int(j / 2)
Res(1, j + 4) = Ouvrage.Keys(k)
Res(2, 2 * k + 4) = "Potentiel (mV)"
Res(2, 2 * k + 5) = "Courant (mA)"
Next j
Res(1, m - 1) = "Direction"
Res(1, m) = "Observations (" & Typ & ")"
For i = 3 To n
Vemp = Split(PosteDirect.Keys(i - 3), "|")
Res(i, 1) = Vemp(0)
For j = 4 To m - 2 Step 2
k = Int((j - 4) / 2)
Tmp = Sum(Tb, Typ, Vemp(1), Ouvrage.Keys(k), Res(i, 1))
If Res(i, 2) = "" Then Res(i, 2) = Tmp(0)
If Res(i, 3) = "" Then Res(i, 3) = Tmp(1)
Res(i, j) = Tmp(2)
Res(i, j + 1) = Tmp(3)
Res(i, m) = Res(i, m) & "" & Tmp(5)
Next j
Res(i, m - 1) = Vemp(1)
Next i
Set Ouvrage = Nothing
Set PosteDirect = Nothing
Dispatch = Res
End Function