Ajouter un an en tenant compte des années bissextiles

Bonjour,

J'ai une série de dates. Je dois y ajouter une année tout en conservant le jour de la semaine.

Problème, il faut que je tiennes compte des années bissextiles.

Je joins un exemple pour expliciter au mieux ma demande.

Merci d'avance pour les conseils.

Cordialement

Bonjour,

Testes si ça convient :

Sub augmenteDate()

    Dim jour As Date, d

    Range("F3:F11").ClearContents

    For Each d In Range("G3:G11")

        jour = DateAdd("d", IIf(Annee Mod 4 = 0 Or Annee Mod 4 = 0 And Annee Mod 100 <> 0, 364, 365), Day(d))
        Cells(d.Row, "F") = DateSerial(Year(d) + 1, Month(d), Day(jour))

    Next d

End Sub

en trainant sur différents sites, j'ai adapté mon code.

Il y a surement plus efficace.

Sub augmenteDate()
Dim jour As Date, d, Bissextile As Boolean, An%
Range("F3:F11").ClearContents
For Each d In Range("G3:G11")
   An = Year(d) + 1
   Bissextile = (An Mod 400 = 0) Or (An Mod 4 = 0 And (Not An Mod 100 = 0))
   If Bissextile = False Then
      jour = DateAdd("d", 365, Day(d))
   Else
      jour = DateAdd("d", 364, Day(d))
   End If
   Cells(d.Row, "F") = DateSerial(Year(d) + 1, Month(d), Day(jour))
Next d
End Sub

Si vous avez une autre proposition, je suis preneur.

Cordialement

Bonjour Theze,

Merci pour ta réponse. Plus concise que ma proposition.

Je vais l'adopter.

Bon dimanche.

Cordialement

Theze,

Il y a un problème. Le résultat attendu n'est pas l'équivalent de mon code.

Je vais revoir en m'inspirant du tient.

Je reviens vers toi après test.

Cordialement

Theze,

Pour l'intérêt du fil, voici le code final:

Sub augmenteDate()

Dim jour As Date, d, Annee%

Range("F3:F11").ClearContents
For Each d In Range("G3:G11")
   Annee = Year(d) + 1
   jour = DateAdd("d", IIf(Annee Mod 4 = 0 Or Annee Mod 4 = 0 And Annee Mod 100 <> 0, 364, 365), Day(d))
   Cells(d.Row, "F") = DateSerial(Year(d) + 1, Month(d), Day(jour))
Next d

End Sub

Merci pour ton aide.

Cordialement

Bonjour,

autre proposition donc :

For Each d In Range("G3:G11")
   jour = DateAdd("m", 12, d)
   Cells(d.Row, "F") = jour - Weekday(jour) + Weekday(d)
Next d

eric

Re,

Désolé, j'ai oublié de corriger, remplacer Annee par Year(d) :

Sub augmenteDate()

    Dim jour As Date, d

    Range("F3:F11").ClearContents

    For Each d In Range("G3:G11")

        jour = DateAdd("d", IIf(Year(d) Mod 4 = 0 Or Year(d) Mod 4 = 0 And Year(d) Mod 100 <> 0, 364, 365), Day(d))
        Cells(d.Row, "F") = DateSerial(Year(d) + 1, Month(d), Day(jour))

    Next d

End Sub

Bonjour à tous,

@ddetp88,

voici une autre proposition par formule,

Bonjour,

autre proposition avec une fonction personnalisée

Function ajouter_1_an(date_i) As Date
    If Not IsDate(date_i) Then Exit Function

    ajouter_1_an = DateAdd("yyyy", 1, date_i)
    ajouter_1_an = ajouter_1_an - Weekday(date_i)
    While Weekday(ajouter_1_an) <> Weekday(date_i)
        ajouter_1_an = ajouter_1_an + 1
    Wend
End Function

N'en jetez plus la cour est pleine.

Quel engouement pour le sujet!

Je viens de tester la version d'Eriiic.

C'est en définitive la solution que je vais retenir car c'est la plus rapide et la plus facile à adapter à la situation de mon projet.

Ajout de 12 mois dans une situation et 36 mois dans une autre situation.

Cool! Merci Eriiic et grand merci à tous pour vos contributions.

JP

Rechercher des sujets similaires à "ajouter tenant compte annees bissextiles"