Jour et day

Bonjour,

Voici mon problème :

La fonction jour() de excel et la fonction day() de vba ne me donnent pas les mêmes résultats lorsque je les applique à des temps d'attente.

Exemple :

  • jour(03:05) me donne 0 alors que day(03:05) me donne 30
  • jour(27:05) me donne 1 alors que day(27:05) me donne 31.

A noter que mes temps d'attente sont mis au format [hh]:mm pour gérer le dépassement de 24h.

A noter aussi que je veux obtenir le résultat de la fonction jour de excel mais par une fonction équivalente présente dans vba.

Merci par avance à ceux qui auront pris le temps de lire

Marine

Bonjour @ tous,

Voir Explication sur fichier joint.

14mbee.xlsx (10.36 Ko)

@ + +

En fait la question est la suivante:

Quelle fonction je peux utiliser sous VBA pour obtenir la même réponse que la fonction jour d'Excel ?

Car la fonction DAY ne me donne pas le même résultat que la fonction jour

Cdlt

Bonsoir

On va modifier un peu la formule, car pour Excel cela se passait très bien

Pour JOUR() ou ( DAY() en Anglais ) (dans une feuille Exel)

Extrait de l'aide

Renvoie le jour du mois correspondant à l’argument numéro_de_série. Ce jour est représenté sous la forme d’un nombre entier compris entre 1 et 31.

Donc Excel retournait le bon résultat

Mais avec le VBA c'est autre chose

Dans A1 : 03:05 ( le stockage de cette heure (si on met la cellule en format date) est égal à 00/01/1900 03:05:00 )

MsgBox Day(Range("A1")) retourne 30 car ?????????? BUG ?

Dans A1 : 27:05 ( le stockage de cette heure (si on met la cellule en format date) est égal à 01/01/1900 03:05:00 )

MsgBox Day(Range("A1")) retourne 31 car ?????????? BUG ?

Une autre méthode (plus fiable j'espère) est de récupérer la partie entière du nombre stocké dans la cellule

Excel

=ENT(A1)

VBA

=INT(A1)

Merci beaucoup Banzai, tu m'auras été très utile !!

Ca fonctionne !

Bonjour

Il y a effectivement un bug de dates dans Excel et pas dans VBA mais, pour extraire le nombre de jour d'un total d'heures au format [hh]:mm, il faut impérativement employer la méthode préconisée Banzaï64 : c'est de récupérer la partie entière du nombre

Il ne faut pas employer JOUR() ou DAY() du VBA : ces fonctions donnent le quantième du jour et pas le nombre de jours, c'est à dire qu'après le 31ème jour on tombe à 1

Quand à ce qui pourrait ressembler à un Bug du VBA avec DAY() est en réalité un Bug d'Excel :

Pour Excel le 59ème jour après l'origine des temps d'Excel située le 0 janvier 1900 (il devrait écrire 31 décembre 1899 mais il ne le sait pas !) est le 28 février 1900 (normal) mais le lendemain est le 29 février 1900 c'est à dire un jour qui n'a jamais existé !!!

Pour le VBA, ce dernier jour est le 1er mars 1900 et la vieille est bien le 28 février 1900 (normal, seules les années séculaires multiples de 400 sont bissextiles). Ceci à pour conséquence que l'origine des temps d'Excel se situe en réalité le 30 décembre 1899 du calendrier grégorien, c'est pourquoi DAY(0) = 30, DAY(1) = 31 et DAY(2)=1

Ce Bug fait que toutes les dates qu'Excel situe entre le 0 janvier 1900 et le 29 février 1900 se situent en réalité la veille !!!

CQFD

NOTE : contrairement à Excel, le VBA peut traiter des dates antérieures au 30 décembre 1899

Rechercher des sujets similaires à "jour day"