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
| Option Explicit
Const Donnees As String = "Données"
Const Instruction As String = "Instruction"
Sub Traitement()
Dim NTrai As Long, NData As Long, i As Long, j As Long
Dim Tmp() As String, Code As String
Dim Res, Rech, Data, LesDonnees
Dim Cpt As Double
Dim n As Integer
Application.ScreenUpdating = False
With Worksheets(Donnees)
NTrai = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("B2:B" & NTrai).ClearContents
Res = .Range("A2:B" & NTrai)
End With
With Worksheets(Instruction)
NData = .Cells(.Rows.Count, 1).End(xlUp).Row
Rech = .Range("A2:E" & NData)
Data = .Range("H2:S" & NData)
End With
ReDim Tmp(1 To NData - 1)
For i = 1 To NData - 1
Tmp(i) = Rech(i, 1) & Rech(i, 2) & Rech(i, 3) & Rech(i, 4) & Rech(i, 5)
Next i
LesDonnees = RempliData(Data)
For j = 1 To NTrai - 1
Code = Res(j, 1)
For i = 1 To NData - 1
If Code = Tmp(i) Then
For n = 1 To UBound(Data, 2)
If Trim(Data(i, n)) <> "" Then Cpt = Cpt + Val(Data(i, n)) + LesDonnees(n, 2)
Next n
Exit For
End If
Next i
Res(j, 2) = Cpt
Cpt = 0
Next j
Worksheets(Donnees).Range("A2:B" & NTrai) = Res
End Sub
'---------------------------------------
Private Function RempliData(ByVal Tmp)
Dim i As Integer, j As Integer, LastLig As Integer
Dim Tb(), Tablo
Dim Ws As Worksheet
Dim Pers As String
Application.ScreenUpdating = False
ReDim Tb(1 To UBound(Tmp, 2), 1 To 2)
For i = 1 To UBound(Tmp, 2)
Tb(i, 1) = Tmp(1, i)
Next i
For Each Ws In ThisWorkbook.Worksheets
With Ws
If .Name <> Donnees And .Name <> Instruction Then
LastLig = .Cells(.Rows.Count, "G").End(xlUp).Row
If LastLig > 1 Then
Tablo = .Range("G2:H" & LastLig)
For i = 1 To UBound(Tmp, 2)
Pers = Tb(i, 1)
For j = 1 To LastLig - 1
If Tablo(j, 1) = Pers Then
Tb(i, 2) = Tb(i, 2) + Val(Tablo(j, 2))
Exit For
End If
Next j
Next i
End If
End If
End With
Next Ws
RempliData = Tb
End Function |