Faq/Calc/125/fr

Comment réaliser un cumul avec les itérations ?
Contexte : on souhaite cumuler un résultat de calcul avec le résultat précédent. Comment procéder sachant qu'en principe lorsqu'on modifie les valeurs "source" du calcul ce dernier est refait et ne "mémorise" pas la valeur précédente ?

Dans l'exemple suivant le résultat du calcul se trouve en C7 :

=C10-C13+C16



On souhaiterait pouvoir saisir de nouvelles valeurs en C10, C13 ou C16 et que le résultat de l'opération se cumule avec le résultat précédent.

Moyennant quelques contraintes ceci peut être réalisé via les itérations.



Explications
 * Commençons tout d'abord par... la possibilité de réinitialiser le cumul. Nous gérons cela par la valeur contenue dans une cellule "test". Par exemple, si C5 contient zéro, le cumul doit être réinitialisé.


 * Il faut ensuite régler un pas d'itération par le menu . Définir à 1 provoque 2 calculs. Mais on ne veut pas ajouter deux fois C7 au cumul. La solution est simple : on divisera le résultat cumulé par 2 (cf. ci-dessous en E7).


 * La valeur de changement minimum définira indirectement la valeur maximum prise en compte. Par exemple ici, avec une valeur de 10000, une valeur en C7 supérieure à 20000 provoquera une erreur 523 (Le calcul ne converge pas).


 * Continuons par le cumul lui-même. Le calcul à cumuler est déjà réalisé en C7 mais on ne peut utiliser cette cellule comme source du cumul car il faut que le cumul se mette à jour lors de la saisie d'une des cellules "sources" du calcul (celles en orange dans la copie d'écran). On "refait" donc le calcul en E7 en incluant le test de réinitialisation et la division par 2 :

=SI(C5=0;0;E7+((C10-C13+C16)/2))


 * Lors du chargement du classeur le logiciel recalcule... ce qui est gênant pour les cumuls. On prend donc la précaution de désactiver ce calcul automatique (menu ' ou ' dans les versions précédentes) et le recalcul sera provoqué "manuellement" par .

Dans l'exemple joint la feuille est protégée (sans mot de passe) pour que seules les zones où la saisie est attendue soient accessibles.


 * [[Media:FR.CALC CumulerParIteration.ods|Télécharger le classeur exemple]]