IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Somme de produits avec filtres (sous.total + sommeprod) [XL-2007]


Sujet :

Excel

  1. #1
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut Somme de produits avec filtres (sous.total + sommeprod)
    Bonjour à tous !

    J'ai trouvé plein de discussions déjà ouvertes sur le sujet mais aucune ne répond à la complexité de mon problème.

    J'ai deux colonnes avec des chiffres. Je souhaiterai multiplier, sur chaque ligne, la cellule de la colonne A et celle de la colonne B puis additionner ces multiplications. Sachant que j'ai un filtre sur une 3ieme colonne.

    Voir l'exemple dans le fichier joint.

    Merci beaucoup de votre aide !
    Fichiers attachés Fichiers attachés
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  2. #2
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    par ce que tu n'as rien a faire de plus que ton =sommeprod

    pas besoin de faire des multiplication des colonnes, note le comme ça : =sommeProd(B3:B91;C3:C91).

    Ensuite, si tu veux le temps en heure, tu fais =SOMMEPROD(B3:B91;C3:C91) / 60
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  3. #3
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut
    Bonjour Nako_Lito,

    Je me suis mal exprimé. Le problème qui se pose c'est que je souhaite que le résultat soit adapté en fonction de mon filtre... donc un sommeprod tout simple ne fonctionne pas.
    Un sous.total est forcément nécessaire mais je ne sais pas comment écrire la formule.

    Merci
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  4. #4
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Mets ça dans la cellule E2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(SOUS.TOTAL(102;B3:B91);SOUS.TOTAL(102;C3:C91))
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  5. #5
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    La fonction sous totale prend pour premier paramètre qqc qu'ils appèllent "No. Fonction", terme barbare pour dire le type de donnée qu'il prend en compte ou non dans son calcul.
    Dans mon exemple, j'ai mis 102, qui correspond à : "Récupère la valeur numérique et ignore les valeurs masquées".

    Les autre paramètre désigne quelle plage de cellule doit couvrir la fonction. Ici, du B3 au B91. Tu fais une seconde fois sur la colonne C et tu mets le tout dans la méthode sommeprod et excel s'occupe du reste.

    Tu devais sans doute galérer avec les paramètre et les parenthèses.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  6. #6
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut
    Rebonjour Nako,

    La formule que tu proposes ne donne pas le bon résultat. Je pense que ça vient du fait qu'Excel prend en compte le nombre de cellules non vides dans la plage de valeurs sélectionnée en ce qui concerne le No. Fonction 102 ...

    Je ne vois pas quel paramètre pourrait fonctionner avec une formule de ce type
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  7. #7
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    J'ai mis ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOUS.TOTAL(9;B3:B22) * SOUS.TOTAL(9;C3:C22)
    et ça a l'air de fonctionner
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  8. #8
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut
    Ça donne toujours un mauvais résultat...

    Mais à mon avis c'est pas possible de faire ça tout simplement. Je pense qu'il faut passer par un DECALER mais je ne sais absolument pas comment utiliser cette fonction..
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  9. #9
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    ca fonctionnait pour moi. Je ne vois pas ce que je peux faire de plus.

    Pour la fonction décaler, reporte toi à l'aide d'excel: ici
    En gros, par rapport a la cellule ou se trouve la fonction, tu fais référence à une autre cellule par rapport a ses coordonnées.

    Si tu fais un =DECALER(C3;2;3;1;1), tu fais référence à la cellule F5, tu te décale de 2 vers la droite et 3 vers le bas et tu prend les cellules sur 1 de haut et 1 de droite, donc uniquement F5. Si tu avais mis 2 dans les deux derniers arguments, tu aurais pris les 4 cellules adjacentes de F5, donc la plage F5:J9.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  10. #10
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut
    Tu arrivais à avoir 161,6833 (valeur affichée en F1 de mon fichier exemple), sans filtre, avec ta formule? Parce que si t'avais un résultat différent c'est que la formule n'est pas correcte

    Merci pour les infos sur la fonction DECALER !
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  11. #11
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    passe par une macro sinon, ça prend pas beaucoup plus de temps a faire qu'a chercher une solution
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  12. #12
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Nomme deux plage : colonneB pour B3:B91 et colonneC : C3:C91

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((SOUS.TOTAL(109;DECALER(colonneB;LIGNE(colonneB)-MIN(LIGNE(colonneB));;1)))*(colonneC)) / 60
    sans filtre tu obtiens 161.683333 et quand tu filtre, ton résultat change pour ne prendre que les lignes affichées.
    - La dernière fois que j'ai testé ca fonctionnait !
    - Vous n'avez rien modifié ?
    - Non ! Je suis pas idiot non plus.
    - ....
    - Enfin si, juste le fichier .dll, mais a 4Ko, ca devait pas être important.

  13. #13
    Membre actif Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Points : 209
    Points
    209
    Par défaut
    C'est parfait ! Merci Nako !!

    Je voulais éviter d'avoir à passer par une macro pour mon fichier; et ta formule me convient très bien !
    "Il est toujours plus facile de réaliser un travail que d'expliquer pourquoi on l'a fait." Martin Van Buren
    "Il y a ceux qui ont des résultats, et ceux qui ont des excuses." Moi

  14. #14
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2016
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2016
    Messages : 136
    Points : 149
    Points
    149
    Par défaut Une autre solution ?
    Bonjour,

    J'ai un tableau (Tableau1) avec une colonne "Num" et d'autres colonnes qui me servent à filtrer (ex. Etat, Date).

    J'ajoute en fin de tableau une colonne "s109" avec dedans la formule "=SOUS.TOTAL(109;[@Num])".

    Cette cellule contient donc exactement la même chose que la colonne "Num" si la ligne est visible, 0 si la ligne est filtrée ... ou masquée pour quelque raison que ce soit.

    Ensuite, au lieu de faire des "SOMMEPROD(Tableau1[Num]*(Tableau1[Etat]="En Cours"))", il suffit de faire des "SOMMEPROD(Tableau1[s109]*(Tableau1[Etat]="En Cours"))", etc.

    Pas bête, hein ?

    ... sauf qu'il faut compter avec les bizarreries MicroSoft : si la colonne "s109" fait partie du même tableau (ie. Tableau1), cela met le bouzin dans la gestion des filtres (essayez, vous verrez !). Apparemment, il suffit de créer plus loin un second tableau séparé sur les mêmes lignes (ie. Tableau2) avec la formule "=SOUS.TOTAL(109;Tableau1[@Num])" et, là, les filtres fonctionnent encore et le SOMMEPROD aussi.

    La persévérance, il n'y a que ça !

    Amicalement,
    Olivier

    PS: bizarrerie restante, essayez une "ligne des totaux" dans Tableau2, vous serez surpris ! Par contre, un SOMME tout à fait classique fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Somme d'enregistrement avec filtre
    Par Nikodemus dans le forum IHM
    Réponses: 2
    Dernier message: 03/11/2011, 15h37
  2. [AC-2003] Rapport avec un SOUS TOTAL
    Par Bonero dans le forum IHM
    Réponses: 3
    Dernier message: 25/06/2011, 14h52
  3. Macro somme/sous.total(9;..) automatique avec code couleur
    Par jerem2007 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/07/2009, 19h46
  4. [XL-2003] Faire une somme avec la fonction sous total
    Par Gwladys dans le forum Excel
    Réponses: 2
    Dernier message: 09/04/2009, 17h26
  5. probleme avec un sous total
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 29/01/2009, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo