Position dernière valeur non nulle

Bonjour,

Après plus d'une demi-heure de tentatives en vain, je viens demander votre aide. J'ai un tableau de plusieurs lignes et de 12 colonnes (mensuelles) et seulement certaines cellules ont des valeurs non nulle. J'aimerais ensuite récupérer la position de la dernière valeur non nulle

Un exemple : Si j'ai 0/0/0/40/0/68/0/0/0/0/0/0, j'aimerais récupérer le résultat "6" via une formule.

J'ai essayé de retourner des NB.SI dans tous les sens sans trouver de solution. Auriez vous une solution ?

Merci d'avance !

NB : j'ai joint un fichier reprenant un exemple concret.

25exemple.xlsx (9.70 Ko)

Bonjour,

Je propose d'utiliser ceci en formule matricielle (à valider avec maj+ctrl+entrée):

MAX(SI(B2:M2<>0;COLONNE(B2:M2);""))-COLONNE(A2)

J'ai ensuite entouré ça avec un test qui fait que la cellule contienne 0 si la position renvoyée est négative (pas de valeur différente de 0 trouvée).

L'idée est de renvoyer la colonne pour chaque valeur différente de 0, et de prendre le maximum de ces valeurs pour avoir la dernière position.

La solution dans le fichier ci-joint:

34exemple.xlsx (10.89 Ko)

bonjour

une petite contribution

cordialement

=MAX(0;SOMMEPROD(MAX((B2:M2<>0)*(COLONNE(B:M))))-1)

Bonjour Ausecour,

Merci pour la rapidité et cette solution me semble parfaite. Néanmoins je rencontre un nouveau problème : mon but final aurait été d'appliquer cette formule à un code VBA, afin de ne prendre en compte qu'un certain nombre de mois.

D'habitude, il me suffit d'écrire la formule en .FormulaArray, mais ici je bloque sur une erreur 1004. Savez vous d'où cela peut venir ?

Encore merci !

16exemple.xlsm (15.11 Ko)

Salut tulipe_4,

Sans le vouloir tu viens de régler mon problème de VBA! Je viens de retranscrire ta version du code en vba et pas d'erreur avec celui-ci !

Merci beaucoup à vous deux !

Salut tulipe_4,

Sans le vouloir tu viens de régler mon problème de VBA! Je viens de retranscrire ta version du code en vba et pas d'erreur avec celui-ci !

Merci beaucoup à vous deux !

c'est parce que ma formule n'est pas vraiment matricielle tridactyle

aggregate n'est pas une formule matricielle

Sub Macro1()
     With Range("P2:P10")
          .FormulaR1C1 = "=IFERROR(AGGREGATE(14,6,(COLUMN(RC2:RC13)-1)/(RC2:RC13<>0),1),""Err"")"
          .Value = .Value
     End With
End Sub

Ah le but c'était une macro?

Dans ce cas je peux aussi proposer:

Sub dernierePosition()
Dim tabSource As Variant, tabResultat As Variant
ReDim tabResultat(1 To 9, 1 To 1)

tabSource = Range("B2", "M10")
For i = 1 To 9
    pos = 0

    For j = UBound(tabSource, 2) To LBound(tabSource, 2) Step -1
        If tabSource(i, j) <> 0 Then
            pos = j
            Exit For
        End If
    Next j

    tabResultat(i, 1) = pos
Next i

Range("P2").Resize(UBound(tabResultat, 1), UBound(tabResultat, 2)).Value = tabResultat
End Sub
13exemple-1.xlsm (15.89 Ko)

Bonjour à tous !

Pour le plaisir (réservé à 365 Insider pour le moment) une formule unique pour l'ensemble de la plage :

=BYROW(B2:M10;LAMBDA(r;MAX(SI(r>0;SEQUENCE(;12);""))))
Rechercher des sujets similaires à "position derniere valeur nulle"