Le modulo année

Résolu
Bonjour,
Faire un modulo dans une feuille excel je sais faire. Mais ce dont je n'arrive pas à finaliser avec des recherches sur ce site, c'est établir une variable avec le nb jours année. (bissextile = 366, normal = 365)
Cela pourrait donner en mode excel
Si(mod(année; 4)=0;NBJOURS=366;NBJOURS=365)
Je voudrais la même chose en vba
Est ce possible ?
Merci
Robby

7 réponses

  1. Bonsoir yg_be. J'arrive que maintenant j'essaie cela de suite. Beaucoup plus simple que mes if..
    CDL
    Robby
    1. 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
      1. Contributeur
        ou bien:
        annee=year(now)
        nbjour = DateSerial(annee + 1, 1, 1) - DateSerial(annee, 1, 1)
    2. 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
      1. 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é :

        
        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 :

        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
         
        1. Contributeur
          bonsoir, je suggère ceci pour le code VBA:
          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. 
          1. 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.
             
            1.  
              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 !