XL 2016 formule pour somme plage contigue

rafi93

XLDnaute Occasionnel
bonjour à tous

je cherche une formule (non VBA) qui me permettrait de sommer une partie de colonne située "juste en dessous à gauche" d'une cellule.
cette formule devrait donc déterminer automatiquement l'ensemble de cellules délimitée par 2 cases vides (ou éventuellement contenant un texte prédéfini pour delimiter la plage)
et encore mieux : retourner une erreur si la plage contient une cellule vide

voir exemple dans cette copie d'écran :
le sous total de ensemble_1 est la somme de C3..C5

existerait il une solution ?

merci !!


upload_2018-12-16_14-35-7.png
 

Pièces jointes

  • upload_2018-12-16_14-32-55.png
    upload_2018-12-16_14-32-55.png
    34.1 KB · Affichages: 18

job75

XLDnaute Barbatruc
Bonjour rafi93,

Voyez le fichier joint et cette formule matricielle en D2 :
Code:
=SI(ESTTEXTE(B2)*ESTVIDE(C2);"Erreur";SI(ESTTEXTE(A2);SOMME(C3:INDEX(C:C;MIN(SI(ESTTEXTE(A$1:A$21)*(LIGNE(A$1:A$21)>LIGNE());LIGNE(A$1:A$21)))));""))
à valider par Ctrl+Maj+Entrée et à tirer vers le bas jusqu'à la ligne 19.

A+
 

Pièces jointes

  • Sous-total(1).xlsx
    16.1 KB · Affichages: 19

chris

XLDnaute Barbatruc
Bonjour à tous

Une autre également à valider par Ctrl+Maj+Entrée et à tirer vers le bas jusqu'à la ligne précédant le total général
Code:
=SI(A2<>"";SOMME(DECALER(C3;0;0;MIN(SI(B3:$B$40="";LIGNE(B3:$B$40);""))-EQUIV("ZZZ";$A$2:A2;1)-1;1));"")
 

job75

XLDnaute Barbatruc
Bonsoir chris,

Oui effectivement en utilisant DECALER(C3... la formule est plus simple mais je l'écris finalement comme ceci :
Code:
=SI((B2<>"")*(C2="");"Erreur";SI(A2="";"";SOMME(DECALER(C3;;;MIN(SI(A3:$A$21<>"";LIGNE(A3:A$21)))-INDEX(LIGNE();1)))))
Le début de la formule répond à cette demande :
et encore mieux : retourner une erreur si la plage contient une cellule vide
Fichier (2).

A+
 

Pièces jointes

  • Sous-total(2).xlsx
    16.2 KB · Affichages: 20

Modeste geedee

XLDnaute Barbatruc
bonjour à tous

je cherche une formule (non VBA) qui me permettrait de sommer une partie de colonne
voir exemple dans cette copie d'écran :
le sous total de ensemble_1 est la somme de C3..C5

existerait il une solution ?
l'utilisation des fonctionnalités de base des feuilles de calcul permet cette approche ...
sans formule ni VBA !!!

Tableau Croisé Dynamique ...
upload_2018-12-16_18-32-13.png
 

rafi93

XLDnaute Occasionnel
merci à vous 3 !

ça marche.... presque :
voir fichier joint sur mon exemple, j'ai un sous total "2400" qui apparait en ligne 29, je ne sais pas d'où il sort

pour le tableau croisé, je vais y reflechir mais comme c'est pour rédiger des devis, je crains que je ne sois contraint par la mise en forme
 

Pièces jointes

  • Classeur1.xlsx
    12.2 KB · Affichages: 15

job75

XLDnaute Barbatruc
Re,

Pas de problème avec :

- A$34 à la place de A$32 dans la formule matricielle

- un espace en A34 pour borner la colonne A (puisqu'on teste les textes sur cette colonne).

Votre post #1 montre bien un texte en A21 (ligne du total).

A+
 

Pièces jointes

  • Classeur(1).xlsx
    19.4 KB · Affichages: 11

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Y'a pas de raison, j'y vas aussi :p

Un essai avec une formule normale en D2, à tirer vers le bas jusqu'à D20:
VB:
=SI(A2<>"";D$21-SOMME(C$1:C1)-SOMME(D3:D$20);"")

et une autre formule unique en D21:
VB:
=SOMME(C3:C21)

edit: Bonsoir @job75 ;)
 

Pièces jointes

  • rafi93- ous-totaux- v1.xlsx
    11.8 KB · Affichages: 15
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Je me suis aperçu que le fichier initial joint par rafi93 avait changé de présentation depuis le msg. n°6 -> les données commencent à la ligne 1 au lieu de la ligne 2.
De ce fait, il faut en tenir compte dans la formule en D1 qui devient :
VB:
=SI(A1="";"";D$34-SOMME(D2:D$33)-SI(LIGNE()<>1;SOMME(C$1:C1)))
et toujours en D34:
VB:
=SOMME(C1:C32)
 

Pièces jointes

  • rafi93- sous-totaux- v2.xlsx
    13.5 KB · Affichages: 11

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 339
Membres
102 865
dernier inscrit
FreyaSalander