3.3Cumuls en cours d'exécution (Running Total)
L'essentiel en 30 secondes
- Résumé = total final, cumul = total qui monte : le résumé (2-2) donne UN total à la fin ; le cumul en cours d'exécution affiche le total intermédiaire à chaque ligne (solde progressif, total à ce jour).
- Le réglage crucial, c'est le Reset : jamais (cumul global sur tout le rapport), par groupe (repart de zéro par client/compte), ou sur formule — il donne son sens au cumul.
- Un cumul dépend de l'ordre : il additionne dans l'ordre d'affichage — trier les lignes d'abord (par date pour un relevé), sinon les soldes intermédiaires n'ont aucun sens.
Mini-cas filé — Farès sort le relevé progressif par client
Farès, contrôleur de gestion à Alger, doit fournir à chaque commercial le relevé de ses clients avec le solde APRÈS chaque facture — pas seulement le total final. Il crée un champ de cumul (explorateur → Running Total Fields) : champ Montant en Somme, évalué pour chaque enregistrement, réinitialisé à chaque changement de groupe Client, lignes triées par date. Chaque ligne affiche désormais le solde cumulé à cette date, repartant de zéro pour chaque client. Les commerciaux suivent l'évolution au lieu de découvrir le total à la fin.
Ce même cas revient dans le cours, le schéma, le script et le défi 48h.
1. Cumul contre résumé : le total qui progresse
Un besoin que les résumés classiques ne couvrent pas : le CUMUL EN COURS D'EXÉCUTION (Running Total) — une somme (ou un compte) qui s'ACCUMULE ligne après ligne, affichant le total « à cette ligne ». Exemples : solde progressif d'un relevé de compte (chaque ligne montre le solde après l'opération), total « à ce jour », cumul de classement. Là où un résumé donne UN total à la fin d'un groupe ou du rapport, le cumul donne le total INTERMÉDIAIRE à CHAQUE ligne, en progressant.
Crystal Reports fournit un outil dédié : les champs de cumul (Running Total Fields), créés dans l'explorateur. On y définit trois choses : (1) le CHAMP à cumuler et l'OPÉRATION (Somme, Nombre…) ; (2) la CONDITION d'évaluation (pour chaque enregistrement, ou sous condition — n'ajouter que certaines lignes) ; (3) surtout la condition de RÉINITIALISATION (Reset) — quand remettre le cumul à zéro. Le cumul s'affiche dans la section Détails (le total à chaque ligne) ou dans un pied (le cumul final).
2. La réinitialisation : le réglage qui fait tout
Trois choix de Reset, trois sens différents. Ne jamais réinitialiser : le cumul court sur TOUT le rapport, du début à la fin — un total global qui monte continûment (solde général progressif). Réinitialiser à chaque changement de GROUPE : le cumul repart de zéro pour chaque groupe — un solde progressif PAR client, PAR compte (le cas de Farès). Réinitialiser sur une FORMULE : condition personnalisée pour les cas spéciaux. Bien régler la réinitialisation, c'est la différence entre un cumul correct et un total incohérent.
Deux vigilances. D'abord l'ORDRE des lignes : un cumul additionne dans l'ordre d'affichage — des lignes non triées (par date pour un relevé) donnent des soldes intermédiaires absurdes alors que le total final semble bon. Ensuite les doublons de jointure (niveau 0) : comme pour les résumés, des lignes multipliées gonflent le cumul — et les conditions d'évaluation inadaptées (ajouter trop ou pas assez de lignes). En cas d'incohérence : vérifier l'ordre, puis le Reset, puis la condition d'évaluation, dans cet ordre.
🔎 Exemple concret — Solde progressif par client, réglage complet
Farès paramètre son champ de cumul pour les relevés commerciaux.
Champ : {Factures.Montant} — opération Somme
Évaluer : pour chaque enregistrement
Réinitialiser : à chaque changement de groupe (Client)
→ lignes triées par date ; cumul placé en Détails.
Lecture : chaque ligne montre le solde à cette date, par client.
Leçon : le même cumul en « jamais » donnerait un solde global — autre besoin, autre Reset.
Vocabulaire de la section
- Cumul en cours d'exécution (Running Total)
- Somme ou compte qui s'accumule ligne après ligne, affichant le total « à cette ligne » (solde progressif, total à ce jour).
Exemple simple : Le solde après chaque facture dans le relevé de Farès.
Ce que ce n'est pas : un résumé qui ne donne qu'un total final.
Réflexe : dès qu'il faut voir la progression, pas seulement la fin.
- Champ de cumul (Running Total Field)
- Objet dédié créé dans l'explorateur : champ à cumuler, opération (Somme, Nombre…), condition d'évaluation et réinitialisation.
Exemple simple : Le champ Somme de {Factures.Montant} de Farès.
Ce que ce n'est pas : un compteur programmé à la main en formule.
Réflexe : utiliser l'outil dédié plutôt que de bricoler.
- Réinitialisation (Reset)
- Réglage crucial : quand remettre le cumul à zéro — jamais (global), à chaque changement de groupe (par client/compte), ou sur formule.
Exemple simple : Le repart-à-zéro par client des relevés de Farès.
Ce que ce n'est pas : un cumul qui continue de monter d'un client à l'autre.
Réflexe : choisir le Reset selon l'intention avant tout.
- Cumul vs résumé
- Le RÉSUMÉ (2-2) donne un total à la fin d'un groupe/du rapport ; le CUMUL donne le total intermédiaire à chaque ligne, en progressant.
Exemple simple : Total final du client vs solde après chaque facture.
Ce que ce n'est pas : un résumé copié dans les Détails en guise de cumul.
Réflexe : progression → cumul ; synthèse → résumé.
- Dépendance à l'ordre
- Un cumul additionne dans l'ordre d'affichage : des lignes mal triées donnent des intermédiaires faux (même si le final est bon).
Exemple simple : Le relevé trié par date avant tout cumul.
Ce que ce n'est pas : un cumul sur des lignes dans l'ordre aléatoire de la base.
Réflexe : toujours trier avant de cumuler.
En pratique — Créer un cumul en cours d'exécution
- Créez un champ de cumul (explorateur → Running Total Fields → Nouveau) : champ à cumuler + opération Somme.
- Réglez la RÉINITIALISATION selon le besoin : jamais (solde global) ou à chaque changement de GROUPE (solde par client/compte).
- Placez le cumul dans la section Détails et TRIEZ les lignes dans l'ordre attendu (date, séquence).
- Vérifiez en aperçu : le total progresse ligne après ligne et se réinitialise (ou non) comme prévu.
Script prêt à dire — remettre les relevés aux commerciaux (30 s)
« Chaque relevé montre désormais le solde après chaque facture, dans l'ordre des dates, et repart de zéro pour chaque client. Vous suivez l'évolution au lieu de découvrir le total à la fin — et le cumul se recalcule tout seul à chaque rafraîchissement. »
À dire en remettant les relevés ; montrer une ligne et son solde cumulé.
Modèle copier-coller — cumul manuel en formule (syntaxe Crystal)
// Formule @Cumul placée en Détails (si besoin hors outil dédié)
WhilePrintingRecords;
NumberVar Cumul;
Cumul := Cumul + {Factures.Montant};
Cumul
// Formule @ResetCumul placée en En-tête de groupe Client
WhilePrintingRecords;
NumberVar Cumul := 0;
Indépendant
Un champ de cumul bien réinitialisé et vos relevés progressifs se vendent tout seuls.
PME à Alger
Farès livre les relevés par client : solde à chaque ligne, triés par date.
Équipe projet
Standardiser le Reset par groupe Client pour tous les relevés commerciaux.
Débutant
Cette semaine : un cumul global (jamais) + un cumul par groupe, comparés en aperçu.
✓ Bonnes pratiques
- Choisissez le Reset AVANT de créer le cumul : il définit ce que le chiffre veut dire.
- Triez toujours les lignes dans l'ordre attendu avant de cumuler (date, séquence).
- En cas d'incohérence, vérifiez dans l'ordre : tri, Reset, condition d'évaluation.
✗ Pièges fréquents
- Oublier le tri : intermédiaires absurdes avec un total final qui semble bon.
- Laisser « ne jamais réinitialiser » pour un besoin par client (ou l'inverse).
- Cumuler sur des lignes dupliquées par une mauvaise jointure (sommes gonflées).
Points clés à retenir
- Le CUMUL affiche le total INTERMÉDIAIRE à CHAQUE ligne (solde progressif) — le résumé ne donne qu'un total final.
- Outil dédié : CHAMPS DE CUMUL — champ, opération, condition d'évaluation et surtout RÉINITIALISATION.
- RESET : JAMAIS (global), PAR GROUPE (repart par client/compte), ou SUR FORMULE — il détermine le sens du cumul.
- Un cumul DÉPEND DE L'ORDRE : trier avant, vérifier en aperçu, surveiller les doublons de jointure.
Défi 48h — appliquez demain
Produisez 1 relevé progressif réel (cumul par groupe, lignes triées) et faites-le contrôler par un commercial ligne à ligne.
- Je distingue cumul progressif et total final.
- Mon Reset correspond à l'intention (global ou par groupe).
- Mes lignes sont triées et mon cumul vérifié en aperçu.
Questions fréquentes
Cumul ou résumé : quand utiliser l'un ou l'autre, et comment régler la réinitialisation ?
Le RÉSUMÉ (2-2) donne UN total à la fin d'un groupe (sous-total) ou du rapport (total général) — utilisez-le pour le total d'un groupe ou global. Le CUMUL donne le total PROGRESSIF à chaque ligne — utilisez-le pour un SOLDE ligne par ligne (relevé), un total « à ce jour », un cumul qui repart par catégorie. Prérequis du cumul : rapport groupé si Reset par groupe, lignes triées. Réglages : « ne jamais réinitialiser » = cumul global continu ; « à chaque changement de groupe » = repart de zéro par groupe (solde PAR client) ; « sur formule » = condition personnalisée. Option « regrouper le reste / Autres » et cumul conditionnel (n'ajouter que certaines lignes) complètent l'outil.
Mon cumul donne des résultats incohérents : quelles causes vérifier ?
Dans l'ordre : (1) L'ORDRE des lignes (cause n°1) — le cumul additionne dans l'ordre d'affichage ; sans tri par date/séquence, les intermédiaires n'ont aucun sens alors que le final peut être bon. Remède : TRIER avant. (2) Le RESET mal réglé — un « jamais » qui continue de monter d'un client à l'autre, ou un reset au mauvais groupe. Remède : régler selon l'intention. (3) La CONDITION D'ÉVALUATION — « pour chaque enregistrement » par défaut ; si vous ne voulez cumuler que certaines lignes, la condition doit correspondre. (4) Les DOUBLONS de jointure — lignes multipliées = cumul gonflé, comme pour les résumés. Vérifiez un cumul contre des valeurs connues ligne à ligne, pas seulement le total final.
Que règle la réinitialisation (Reset) d'un cumul en cours d'exécution ?