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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| Option Explicit
Sub Traitement()
Dim Lastlig As Long
Dim Tb, Tablo, Tp
Dim Ind As Byte
Application.ScreenUpdating = False
With Worksheets("BD")
Lastlig = .Cells(.Rows.Count, 1).End(xlUp).Row
Tb = .Range("A8:J" & Lastlig)
End With
Tp = Array("Beta", "Delta")
Application.DisplayAlerts = False
On Error Resume Next
Worksheets(Tp).Clear
On Error GoTo 0
Application.DisplayAlerts = False
For Ind = 0 To 1
Tablo = Dispatch(Tb, Tp(Ind))
With Worksheets(Tp(Ind))
.Name = UCase(Tp(Ind))
.Range("A1") = Tp(Ind)
.Range("A7").Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
.Range("A9").Resize(UBound(Tablo, 1) - 2, UBound(Tablo, 2)).Sort Key1:=.Range("A9"), order1:=xlAscending, Header:=xlNo
End With
Next Ind
End Sub
'/!\ 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°"
Res(1, 2) = "Alim"
Res(1, 3) = "Alim"
Res(2, 2) = "(V)"
Res(2, 3) = "(A)"
For j = 0 To 2 * C - 1
k = Int(j / 2)
Res(1, j + 4) = Ouvrage.Keys(k)
Res(2, 2 * k + 4) = "(mV)"
Res(2, 2 * k + 5) = "(mA)"
Next j
Res(1, m - 1) = "Dire"
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
Private Function Sum(ByVal Tb, ByVal Typ As String, ByVal Dire As String, ByVal Ouv As String, ByVal Post As String)
Dim Tablo(0 To 5)
Dim i As Integer
Dim t As Byte
For i = 1 To UBound(Tb, 1)
If Tb(i, 2) = Typ And Tb(i, 3) = Ouv And Tb(i, 4) = Post And Tb(i, 9) = Dire Then
For t = 0 To 5
Tablo(t) = Replace(Tb(i, 5 + t), Chr(10), " ")
Next t
Exit For
End If
Next i
Sum = Tablo
End Function |
Partager