comment adapter un bout de code VB en formule Excel ?

Roland_M

XLDnaute Barbatruc
bien le bonsoir à tous

ne suis pas très bon en formule aussi je fais appel à vous !
comment adapter un code VB en formule Excel ?
ou encore comment faire pour afficher le 29'jour de Fevrier (année bissextile)

ceci suite à une remarque pertinante de Hoerwind qui a remarqué cette erreur dans un classeur avec des formules que j'ai eu sur ce forum.

actuellement il y a ceci ( le 28'jour est en D28 et dessous pour le 29'jour !?)
=SI(MOD(Annee;4)=0;D29+1;"")
c'est évidemment incomplet !

en VB je me sers de ceci qui est correcte:
If Annee Mod 4 = 0 And (Annee Mod 100 <> 0 Or Annee Mod 400 = 0) Then Fevrier = 29 Else Fevrier = 28

alors comment compléter ma formule pour avoir le test du genre
SI Annee Mod 4 = 0 And (Annee Mod 100 <> 0 Or Annee Mod 400 = 0);D29+1 sinon ;""

ou une autre si vous avez !?
un grand merci d'avance.
 

jeanpierre

Nous a quitté
Repose en paix
Re : comment adapter un bout de code VB en formule Excel ?

Bonsoir Roland,

Si ta dernière date, c'est-à-dire le 28 février est en D28 (ton texte), il faut mettre (en D29) : =SI(MOD(Annee;4)=0;D28+1;""), mais si ta dernière date est en D29, ta formule en D30 fonctionne.
Avec Annee, nom défini, 2008 ou 2009 par exemple.

Ta formule dit : SI le reste de l'année divisée par 4 = 0 alors on rajoute 1, sinon on ne met rien.

Bonne soirée et Bonnes Fêtes.

Jean-Pierre
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

re

merci jean-pierre !
c'est une erreur de ma part ! effectivement pour D29 et D30

mais ça ne change rien au fait que ce n'est pas suffisant mod 4 !
hoerwind faisait remarquer à juste titre que par exemple avec 2100 ce n'atait pas correcte !

EDIT:
hoerwind dit ceci, que j'ai retrouvé :
Sont bissextiles les années multiples de quatre, sauf les années centenaires qui ne sont pas multiples de quatre cents.
Ainsi 2000 était bissextile, mais 2100 ne le sera pas.
 

jeanpierre

Nous a quitté
Repose en paix
Re : comment adapter un bout de code VB en formule Excel ?

Re, Bonsoir ROGER,

D'où l'intérêt, sinon d'un fichier, d'avoir le lien du fil dans ce cas. C'est vrai aussi que je n'ai pas lu ta ligne de code, impardonnable...

Ceci dit, hoerwind à presque raison, je dis presque puisqu'il ne traîte pas les années 4000, 8000 et suivantes.

Jean-Pierre
 

Roland_M

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

RE:

ROGER2327 ! c'est exactement ça ! je vais pouvoir rectifier pas mal de classeurs !
encore un grand merci à toi ! et à jean-pierre aussi bien entendu.

ma mémoire n'est plus très bonne mais ...
Bakounine citait ces paroles de Voltaire "Si ROGER2327 n'existait pas, il faudrait l'inventer."
 

ROGER2327

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

Suite...
Ou encore :
Code:
[COLOR="DarkSlateGray"][B]=SI((MOD(Annee;4)=0)[COLOR="Red"]-[/COLOR](MOD(Annee;100)[COLOR="Red"]=[/COLOR]0)+(MOD(Annee;400)=0);B1+1;"")[/B][/COLOR]
(un caractère en moins)​
ROGER2327
#2495
 

Roland_M

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

re

toujours dans le plus court
je viens de revoir la chose differemment
si j'ai, par exemple, en D28 la date du 28 Février
alors on peut comme ceci, qui fait fi des années bissex ou pas et va mettre tout le monde au diapason !
=SI(MOIS(D28+1)<>MOIS(D28);"";D28+1)
 

ROGER2327

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

Re...
re

toujours dans le plus court
je viens de revoir la chose differemment
si j'ai, par exemple, en D28 la date du 28 Février
alors on peut comme ceci, qui fait fi des années bissex ou pas et va mettre tout le monde au diapason !
=SI(MOIS(D28+1)<>MOIS(D28);"";D28+1)
Bien tenté ! Mais ne fonctionne pas pour l'année 1900.
Conclusion : court mais faux.
ROGER2327
#2498
 

Roland_M

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

suite...
c'est vrai !
mais aucune date(sur excel) n'est correcte avant le 02/01/1900
si tu mets 01/01/1900 tu liras (côté vb) 31/12/1899
et si tu entres 31/12/1899 ce n'est plus une date mais du texte !
 

ROGER2327

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

Re...
Les histoires de dates dans Excel sont un cauchemar. Et l'"aide" ne simplifie pas le boulot.
On y lit :
Microsoft Excel enregistre les dates sous la forme de numéros de série séquentiels servant à calculer. Par défaut, le 1er janvier 1900 est le numéro de série 1 et le 1er janvier 2008 est le numéro de série 39448 parce que 39 448 jours se sont écoulés depuis le 1er janvier 1900.
Vous pouvez vérifier (je l'ai fait) que si "Microsoft Excel enregistre les dates sous la forme de numéros de série séquentiels servant à calculer. Par défaut, le 1er janvier 1900 est le numéro de série 1 (...) est vrai, alors "(...) le 1er janvier 2008 est le numéro de série 39448 parce que 39 448 jours se sont écoulés depuis le 1er janvier 1900." est faux.
En effet, Excel donne bien 39448 comme numéro séquentiel du 1/1/2008, mais le nombre de jours écoulés correspondant est de 39447.
En fait, ces affirmations ne sont vraies que du 1/1/1900 (jour 1) au 28/2/1900 (jour 59).
Le 1/3/1900 (jour 60) est indexé 61.
Si l'on s'intéresse au nom des jours, on constate que le lundi 1/1/1900 est nommé dimanche, l'attribution de nom de jour étant tout aussi fantaisiste jusqu'au 28/2/1900.
Le jeudi 1/3/1900 est correctement nommé jeudi.
Mais qui s'intéresse encore à la Belle Époque ?
Cordialement,
ROGER2327
#2499
 

jeanpierre

Nous a quitté
Repose en paix
Re : comment adapter un bout de code VB en formule Excel ?

Bonsoir à tous, Roland, ROGER, CC (avec sa version d'Excel 3078.V18 Bis), hoerwind sur un autre fil,

Curieux que personne n'ait réagi avec ma remarque sur les années 4000, 8000 et suivantes dans le cycle..... (car cette correction, inéluctable, est prévue, mais personne n'en tient compte). La précision doit-elle s'arrêter à l'appréciation de certain..? Précision... ilexiste une autre correction avec un cyle encore plus grand....

Mais pourtant elle est aussi importante que de traiter les années centenaires (1900 dont tout le monde s'en moque et 2100 qui paraît bien loin)....

Lorsque je crée des calendrier, je suis plus près de la dernière formule de Roland, à savoir : =SI(MOIS(D28+1)<>MOIS(D28);"";D28+1),

Le reste n'étant que l'histoire d'astronome matheux, comme moi, mais sans aucun rapport avec un calendrier qui va durer quoi, 10, 20 ou 30 ans ???....

Donc, simplifions au maximum les formules pour les besoins que l'on a.... 2100 est encore loin.... Même si c'est au profit d'une belle formule.... qui reste encore incomplète avec mes propos.

Bon reveillon à tous.

Jean-Pierre
 

wilfried_42

XLDnaute Barbatruc
Re : comment adapter un bout de code VB en formule Excel ?

bonjour à tous

je n'ai pas tout compris, excel sait que c'est ou pas une année bissextile
donc en prenant le 1er mars de reference et en retirant 1, ca devrait suffire non ?
Code:
=si(jour(date(2005;3;0))=29;"annee bissextile";"raté")
mais il est vrai que bilou considere à tord que l'année 1900 est bissextile, donc pour cette année seule, c'est faux donc ajouter un test
Code:
=si(et(annee(d28)><1900;jour(date(annee(d28);3;0))=29);"bissextile";"raté")

bonne fêtes à tous
 
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : comment adapter un bout de code VB en formule Excel ?

Re, Bonsoir Wilfried,

Non, Excel ne sait pas ce qu'est une année bissextile.

La preuve dans mes propos précédents. 4000 sera une année commune, 8000 aussi. Car nous seront en avance, de peu il est vrai, entre les 365.25 (de notre calendrier)et les 365.2425 et des beaucoup de poussières (de la réalité de la rotation de la Terre à ce jour, même extrapolée)

Une erreur de plus dans la programmation d'Excel.

Il faut donc corriger, les années centenaires non divisibles par 4 ne suffisent pas, les années centenaires divisibles par 400 non plus....

Bon zoo, Will, je clic....

Bon réveillon.

Jean-Pierre
 
Dernière édition:

Discussions similaires