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 SubBonjour
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 SubIl 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...