Bonjour,
D'après ce que je comprends, les 4 premières cellules de la ligne 1 comprennent les données de chaque semaine, et E1 doit contenir le résultat par rapport à la semaine précédente. Donc, à chaque changement de semaine, E1 perd son résultat précédent pour celui en cours. C'est bien cela ?
Je fais d'abord remarquer que le résultat peut être facilement obtenu: en tapant A1-B1 dans E1, et en recopiant cette formule en F1 et G1. On a l'avantage de voir l'évolution de semaine en semaine !
Maintenant, si on veut ce résultat uniquement en E1, sans historique, il faut bien avoir un critère de changement de semaine. Je n'en vois qu'un: la présence de donnée dans la cellule de la semaine suivante. En testant cette présence, on peut en déduire la différence à calculer.
Tout ce qui va suivre suppose que les formules soient enregistrées en "array" càd Ctrl+Maj+Entrée.
1/ détermination de la cellule la plus à droite contenant une valeur numérique dans la zone A1: D1
Code:
=MAX(ISNUMBER(A1:D1)*COLUMN(A1:D1)) on obtient le numéro de la colonne concernée
2/ détermination de la valeur de la cellule dans cette colonne:
Code:
=INDIRECT(ADDRESS(ROW();MAX(ISNUMBER(A1:D1)*COLUMN(A1:D1))))
Cependant, ce faisant, la formule donne une erreur si aucune semaine n'est garnie. En effet, pour cette semaine, la colonne (résultat de la formule 1/) est 0, ce qui ne se peut pas pour un numéro de colonne.
Pour éviter cela, il faut modifier la formule en ce qui concerne la détermination de la cellule précédente pour imposer la valeur 1 si le calcul donne zéro:
Code:
=INDIRECT(ADDRESS(ROW();MAX(MAX(ISNUMBER(A1:D1)*COLUMN(A1:D1));1)))
3/ détermination de la valeur de la cellule précédente sur la même ligne:
Code:
=INDIRECT(ADDRESS(ROW();MAX(ISNUMBER(A1:D1)*COLUMN(A1:D1)))-1)
Cependant, ce faisant, la formule donne une erreur s'il seulement la première semaine est garnie. En effet, pour cette semaine, la colonne est 1, tandis que la formule va calculer la précédente à 1-1 càd zéro, ce qui ne se peut pas pour un numéro de colonne.
Pour éviter cela, il faut modifier la formule en ce qui concerne la détermination de la cellule précédente pour imposer la valeur 1 si le calcul donne zéro:
Code:
=INDIRECT(ADDRESS(ROW();MAX(MAX(ISNUMBER(A1:D1)*COLUMN(A1:D1))-1;1)))
4/ il suffit désormais de faire la différence. Si aucune information ou seulement la première semaine, on obtiendra alors zéro dans la cellule E1:
Code:
=INDIRECT(ADDRESS(ROW();MAX(MAX(ISNUMBER(A1:D1)*COLUMN(A1: D1))-1;1)))-INDIRECT(ADDRESS(ROW();MAX(MAX(ISNUMBER(A1:D1)*COLUMN(A1: D1));1)))
en français:
Code:
=INDIRECT(ADRESSE(LIGNE();MAX(MAX(ESTNUM(A1:D1)*COLONNE(A1:D1))-1;1)))-INDIRECT(ADRESSE(LIGNE();MAX(MAX(ESTNUM(A1:D1)*COLONNE(A1:D1));1)))
Cette formule peut être recopiée de ligne en ligne (si on a une ligne par mois par exemple).
Enfin, elle suppose que les données mensuelles commencent à la colonne A. Si vous voulez intercaler une première colonne (par exemple pour y mettre le libellé du mois, alors il faut adapter le calcul dans les deux MAX: