VBA

Bonjour,

Je suis bloquée sur un projet que je cherche à mettre en place. Je souhaiterais créer un calculateur de durée, entre deux dates mais par année.

Par exemple : pour une période du 01/02/2011 au 31/09/2014 le calculateur devra me donner le nombre de jours pour l'année 2010, 2011, 2012, 2013 et ainsi de suite.

Sous VBA je sais que je dois me servir du DateDiff pour le calcul de l'intervale mais je n'arrive pas à faire en sorte de le calculer par année selon la période.

Pourriez-vous m'aider ? j'ai quelques connaissances en VBA mais là je ne vois comment faire

Merci d'avance pour votre aide

Bonjour,

pour le test j'ai mit les date en cellule A1 et A2, et le resultat en colonne Q,

aussi la date 31/09/2014 n,existe pas alors j'ai mit 30/09/2014

Sub test()
Dim j()

dt1 = CDate([A1]) - 1
dt2 = CDate([A2])

ReDim Preserve j(0)
j(0) = DateSerial(Year(dt1), 12, 31) - dt1 + 1

n = Abs(Year(dt1) + 1 - Year(dt2) - 1) - 1

For i = 1 To n
 ReDim Preserve j(i)
 j(i) = DateSerial(i, 12, 31) - DateSerial(i, 1, 1) + 1
Next

ReDim Preserve j(i)
j(i) = dt2 - DateSerial(Year(dt2), 1, 1) + 1

Sheets("test").[Q2].Resize(UBound(j) + 1) = Application.Transpose(j)
End Sub

Bonjour

DATEDIFF en VBA ne fonctionne pas comme la fonction DATEDIF.

Le 31/09 n'existe pas...

Sur le principe pour décompter le nombre d'année prendre l'année de la date de fin - l'année de la date de début +1, soit 2014-2011+1 donne 4. Utiliser Year(date)

Ensuite pour

  • la première année date du début de période à la fin de cette année (fabriquer les dates avec DateSerial)
  • les suivantes sauf dernière du 1er janvier au 31 décembre
  • la dernière du 1 janvier à la date de fin de période

On ne sait pas où sont tes dates, ni ce que tu veux faire des calculs...

Un exemple avec les dates en cellules A2 et B2 et les résultats de C1 à Dx

Sub jours_an
DEBUT = [A2]
FIN = [B2]
Annees = Year(FIN) - Year(DEBUT) + 1
For i = 1 To Annees
    Select Case i
        Case 1
            jours = DateSerial(Year(DEBUT), 12, 31) - DEBUT + 1
            Cells(i + 1, 3) = Year(DEBUT)
            Cells(i + 1, 4) = jours
        Case Annees
            jours = FIN - DateSerial(Year(FIN) - 1, 12, 31)
            Cells(i + 1, 3) = Year(FIN)
            Cells(i + 1, 4) = jours
        Case Else
            jours = DateSerial(Year(DEBUT) + i - 1, 12, 31) - DateSerial(Year(DEBUT) + i - 1, 1, 1) + 1
            Cells(i + 1, 3) = Year(DEBUT) + i - 1
            Cells(i + 1, 4) = jours
        End Select
Next i
End Sub

Il faudrait ajouter un contrôle d'erreur sur des dates inexistantes comme le 31/09...

Edit : SabV a été plus rapide. Bonne idée le stockage dans un tableau.

Tu as 2 solutions...

Rechercher des sujets similaires à "vba"