Aller au contenu
  • 0
vasssou

Réaliser la somme des 3 rubriques les plus élevés

Question

Bonjour,

En tant que novice dans l'utilisation de Filemaker, je viens vers vous car je suis embêté pour la réalisation d'un calcul qui est surement très bête. 

Je dois utiliser le résultat de 7 rubriques et calculer la sommes des 3 résultats les plus élevés. Malheureusement ce qui se traduirait par la simple formule =SOMMEPROD(GRANDE.VALEUR(Data;LIGNE(1:5))) sous excel, me semble plus compliqué à trouver sous filemaker.

Merci à vous si vous avez la solution.

Partager ce message


Lien à poster
Partager sur d’autres sites

10 réponses à cette question

Messages recommandés

  • 1

Bonjour,

Si les 7 rubriques numériques font partie du même enregistrement

Definir ([  _list = Liste ( rub1 ; rub2 ; rub3 ; rub4 ; rub5 ; rub6 ; rub7 ) ; // on met les 7 rubriques sous forme de liste.  _sortNumDesc = SortValues ( _list ; -2 ) ; // on trie la liste de manière descendante (type de données numérique: 2, le moins inverse l'ordre de tri).  _filter = ValeursDebut ( _sortNumDesc ; 3 ) ; // on extrait de la liste triée les 3 premières valeurs.  _stripLastCR = Debut ( _filter ; longueur ( _filter ) - 1 ) ; // on supprime le dernier retour chariot généré par la fonction ValeurDebut.  _prep = Substituer ( _stripLastCR ; ¶ ; "+" ) // on remplace les retours chariot par le signe +.];evaluation ( _prep ))

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

bonsoir
je n'ai pas saisi ta demande.

Par exemple les trois plus grandes valeurs sont-elles parmi les 7 rubriques, dans un enregistrement ou plusieurs ?
bref pas clair.
Peux-tu envisager un cas concret stp ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Merci pour vos réponses : je vais mettre un exemple en effet ce sera plus simple. 
Il s'agit en fait de calculer un score a partir du résultat de 7 rubriques :

Rubrique A = 3
Rubrique B = 5
Rubrique C = 3
Rubrique D = 2
Rubrique E = 0
Rubrique F = 2
Rubrique G = 1

et je souhaiterai donc obtenir de manière systématique la somme des 3 rubrique obtenant la plu grande valeur soit ici : 5+3+3 = 11

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Il y a 15 heures, Clem a dit :

Definir ([ _list = Liste ( rub1 ; rub2 ; rub3 ; rub4 ; rub5 ; rub6 ; rub7 ) ; // on met les 7 rubriques sous forme de liste. _sortNumDesc = SortValues ( _list ; -2 ) ; // on trie la liste de manière descendante (type de données numérique: 2, le moins inverse l'ordre de tri). _filter = ValeursDebut ( _sortNumDesc ; 3 ) ; // on extrait de la liste triée les 3 premières valeurs. _stripLastCR = Debut ( _filter ; longueur ( _filter ) - 1 ) ; // on supprime le dernier retour chariot généré par la fonction ValeurDebut. _prep = Substituer ( _stripLastCR ; ¶ ; "+" ) // on remplace les retours chariot par le signe +. ];  evaluation ( _prep ) )

Merci Clem , la formule fonctionne parfaitement. Pourrais tu également grâce à cette formule me dire comment extraire les 3 valeurs les plus grandes, les élever au carré puis les additionner?

Je ne sais pas si c'est suffisamment claire mais par un exemple : si j'ai 7 rubriques contenant comme résultats : 1 / 3 / 2 / 4 / 2 / 5 / 1. Comment extraire les 3 valeurs les plus grandes : 3 / 4 / 5 et les élever au carré : 9 / 16 / 25 et les additionner : 9 + 16 + 25 =50 ?

Merci infiniment.

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Il suffit de rajouter le carré "^2" dans la variable _prep (le reste du calcul est inchangé)

_prep = Substituer ( _stripLastCR ; ¶ ; "^2+" ) & "^2"

ainsi pour ce cas _prep sera égale, avant évaluation, à
5^2+4^2+3^2 qui évaluée donnera 50

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

tu peut faire comme te le suggère Eric; ou si tu veux un micro chouilla plus de souplesse, le calcul suivant:

Definir ([  _byLine = "^2" ; // l'opération optionnelle à appliquer à chaque ligne de valeur (peut être vide).  _betweenLines = "+" ; // l'opération à appliquer ENTRE chaque ligne de valeur.  _list = Liste ( rub1 ; rub2 ; rub3 ; rub4 ; rub5 ; rub6 ; rub7 ) ;   _sortNumDesc = SortValues ( _list ; -2 ) ;  _filter = ValeursDebut ( _sortNumDesc ; 3 ) ;  _prep = Substituer ( _filter ; ¶ ; SupprimerTypeEspace ( _byLine & _betweenLines ; 0 ; 3  ) ) ;  _calc = Debut ( _prep ; longueur ( _prep ) - 1 ) // on supprime le dernier opérateur «_betweenLines» qui viendrait perturber l'évaluation.  ];evaluation ( _calc ))

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

et si l'évaluation te parait obscure, tu peux poser directement ton opération ainsi :
 

Definir ([_liste = Liste ( rub1;rub2;rub3;rub4;rub5;rub6;rub7 ) ; //la liste des rubriques_tri = SortValues ( _liste ; -2 )//le tri descendant];// le calcul avec les 3 premières valeurs obtenues avec ObtenirValeur ()ObtenirValeur ( _tri ; 1 )^2 + ObtenirValeur ( _tri ; 2 )^2 + ObtenirValeur ( _tri ; 3 )^2)

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Merci pour vos réponses à ce sujet. J’aurai juste une dernière question pour peaufiner cette formule. 

Je souhaite imposer une nouvelle condition à mon calcul. En effet, si une rubrique est égale à 6, je souhaiterai que mon résultat total soit égale à 50 quelque soit le résultat des autres rubriques. 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0

Bonjour,

rien de plus facile.
dans le résultat du definir, donc après les déclarations de variables qui se terminent par "];" ,

tu mets ta condition

si( condition, résultat , résultat par défaut )

.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
  • 0
Il y a 21 heures, vasssou a dit :

… nouvelle condition … si une rubrique est égale à 6, je souhaiterai que mon résultat total soit égale à 50 quelque soit le résultat des autres rubriques. 

Bonjour, 

Il existe plusieurs manières de détecter la valeur ciblée, la plus simple étant de filtrer la liste des valeurs de rubrique

Definir ([  _byLine = "^2" ;  _op = "+" ;  _valMax = 6 ;  _valDefaut = 50 ;  _list = Liste ( rub1 ; rub2 ; rub3 ; rub4 ; rub5 ; rub6 ; rub7 ) ;  _sortNumDesc = SortValues ( _list ; -2 ) ;  _filter = ValeursDebut ( _sortNumDesc ; 3 ) ;  _prep = Substituer ( _filter ; ¶ ; SupprimerTypeEspace ( _byLine & _op ; 0 ; 3  ) ) ;  _calc = Debut ( _prep ; Longueur ( _prep ) -  1 )    ];// … au choix …// Si ( Position ( ¶ & _list & ¶ ;  ¶ & _valMax & ¶ ; 1 ; 1 ) ; _valDefaut ; Evaluation ( _calc ) ) // Si ( Occurrences ( ¶ & _list & ¶ ; ¶ & _valMax & ¶ ) ; _valDefaut ; Evaluation ( _calc ) )Si ( DecompteValeurs ( ValeursFiltre ( _list ; _valMax ) ) ; _valDefaut ; Evaluation (  _calc  ) ))

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

  • En ligne récemment   0 membre est en ligne

    Aucun utilisateur enregistré regarde cette page.

×