Le modulo année
Résolu/Fermé
robbybasch
Messages postés
100
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
19 août 2022
-
12 juil. 2017 à 18:00
robbybasch Messages postés 100 Date d'inscription lundi 14 juillet 2014 Statut Membre Dernière intervention 19 août 2022 - 14 juil. 2017 à 18:32
robbybasch Messages postés 100 Date d'inscription lundi 14 juillet 2014 Statut Membre Dernière intervention 19 août 2022 - 14 juil. 2017 à 18:32
7 réponses
NHenry
Messages postés
15113
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 avril 2024
331
12 juil. 2017 à 19:55
12 juil. 2017 à 19:55
YEAR(now) pour l'année
IIF( pour le IF en une ligne
IIF( pour le IF en une ligne
Bonjour Robby,
Attention : il manque une partie dans ta condition ! ;)
Une année est bissextile si elle est divisible par 4,
sans être divisible par 400.
Exemple pour l'année 2000 : 2000 / 400 = 5 tout rond
(nombre entier sans décimales) => même si 2000 est
divisible par 4, ce n'est pas une année bissextile !
Tu peux vérifier : sur le calendrier 2000 : pas de 29 février !
ce sera idem en 2400, mais d'ici là, t'as l'temps d'voir venir ! ;P
Bien sûr, en 1600, y'avait pas eu non plus de 29 février. ;)
Tu m'diras, c'est tous les 400 ans, alors... mais on sait jamais :
si t'es en réalité Duncan MacLeod de la série Highlander. ;)
https://fr.wikipedia.org/wiki/Duncan_MacLeod
Fichier Excel 2007 : https://mon-partage.fr/f/c1IJTOtE/
Fais Ctrl e et dis-moi ce que tu en penses.
Cordialement.
Attention : il manque une partie dans ta condition ! ;)
Une année est bissextile si elle est divisible par 4,
sans être divisible par 400.
Exemple pour l'année 2000 : 2000 / 400 = 5 tout rond
(nombre entier sans décimales) => même si 2000 est
divisible par 4, ce n'est pas une année bissextile !
Tu peux vérifier : sur le calendrier 2000 : pas de 29 février !
ce sera idem en 2400, mais d'ici là, t'as l'temps d'voir venir ! ;P
Bien sûr, en 1600, y'avait pas eu non plus de 29 février. ;)
Tu m'diras, c'est tous les 400 ans, alors... mais on sait jamais :
si t'es en réalité Duncan MacLeod de la série Highlander. ;)
https://fr.wikipedia.org/wiki/Duncan_MacLeod
Fichier Excel 2007 : https://mon-partage.fr/f/c1IJTOtE/
Fais Ctrl e et dis-moi ce que tu en penses.
Cordialement.
Edit : J'ai bêtement oublié d'utiliser modulo ; de plus, je m'étais trompé :
2000 est bien une année bissextile, car la règle est la suivante :
Une année est bissextile si elle est divisible par 400 ou
(si elle est divisible par 4 sans être divisible par 100).
⚠ Il ne faut donc pas utiliser mon code VBA précédent !
yg_be
Messages postés
22733
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 avril 2024
1 477
Modifié le 12 juil. 2017 à 22:22
Modifié le 12 juil. 2017 à 22:22
bonsoir, je suggère ceci pour le code VBA:
La formule serait donc
Les années multiples de 100 ne sont pas bissextiles, sauf si elles sont des multiples de 400. Donc 2000 est bissextile, mais 1900 et 2100 ne le sont pas.
qu'en penses-tu?
nous ne voyons pas ce que tu vois, nous ne savons pas ce que tu sais.
si tu ne nous donnes pas d'information, nous ne pouvons pas les deviner.
Function nbjour(annee As Long) As Integer nbjour = DateSerial(annee + 1, 1, 1) - DateSerial(annee, 1, 1) End Function
La formule serait donc
=nbjour(annee)
Les années multiples de 100 ne sont pas bissextiles, sauf si elles sont des multiples de 400. Donc 2000 est bissextile, mais 1900 et 2100 ne le sont pas.
qu'en penses-tu?
nous ne voyons pas ce que tu vois, nous ne savons pas ce que tu sais.
si tu ne nous donnes pas d'information, nous ne pouvons pas les deviner.
Bonjour Robby,
Une année est bissextile si elle est divisible par 400 ou
(si elle est divisible par 4 sans être divisible par 100).
Mon ancien code VBA était erroné ; voici le nouveau,
corrigé et optimisé :
Ce qui donnera :
Lis aussi le message de yg_be du 12 juillet à 22:22 ; sa fonction nbjour()
calcule ce nombre de jours : 1er janvier (An + 1) - 1er janvier An
(An étant l'année transmise).
Cette méthode est plus simple que la mienne, et elle est valable pour toutes
les années comprises par Excel : de 1900 à 9999 ; donc pour une année qui
est avant 1900, il faut utiliser la méthode plus générale indiquée au début :
celle qui est utilisée par ma nouvelle fonction IsBissextile().
Cordialement
Une année est bissextile si elle est divisible par 400 ou
(si elle est divisible par 4 sans être divisible par 100).
Mon ancien code VBA était erroné ; voici le nouveau,
corrigé et optimisé :
Option Explicit Function IsBissextile(An As Integer) As Boolean ' vrai si An : divisible par 400 ou (divisible par 4 sans être divisible par 100) IsBissextile = (An Mod 400 = 0) Or (An Mod 4 = 0 And An Mod 100 > 0) End Function Sub TestAn(An As Integer) Dim NbJours As Integer: NbJours = 365 - IsBissextile(An) MsgBox "An " & An & " bissextile : " & IsBissextile(An) _ & vbLf & "=> NbJours = " & NbJours & " jours" End Sub Sub Essai() Dim An As Integer TestAn 1900 For An = 1996 To 2003 TestAn An Next An TestAn 2100: TestAn 2400 End Sub
Ce qui donnera :
An | Bissextile | Nombre de jours |
1900 | Faux | 365 |
1996 | Vrai | 366 |
1997 | Faux | 365 |
1998 | Faux | 365 |
1999 | Faux | 365 |
2000 | Vrai | 366 |
2001 | Faux | 365 |
2002 | Faux | 365 |
2003 | Faux | 365 |
2100 | Faux | 365 |
2400 | Vrai | 366 |
Lis aussi le message de yg_be du 12 juillet à 22:22 ; sa fonction nbjour()
calcule ce nombre de jours : 1er janvier (An + 1) - 1er janvier An
(An étant l'année transmise).
Cette méthode est plus simple que la mienne, et elle est valable pour toutes
les années comprises par Excel : de 1900 à 9999 ; donc pour une année qui
est avant 1900, il faut utiliser la méthode plus générale indiquée au début :
celle qui est utilisée par ma nouvelle fonction IsBissextile().
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
robbybasch
Messages postés
100
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
19 août 2022
13 juil. 2017 à 16:05
13 juil. 2017 à 16:05
Bonjour à tous. Je vous remercie de votre contribution, mais je veux intégrer nbjour dans une macro déjà réalisée ou j'apporterais d'autres modifs. (On y va pas à pas ... je débute en vba).
Voici la macro :
Private Sub Kommentaire()
Dim counter As Long, lili As Long, Col_commentaire As Long, colTAV As Long, Ncol_tav As Long, Ncell As Long,
lili = 8
Ncol_tav = 4
Do
Col_commentaire = Val(InputBox("colonne à traiter 3 ou 5 ou 7 ou 9 ou 11 ou 13 ou 15 ou 17 ou 19 ou 21 ou 23 ou 25 ou 29", , "3"))
Loop Until Col_commentaire = 3 Or Col_commentaire = 5 Or Col_commentaire = 7 Or Col_commentaire = 9 Or Col_commentaire = 11 Or Col_commentaire = 13 Or Col_commentaire = 15 Or Col_commentaire = 17 Or Col_commentaire = 19 Or Col_commentaire = 21 Or Col_commentaire = 25 Or Col_commentaire = 27 Or Col_commentaire = 29
For n_cell = 3 To 33 Step 2
If n_cell = Col_commentaire Then
colTAV = Ncol_tav
End If
Ncol_tav = Ncol_tav + 1
Next n_cell
'____________________________________________________________
'partie ou je veux le calcul de nbjour---------------------------------
'____________________________________________________________
For counter = 1 To nbjour
'si année normale la valeur doit etre nbjour= 365
'si année bissextile la valeur doit etre nbjour=366
Tout cela doit pouvoir se faire en interne. Transparent pour l'ulisateur.. Le code vba va chercher l'année du PC, fait sa sauce interne et rejette nbjour=365 ou 366 selon que l'année est bissexctile ou non..
If .Cells(counter, Col_commentaire) = 9 Then
If Not Worksheets("TAV").Cells(lili, colTAV).Comment Is Nothing Then
.Cells(counter, Col_commentaire + 1) = Worksheets("TAV").Cells(lili, colTAV).Comment.Text
End If
End If
lili = lili + 1
Next counter
'___________________________________________________________
et je ne vois pas comment mettre le code de yg_be dans la macro. Excusez moi je ne suis pas expert.. Le reste de la macro fonctionne très bien.. avec votre aide bien entendu. Je vous en remercie.
CDL
Robby
Voici la macro :
Private Sub Kommentaire()
Dim counter As Long, lili As Long, Col_commentaire As Long, colTAV As Long, Ncol_tav As Long, Ncell As Long,
lili = 8
Ncol_tav = 4
Do
Col_commentaire = Val(InputBox("colonne à traiter 3 ou 5 ou 7 ou 9 ou 11 ou 13 ou 15 ou 17 ou 19 ou 21 ou 23 ou 25 ou 29", , "3"))
Loop Until Col_commentaire = 3 Or Col_commentaire = 5 Or Col_commentaire = 7 Or Col_commentaire = 9 Or Col_commentaire = 11 Or Col_commentaire = 13 Or Col_commentaire = 15 Or Col_commentaire = 17 Or Col_commentaire = 19 Or Col_commentaire = 21 Or Col_commentaire = 25 Or Col_commentaire = 27 Or Col_commentaire = 29
For n_cell = 3 To 33 Step 2
If n_cell = Col_commentaire Then
colTAV = Ncol_tav
End If
Ncol_tav = Ncol_tav + 1
Next n_cell
'____________________________________________________________
'partie ou je veux le calcul de nbjour---------------------------------
'____________________________________________________________
For counter = 1 To nbjour
'si année normale la valeur doit etre nbjour= 365
'si année bissextile la valeur doit etre nbjour=366
Tout cela doit pouvoir se faire en interne. Transparent pour l'ulisateur.. Le code vba va chercher l'année du PC, fait sa sauce interne et rejette nbjour=365 ou 366 selon que l'année est bissexctile ou non..
If .Cells(counter, Col_commentaire) = 9 Then
If Not Worksheets("TAV").Cells(lili, colTAV).Comment Is Nothing Then
.Cells(counter, Col_commentaire + 1) = Worksheets("TAV").Cells(lili, colTAV).Comment.Text
End If
End If
lili = lili + 1
Next counter
'___________________________________________________________
et je ne vois pas comment mettre le code de yg_be dans la macro. Excusez moi je ne suis pas expert.. Le reste de la macro fonctionne très bien.. avec votre aide bien entendu. Je vous en remercie.
CDL
Robby
robbybasch
Messages postés
100
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
19 août 2022
13 juil. 2017 à 16:24
13 juil. 2017 à 16:24
Rebonjour
Ne vous prenez pas la tete..
Avec year(now) de Henry, et des if en cascade j'ai réussi à gerer jusqu'à la prochaine année bissextile.
Cela pousse à dans 7 ans ... on a le temps de voir..
Merci encore à tous
Robby
CDL
Ne vous prenez pas la tete..
Avec year(now) de Henry, et des if en cascade j'ai réussi à gerer jusqu'à la prochaine année bissextile.
Cela pousse à dans 7 ans ... on a le temps de voir..
Merci encore à tous
Robby
CDL
yg_be
Messages postés
22733
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 avril 2024
1 477
13 juil. 2017 à 16:31
13 juil. 2017 à 16:31
ou bien:
annee=year(now) nbjour = DateSerial(annee + 1, 1, 1) - DateSerial(annee, 1, 1)
robbybasch
Messages postés
100
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
19 août 2022
14 juil. 2017 à 18:32
14 juil. 2017 à 18:32
Bonsoir yg_be. J'arrive que maintenant j'essaie cela de suite. Beaucoup plus simple que mes if..
CDL
Robby
CDL
Robby