liste déoroulante sur plage de valeurs liste dynamique, ordonnée sur 2 critères...

David69400

XLDnaute Junior
Bonjour,

Novice en VBA et intermédiaire dans les formules excel, j'ai beaucoup appris en regardant votre forums.
Pour la 1ère fois, je poste une demande d'aide et j'espère retenir votre attention

C'est relativement simple comme demande au final mais un peu long pour en comprendre la genèse
(ie faire en sorte que la plage sur laquelle pointe ma liste déroulante, soit ordonnée selon 2 critères.... dans un contexte de planing de personnel selon dispo jour et compétences, avec 2 critères de Titulaire et Remplacant pour hiérarchiser la liste... )

Vous trouverez ci-joint le fichier excel avec tout ce qu'il faut dedans un onglet EXPLICATION.

Je préfère si possible une solution formule ou du VBA, mais avec parcimonie, sinon je n'arriverai pas à suivre et c'est pas le but.


MERCI par avance pour l'attention que vous porterez à ma demande,

Celui qui arrivera à m'aider dans l'esprit de ce que j'ai commencé à faire, aura une récompense "gustative", je n'en dis pas plus... mais je tiendrai parole !

David69400
 

Pièces jointes

  • Tableau CB TEST 2504.xlsm
    198.8 KB · Affichages: 40

CISCO

XLDnaute Barbatruc
Re : liste déoroulante sur plage de valeurs liste dynamique, ordonnée sur 2 critères

Bonjour

Essaye avec
=INDEX($E$1:$E$471;MIN(SI((NB.SI(BR$4:BR4;TAB_OPERATEURS[NOM+PRENOM])=0)*SI(LIGNES(BR$4:BR4)<=NB.SI(TAB_OPERATEURS[CANULE];"T");TAB_OPERATEURS[CANULE]="T";TAB_OPERATEURS[CANULE]="R");LIGNE(TAB_OPERATEURS[CANULE]))))
en matriciel en BR5.

Pour les autres colonnes, tu devrais savoir faire...

@ plus
 
Dernière édition:

David69400

XLDnaute Junior
Re : liste déoroulante sur plage de valeurs liste dynamique, ordonnée sur 2 critères

M. CISCO

Presque SUPER....:rolleyes:
votre formule me tri bien les opérateurs dans l'ordre souhaité T puis R.
en revanche, j'ai perdu le pointage absence: MrB est dans la liste alors qu'il est pointé Absent..
cb test.jpg

en tout cas, vous avez presque mrétié la récompense gustative (ca a de la fleur , une forme oblongue, on en trouve en savoie, ardèche ou aveyron... entre autre)

à vous lire,

merci

David69400
 

David69400

XLDnaute Junior
Re : liste déoroulante sur plage de valeurs liste dynamique, ordonnée sur 2 critères

Mr CISCO

c'est tout bon, j'ai pu remplacer CANULE par CANULE_BACK_LUNDI, et votre formule prend désormais bien en compte les absences et classe les op en T puis R... c'est génial;

je vous souhaite un agréable we,

David69400
ps : votre adresse en mail privé pour que je vous envoie votre récompense...
 

CISCO

XLDnaute Barbatruc
Re : liste déoroulante sur plage de valeurs liste dynamique, ordonnée sur 2 critères

Bonjour

Une petite explication pour t'aider à progresser :
=INDEX($E$1:$E$471;MIN(SI((NB.SI(BR$4:BR4;TAB_OPERATEURS[NOM+PRENOM])=0)*SI(LIGNES(BR$4:BR4)<=NB.SI(TAB_OPERATEURS[CANULE];"T");TAB_OPERATEURS[CANULE]="T";TAB_OPERATEURS[CANULE]="R");LIGNE(TAB_OPERATEURS[CANULE]))))

SI(NB.SI(BR$4:BR4;TAB_OPERATEURS[NOM+PRENOM])=0;LIGNE(TAB_OPERATEURS[CANULE]) permet de ne garder en mémoire que les n° de ligne des noms pas encore cités au dessus dans la colonne BR. Sur la ligne 5, cette formule compare le contenu de BR4 avec TAB_OPERATEURS[NOM+PRENOM]. Sur la ligne 6, cette formule compare le contenu de BR4 et de BR5 avec TAB_OPERATEURS[NOM+PRENOM]. Sur la ligne 7, c'est BR4, BR5 et BR6... Et ainsi de suite. Seuls les noms non encore cités donnent NB.SI(...;....) = 0.

MIN(SI(NB.SI(BR$4:BR4;TAB_OPERATEURS[NOM+PRENOM])=0;LIGNE(TAB_OPERATEURS[CANULE])) renvoie le 1er n° de ligne des noms pas encore cités au dessus dans la colonne BR.

INDEX($E$1:$E$471;MIN(SI(NB.SI(BR$4:BR4;TAB_OPERATEURS[NOM+PRENOM])=0;LIGNE(TAB_OPERATEURS[CANULE]))) renvoie le premier nom pas encore cités dans la colonne BR, pris dans la colonne E, correspondant à ce MIN.

Mais on ne veut pas tous les noms de la colonne E transférés dans la colonne BR, on veut d'abord les titulaires (marqués donc avec un T en colonne K), et une fois que tous les titulaires ont été cités, on veut les remplaçants (avec un R en colonne K).

Pour n'avoir que les titulaires, on peut faire avec
MIN(SI((NB.SI(BR$4:BR4;TAB_OPERATEURS[NOM+PRENOM])=0)*(TAB_OPERATEURS[CANULE]="T");LIGNE(TAB_OPERATEURS[CANULE])) mais on veut d'abord les titulaires, puis les remplaçants.
Pour voir si on a cité tous les titualires, on rajoute la condition SI(LIGNES(BR$4:BR4)<=NB.SI(TAB_OPERATEURS[CANULE];"T");réponse si VRAI; réponse si FAUX), plus précisément ici SI(LIGNES(BR$4:BR4)<=NB.SI(TAB_OPERATEURS[CANULE];"T");TAB_OPERATEURS[CANULE]="T"; TAB_OPERATEURS[CANULE]="R")

NB.SI(TAB_OPERATEURS[CANULE];"T") donne le nombre de T en colonne K, donc le nombre de titulaires. Donc, tant qu'on a pas cité tous les titulaires, on teste TAB_OPERATEURS[CANULE]="T" (pour trouver le titulaire suivant), qui donne VRAI pour les titulaires et FAUX pour les autres.
Après, on teste TAB_OPERATEURS[CANULE]="R" (pour trouver le 1er remplaçant, puis le 2nd...) qui donne VRAI pour les remplaçants, et FAUX pour les autres.

SI((NB.SI(BR$4:BR4;TAB_OPERATEURS[NOM+PRENOM])=0)*SI(LIGNES(BR$4:BR4)<=NB.SI(TAB_OPERATEURS[CANULE];"T");TAB_OPERATEURS[CANULE]="T";TAB_OPERATEURS[CANULE]="R");LIGNE(TAB_OPERATEURS[CANULE]) renvoie donc quelque chose du genre SI({VRAI.VRAI.FAUX......FAUX}*{VRAI.FAUX.......VRAI};LIGNE(TAB_OPERATEURS[CANULE]). Cela donne SI({1.0.0.......0};LIGNE(TAB_OPERATEURS[CANULE]), qui devient une liste de n° de ligne et de FAUX.

La formule donne donc les n° de lignes des noms non encore cités au dessus en colonne BR, titulaires au début. MIN permet de ne renvoyer que le premier n° de cette liste. INDEX(... permet de renvoyer le nom pris dans la colonne E correspondant à ce n° de ligne. Ensuite, on fait de même avec les remplaçants.

@ plus

P.S : Pour voir toutes les étapes intermédiaires, cliquer sur "Formules", puis sur "Evaluation de formule"
 

Pièces jointes

  • Capture VRAIFAUX.PNG
    Capture VRAIFAUX.PNG
    19.9 KB · Affichages: 39
Dernière édition:

David69400

XLDnaute Junior
Re : liste déoroulante sur plage de valeurs liste dynamique, ordonnée sur 2 critères

Merci franchement d'avoir pris le temps de dérouler la formule et maintenant, j'arrive à comprendre.
Vous avez bien fait d'ajouter l'évaluation de formule que je ne connaissais pas!

Très bonne semaine,

DAvid
 

Statistiques des forums

Discussions
312 373
Messages
2 087 721
Membres
103 654
dernier inscrit
kingdz2022