Calendrier automatique

Phoenix23

XLDnaute Occasionnel
Bonsoir à toutes et tous,
Mon problème: Un calendrier automatique qui calcul le temps passé depuis la date de naissance, j'ai trouvé, modifié une formule trouvée sur internet pour les années, mois, jours passés, mais je bloque pour les heures, minutes secondes.
D'avance merci pour votre aide
Cordialement
 

Pièces jointes

  • Classeur2.xlsx
    10.2 KB · Affichages: 153
  • Classeur2.xlsx
    10.2 KB · Affichages: 151
  • Classeur2.xlsx
    10.2 KB · Affichages: 161

ROGER2327

XLDnaute Barbatruc
Re : Calendrier automatique

Bonjour à tous.


ok, c'est bien ainsi et encore merci à vous !

au plaisir !


EDIT:

j'ai remis le classeur car j'avais oublié une formule à ROGER2327 ! mille excuses !
Merci pour la synthèse.
Mais je vais refroidir votre enthousiasme : en approfondissant, il s'avère que toutes mes propositions sont défectueuses. Voyez le classeur joint...

De plus, mon code VBA est trop lent et les formules "matricielles" des colonnes P et R sont très gourmandes en ressources. (La formule en colonne R simule une structure VBA du type Do... ...Loop qui figure dans mon code.)
Il faut que je réécrive cela, quitte à avoir une formule plus longue...

Bref, je reviens dès que j'aurai trouvé quelque chose de plus propre.

Que Roland_M à qui j'ai fait perdre du temps pour faire la synthèse de formules foireuses veuille bien accepter mes excuses particulières !​


ℝOGER2327
#7134


Jeudi 5 Gueules 141 (Sainte Gale, abbesSainte - fête Suprême Quarte)
11 Pluviôse An CCXXII, 1,2719h - éllébore
2014-W05-4T03:03:09Z


Bonne journée.
 

Pièces jointes

  • Âge(Erreurs).xlsm
    32.2 KB · Affichages: 102

Roland_M

XLDnaute Barbatruc
Re : Calendrier automatique

bien le bonjour à tous

ROGER je pense que le plus simple serais de garder ma macro VBA, si toutefois elle convient !?
et que vous vous fassiez une formule sur excel car ça j'en suis incapable !
on aurait ainsi le choix ce serait plus simple et super !
 

ROGER2327

XLDnaute Barbatruc
Re : Calendrier automatique

Re...


bien le bonjour à tous

ROGER je pense que le plus simple serais de garder ma macro VBA, si toutefois elle convient !?
et que vous vous fassiez une formule sur excel car ça j'en suis incapable !
on aurait ainsi le choix ce serait plus simple et super !
Oui... ...mais non !
On a trop bossé sur ce problème inutile pour ne pas aller au bout. Je crois avoir réglé mon problème d'arrondi et j'ai quelques bricolages à tester encore, mais je reviendrai (dans la journée, j'espère...) avec de nouvelles propositions.​


À bientôt.


ℝOGER2327
#7135


Vendredi 6 Gueules 141 (Sainte Touche, postulante - fête Suprême Quarte)
12 Pluviôse An CCXXII, 1,3384h - brocoli
2014-W05-5T03:12:44Z
 

ROGER2327

XLDnaute Barbatruc
Re : Calendrier automatique

Bonjour à tous. Suite...


J'ai repris le problème en commençant par établir un code similaire à celui de Roland_M (ma référence), c'est-à-dire un code ne tenant pas compte d'un éventuel excès d'heures. J'obtiens ceci :​
VB:
Function DDate1(ByVal D As Date, ByVal F As Date) 
'Version sans les heures, minutes, secondes (similaire à EcartDate de Roland_M)
Dim t&, Jo%
  F = Int(F) - (Round(F - Int(F) - D + Int(D), 6) >= 0)
  t = 12 * (Year(F) - Year(D)) + Month(F) - Month(D)
  t = t + (DecMois(D, t) >= F)
  Jo = F - DecMois(D, t) - 1
  DDate1 = Array(t \ 12, t Mod 12, Jo) 'Renvoie un vecteur-ligne à trois composantes.
End Function

Function DecMois(D As Date, dec&) As Long
Dim x&, y&
  x = DateSerial(Year(D), Month(D) + dec, 1)
  y = Day(DateSerial(Year(x), Month(x) + 1, 0))
  If y < Day(D) Then DecMois = x + y - 1 Else DecMois = x + Day(D) - 1
End Function
On peut se passer de la fonction DecMois en utilisant la fonction native WorksheetFunction.EDate(), ce qui donne quelque chose de plus court :​
VB:
Function DDate11(D As Date, F As Date)
'Version sans les heures, minutes, secondes (similaire à EcartDate de Roland_M)
Dim t&, Jo%
  F = Int(F) - (Round(F - Int(F) - D + Int(D), 6) >= 0)
  t = 12 * (Year(F) - Year(D)) + Month(F) - Month(D)
  With Application.WorksheetFunction
    t = t + (.EDate(D, t) >= F)
    Jo = F - .EDate(D, t) - 1
  End With
  DDate11 = Array(t \ 12, t Mod 12, Jo) 'Renvoie un vecteur-ligne à trois composantes.
End Function
Mais c'est malheureusement beaucoup plus lent : voir l'onglet Tests pour des évaluations de durées.

Apparemment je trouve les mêmes résultats que Roland_M : voir une procédure de vérification de cohérence dans le même onglet Tests.

Sur ces bases, j'ai établi quelques autres procédures avec ou sans les heures, minutes et secondes.

Pour la formule Excel, je me suis débarrassé de la partie "matricielle" qui était très lourde. En contrepartie la nouvelle formule est nettement plus longue. Voir le classeur joint pour les détails.

"Je pense que je vais en rester là... ...sauf si une erreur grossière est détectée par un lecteur..." Bis repetita...


Bonne journée.


ℝOGER2327
#7136


Vendredi 6 Gueules 141 (Sainte Touche, postulante - fête Suprême Quarte)
12 Pluviôse An CCXXII, 4,3840h - brocoli
2014-W05-5T10:31:18Z
 

Pièces jointes

  • Âge(5).xlsm
    93.8 KB · Affichages: 101
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo