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

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 !

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
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 😉 ...
 
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

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 ?
 
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

Dernière édition:
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 ?
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour