[Résolu] Utiliser dans SOMMEPROD un équiv du IN (SQL)?

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
rekam
Fraîchement OOthentifié
Messages : 6
Inscription : 06 févr. 2018 15:47

[Résolu] Utiliser dans SOMMEPROD un équiv du IN (SQL)?

Message par rekam »

Bonjour,

Afin d'étayer un peu le titre de ce post, voici concrètement mon problème:

Soit une colonne A avec des numéros, et une colonne B avec des valeurs. Il y a 2 objectifs à atteindre:
  • déterminer la somme des valeurs là où le numéro = 1 : facile, on fait

    Code : Tout sélectionner

    =SOMMEPROD(A1:A10=1,B1:B10)
  • plus compliqué, trouver la somme totale des valeurs là où le numéro = 1 OU 3 (mais pas 2). Je ne peux donc pas utiliser >= / <=. J'ai fait ceci, que je ne trouve pas optimal:

    Code : Tout sélectionner

    =SOMMEPROD(A1:A10=1,B1:B10)+SOMMEPROD(A1:A10=3,B1:B10)
Et bien entendu, j'ai ici simplifié le problème. Dans les faits, je peux me retrouver à devoir faire une somme avec les numéros 241, 243, 246 et 247, par exemple. J'aurais imaginé quelque chose comme

Code : Tout sélectionner

=SOMMEPROD(A1:A10=IN(241,243,246,247),B1:B10)
avec la finesse ultime d'avoir ça dans une cellule, et ainsi faire

Code : Tout sélectionner

=SOMMEPROD(A1:A10=IN(C1),B1:B10)
Car c'est là tout le sens de ma question. J'ai une cellule qui contient ces chiffres, séparés par une virgule. Est-ce qu'on peut en faire quelque chose d'automatique?

D'avance merci!
Dernière modification par Oukcha le 14 mars 2018 08:15, modifié 3 fois.
Raison : Termes implicites supprimés et titre francisé, inutile de formuler comme une question, ici, tout est question
LibreOffice 4.1.5 sous Ubuntu 17.10
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: Peut-on utiliser dans SommeProd un équivalent du IN en S

Message par Jeff »

Bonjour,

Tu peux nous mettre ça dans un fichier joint ?

Comment joindre un fichier

Sinon :
rekam.png
A +
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
rekam
Fraîchement OOthentifié
Messages : 6
Inscription : 06 févr. 2018 15:47

Re: Peut-on utiliser dans SommeProd un équivalent du IN en S

Message par rekam »

Merci, voici un fichier résumant ma demande.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 4.1.5 sous Ubuntu 17.10
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: Peut-on utiliser dans SommeProd un équivalent du IN en S

Message par Jeff »

Il faut utiliser :

Code : Tout sélectionner

=SOMMEPROD((A1:A10={1;3})*(B1:B10))
La matrice de nombre peut également être nommée, par exemple :
rekam2.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
rekam
Fraîchement OOthentifié
Messages : 6
Inscription : 06 févr. 2018 15:47

Re: Peut-on utiliser dans SommeProd un équivalent du IN en S

Message par rekam »

Après plusieurs tentatives, je constate que chez moi, il faut une virgule pour que ça passe:

Code : Tout sélectionner

=SOMMEPROD((A2:A10={1,3})*(B2:B10))
Alors ça, c'est super et ça marche :super:

Et je vois bien l'idée de nommer la matrice de nombre. Cela dit, il n'y a aucun moyen de récupérer le contenu d'une cellule et d'en faire une matrice? J'ai testé ceci sans succès:

Code : Tout sélectionner

=SOMMEPROD((A2:A10={C1})*(B2:B10))  ... ou C1 = 1,3
Ce serait pour m'éviter de créer des noms manuellement à chaque fois.

Merci encore!
LibreOffice 4.1.5 sous Ubuntu 17.10
Avatar de l’utilisateur
gerard24
ManitOOu
ManitOOu
Messages : 3160
Inscription : 06 juil. 2008 17:08
Localisation : dans le Périgord

Re: Peut-on utiliser dans SommeProd un équivalent du IN en S

Message par gerard24 »

Bonjour,
rekam a écrit :Après plusieurs tentatives, je constate que chez moi, il faut une virgule pour que ça passe:

Code : Tout sélectionner

=SOMMEPROD((A2:A10={1,3})*(B2:B10))
Dans ce cas, ils serait bon de modifier ta signature qui indique "OpenOffice" alors que tu utilises vraisemblablement LibreOffice.
Et je vois bien l'idée de nommer la matrice de nombre. Cela dit, il n'y a aucun moyen de récupérer le contenu d'une cellule et d'en faire une matrice? J'ai testé ceci sans succès:

Code : Tout sélectionner

=SOMMEPROD((A2:A10={C1})*(B2:B10))  ... ou C1 = 1,3
Ce serait pour m'éviter de créer des noms manuellement à chaque fois.
Ce n'est pas possible, même avec l'utilisation de INDIRECT.
Pr contre, tu peux utiliser une plage de cellules contenant les critères, par exemple :

Code : Tout sélectionner

=SOMMEPROD((A2:A10=E1:F1)*(B2:B10))
où E1 et F1 contiennent respectivement 1 et 3.

Nota : La plage de critères doit être perpendiculaire à celle contenant les données.
Tes données sont en colonne (A2:A10), les critères en ligne (E1:F1) et inversement.

A+
OOodidacte
LibreOffice 6.4.5 sous Windows 10.
pour télécharger LibreOffice
rekam
Fraîchement OOthentifié
Messages : 6
Inscription : 06 févr. 2018 15:47

Re: Peut-on utiliser dans SommeProd un équivalent du IN en S

Message par rekam »

Ok merci pour l'info! Je vais voir pour implémenter tout ça dans mon fichier. Merci à tous les deux!
LibreOffice 4.1.5 sous Ubuntu 17.10
Jeff
GourOOu
GourOOu
Messages : 9629
Inscription : 18 sept. 2006 09:40
Localisation : France

Re: [Résolu] Peut-on utiliser dans SUMPROD un équiv du IN (S

Message par Jeff »

Un peu à la bourre par rapport au statut résolu du fil, tu peux aussi tester de :
  • Prendre le texte en C1, et ajouter une virgule en début et en fin :

    Code : Tout sélectionner

    ","&$C$1&"," 
  • Chercher à l'aide la fonction éponyme si la virgule et le contenu de A1:15, par rapport la première concaténation ne sont pas en erreur :

    Code : Tout sélectionner

    NON(ESTERREUR(CHERCHE(","&A1:A15&",";","&$C$1&","))
    Cette formule, validée matriciellement par Ctrl + Maj + Entrer renvoie une matrice qui va indiquer les valeurs à sommer :
    Capture d’écran_2018-03-14_08-49-24.png
  • Sommer la matrice précédente directement dans SOMMEPROD (pas de plage intermédiaire nécessaire) :

    Code : Tout sélectionner

    =SOMMEPROD(NON(ESTERREUR(CHERCHE(","&A1:A15&",";","&$C$1&",")))*(B1:B15))
Au final, on obtient :
Capture d’écran_2018-03-14_08-44-44.png
A +
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.