Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

somme cumulées

42 views
Skip to first unread message

EVELYNE C.

unread,
Oct 28, 1998, 3:00:00 AM10/28/98
to
Je veux faire une gestion de stocks et je ne trouve pas la formule me
permettant d'incrémenter une cellule. exemple cellule A3 : entrées
(variables), cellule D3 : entrées cumulées (somme de chaque entrée en A3).
Merci de bien vouloir m'aider à résoudre ce casse tête
PS J'ai essayé avec les itérations mais je manque d'information sur cet
outil.


Laurent Longre

unread,
Oct 29, 1998, 3:00:00 AM10/29/98
to
Je ne pense pas que tu puisses faire ça avec les itérations (mais je
dois bien avouer que je ne suis pas un spécialiste dans ce domaine). Tu
peux essayer les manips suivantes, mais ça ne marche pas comme il
faudrait:

- Dans Outils -> Options -> Onglet "Calcul", coche "Itération" et entre
le nombre 1 dans la zone de texte "Nombre maximal d'itérations".

- En D3, utilise la formule =A3+D3

Le problème, c'est que cette formule est volatile, c'est-à-dire qu'elle
est recalculée à chaque fois qu'une saisie ou un calcul quelconque se
produit n'importe où dans le classeur. Si A3 contient 5, D3 va prendre
automatiquement comme valeurs 5, puis 10, 15 etc. à chaque nouvelle
saisie dans le classeur (et non pas seulement quand le contenu de A3 est
modifié).

J'ai créé pour ma part une petite fonction complémentaire pour Excel 97
SR-1 / Excel 95
(http://perso.wanadoo.fr/longre/excel/pages/Downloads.htm#Morefun.xll)
qui permet à une cellule d'utiliser son propre contenu, sans activer les
itérations.

Dans ton cas, cette fonction ("RAPPEL") pourrait être utilisée sous
cette forme: =RAPPEL(VRAI)+A3. Le paramètre VRAI indique que la fonction
doit se comporter de manière non volatile. Le fichier d'aide indique
quelques exemples d'utilisation de cette fonction.

A +

Laurent

Daniel HACHE

unread,
Oct 29, 1998, 3:00:00 AM10/29/98
to
Salut,

voici un petit article MS qui décrit comment faire un cumul tout en formule.
En gros les infos de Laurent sont un bon début. Il manque juste une petite
astuce pour éviter que la formule de cumul ne soit volatile.

Quoi qu'il en soit la solution de Laurent d'utiliser un peu de code externe
est peut être plus facile à manipuler.

Daniel

XL: Effectuer un cumul itératif avec recalcul sélectif
ID: Q12370

-------------------------------------------------------------------------
Cette note technique concerne le(s) produit(s) suivant(s) :

- Microsoft Excel pour Windows 95, version 7.0
- Microsoft Excel pour Windows, versions 4.0, 5.0, 5.0c
- Microsoft Excel pour le Macintosh, versions 4.0, 5.0
- Microsoft Excel pour Windows NT, version 5.0
-------------------------------------------------------------------------

QUESTION :

Dans une feuille de calcul, j'ai créé des formules circulaires avec
itération pour effectuer des cumuls. Cependant, le mode de calcul étant
en automatique, chaque fois que je modifie une valeur sur cette feuille
de calcul, toutes les cellules de cumul se recalculent.
Comment dois-je procéder ?


REPONSE :

Il suffit d'utiliser la fonction CELLULE() avec l'argument "adresse", qui
renvoie l'adresse de la cellule validée, ou passée en argument.
La formule à inscrire dans la cellule de cumul devient :

=SI(CELLULE("adresse")=CELLULE("adresse";réf_à_cumuler);
SOMME(réf_à_cumuler;réf_du_cumul;réf_du_cumul)

où :
* réf_à_cumuler : est le nom ou la référence de la cellule dont la
valeur est à cumuler.
* réf_du_cumul : est le nom ou la référence de la cellule, stockant
le cumul.


EXEMPLE :

Soit la cellule B1 comportant la formule suivante :
A B
1 =A1+B1
2

Si vous avez coché Itération et que vous avez spécifié la valeur 1 comme
Nombre maximum d'itérations dans l'onglet Calcul de la boîte de dialogue
Options accessible par la commande Options du menu Outils, cette cellule
est une zone de cumul des saisies de la cellule A1. Ainsi, à chaque
saisie d'une nouvelle valeur dans la cellule A1, cette valeur viendra se
cumuler à la valeur déjà présente en B1.

Cependant, si vous saisissez une valeur dans une autre cellule quelconque de
la
feuille de calcul, la valeur saisie en A1 viendra de nouveau se cumuler à
B1. En
effet, la valeur de la cellule B1 ayant été modifiée lors du premier cumul,
les
données sources de la formule ont changé, et, donc, la formule est
recalculée.

Pour éviter ce phénomène, il vous suffit d'écrire la formule suivante
dans la cellule B1 :

A B
1 =SI(CELLULE("adresse")=CELLULE("adresse";A1);SOMME(A1;B1);B1)
2

Sachant que la fonction CELLULE("Adresse") renvoie l'adresse de la
cellule active, la fonction SI() utilisée permettra de ne cumuler la
valeur contenue en A1 que si c'est bien cette cellule qui vient d'être
modifiée.


REMARQUE :

Dans la version 4.0 d'Excel, les options de Mode de calcul sont modifiables
par
la commande Options / Mode de Calcul.


Laurent Longre a écrit dans le message <3637B3...@wanadoo.fr>...

Laurent Longre

unread,
Oct 29, 1998, 3:00:00 AM10/29/98
to
Salut Daniel,

Merci pour cette indication très intéressante. Tu es décidément une mine
inépuisable de renseignements :-)

L'astuce de MS est très bien vue, mais elle pose quand-même un petit
problème. Si la cellule contenant les valeurs à cumuler contient une
formule faisant référence à une ou plusieurs autres cellules, le cumul
ne fonctionne plus.

Si tu mets =A2 en A1, le cumul devrait se produire quand une nouvelle
entrée est faite en A2, donc l'utilisation de CELLULE("adresse") échoue.
De même si, par exemple, A1 contient un lien DDE avec mise à jour
automatique ou si son contenu est modifié par macro. Ou encore, si tu
sélectionnes par exemple la plage A1:A10 "de bas en haut" et que tu
saisis une nouvelle valeur par Ctrl-Entrée (la cellule active est A10).

Bon, je sais, je pinaille ;-)

A +

Laurent


Daniel HACHE a écrit:

Luc

unread,
Oct 30, 1998, 3:00:00 AM10/30/98
to

[COUIC]

| Si tu mets =A2 en A1, le cumul devrait se produire quand une nouvelle
| entrée est faite en A2, donc l'utilisation de CELLULE("adresse") échoue.
[RECOUIC]

Non, il faut écrire en B1 :
=SI(CELLULE("adresse")=CELLULE("adresse";A2);A1+B1;B1)


Laurent Longre

unread,
Oct 30, 1998, 3:00:00 AM10/30/98
to
Bien entendu, Luc. Ce que je voulais dire, c'est que l'astuce de MS fait
un peu "bricolage", puiqu'elle est tributaire de la cellule active au
moment de la saisie. Son usage est assez limité (comment ferais-tu avec
A1=SOMME(A3:C50;Feuil2!B1:B15)?) et présente des risques certains.

Une solution indépendante de la version d'Excel utilisée consisterait à
passer par une fonction macro XLM. Contrairement à VBA, les fonctions
XLM peuvent en effet récupérer le contenu de la cellule appelante:

=ARGUMENT("Cellule_cumul";1)
=RETOUR(CELLULE.APPELANTE()+Cellule_cumul)

Il est clair pour moi que MS **aurait dû** proposer cette solution-là,
qui est parfaitement fiable et transparente, plutôt qu'un truc limité et
reposant sur un comportement non-standard par rapport aux formules
habituelles de feuilles de calcul.

Laurent


Luc a écrit:
>
> [COUIC]


> | Si tu mets =A2 en A1, le cumul devrait se produire quand une nouvelle
> | entrée est faite en A2, donc l'utilisation de CELLULE("adresse") échoue.

Luc

unread,
Oct 30, 1998, 3:00:00 AM10/30/98
to

| Une solution indépendante de la version d'Excel utilisée consisterait à
| passer par une fonction macro XLM. Contrairement à VBA, les fonctions
| XLM peuvent en effet récupérer le contenu de la cellule appelante:
|
| =ARGUMENT("Cellule_cumul";1)
| =RETOUR(CELLULE.APPELANTE()+Cellule_cumul)
|
| Il est clair pour moi que MS **aurait dû** proposer cette solution-là,
| qui est parfaitement fiable et transparente, plutôt qu'un truc limité et
| reposant sur un comportement non-standard par rapport aux formules
| habituelles de feuilles de calcul.

Oui, absolument d'accord !

Daniel HACHE

unread,
Nov 3, 1998, 3:00:00 AM11/3/98
to
Erreur de votre part messieur. Le but était bien de faire ce type de cumul
dans une formule en évitant du code. L'article date du temps du langage
macro d'Excel. Laurent, tu connais ce langage, c'est vraiment peu pratique
pour un non initié. Toutefois, la limite de la formule est bien réelle.

(j'aime aussi pinailler......)

Daniel

Luc a écrit dans le message <01be0418$0faa5560$LocalHost@alpha02>...

0 new messages