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
|
Sub Calculs(varLigne As Long, varCol As Integer, varSheet As String)
Application.ScreenUpdating = False
'cas où la modif est sur la feuille COM :
If varSheet = "COM" Then
'dans ce cas il faut reporter la modif sur toutes les feuilles Matrice XXX, ligne de la compétence modifiée
For Each s1 In ThisWorkbook.Sheets 's1 est une feuille "Matrice XXX"
If Left(s1.Name, 7) = "Matrice" Then
For Each s2 In ThisWorkbook.Sheets 's2 est la feuille du jour correspondant à la matrice en cours de traitement
'on recherche la feuille de présence du jour concernant la matrice en cours de traitement
If InStr(1, s1.Name, s2.Name, 1) > 0 And s1.Name <> s2.Name Then
a = 2
Do While s1.Cells(1, a) <> "" 'pour chaque cellule de la feuille "matrice" en cours correspondant à la ligne de la compétence touchée...
decompte = 0
b = 2
Do While Sheets("COM").Cells(1, b) <> "" 'pour chaque agent de la compétence visée
decompte = decompte + Sheets("COM").Cells(varLigne, b) * s2.Cells(a, b)
b = b + 1
Loop
s1.Cells(varLigne, a) = decompte
a = a + 1
Loop
End If
Next s2
End If
Next s1
Else 'cas où la modif est une autre feuille (une feuille de jour) :
'il faut chercher la feuille de matrice qui correspond à la feuille jour modifiée
For Each s1 In ThisWorkbook.Sheets 's1 est une feuille "Matrice XXX"
If Left(s1.Name, 7) = "Matrice" And InStr(1, s1.Name, varSheet, 1) > 0 Then
Set s2 = Sheets(varSheet) 's2 est la feuille du jour modifiée
a = 2 'a = ligne en cours des feuilles Matrice XXX et COM
Do While s1.Cells(a, 1) <> ""
decompte = 0
b = 2 'b = colonne en cours de la feuille de jour modifiée
Do While s2.Cells(1, b) <> ""
decompte = decompte + Sheets("COM").Cells(a, b) * s2.Cells(varLigne, b)
b = b + 1
Loop
s1.Cells(a, varLigne) = decompte
a = a + 1
Loop
End If
Next s1
End If
Application.ScreenUpdating = True
End Sub
Public Sub Initialisation()
On Error Resume Next
'provoque un changement dans les feuilles concernées pour initialiser les feuilles Matrice XXX
For Each s1 In ThisWorkbook.Sheets
If Left(s1.Name, 7) <> "Matrice" Then
s1.Activate
a = 2
Do While Cells(a, 1) <> ""
valeur = CInt(Cells(a, 2))
If valeur = 0 Then Cells(a, 2) = 1
If valeur = 1 Then Cells(a, 2) = 0
DoEvents
DoEvents
Cells(a, 2) = valeur
DoEvents
DoEvents
a = a + 1
Loop
End If
Next s1
End Sub |
Partager