XL 2021 Insertion de formules

  • Initiateur de la discussion Initiateur de la discussion phil87
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

phil87

XLDnaute Occasionnel
Bonjour le forum et encore Merci.
Je voudrais faire un calcul, dans les lignes "résultat final" (couleur ocre), d'une partie de golf avec des points differents sur chaque trou gagné, (le moins de coup possible couleur verte).
Les valeurs modifiables sont dans les lignes "Valeurs/NOMS"
Les valeurs des trous sont identifiées sur la ligne "Skin".
Si le trou est gagné par au moins 2 personnes, le prochain trou se verra additionné des points du trou précédent. Ainsi de suite jusqu'à ce que le trou soit gagné par une seule personne.
Mes demandes seraient:
* trouver une formule qui englobe la plus petite valeur/trou gagné et le calcul indiqué ci-dessus/personne, de façon automatique.

Merci par avance
 

Pièces jointes

Solution
Bon, alors une autre proposition (un peu plus costaud haha, mais c'était intéressant à étudier) :
D'abord, nettoyez la plage C14:T16 (retirez toutes les formules). Puis en C14 entrez :
Code:
=LET(
    _idx; $C$1:C$1;
    _sk; $C$4:C$4;
    _v1; $C$6:C$6;
    _v2; $C$7:C$7;
    _v3; $C$8:C$8;
    _m1; (_v1 < _v2) * (_v1 < _v3);
    _m2; (_v2 < _v1) * (_v2 < _v3);
    _m3; (_v3 < _v1) * (_v3 < _v2);
    _locSeq; 1 *
        (((_v1 = _v2) * (_v1 <= _v3) + (_v1 = _v3) * (_v1 <= _v2) + (_v2 = _v3) * (_v2 <= _v1)) > 0);
    _idSeq; _idx * _locSeq;
    _skSeq; _sk * _locSeq;
    _myId; MAX(_idx);
    _idSeqOff; SIERREUR(INDEX(_idSeq; 1; SEQUENCE(; _myId; MIN(_idx) + 1)); 0);
    _f0; _idSeq = _idSeqOff - 1;
    _f1; FILTRE(_idSeq; _f0)...
Bonjour,
Vous pouvez entrer la formule suivante en C14 puis tirer vers le bas puis la droite :
Code:
=LET(
    _skin0; B$4;
    _skin1; C$4;
    _ppv0; B$10:B$12;
    _ppv1; C$10:C$12;
    _sc; SIERREUR((SOMME(_ppv0) = 0) * _skin0 + _skin1; _skin1);
    SI(C10 = ""; ""; _sc)
)
PS : le SIERREUR n'est là que pour gérer la 1e colonne puisque la colonne "-1" contient du texte. Sinon on pourrait s'en passer mais ça permet de garder une formule unique pour tout le "bloc".
PS2 : de manière plus "compacte", cela donne le résultat équivalent
Code:
=SI(C10 = ""; ""; SIERREUR((SOMME(B$10:B$12) = 0) * B$4 + C$4; C$4))
 
Bonjour,
Vous pouvez entrer la formule suivante en C14 puis tirer vers le bas puis la droite :
Code:
=LET(
    _skin0; B$4;
    _skin1; C$4;
    _ppv0; B$10:B$12;
    _ppv1; C$10:C$12;
    _sc; SIERREUR((SOMME(_ppv0) = 0) * _skin0 + _skin1; _skin1);
    SI(C10 = ""; ""; _sc)
)
PS : le SIERREUR n'est là que pour gérer la 1e colonne puisque la colonne "-1" contient du texte. Sinon on pourrait s'en passer mais ça permet de garder une formule unique pour tout le "bloc".
PS2 : de manière plus "compacte", cela donne le résultat équivalent
Code:
=SI(C10 = ""; ""; SIERREUR((SOMME(B$10:B$12) = 0) * B$4 + C$4; C$4))
Bonjour Saboh12617
Déjà merci de vous etre penché sur mon problème.
Il a un petit koak sur le résultat de la cellule O15. Il faudrait le résultat de 20, car les 2 trous précédents non pas été gagné, et il peut y en avoir beaucoup plus!!!!
D'autre part, j'ai mis les lignes 10.11.12 en verte afin d'aider pour la demonstration, c'est tout. Il faudrait l'integrer à votre formule si possible.....
Merci encore
 
Bon, alors une autre proposition (un peu plus costaud haha, mais c'était intéressant à étudier) :
D'abord, nettoyez la plage C14:T16 (retirez toutes les formules). Puis en C14 entrez :
Code:
=LET(
    _idx; $C$1:C$1;
    _sk; $C$4:C$4;
    _v1; $C$6:C$6;
    _v2; $C$7:C$7;
    _v3; $C$8:C$8;
    _m1; (_v1 < _v2) * (_v1 < _v3);
    _m2; (_v2 < _v1) * (_v2 < _v3);
    _m3; (_v3 < _v1) * (_v3 < _v2);
    _locSeq; 1 *
        (((_v1 = _v2) * (_v1 <= _v3) + (_v1 = _v3) * (_v1 <= _v2) + (_v2 = _v3) * (_v2 <= _v1)) > 0);
    _idSeq; _idx * _locSeq;
    _skSeq; _sk * _locSeq;
    _myId; MAX(_idx);
    _idSeqOff; SIERREUR(INDEX(_idSeq; 1; SEQUENCE(; _myId; MIN(_idx) + 1)); 0);
    _f0; _idSeq = _idSeqOff - 1;
    _f1; FILTRE(_idSeq; _f0);
    _sc0; SOMME(FILTRE(_sk; ESTNUM(EQUIVX(_idSeq; _f1)); 0));
    _sc1; SIERREUR(SI(_myId = GRANDE.VALEUR(_f1; 1) + 2; _sc0; 0); 0);
    _sc2; SI(ESTNUM(EQUIVX(_myId - 1; _idSeq)); INDEX(_skSeq; _myId - 1); 0);
    _sc3; INDEX(_sk; _myId);
    _scf; (_sc1 + _sc2 + _sc3) * (INDEX(_locSeq; _myId) = 0);
    _stackM; CHOISIR({1; 2; 3}; _m1; _m2; _m3);
    INDEX(_stackM; ; _myId) * _scf
)
Cela remplira C14:C16, puis il suffit de tirer C14 vers la droite. Les résultats me semblent corrects, n'hésitez pas à tester.
 
Dernière édition:
Merci Cousin breton, je m'y suis bien cassé la tête ! Cependant je pense qu'il y a moyen de faire un peu plus simple… Si j'ai le temps... Mais je pense que VBA/PQ seraient plus faciles.

Bonne remarque sur le 18 trou, de même dans l'exemple il arrive au 16 trou une égalité double (et non triple) qui m'a tout fait revoir. Enfin bon, attendons le retour de phil87.
 
Re,
Effectivement, comme je l'avais fait avec PQ, je me suis posé cette question, sur le 18ème trou.
En attendant, j'ai considéré que si ce dernier trou faisait également l'objet d'ex-aequo, je prenais pour vainqueur le précédent.
J'ai modifié le tableau de saisie des variables, et des résultats
On peut rajouter autant de joueurs qu'on veut, dans le tableau des résultats. (mais il faudra un moment qu'il y ait au moins 1 vainqueur unique dans un des "trous".... perso, pas géré cette option, mais envisageable)
 

Pièces jointes

Bon, alors une autre proposition (un peu plus costaud haha, mais c'était intéressant à étudier) :
D'abord, nettoyez la plage C14:T16 (retirez toutes les formules). Puis en C14 entrez :
Code:
=LET(
    _idx; $C$1:C$1;
    _sk; $C$4:C$4;
    _v1; $C$6:C$6;
    _v2; $C$7:C$7;
    _v3; $C$8:C$8;
    _m1; (_v1 < _v2) * (_v1 < _v3);
    _m2; (_v2 < _v1) * (_v2 < _v3);
    _m3; (_v3 < _v1) * (_v3 < _v2);
    _locSeq; 1 *
        (((_v1 = _v2) * (_v1 <= _v3) + (_v1 = _v3) * (_v1 <= _v2) + (_v2 = _v3) * (_v2 <= _v1)) > 0);
    _idSeq; _idx * _locSeq;
    _skSeq; _sk * _locSeq;
    _myId; MAX(_idx);
    _idSeqOff; SIERREUR(INDEX(_idSeq; 1; SEQUENCE(; _myId; MIN(_idx) + 1)); 0);
    _f0; _idSeq = _idSeqOff - 1;
    _f1; FILTRE(_idSeq; _f0);
    _sc0; SOMME(FILTRE(_sk; ESTNUM(EQUIVX(_idSeq; _f1)); 0));
    _sc1; SIERREUR(SI(_myId = GRANDE.VALEUR(_f1; 1) + 2; _sc0; 0); 0);
    _sc2; SI(ESTNUM(EQUIVX(_myId - 1; _idSeq)); INDEX(_skSeq; _myId - 1); 0);
    _sc3; INDEX(_sk; _myId);
    _scf; (_sc1 + _sc2 + _sc3) * (INDEX(_locSeq; _myId) = 0);
    _stackM; CHOISIR({1; 2; 3}; _m1; _m2; _m3);
    INDEX(_stackM; ; _myId) * _scf
)
Cela remplira C14:C16, puis il suffit de tirer C14 vers la droite. Les résultats me semblent corrects, n'hésitez pas à tester.
Waouh!!!!!!
Je vous remercie tout les deux, Saboh12617, Cousinhub.
Vraiment SUPER et çà fonctionne très bien.
Pour l'histoire du 18ème trou non gagné ou pas, il n'y a pas d'obligation.
Vraiment un GRAND Merci encore
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
1 K
A
Réponses
48
Affichages
6 K
Ananas94
A
A
Réponses
1
Affichages
1 K
A
J
Réponses
9
Affichages
3 K
joaoratao
J
P
Réponses
10
Affichages
1 K
P
Retour