Brian a une rangée de nombres avec 240 cellules. Dans cette ligne, les nombres diminuent régulièrement et finiront par devenir, à un moment donné dans ces 240 cellules, 0. Les zéros continueront à remplir les cellules restantes de la ligne. Brian doit écrire une équation qui renverra la dernière valeur différente de zéro de la ligne.

Il existe plusieurs manières de renvoyer la valeur souhaitée.

(Cela ne semble-t-il pas toujours être le cas avec Excel? Vous pouvez trouver de nombreuses façons d’obtenir un résultat.) En général, vous pouvez utiliser une formule régulière ou une formule matricielle.

Si vous souhaitez utiliser une formule régulière, en voici une que vous pouvez essayer:

=OFFSET(A6,0,(COUNT(A6:IF6)-COUNTIF(A6:IF6,0))-1)

La fonction COUNTIF compte le nombre de valeurs nulles et la fonction COUNT détermine le nombre de cellules de la plage. La soustraction de l’une de l’autre et l’ajustement de 1 donne la valeur OFFSET dans le «tableau» de cellules où se trouve la dernière valeur non nulle. Cette formule suppose que les valeurs commencent dans la colonne A; s’ils commencent dans une colonne différente, vous devrez ajuster la valeur fournie par la partie COUNT / COUNTIF de la formule pour représenter le décalage par rapport à la première colonne.

Voici une variation plus courte de la formule, basée sur un décalage du côté droit de la plage plutôt que du côté gauche:

=OFFSET(IF6,0,-COUNTIF(A6:IF6,0))

Dans ce cas, il est important que IF6 soit l’extrémité droite réelle de la plage. La formule fonctionne en comptant le nombre de valeurs nulles dans la plage (le tout à droite de la plage), puis en calculant l’adresse de cellule de la dernière cellule (IF6) moins le nombre de zéros.

Voici une version qui utilise la fonction INDEX à la place:

=INDEX(A6:IF6,,MATCH(0,A6:IF6,0)-1)

Cette version est encore plus courte, en utilisant la fonction LOOKUP:

=LOOKUP(1,1/(6:6>0),6:6)

Des formules matricielles peuvent également être utilisées. (Les formules matricielles sont entrées en appuyant sur Ctrl + Maj + Entrée.) Celui-ci utilise la fonction INDIRECT:

=INDIRECT("R6C" & MAX((A6:IF6>0)*COLUMN(A6:IF6)),FALSE)

Cette formule matricielle utilise une implémentation intéressante de la fonction LOOKUP pour trouver le résultat correct:

=LOOKUP(9.99999999999999E+307,IF(A6:IF6<>0,A6:IF6))

Voici une autre formule matricielle qui peut être utilisée, cette fois en utilisant la fonction OFFSET pour trouver la dernière valeur non nulle de la ligne 6:

=OFFSET(A6,0,MIN(IF(6:6=0,COLUMN(6:6),300))-2)

Voici une variante encore plus courte:

=MIN(IF(A6:IF6>0,A6:IF6))

Toutes ces formules présentées jusqu’à présent dépendent du fait que les nombres de la ligne diminuent en fait – ils partent de quelque soit le nombre de départ et vont progressivement vers zéro. Si les nombres ne diminuent pas, vous pouvez utiliser un autre type de formule matricielle pour déterminer la dernière valeur différente de zéro de la ligne:

=INDEX(6:6,MAX(IF(A6:IF6<>0,COLUMN(A6:IF6))))

La formule détermine d’abord la colonne maximale de la ligne (dans ce cas, la ligne 6) qui a une valeur différente de zéro, puis elle utilise la fonction INDEX pour obtenir la valeur de cette colonne dans cette ligne.

Comme vous pouvez le constater, il existe plusieurs façons de trouver la dernière valeur non nulle dans une ligne. Choisissez celui qui vous plaît; il n’y a pas de bien ou de mal dans ce cas.

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (11250) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.

Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici: link: / excel-Last_Non-Zero_Value_in_a_Row [Last Non-Zero Value in a Row].