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 103 104 105 106 107
| Option Explicit
Sub Dispatcher()
Dim LastCol As Integer, N As Integer, m As Integer
Dim DD As Long, DF As Long, ND As Long, NF As Long
Dim LastLig As Long, i As Long, j As Long
Dim Fichier As String, Collab As String
Dim Wbk As Workbook
Dim Dte As Date
Dim Data, Tb, Res
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("S18")
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
LastCol = .Cells(5, .Columns.Count).End(xlToLeft).Column
Data = .Range("A5").Resize(LastLig - 4, LastCol)
Dte = CDate(.Range("B3").Value)
DD = DateSerial(Year(Dte), Month(Dte), 1)
DF = DateAdd("d", -1, DateAdd("m", 1, Dte))
End With
For m = 3 To LastCol
Fichier = ThisWorkbook.Path & "\" & Data(1, m) & ".xlsx"
If OuvrirFichier(Wbk, Fichier) Then
With Wbk.Worksheets(1)
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
Tb = .Range("G3:J" & LastLig)
For j = 1 To UBound(Tb, 1)
If CLng(Tb(j, 2)) >= DD And ND = 0 Then ND = j
If CLng(Tb(j, 2)) > DF Then
NF = j - 1
Exit For
End If
Next j
Res = .Range("W3:W" & LastLig)
If ND <> 0 Then
If NF = 0 Then NF = j - 1
AleaTab Data
For i = 2 To UBound(Data, 1)
N = Val(Data(i, m))
If N > 0 Then
Collab = Data(i, 1)
Remp Tb, Res, N, Collab, ND, NF, "D3"
If N > 0 Then Remp Tb, Res, N, Collab, ND, NF, "D4"
If N > 0 Then Remp Tb, Res, N, Collab, ND, NF, "D11"
If N > 0 Then Remp Tb, Res, N, Collab, ND, NF
End If
Next i
.Unprotect
.Range("W3:W" & LastLig) = Res
.Protect
End If
End With
Wbk.Close True
Set Wbk = Nothing
ND = 0: NF = 0
Else
MsgBox "Fichier " & Fichier & " inexistant", , "Erreur Fatale"
End If
Next m
MsgBox "Traitement terminé..."
End Sub
Private Function OuvrirFichier(ByRef Wbk As Workbook, ByVal NomFichier As String) As Boolean
If Dir(NomFichier) <> "" Then
Set Wbk = Workbooks.Open(NomFichier)
OuvrirFichier = True
End If
End Function
Private Sub Remp(ByVal Tb, ByRef Res, ByRef NN As Integer, ByVal Collabo As String, ByVal D As Long, ByVal F As Long, Optional ByVal Rd As String = vbNullString)
Dim p As Long
For p = D To F
If Tb(p, 4) = "" And Res(p, 1) = "" Then
If Tb(p, 1) = Rd Or Rd = vbNullString Then
Res(p, 1) = Collabo
NN = NN - 1
If NN = 0 Then Exit For
End If
End If
Next p
End Sub
Private Sub AleaTab(ByRef Tablo)
Dim i As Long, j As Long, q As Long
Dim k As Integer
Dim Tmp
q = UBound(Tablo, 1)
For i = 2 To q - 1
Randomize
j = Int((q - i + 1) * Rnd + i)
If j <> i Then
For k = 1 To UBound(Tablo, 2)
Tmp = Tablo(i, k)
Tablo(i, k) = Tablo(j, k)
Tablo(j, k) = Tmp
Next k
End If
Next i
End Sub |
Partager