[Résolu] Constitution de trinômes

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.
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 09:43

[Résolu] Constitution de trinômes

Message par TheHache »

Bonjour à tous,

Une petite énigme. J'ai besoin de constituer des trinômes Hommes/Femmes avec un nombre total d'Hommes et de Femmes fluctuant et des critères absolus de constitution qui me facilitent pas la tâche.

Ci joint un fichier exemple contenant quelques cas de figure, les critères absolus et mon voeu.

A votre bon cœur. :wink:

Merci et à bientôt.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par TheHache le 10 avr. 2018 06:21, modifié 3 fois.
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: Constitution de trinômes

Message par OOotremer971 »

Salut,

Une proposition à partir de la lige 40 (copie de ton tableau). Apparemment tu as une erreur dans le groupe M1:O18 ou en effet, il possible de faire un trinôme 2 hommes une femme supplémentaire.

Toutes les colonnes sont calculées y compris les colonnes trinômes (A,E,I etc). Je te laisse décortiquer (normalement c'est logique :) )

@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 09:43

Re: Constitution de trinômes

Message par TheHache »

Salut OOotremer971,
OOotremer971 a écrit :Apparemment tu as une erreur dans le groupe M1:O18 ou en effet, il possible de faire un trinôme 2 hommes une femme supplémentaire.
Oui c'est une erreur et ta proposition nous montre qu'elle sera évitée à l'avenir. (l'humain est encore faillible :wink: )

Très beau boulot, je te remercie.

A bientôt
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 09:43

Re:Constitution de trinômes

Message par TheHache »

Salut OOotremer971,

Je ne comprends pas bien toute la formule de B45 :

Code : Tout sélectionner

=(A45>0)*((A45<=B$40-ENT(MIN(SOMME(B$40:B$41)/3;(B$40:B$41))))+1)
Ce que je pense comprendre : Prendra la valeur de A45 si elle est supérieure à 0

Code : Tout sélectionner

(A45>0)
Je ne comprends pas !

Code : Tout sélectionner

A45<=B$40
Prendra la valeur entière du minimum entre la somme de (B$40:B$41)/3 de B$40 et de B$41.

Code : Tout sélectionner

ENT(MIN(SOMME(B$40:B$41)/3;(B$40:B$41))
Si tu pouvais l'expliquer, ce serait parfait.

Merci, à bientôt.
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

Re: Constitution de trinômes

Message par OOotremer971 »

Bonjour TheHache
TheHache a écrit :Si tu pouvais l'expliquer, ce serait parfait.
Avant d'aborder l'aspect formules, je pense qu'il est nécessaire de commencer par l'explication du raisonnement adopté. Sa transcription en formule sera plus simple à comprendre.

Comment, à partir de deux groupes, constitués pour l'un de garçons et pour l'autre de filles, créer un maximum de trinômes composés de 2 hommes et d'une femme puis d'un homme et deux femmes, jusqu'à épuisement d'un des deux groupes ?

On cherche d'abord à savoir combien de trinômes on peut constituer. Logiquement, il y aura autant de trinômes que la somme des individus divisée par 3

Code : Tout sélectionner

=SOMME(B$40:B$41)/3
Problème 1 : le résultat de la division par 3 n'est pas forcement un nombre entier.
Problème 2 : les trinômes doivent impérativement être constitués d'au moins une femme ou au moins un homme. Il ne peut donc pas y avoir plus de trinôme que de personne dans un groupe. Pour résoudre les deux problèmes d'un coup :

Code : Tout sélectionner

=ENT(MIN(SOMME(B$40:B$41)/3;(B$40:B$41)))
celle là tu l'avais bien comprise :)
Avec ça, on obtient le nombre exact (et j'insiste sur exact) de trinôme qu'il est possible de constituer avec nos deux groupes.

Partant de là, le problème se simplifie. On sait qu'on peut faire x trinômes et pas un de plus. On sait aussi qu'il faut que les hommes soient le plus possible au nombre de 2 par trinôme. Mais comment savoir combien de fois seront-il au nombre de 2 ?
En partant du principe qu'il seront d'abord au nombre de 1 autant de fois qu'il y a de trinôme à créer. La différence entre le nombre d'hommes et le nombre de trinômes nous donne le nombre de fois qu'il y aura 2 hommes dans un trinôme (c'est la qu'il faut méditer).

A partir de cette vérité, il faut écrire une formule qui affiche 2 dans une colonne autant de fois que possible, puis 1 ensuite autant de fois que possible. Ça c'est pour la colonne des hommes. Celle des femmes, par déduction devra afficher l'inverse de celle des hommes sans se poser de question.

Maintenant passons aux formules :
Elles sont toutes constituées d'expressions qui retournent soit VRAI soit FAUX. Et pour rappel, VRAI +1 est égal à 2 (ça va bientôt nous arranger) et FAUX + 1 est égal à 1 (ça va aussi bientôt nous arranger pour remplir la colonne B).

L'expression :

Code : Tout sélectionner

=(A45>0) 
retourne VRAI si A45 contient une valeur supérieure à zéro et FAUX dans le cas contraire. Ce que tu ne comprenais pas. On aurait aussi pu écrire :

Code : Tout sélectionner

=SI(A45>0;1;0)
l'expression :

Code : Tout sélectionner

A45<=B$40-ENT(MIN(SOMME(B$40:B$41)/3;(B$40:B$41)))
retourne elle aussi VRAI ou FAUX. Souviens toi :

Code : Tout sélectionner

ENT(MIN(SOMME(B$40:B$41)/3;(B$40:B$41)))
correspond au nombre de trinôme que l'on peux faire.
B40 moins le nombre de trinôme que l'on peut faire, nous donne le nombre de fois qu'il y aura 2 hommes.
A45 est inférieur ou égal au nombre de fois qu'il y aura 2 hommes. C'est une expression qui retourne VRAI ou FAUX en fonction du contenu de la colonne A et du nombre de fois qu'il y aura 2 hommes.
Donc

Code : Tout sélectionner

(VRAI)*((VRAI)+1)
retourne 2
et

Code : Tout sélectionner

(A45>0)*((A45<=B$40-ENT(MIN(SOMME(B$40:B$41)/3;(B$40:B$41))))+1)
aussi, si A45 est supérieur à zéro et A45 inférieur ou égal au nombre de fois qu'il peut y avoir 2 hommes.

Dès qu'une de expressions devient fausse, les résultats changent :

Code : Tout sélectionner

FAUX multiplié par (VRAI + 1) est égal à zéro

Code : Tout sélectionner

VRAI multiplié par (FAUX+1) est égal à 1

Code : Tout sélectionner

VRAI multiplié par (VRAI+1) est égal à 2
et voilà comment se rempli la colonne B

Le principe est identique pour les colonnes A et C

J'ignore si c'est plus clair comme ça, mais n'hésite pas si tu as d'autres interrogations.

@+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 09:43

Re: Constitution de trinômes

Message par TheHache »

Bonjour OOotremer971,

Bah.... quoi dire.... splendide, magnifique, exceptionnel. :bravo:

Je te remercie pour ces explications claires et pertinentes qui, je ne doute pas un instant, serviront à beaucoup d'autres visiteurs du forum.

Encore un grand merci pour tout ce temps passé à la rédaction des explications et surtout à la recherche de la réponse.

A bientôt.
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro