Bonjour
Comme dans ton exemple tu n'as pas cellule non vide entre plusieurs blocs, tu peux mettre dans la cellule B11 cette formule
=NBVAL(Feuil1!C:C)
Dans la cellule B14, tu as fais une erreur, tu demandes de retourner la valeur de la mauvaise colonne, dans la plage A:W, la 1ère colonne (3ème argument de la fonction INDEX) est la colonne A et pas la B.
Soit tu changes la plage en B:W ou la valeur à 2. Ce qui donne
=INDEX(Feuil1!B:W;B11;1)
ou
=INDEX(Feuil1!A:W;B11;2)
Dans la formule B5, LIGNE(Feuil1!B2:B28) retourne dans une matrice le numéro de la ligne (elle aurait ceci {2,3,4,5,6,7.......,35,36,37}), mais la ligne 2 ... de la plage G2:G37 correspond à la cellule G3, tu as donc un décalage d'une ligne.
donc on pourrait écrire ceci,
MAX(NON(ESTVIDE(Feuil1!G2:G37))*LIGNE(Feuil1!B2:B37)-1)
ce qui serait juste, mais il est préférable d'écrire ceci
MAX(NON(ESTVIDE(Feuil1!G2:G37))*LIGNE(Feuil1!B2:B37))-1
il y a une petite nuance. Dans la première, Excel va écrire dans la matrice le résultat de l'opération
{estvide(G2)*Ligne(G2)-1,estvide(G3)*Ligne(G3)-1,estvide(G4)*Ligne(G4)-1,......,estvide(G37)*Ligne(G37)-1}
et dans la deuxième
{estvide(G2)*Ligne(G2),estvide(G3)*Ligne(G3),estvide(G4)*Ligne(G4),......,estvide(G37)*Ligne(G37)}
la soustraction se fera après la fonction MAX et ainsi on évite 36 soustractions.
Ce qui donne la formule.
=INDEX(Feuil1!G2:G37;MAX(NON(ESTVIDE(Feuil1!G2:G37))*LIGNE(Feuil1!B2:B37))-1;1)
J'espère que cette dernière partie ne va pas être trop dure à digérer. Tu as dans les formules matricielles à toute puissance d'Excel dans les calculs.
@+Jean-Marie
Message édité par: JeanMarie, à: 14/03/2005 18:25