Pour mes premiers pas en VBA, qui consistent pour l'instant a recopier un livre ... :-B, j'ai un problème que je n'arrive pas à résoudre.
Dans le code ci-dessous, quand j'appelle la fonction dans une feuille, le debugger jaillit et me dit "End Select without Select Case" en passant le End Select en fin de code en surbrillance ... Bon, bah, y'en a un pourtant Select Case ... Alors je ne comprends pas.
J'ai déplacé des éléments, tout tripatouillé, mais rien.
Je fais donc appel à votre connaissance, si ça se trouve, le problème se voit comme le nez au milieu de la figure mais bon...
Merci d'avance
Function FRACTIONANNEE(dDebutPeriode As Date, dFinPeriode As Date, Convention)
[...]
Select Case Convention
Case "Exact/Exact", "exact/exact", 1
'***************************************************************************************
'nombre de jour exact par le nombre exact de jours de l'année de début ; ESTBISSEXTILE utilisée
'***************************************************************************************
If ESTBISSEXTILE(Year(dDebutPeriode)) Then NbjD = 366 Else NbjD = 365
If ESTBISSEXTILE(Year(dFinPeriode)) Then NbjF = 366 Else NbjF = 365
FRACTIONANNEE = Year(dFinPeriode) - Year(dDebutPeriode)
FRACTIONANNEE = FRACTIONANNEE - (dDebutPeriode - DateSerial(Year(dDebutPeriode), 1, 1)) / NbjD
FRACTIONANNEE = FRACTIONANNEE - (dFinPeriode - DateSerial(Year(dFinPeriode), 1, 1)) / NbjF
Case "Exact/365", "exact/365", 2
'***************************************************************************************
'nombre de jour exact divisé par 365
'***************************************************************************************
FRACTIONANNEE = (dFinPeriode - dDebutPeriode) / 365
Case "Exact/360", "exact/360", 3
'***************************************************************************************
'nombre de jour exact divisé par 360
'***************************************************************************************
FRACTIONANNEE = (dFinPeriode - dDebutPeriode) / 360
Case Else
'***************************************************************************************
'la convention par défaut est 30/360
'***************************************************************************************
If Day(dDebutPeriode) = 31 Then
dblDate_a = dDebutPeriode - 1
Else
dblDate_a = dDebutPeriode
If Day(dFinPeriode) = 31 And Day(dDebutPeriode) >= 30 Then
dblDate_b = dFinPeriode - 1
ElseIf Day(dFinPeriode) = 31 And Day(dDebutPeriode) < 30 Then
dblDate_b = dFinPeriode + 1
Else
dblDate_b = dFinPeriode
End If
FRACTIONANNEE = (Year(dblDate_b) - Year(dblDate_a)) * 360 + _
(Month(dblDate_b) - Month(dblDate_a))_* 30 + (Day(dblDate_b) - Day(dblDate_a))
FRACTIONANNEE = FRACTIONANNEE / 360
End Select
End Function
Comme ça, ça marche mieux.
Merci !
Je pense que je vais me faire rembourser le livre, le End If n'y est pas ... :-B