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
| ' la macro se déclenche à chaque modification sur la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
' si la modification concerne les colonnes A, B ou M
If Target.Column < 3 Or Target.Column = 13 Then
Dim C As Range, Tabl, Plage As Range
With Application
'on désactive les macros éventielles (celle-ci)
.EnableEvents = False
'on désactive les modifications d'écran
.ScreenUpdating = False
'définition de la plage à recalculer (colonnes AE, AF, AG)
Set Plage = Range([AE3], Cells(Rows.Count, "AE").End(xlUp)).Resize(, 3)
'chargement de cette plage dans une variable tableau en mémoire pour accélérer les calculs
Tabl = .Transpose(.Transpose(Plage))
'"Tabl, 1" représente la première colonne (AE)
'de la première à la dernière cellule de cette plage
For i = 1 To UBound(Tabl, 1)
'calcul du résultat de la formule de AE
Tabl(i, 1) = Evaluate("sumproduct((" & [clé].Address & "=4)*(" & [document_HA].Address & "=B" & _
i + 2 & ")*(" & [division].Address & "))/2")
'calcul du résultat de la formule de AF
Tabl(i, 2) = Evaluate("sumproduct((" & [clé].Address & "="" "")*(" & [document_HA].Address & "=B" & _
i + 2 & ")*(" & [division].Address & "))/2")
'calcul du résultat de la formule de AG
Tabl(i, 3) = Evaluate("sumproduct((" & [clé].Address & "=""ZSNC"")*(" & [document_HA].Address & "=B" & _
i + 2 & ")*(" & [division].Address & "))/2")
Next i
'Recopie de la variable tableau sur la feuille
Plage.Value = Tabl
.ScreenUpdating = True
.EnableEvents = True
End With
End If
End Sub |
Partager