Ok je comprend mieux.
Je n'ai pas de solution toute faite, mais on peut réfléchir à ça ensemble.
Visiblement il faudra utiliser l'évènement Worksheet_Change dans le code VBA de la feuille cumul. Mais ATTENTION : il s'enclenche dès qu'une cellule est modifiée (or on va en modifier une par le code, justement. Il faut éviter les boucles infinies, qui feront planter Excel).
Worksheet_Change prend en paramètre un objet "range" qui est la cellule qu'on vient de modifier. Si on part du principe que l'utilisateur va toujours taper le nombre de jour dans la ligne 3, et que le résultat sera toujours affiché dans la ligne 4, on pourrait alors écrire quelque chose du genre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Private Sub Worksheet_Change(ByVal Target As Range)
Dim nbJours, i, somme As Integer
nbJours = Target.Value
' on s'assure que la cellule modifiée est bien sur la ligne 3
If Target.Row = 3 Then
somme = 0
' boucle pour parcourir les différentes feuilles
For i = 1 To i <= nbJour
somme = somme + Worksheets("Reporting Jour (" & i & ")").Cells(Target.Column, Target.Row + 1).Value
Next
' écriture du résultat juste en dessous
ActiveSheet.Cells(Target.Column, Target.Row + 1) = somme
End If
End Sub |
Ici, si l'utilisateur entre 5 dans B3, ça fera la somme des B4 des feuilles 1 à 5, et écrira le résultat dans la cellule B4 de la feuille cumul.
Pour adapter les colonnes et lignes ciblées, il suffit de modifer le code :
Cells(Target.Column, Target.Row + 1)
...en effectuant une opération sur les Target.Column (désigne la colonne : 1 pour A, 2 pour B, etc...) et Target.Row (désigne la ligne). Moi j'ai fait un +1 sur la ligne pour agir sur la ligne 4 quand c'est la ligne 3 qui est modifée.
Après il reste à adpater en fonction des cas.
Partager