✅ Recherche d'un max dans un tableau


#1

Bonjour ,

J’ai le problème suivant.

Je gère des affectations de ressources à des équipes. Chaque ressource peut être affectée selon un %tage de temps dans des équipes. La somme des affectations par ressource fait 100 %

Ex
Jean Equipe 1 75%
Jean Equipe 2 25%
Pierre Equipe 1 30%
Pierre Equipe 2 55%
Pierre Equipe 3 15%
Marie Equipe 4 100%

Je cherche à trouver l’équipe principale de chaque ressource (celle où elle est le + affectée)
Ici
Jean Equipe 1
Pierre Equipe 2
Marie Equipe 4

Pourriez vous m’aider ? Merci d’avance


#2

Hello
Le problème se décompose en 2 parties:

  • Trouver le max pour 1 Prénom
  • Renvoyer l’équipe qui correspond à ce max et à ce prénom (attention si le max est présent 2 fois!)

Avec des formules Matricielles:

{=MAX((Prenoms=A9)*(Taux))} renvoie le max en ne tenant compte que des lignes dont le Prénom est la valeur en A9

{=INDEX(Equipes;EQUIV(B9;(Prenoms=A9)*(Taux);0))} cherche dans cette liste de valeurs la position du max et renvoie la même position dans la liste Equipes.
On est sur de renvoyer la valeur pour le bon prénom car on fait la recherche dans la liste de taux (Prenoms=A9)*(Taux) qui renvoie un taux de 0 pour tous les autres prénoms.


#3

Un GRAND merci. Je regarde ça attentivement demain et vous fais un retour.
Bravo !!!


#4

Bonsoir @EtienneD,
Salut @DocteurExcel,

@DocteurExcel, Après une bonne bronchite et 48 h sans électricité dû à la tempête, me voilà a peut prêt en forme, pour travailler un peu.

@EtienneD,

Je propose une autre approche à cette question.


Colonne “G” =SIERREUR(GRANDE.VALEUR(Poucentage;LIGNE()-1);"") cherche les grandes valeurs de la plus grande à la plus petite dans la colonne “C”.

Ensuite =SIERREUR(INDEX(Tableau;EQUIV($G2;Poucentage;0);2);"") cherche dans le tableau “A, B, C” dans la colonne 2 donc “B” l’Équipe correspondante aux valeurs de la colonne “G”.

Pour finir =SIERREUR(INDEX(Tableau;EQUIV($G2;Poucentage;0);1);"") cherche dans le tableau “A, B, C” dans la colonne 1 donc “A” le nom correspondant aux valeurs de la colonne “G”.

Voir aussi dans le “Gestionnaire de noms”:

Enfin un petit fichier exemple ICI==> EtienneD V1.xlsx (11,3 Ko)

Cordialement.


#5

Hello @mdo100 , bon retour parmi nous!

Que se passe t-il pour ta solution si 2 employes ont le meme pourcentage
d’affectation ?


#6

Re @DocteurExcel, @EtienneD,

Voilà ce qui devrait faire l’affaire en cas d’égalité.

J’ai ajouté 2 colonnes, “D” =SIERREUR(RANG(C2;Poucentage)+NB.SI(C$2:C2;C2)-1;"") Recherche le rang sans doublons en cas d’égalité.

Et colonne “G” =SIERREUR(PETITE.VALEUR(Rang;LIGNE()-1);"") pour trier l’ordre des rangs du plus petit au plus grand.

Colonne “H” =SI($G2<>"";INDEX(Tableau;EQUIV($G2;Rang;0);3);"")

Colonne “I” =SI($G2<>"";INDEX(Tableau;EQUIV($G2;Rang;0);2);"")

Colonne “J” =SI($G2<>"";INDEX(Tableau;EQUIV($G2;Rang;0);1);"")

Légère modif pour ses 3 formules, mais les explications plus haut conviennent aussi pour ses formules.

Voir aussi légère modif du “Gestionnaire de noms”.

Voici le fichier ICI==> EtienneD V2.xlsx (11,6 Ko)

Voilà, j’ai fais du mieux que possible, maintenant, je vais faire fermer les :eye::eye: :zzz:.

Cordialement.

PS: Les colonnes “D & G” peuvent-être masquées pour plus de convivialité.

Ci-joint fichier ICI==> EtienneD V3.xlsx (11,6 Ko)


#7

Merci beaucoup également !
J’ai un peu de mal à m’y retrouver du fait que le tableau résultat (colonnes G à J) contient autant de lignes que le tableau source (A à C).
Je comprends que le résultat est dans les 4 premières lignes mais un peu compliqué à isoler .
Comment faire ?
Encore merci en tout cas !


#8

Merci à nouveau
Juste un problème, je ne connais pas la notation matricielle
Comment faire pour définir les “variables” Prénoms, Equipes, etc. ?
Auriez vous un pointeur pour me guider ?
Encore merci !


#9

Bonjour @EtienneD,

En ce qui concerne le dernier fichier que j’ai fourni, pour avoir que les 4 premiers résultats, alors dans ce cas, je propose cette version avec une légère modif des formules colonnes “H, I, J” en utilisant la fonction =SI(ET(Valeur>0;Valeur<5);INDEX(Tableau;EQUIV(Valeur;Rang;0);colonne);rien)

Ci-joint le fichier modifié ==> EtienneD V4.xlsx (13,6 Ko)

Cordialement.


#10

Encore merci mais … ce n’est pas tout à fait ce que je recherche.
Je n’ai peut-être pas été assez clair.
Mon besoin était :

  • à partir du tableau des ressources avec %tages par équipe
  • d’alimenter un 2e tableau où les noms des ressources sont déjà renseignés et
  • 'y ajouter juste le nom d’équipe où chaque ressource a le %tage le + élevé . Et en cas où il y a 2 pourcentages max identiques, ramener l’une des 2 équipes aléatoirement
    Si vous pouvez m’aider … :wink:

#11

@EtienneD,

Et si tu nous aidait a t’aider un peu en fournissant au moins un bout de fichier.
Car @DocteurExcel et moi t’avons fourni déjà beaucoup d’aide, sans l’ombre d’un début de fichier, et je ne pense pas continuer (en tout cas pour moi) a faire tout le travail sans que tu y mettes un peu du tien.

Tu sais quoi faire.

Cordialement.


#12

Bonjour

A nouveau MERCI beaucoup pour l’aide.
Je pensais vraiment avoir joint le fichier.
J’en ai refait un en PJ
Equipe Max.xlsx (11,2 Ko)

Je comprends bien que cette aide est bénévole et sans aucune obligation.

Pour mon “pbm”

  • je n’arrive pas à “implémenter” la solution de @DocteurExcel (même en cherchant ailleurs, je ne comprends pas les formules matricielles avec { et }
  • et votre proposition est surement proche de “la” solution , mais je n’arrive pas non plus à l’adapter.

Merci d’avance, au cas où. Bonne fin de WE

Etienne


#13

Hello
Pour les formules matricielles : il faut valider la formule avec ctrl+Maj+Entrée et non pas juste Entrée , ce qui fera apparaître des accolades autour de la formule


#14

En effet, ça fonctionne comme çà. MERCI beaucoup !!
Solution très élégante.


#15

Re-bonjour,

J’ai mis en place la formule dans mon fichier réél.
Cela fonctionne très bien .
Par contre, cela ralentit énormément la feuille.

Pourtant les volumes sont faibles (300 ressources et 500 lignes dans la table des pourcentages)
On dirait que la feuille recalcule tout en permanence.
Par exemple , tps d’attente de 15 secondes si on fait un filtre sur la table des ressources.

Y-a-t’il moyen d’améliorer ça (… sans désactiver les calculs automatiques) ?
Le format du fichier a-t-il une influence .? (il est sauvegardé en xslb pour une raison que j’ignore).

A l’occasion …
Merci d’avance

Etienne


#16

Bonjour @EtienneD,
Salut @DocteurExcel,

Je viens de voir ton nouveau message et le fichier que tu as fourni.

Voici une solution sans formules matricielles, qui ont tendance c’est vrai à ralentir les recalcules, quoi que pour 500 lignes, 15 secondes ça me parait bien long.
Bref, en “G3” =INDEX($C$3:$C$8;EQUIV(SOMMEPROD(MAX(($B$3:$B$8=$F3)*($D$3:$D$8)));$D$3:$D$8;0))

Voici ton fichier en retour ==> Equipe Max V1.xlsx (11,7 Ko)

Pour la sauvegarde en xlsb (Classeur Excel binaire), il te suffit d’enregistrer ton fichier sous xlsx (Classeur Excel).

Voir ci-dessous:

Cordialement.


#17

Re @EtienneD,

Petite amélioration pour 5000 lignes (voir dans le “Gestionnaire de noms”).
=SIERREUR(INDEX(Équipe;EQUIV(SOMMEPROD(MAX((Prénom=$F3)*(Pourcentage)));Pourcentage;0));"")

Et le fichier modifié ==> Equipe Max V2.xlsx (12,1 Ko)

Bonne soirée.
Cdlt.


#18

Bonjour @DocteurExcel @mdo100,
A nouveau merci pour les réponses.
Au final, j’ai adopté la solution de @DocteurExcel. Mais pour améliorer les performances; j’ai réduit la taille des matrices au “strict minimum”.
Les tps sont raisonnables comme ça.
Encore merci
Etienne