Formules de dates
Bonjour à tous,
Je rencontre des difficultés quant aux formules à appliquer dans mon fichier Excel pour les cellules suivantes :
1. Feuille « Calcul indemnité légale » : Je souhaiterai que la formule à appliquer aux cellules B77 (pour les années) et C77 (pour les mois) prenne en compte les dates renseignées aux cellules D16 (date d’entrée dans les effectifs) et D18 (date de sortie) pour déterminer automatiquement l’ancienneté à faire apparaitre en année et mois révolus. Dans notre exemple prérempli il s’agirait d’un salarié cumulant 12 ans et 2 mois d’ancienneté.
2. Feuille « Calcul durée de préavis » : Je souhaiterai que la formule à appliquer aux cellules D77 (pour les années) et E77 (pour les mois) prennent en compte les dates renseignées aux cellules D16 (date d’entrée dans les effectifs) et D18 (date de sortie) pour déterminer automatiquement l’ancienneté à faire apparaitre en année et mois révolus. Dans notre exemple prérempli il s’agirait d’un salarié cumulant 9 ans et 2 mois d’ancienneté.
Merci de votre aide.
Cordialement
Bonjour,
Pour les calculs, utilise la fonction (cachée) DATEDIF.
Pour les années :
=DATEDIF("y";Début;Fin)
Pour les mois :
=DATEDIF("ym";Début;Fin)
Cdlt.
Bonsoir, Salut Jean-Eric !
Pour ma part, n'utilisant plus DATEDIF depuis longtemps pour les calculs de dates, car d'un maniement toujours un peu compliqué selon le résultat à obtenir, plus documentée par Microsoft qui déconseille sont utilisation, sans toutefois fournir de fonction équivalente, et pour laquelle on a signalé à plusieurs reprises des résultats inexacts... j'utilise donc des fonctions personnalisées tant pour les calculs d'âge et de différences entre deux dates, ou les calculs d'ancienneté, sachant que dans le cas de l'ancienneté les dates bornes sont toujours incluses.
Une fonction personnalisée permet en outre d'outrepasser les limitations d'Excel à l'année 1900 et corriger l'erreur affectant cette même année 1900, ce qui, je l'accorde est sans incidence sur des calculs relatifs à des dates plus récentes.
Function ANCIENNETE(dn, df)
Dim d, hui, a%, m%, j%, agr
Application.Volatile
On Error Resume Next
hui = CDate(df) + 1
If CLng(hui) > 0 And CLng(hui) < 60 Then hui = hui + 1
d = CDate(dn)
If CLng(d) > 0 And CLng(d) < 60 Then d = d + 1
If hui < d Then GoTo errdate
On Error GoTo errdate
a = DateDiff("yyyy", d, hui)
If DateAdd("yyyy", a, d) > hui Then a = a - 1
d = DateAdd("yyyy", a, d)
m = DateDiff("m", d, hui)
If DateAdd("m", m, d) > hui Then m = m - 1
d = DateAdd("m", m, d)
j = DateDiff("y", d, hui)
agr = Array(a, m, j)
ANCIENNETE = agr
Exit Function
errdate:
ANCIENNETE = CVErr(xlErrNA)
End Function
Cette version est justement une version adaptée pour une demande de ma fonction originelle qui renvoyait un résultat sous forme de chaîne. Celle-ci s'utilise sous forme matricielle, en sélectionnant normalement 3 cellules en lignes, tapant = suivi du nom de la fonction, et en arguments les dates de début et de fin, on la valide par Ctrl+Maj+Entrée et elle renvoie un résultat numérique années | mois | jours dans chacune des cellules.
Evidemment, si on ne sélectionne que 2 cellules elle ne renverra que années | mois.
Elle paraît adaptée à la configuration de ton classeur. Tu le verras en B77:C77 de la première feuille.
Pour la 2e, D77 et E77 sont dans une zone vide ?
Cordialement.