Résolu soustraction 2 cellules qui bougent toutes les semaines

sanounette

Nouveau membre
Bonjour,
J'aimerais pouvoir faire une soustraction entre 2 cellules qui contiennent le chiffre d'affaire par semaine et que cette formule se décale toutes les semaines.
pour être plus clair j'ai
A1 B1 C1 D1 E1
25k€ 18k€ 26k€ 23k€

et j'aimerais que dans la cellule E1, la première semaine la formule soit A1-B1, la deuxième semaine B1-C1, la troisième semaine C1-D1.....
est ce qu'il existe une formule Excel pour faire ça? j'ai essayé avec la fonction décaler mais je dois mal faire quelque chose. Ou est ce que je dois faire une macro VBA (sachant que je suis débutante pouvez vous m'aider?)
merci pour votre aide
 

zpap88

Nouveau membre
Meilleure réponse
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:
Code:
;1 devient ;2
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 056
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut