Bonjour,
Pour les conversions numérique/texte, j'avoue que au fil de l'eau je fait un peu au petit bonheur, un coup d'un coté un coup de l'autre, en texte ou en numérique, l'important étant qu'au final des deux coté ce soit pareil.
J'ai du mettre "*1" des deux coté par inadvertance, mais mieux vaut trop de "forçage" de format que pas du tout j'imagine.
Dans la troisième formule, je ne fait pas la conversion en numérique, je force la conversion en texte du résultat de ma fonction MAX avec ' &"" '.
Pour la gestion du nombre de ligne nécessaire, j'ai tablé sur 150 en "dur" et je me suis mis une MFC "au cas où" qui me notifie si la dernière ligne est remplis pour que j'agrandisse la zone, c'est pas grave si j'ai des valeurs vide à la fin de chaque liste, Elle disparaitront toute seul lors de l'export en csv, pour alimenter une BDD. mais les vides entre les valeurs c'est plus embêtant.
Quand au types ils ne dépasseront pas 9, l'ID est construit de manière a ce que le premier chiffre renvoie le type. Si jamais un jour ça dépasse 9 je n'aurait qu'à changer mon Gauche en "2", et en amont il auront changé la nomenclature pour passer les 1 en 01. Mais ça c'est pas de mon ressort. pour l'instant on a que 4 type donc on a le temps de voir venir je pense lol.
Et les valeurs dans abc sont du texte (des loooooongs textes de description de plus de 2000 caractères on adore), donc non pas de valeur à 0. seulement des valeurs vides.
Oui pris indépendamment tout les argument renvoie bien la valeur attendue, je me suis même fait un tableau décomposant fonction par fonction cette formule. et encore une fois, ce qui me laisse perplexe c'est que en prenant exactement la même formule, et juste en rajoutant SI([...];"VRAI";"FAUX") le résultat logique s'inverse.
En essayant de tout reprendre a zéro, j'en arrive à cette formule :
=SI(GAUCHE(INDEX(CompFiliere;PETITE.VALEUR(SI(NON(ESTVIDE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1)));LIGNE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1));"");NB.SI(INDIRECT("C"&EQUIV("Code comp";C:C;0)&":C"&(LIGNE()-1));"*?")+2));1)=MAX(INDIRECT("$E$"&EQUIV("Domaine";E:E;0)&":$E"&55))&"";INDEX(CompFiliere;PETITE.VALEUR(SI(NON(ESTVIDE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1)));LIGNE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1));"");NB.SI(INDIRECT("C"&EQUIV("Code comp";C:C;0)&":C"&(LIGNE()-1));"*?")+2));"")
Qui fonctionne bien pour type 1 (1 renseigné en E55), mais quand j'essaie de rendre ça dynamique (pour que la valeur de MAx change une fois la ligne X contenant le type suivant est atteint) en remplaçant 55 par Ligne() là il veut plus...
Pourtant pareil, quand je test tout seul =MAX(INDIRECT("$E$"&EQUIV("Domaine";E:E;0)&":$E"&Ligne()))&"", la bonne valeur est renvoyée. (en l'occurrence 56 pour construire une range indirect $E$54:$E56
Détail qui me rends dingue, si je remplace 55 par la référence de la cellule qui contient cet argument testé séparément... ça fonctionne :D
C56
=SI(GAUCHE(INDEX(CompFiliere;PETITE.VALEUR(SI(NON(ESTVIDE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1)));LIGNE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1));"");NB.SI(INDIRECT("C"&EQUIV("Code comp";C:C;0)&":C"&(LIGNE()-1));"*?")+2));1)=H56;INDEX(CompFiliere;PETITE.VALEUR(SI(NON(ESTVIDE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1)));LIGNE(DECALER(CompFiliere;0;EQUIV(GAUCHE($B$3;NBCAR($B$3)-11);INDIRECT("COMPETENCES!$2:$2");0)-1));"");NB.SI(INDIRECT("C"&EQUIV("Code comp";C:C;0)&":C"&(LIGNE()-1));"*?")+2));"")
et H56
=MAX(INDIRECT("$E$"&EQUIV("Domaine";E:E;0)&":$E$"&LIGNE()))&""
Mais vu que le but c'est de ne ne plus avoir aucune référence "brut" .. ce n'est pas une solution satisfaisante (en plus de rajouter une colonne de calcul inutile.)
Je me doute que c'est pas évident sans le fichier de travail mais tu m'aide déjà énormément en prenant le temps d'essayer de comprendre mon problème, merci.