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
| Sub toto()
Dim PlageSource As Range
Dim PlageDest As Range
With ThisWorkbook
' la plage en J1 qui part de A2 jusqu'à la première ligne non vide en partant de tout en bas
Set PlageSource = .Worksheets("J1").Cells(2, 1).Resize(.Worksheets("J1").Cells(.Worksheets("J1").Rows.Count, 1).End(xlUp).Row - 1, 1)
' la plage en Articles qui part de F2 jusqu'à la première ligne non vide en partant de tout en bas
Set PlageDest = .Worksheets("Articles").Cells(2, 6).Resize(.Worksheets("Articles").Cells(.Worksheets("Articles").Rows.Count, 2).End(xlUp).Row - 1, 1)
End With
With PlageDest
' on écrit la formule =SOMMEPROD(('J1'!$A$2:$A$11=B2)*('J1'!$D$2:$D$11))
' B2 sera remplacé par B3 en ligne 3, B4 en ligne 4 etc...
.Formula = "=SUMPRODUCT((J1!" & PlageSource.Address(True, True) & "=B2)*(J1!" & PlageSource.Offset(0, 3).Address(True, True) & "))"
' on remplace les formules par leur valeur
.Value = .Value
' sur la colonne à côté de F2 (=colonne G)
With .Offset(0, 1)
' on écrit la formule =SOMMEPROD(('J1'!$A$2:$A$11=B2)*('J1'!$C$2:$C$11=33)*('J1'!$D$2:$D$11))
.Formula = "=SUMPRODUCT((J1!" & PlageSource.Address(True, True) & "=B2)*('J1'!" & PlageSource.Offset(0, 2).Address(True, True) & "=33)*(J1!" & PlageSource.Offset(0, 3).Address(True, True) & "))"
' on remplace les formules par leur valeur
.Value = .Value
End With
End With
End Sub |
Partager