XL 2016 Dernière cellule non vide - retour date

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Michel_ja

XLDnaute Occasionnel
Bonjour à tous.
En fouillant un peur sur le forum j'ai trouvé une solution pour trouver la première cellule différente de 0 sur une ligne. Mon besoin est l'inverse, j'ai un fichier avec des lignes de produits et en colonnes j'ai des dates mensuelles et je souhaiterai savoir à quelle date tel ou tel produit a réalisé sa dernière vente. L'objectif est de corriger une cellule qui prédisait que le produit ne vendrait plus passé cette date.
J'ai joint un extrait du fichier. En Col L, j'ai des dates qui prédisait donc que le véhicule aaaaa (Cellule E2) ne serait plus vendu après le 30/08/2018. Hors il y a des ventes jusqu'en avril 2019 (Cellule BM2). Pourrait-on avoir en cellule BV2 une fonction qui me renverrai la date 30/04/2019 ?

Je vous remercie par avance.
Michel
 

Pièces jointes

Bonjour @Michel_ja, @job75 🙂,

Un peu différent de la solution de job75.

Tout d'abord, on a transformé les date de la ligne 1 en véritable date au sens Excel.
  • pour cela on a placé la date 31/01/2015 dans la cellule N1
  • dans la cellule O1, on a placé la formule =FIN.MOIS(N1;1) qu'on a recopiée vers la droite
Dans la cellule BV2, on a placé la formule suivante puis on a recopier cette formule matricielle vers le bas:
VB:
=SIERREUR(SI(INDEX($1:$1;GRANDE.VALEUR(SI(N2:BU2>0;COLONNE(N2:BU2);"");1))>L2;INDEX($1:$1;GRANDE.VALEUR(SI(N2:BU2>0;COLONNE(N2:BU2);"");1));"");"")

Les cellules de la colonne BV contiennent des véritables dates.
 

Pièces jointes

Bonjour mapomme,

Tout à fait d'accord pour utiliser de vraies dates, mais Michel_ja a peut-être de bonnes raisons pour utiliser des dates sous forme de textes, en anglais de surcroît.

On peut alors utiliser cette macro évènementielle pour les créer :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim deb As Range, a, P As Range, tablo, resu$(), i%
Set deb = [N1] '1ère date
If Not IsDate(deb) Then Exit Sub
a = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
Set P = deb.Resize(, Cells(deb.Row, Columns.Count).End(xlToLeft).Column - deb.Column)
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'sécurité
deb = DateSerial(Year(deb), Month(deb) + 1, 0) 'fin de mois
P(2).Resize(, P.Columns.Count - 1) = "=EOMONTH(RC[-1],1)" 'fonction FIN.MOIS
ThisWorkbook.Names.Add "MesDates", P.Value2 'nom défini sur une matrice
tablo = [MesDates] 'matrice, plus rapide
ReDim resu(1 To UBound(tablo))
For i = 1 To UBound(tablo)
    resu(i) = "'" & a(Month(tablo(i)) - 1) & " " & Year(tablo(i)) 'textes
Next
P = resu 'restitution
Application.EnableEvents = True 'réactive les évènements
End Sub
Edit : le tableau resu est nécessaire.

Avec le nom défini MesDates créé la formule matricielle en BV2 renvoie une vraie date :
Code:
=SI(SOMME(N2:BU2);INDEX(MesDates;MAX(SI(N2:BU2<>0;COLONNE(N2:BU2))-COLONNE(N2)+1));"")
Fichier .xlsm joint.

A+
 

Pièces jointes

Dernière édition:
Notre forum d’entraide est 100 % gratuit et le restera.
Aucune formation payante, aucun fichier à acheter, rien à vendre. Mais comme tout site, nous devons couvrir nos frais pour continuer à vous accompagner.
Soutenez-nous en souscrivant à un compte membre : c’est rapide, vous choisissez simplement votre niveau de soutien et le tour est joué.

Je soutiens la communauté et j’accède à mon compte membre

Discussions similaires

Retour