Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction JOUR et Day

13 réponses
Avatar
Emcy
Salut,

Pourquoi la formule Excel "=3DJOUR(58)" donne 27 et la=20
formule VBA "Day(58)" donne 26 ?

JOUR et Day ne font-ils pas la m=EAme chose ?

10 réponses

1 2
Avatar
Bernard MAZAS
Salut Emcy

"Emcy" a écrit dans le message news:
22e3401c38c00$446e3df0$
Salut,

WPourquoi la formule Excel "=JOUR(58)" donne 27 et la
formule VBA "Day(58)" donne 26 ?

JOUR et Day ne font-ils pas la même chose ?


Oui, mais seulement à partir du 1er mars 1900.

Bernard

Avatar
Frédéric Sigonneau
Bonjour,

Si, ces deux fonctions font la même chose mais pas tout à fait à partir du même
calendrier. Si tu le peux, télécharge le fichier CompilDates sur mon site
(http://perso.wanadoo.fr/frederic.sigonneau/office/CompilDatesv4.zip)
et regarde la page 'Numéros de série Xl-VBA'.
La différence entre Jour(58) et Day(58) a la même raison d'être que celle mise
en évidence sur cette page entre les dates obtenues en VBA avec les propriétés
.Value et .Text et la fonction DateValue : Excel, pour d'obscures raisons,
considère toujours l'année 1900 comme bissextile alors que ce n'est pas le cas.
Résultat : un jour de trop (le 29 février) par rapport au calendrier de VBA qui,
lui est correct et considère à juste titre 1900 comme une année ordinaire. A
partir du 1er mars 1900 les deux calendriers concordent de nouveau : jour(61) et
day(61) donnent le même résultat.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Salut,

Pourquoi la formule Excel "=JOUR(58)" donne 27 et la
formule VBA "Day(58)" donne 26 ?

JOUR et Day ne font-ils pas la même chose ?


Avatar
Bernard MAZAS
"Frédéric Sigonneau" a écrit dans le message
news:

Excel, pour d'obscures raisons,
considère toujours l'année 1900 comme bissextile alors que ce n'est pas le
cas.


Pour une raison parfaitement inavouable : ce bug (29 février 1900) existait
dans Lotus 123 (standard des tableurs dans les années 80). Quand Microsoft a
lancé Excel en 1985, voulant être compatible avec Lotus, il a reproduit
(mais est-ce volontaire ?) cette erreur, qu'on traîne encore aujourd'hui.

Bernard (qui tient ça de LL)

Avatar
AV
Pourquoi la formule Excel "=JOUR(58)" donne 27 et la
formule VBA "Day(58)" donne 26 ?


Une raison de plus pour faire confiance aux fonctions de feuille de calcul ;-)
MsgBox [Day(58)]

AV

Avatar
Frédéric Sigonneau
Bonsoir Alain,

Evaluate n'admet que les noms anglais des fonctions, alors, à mon avis, JOUR et
DAY, dans ce cas, sont une seule et même fonction...
Les résultats différents signalés dans la question initiale sont seulement
relatifs à des systèmes de datation différents entre Excel et VBA (quelle que
soit la cause de cette différence, et j'ai souvenir en effet que LL avait avancé
cette explication Lotus, rappelée par Bernard, en qq occasions).

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Pourquoi la formule Excel "=JOUR(58)" donne 27 et la
formule VBA "Day(58)" donne 26 ?


Une raison de plus pour faire confiance aux fonctions de feuille de calcul ;-)
MsgBox [Day(58)]

AV



Avatar
AV
Ave Frédéric,

Evaluate n'admet que les noms anglais des fonctions,
Ben ça, il y a un certain temps que je m'en suis aperçu....;-))


alors, à mon avis, JOUR et DAY, dans ce cas, sont une seule et même
fonction...

On est encore d'accord puisqu'il s'agit bien de la même fonction (de feuille)
moulinée par Evaluate

Les résultats différents signalés dans la question initiale sont seulement
relatifs à des systèmes de datation différents entre Excel et VBA
On est de plus en plus d'accord ! ;-)


(quelle que soit la cause de cette différence,
Sur ce point là, je me suis bien gardé d'avoir une opinion ! ;-)


Je crois que j'ai pas été compris sur ce coup (snifff) !
Ma remarque était d'une portée générale : faire plutôt confiance à une fonction
de feuille qu'à la "même" en Vba

AV

Avatar
Daniel.M
Salut Alain,

Ma remarque était d'une portée générale : faire plutôt confiance à une
fonction

de feuille qu'à la "même" en Vba


Tu vas rester incompris ;-)
Car, dans le cas présent, les résultats VBA.DAY() sont corrects, alors que ceux
de la fonction Excel JOUR ne le sont pas avant le 61 ième jour.

Allez ouste: en IV65536. :-)

Salutations,

Daniel M.

Avatar
AV
Car, dans le cas présent, les résultats VBA.DAY() sont corrects, alors que
ceux

de la fonction Excel JOUR ne le sont pas avant le 61 ième jour.
Allez ouste: en IV65536. :-)


Boffff...
Par rapport à "la comprenette de l'horloge de mon calendrier interne" je préfère
que JOUR(58) me renvoie 27 plutôt que Day(58) me renvoie 26 car (me
contrebalançant du fait que 1900 n'est pas une année bissextile), en restant
dans la même logique, JOUR(1) me renvoie 1 alors que Day(1) me renvoie 31 et
Day(0) me renvoie 30 !
J'ai essayé d'expliquer ça calmement à mon voisin de palier mais, bien mal m'en
a pris car il a appelé "les hommes en blanc" qui m'ont embarqué illico pour
trouble au bon sens populaire ! ;-))
Ceci dit, j'accepte tout à fait d'aller faire un séjour en prison, mais me
refuse absolument à séjourner en IV65536 car, étant farouchement contre la
surpopulation des prisons et ne souhaitant pas fréquenter la faune qui croupit
dans cette cellule, tout au plus, accepterais-je de séjourner 2 (à cause du
bruit des beuveries) étages au-dessus, en IV65534 !

:-)
AV

Avatar
Modeste
;-)))
vous déboussolez "ma comprenette",
d'aprés vos conclusions le premier bon jour serait donc le
30 février 1900 ????

et puis gros AVantages pour moi :
j'ai pas de voisin ;-P
les hommes en blancs seraient plutot des "gueules noires"
pour la prison (XL95) les places sont limitées à IV16384

;-)))
aujourd'hui 68 septembre 2003
bonne fete SERGE !!!
non ?
J day gee dee ??? ;-)))
@+
-----Message d'origine-----
Car, dans le cas présent, les résultats VBA.DAY() sont
corrects, alors que


ceux
de la fonction Excel JOUR ne le sont pas avant le 61
ième jour.


Allez ouste: en IV65536. :-)


Boffff...
Par rapport à "la comprenette de l'horloge de mon
calendrier interne" je préfère

que JOUR(58) me renvoie 27 plutôt que Day(58) me renvoie
26 car (me

contrebalançant du fait que 1900 n'est pas une année
bissextile), en restant

dans la même logique, JOUR(1) me renvoie 1 alors que Day
(1) me renvoie 31 et

Day(0) me renvoie 30 !
J'ai essayé d'expliquer ça calmement à mon voisin de
palier mais, bien mal m'en

a pris car il a appelé "les hommes en blanc" qui m'ont
embarqué illico pour

trouble au bon sens populaire ! ;-))
Ceci dit, j'accepte tout à fait d'aller faire un séjour
en prison, mais me

refuse absolument à séjourner en IV65536 car, étant
farouchement contre la

surpopulation des prisons et ne souhaitant pas fréquenter
la faune qui croupit

dans cette cellule, tout au plus, accepterais-je de
séjourner 2 (à cause du

bruit des beuveries) étages au-dessus, en IV65534 !

:-)
AV


.




Avatar
Frédéric Sigonneau
Ave AV,


Car, dans le cas présent, les résultats VBA.DAY() sont corrects, alors que
ceux

de la fonction Excel JOUR ne le sont pas avant le 61 ième jour.
Allez ouste: en IV65536. :-)


Boffff...
Par rapport à "la comprenette de l'horloge de mon calendrier interne" je préfère
que JOUR(58) me renvoie 27 plutôt que Day(58) me renvoie 26 car (me
contrebalançant du fait que 1900 n'est pas une année bissextile), en restant
dans la même logique, JOUR(1) me renvoie 1 alors que Day(1) me renvoie 31 et
Day(0) me renvoie 30 !


Oui, et JOUR(60) renvoie 29, qui n'existe pas.. Même si tu t'en contrebalances,
ça n'en reste pas moins une grossière erreur :)

J'ai essayé d'expliquer ça calmement à mon voisin de palier mais, bien mal m'en
a pris car il a appelé "les hommes en blanc" qui m'ont embarqué illico pour
trouble au bon sens populaire ! ;-))


C'est vrai que programmer volontairement des résultats erronnés relève d'une
logique qui n'en a plus et qui pourrait conduire au cabanon :)
Et les erreurs volontaires en entraînent d'autres : la fonction VBA est
contrainte de renvoyer des résultats faux (en attribuant le numéro 0 au numéro
de série du premier jour du calendrier d'Excel) pour "rattraper" le décalage
créé par le 29 février lorsqu'on la fait travailler avec une date "implicite"
comme 58 (qui est interprété comme un numéro de série). En usage normal (cad
avec une date en paramètre) il n'y a, heureusement, pas de problème, d'autant
moins que VBA refuse absolument te traiter ceci :

MsgBox Day(#2/29/1900#)

:-)

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

Ceci dit, j'accepte tout à fait d'aller faire un séjour en prison, mais me
refuse absolument à séjourner en IV65536 car, étant farouchement contre la
surpopulation des prisons et ne souhaitant pas fréquenter la faune qui croupit
dans cette cellule, tout au plus, accepterais-je de séjourner 2 (à cause du
bruit des beuveries) étages au-dessus, en IV65534 !

:-)
AV



1 2