XL 2021 Comment extraire la date la plus récente d'une cellule qui en contient plusieurs ?

pascal95170

XLDnaute Nouveau
bonjour

J'ai des cellules Excel avec du texte sous la forme ci dessous . Comment ne récupérer que la date la plus récente ?
Merci

"-
-
10/10/2022
01/11/2021
05/05/2023"

 
Solution
Re @pascal95170 :), bonjour @Phil69970 ;),

Puisqu'une fonction VBA ne vous convient pas, voici une formule matricielle en B2 à recopier vers le bas :
=SIERREUR(GRANDE.VALEUR(SIERREUR(DATEVAL(STXT(A2;LIGNE(INDIRECT("$1:$" & NBCAR(A2)-9));10));"");1);"")

Sur Excel 365 il n'est pas nécessaire de valider cette formule comme une formule matricielle (une simple validation suffit).
Sur Excel 2021, je ne sais pas, à vous de tester le type de validation à faire (en fait la validation matricielle est acceptée par toute les versions d'Excel - même les versions qui peuvent s'en passer 👌)

1699529787264.png

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @pascal95170 :),
Je pense que le point suivant de la charte répondra à tes interrogations ?

2.5 – La possibilité de joindre des fichiers est donnée sur ce forum. Ne pas hésiter à utiliser cette fonction, tout en veillant à ce que les données soient fictives et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.
Joindre un petit fichier ne coûte rien et débloque bien des situations ;) ...
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Avec une fonction personnalisée en VBA nommée DateMax dont le seul argument est la cellule contenant le texte à analyser. Exemple en B2 la formule : =DateMax(A2)

Le code de la fonction est dans module1 :
VB:
Function DateMax(ByVal x)
Dim res As Date, d As Date, i&, s$
   i = 1: res = DateSerial(1901, 1, 1)
   x = Replace(Replace(x, vbLf, ""), " ", "")
   Do
      s = Mid(x, i, 10)
      i = i + 1
      If s Like "##/##/####" Then
         i = i + 9
         If IsDate(s) Then
            d = CDate(s)
            If s = Format(d, "dd/mm/yyyy") Then If d > res Then res = d
         End If
      End If
      If i > Len(x) Then Exit Do
   Loop
   DateMax = IIf(res = DateSerial(1901, 1, 1), "", res)
End Function
 

Pièces jointes

  • pascal95170- Book1- v1.xlsm
    16.9 KB · Affichages: 3

pascal95170

XLDnaute Nouveau
Re,

Avec une fonction personnalisée en VBA nommée DateMax dont le seul argument est la cellule contenant le texte à analyser. Exemple en B2 la formule : =DateMax(A2)

Le code de la fonction est dans module1 :
VB:
Function DateMax(ByVal x)
Dim res As Date, d As Date, i&, s$
   i = 1: res = DateSerial(1901, 1, 1)
   x = Replace(Replace(x, vbLf, ""), " ", "")
   Do
      s = Mid(x, i, 10)
      i = i + 1
      If s Like "##/##/####" Then
         i = i + 9
         If IsDate(s) Then
            d = CDate(s)
            If s = Format(d, "dd/mm/yyyy") Then If d > res Then res = d
         End If
      End If
      If i > Len(x) Then Exit Do
   Loop
   DateMax = IIf(res = DateSerial(1901, 1, 1), "", res)
End Function
Merci mais je ne maîtrise pas du tout le VBa et comme je dois intégrer cela dans une formule de recherche V ça me semble un peu trop compliqué pour moi.

Existe t'il une formule Excel qui pourrai faire la même chose ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @pascal95170 :), bonjour @Phil69970 ;),

Puisqu'une fonction VBA ne vous convient pas, voici une formule matricielle en B2 à recopier vers le bas :
=SIERREUR(GRANDE.VALEUR(SIERREUR(DATEVAL(STXT(A2;LIGNE(INDIRECT("$1:$" & NBCAR(A2)-9));10));"");1);"")

Sur Excel 365 il n'est pas nécessaire de valider cette formule comme une formule matricielle (une simple validation suffit).
Sur Excel 2021, je ne sais pas, à vous de tester le type de validation à faire (en fait la validation matricielle est acceptée par toute les versions d'Excel - même les versions qui peuvent s'en passer 👌)

1699529787264.png
 

Pièces jointes

  • pascal95170- Book1- v2.xlsx
    10.7 KB · Affichages: 5
Dernière édition:

pascal95170

XLDnaute Nouveau
Re @pascal95170 :), bonjour @Phil69970 ;),

Puisqu'une fonction VBA ne vous convient pas, voici une formule matricielle en B2 à recopier vers le bas :
=SIERREUR(GRANDE.VALEUR(SIERREUR(DATEVAL(STXT(A2;LIGNE(INDIRECT("$1:$" & NBCAR(A2)-9));10));"");1);"")

Sur Excel 365 il n'est pas nécessaire de valider cette formule comme une formule matricielle (une simple validation suffit).
Sur Excel 2021, je ne sais pas, à vous de tester le type de validation à faire (en fait la validation matricielle est acceptée par toute les versions d'Excel - même les versions qui peuvent s'en passer 👌)

Regarde la pièce jointe 1183280
Merci beaucoup cela fonctionne parfaitement :) :)

Il me reste un dernier détail à régler, je souhaiterai appliquer une mise en forme conditionnelle (coloriser la cellule en rouge ) sur les cellules dont la date est inférieur à la date du jour et dont la cellule de la colonne C est vide et dont une cellule de la colonne D contient le texte "Réalisé"
Sais tu comment faire cela ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour R@chid :) ,
Sans toutefois être sur que FRACTIONNER.TEXTE() existe sous Excel 2021 :

Ça devient pénible de savoir si dans une version telle ou telle "nouvelle fonction" existe.
Versions auxquelles il faute rajouter si c'est pour Windows ou Mac.
il n'existe pas de tableau clair qui est facilement accessible et lisible avec la liste des fonctions et les versions qui les acceptent ou pas.
 

Discussions similaires

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg