Microsoft 365 trouver la date la plus récente (uniquement sur le jour) contenue dans ma cellule :

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
Je vous souhaite une belle journée :)

Je me permets de revenir vers nos chers ténors en vba pour un besoin particulier qui, selon mes recherche n'a jamais été traité, ni sur le forum, ni sur internet.

Il m'est très difficile d'expliquer mon besoin dans le post. Il est, je crois, clairement montré dans le fichier test que je joins à ma demande.

Si vous aviez la solution vba, ça m'arrangerait bien lol :)
En espérant que ce sera pas trop ch..t à lire.
Je vous remercie vivement,
Amicalement,
lionel,
 

Pièces jointes

  • test_uf_comment.xlsm
    206.5 KB · Affichages: 49
Dernière édition:
Solution
Bonjour Lionel, soan, Yeahou,

Cette solution impose le minimum de contraintes aux dates dans la cellule active :
VB:
Sub DerniereDate()
Dim x$, i%, y$, a(), n%
x = Application.Trim(ActiveCell) 'SUPPRESPACE
For i = 1 To Len(x)
    y = Mid(x, i, 14)
    If y Like "##?##?## ##:##" And IsDate(y) Then ReDim Preserve a(n): a(n) = CDbl(CDate(y)): n = n + 1
Next
If n Then MsgBox "Dernière date " & Format(Application.Max(a), "dd-mm-yy hh:mm")
End Sub
Les renvois à la ligne ne sont pas indispensables.

Il suffit que les dates soient bien des dates formatées "jj-mm-aa hh:mm", le tiret pouvant être un slash /.

A+

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour à toutes et à toutes,

J'ai trouvé comment poser simplement ma question :
trouver la date la plus récente (uniquement sur le jour) contenue à l'intérieur de ma cellule :
Sans titre.png

Pour obtenir un code du genre :
Si (date = aujourdhui alors ....

lionel,
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonsoir Lionel,

ton fichier en retour. :)

tu es sur la feuille "Appels", et la cellule active est L2 ; fais Ctrl e 😊

à toi de faire d'autres tests, avec d'autres données.

VB:
Option Explicit

Sub Essai()
  Dim s$: s = ActiveCell: If s = "" Then Exit Sub
  Dim T, D1 As Date, D2 As Date, A%, M As Byte, J As Byte, i%
  T = Split(s, Chr$(10))
  For i = 0 To UBound(T)
    s = Left$(T(i), 8)
    A = 2000 + Right$(s, 2): M = Mid$(s, 4, 2): J = Left$(s, 2)
    D2 = DateSerial(A, M, J): If D2 > D1 Then D1 = D2
  Next i
  MsgBox "La date la plus récente est :" _
    & vbLf & vbLf & "le " & Format(D1, "dd-mm-yy")
End Sub

dans le module ThisWorkbook, enlève 2× Exit Sub : d'abord au début de Workbook_Open(), puis au début de Workbook_BeforeClose() ;) (je les ai inhibés pour éviter qu'ils se déclenchent)



edit du 20 mars 2021 à 13 h 38 :

ATTENTION : je me suis trompé ! j'ai oublié de prendre l'heure en compte ➯ ma macro ne fait aucune différence entre des dates qui sont le même jour, mais à des heures différentes ! :oops:

de plus, ma « solution » plante carrément si le début d'une ligne n'est pas une date valide, et sous la forme jj-mm-aa ! :oops:

je ne supprime pas ce post pour qu'il soit un exemple de ce qui peut arriver quand on oublie bêtement un « détail » ! ça évitera peut-être à d'autres lecteurs de faire les mêmes erreurs !​

soan
 

Pièces jointes

  • test uf comment.xlsm
    212.6 KB · Affichages: 6
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel, soan, Yeahou,

Cette solution impose le minimum de contraintes aux dates dans la cellule active :
VB:
Sub DerniereDate()
Dim x$, i%, y$, a(), n%
x = Application.Trim(ActiveCell) 'SUPPRESPACE
For i = 1 To Len(x)
    y = Mid(x, i, 14)
    If y Like "##?##?## ##:##" And IsDate(y) Then ReDim Preserve a(n): a(n) = CDbl(CDate(y)): n = n + 1
Next
If n Then MsgBox "Dernière date " & Format(Application.Max(a), "dd-mm-yy hh:mm")
End Sub
Les renvois à la ligne ne sont pas indispensables.

Il suffit que les dates soient bien des dates formatées "jj-mm-aa hh:mm", le tiret pouvant être un slash /.

A+
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Lionel, le fil,

j'ai vu le fichier de ton post #6, et je te remercie de l'avoir posté. :)

petites précisions sur ma solution : ça ne marche que pour une cellule dont toutes les lignes commencent par une date de la forme jj-mm-aa ; ça ajoute 2000 pour le millésime ➯ l'année 21 devient 2021 ➯ c'est pas prévu pour des années antérieures à 2000, ni pour des années supérieures à 2999 ! ➯ quand tu seras en l'an 3000, tu devras changer de méthode ! idem en 4000, 5000, 6000, etc... : les immortels du clan MacLeod ne meurent jamais ! 😁

c'est mieux que tu prennes une des 2 autres solutions que la mienne, car j'viens d'm'apercevoir que j'ai fait une grosse erreur ! en effet, j'indique la date la plus récente uniquement selon la date : ma macro ne prend pas l'heure en compte ! ainsi, elle ne fait aucune différence entre des dates qui sont le même jour, mais à des heures différentes ! :oops: honte à moi ! :oops: :oops: :oops: j'vais aller m'cacher au fond d'un trou ou au fond d'une caverne, et j'en ressortirai qu'après avoir hiberné !!! :p 🤪 😂 🤣

de plus, pour ne rien arranger, ma solution plante carrément si le début d'une ligne n'est pas une date valide ! bon, ben alors c'est décidé : j'vais m'faire ermite, et j'vais prolonger ma période d'hibernation ! 😁 o_O :eek: 🤣

IMPORTANT : il vaut mieux que tu décoches mon post #3 comme étant une solution valide, vu que c'est pas le cas !!! coche plutôt une des 2 autres solutions ! 😉



@Yeahou : j'm'ennuie tout seul, dans ma caverne ! 😭 tu veux pas venir papoter avec moi ? (j'suis un ours qui comprend les miaous)

soan
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Soan, Bonjour Yeahou,
Merci pour tes précisions :)
"L'an 3000" > j'aurai peut-être été décapité ;)
'des dates qui sont le même jour, mais à des heures différentes !" = pas de souci pour moi,
"si le début d'une ligne n'est pas une date valide" = c'est tjrs une date valide :)
@+
lionel,
 

Discussions similaires

Statistiques des forums

Discussions
312 234
Messages
2 086 467
Membres
103 226
dernier inscrit
smail12