Calcul Jour par Mois entre 2 dates

Résolu
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   -  
Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Petite question, est-il possible de calculer facilement le nombre de jour par mois entre 2 dates ?
Ceci afin de calculer le nombre de jours d'absence par mois.

Par exemple, en encodant les dates du 15 juin au 15 août, j'aimerais savoir si une formule pourrait me calculer :
Juin : 15
Juillet : 31
Août : 15

Merci d'avance.
Bonne journée,

4 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    commence par regarder les liens sous ta question
    Que tu aurais eu en commençant par une recherche ;-)
    eric

    0
    1. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
       
      Hello,

      J'ai fais une recherche et je suis tombé sur le sujet "Nombre de jours par mois entre deux dates"
      Mais celui-ci datant un peu et Excel ayant eu des mises à jour depuis je cherchais à savoir si une solution plus simple est désormais disponible.

      Mes recherches n'ayant rien donné, voilà pourquoi je suis venu poser directement la question
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Toujours pas de fonction dédiée non.
      Il faut le calculer à base de min et max.

      Ou alors faire une fonction personnalisée en vba
      eric
      0
  2. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
     
    Ok merci.

    Je vais donc essayer de bricoler quelque chose en me basant sur les anciens sujets et sur mes recherches, je reviendrai pour demander de l'aide et/ou apporter ma solution.

    Bonne journée,
    0
    1. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
       
      Voici ce que j'ai bricolé si jamais ça peut aider quelqu'un : https://www.cjoint.com/c/HGEqt7dCJGV

      Il y a certainement une meilleure façon de faire, on peut certainement simplifier mes formules mais l'essentiel est là : ça fonctionne pour tous mes cas particuliers.

      Je laisse le sujet encore un peu ouvert, si jamais des gens qui passent pas là ont des conseils pour améliorer mes formules je suis preneur car là ça devient compliqué de s'y retrouver, même pour moi

      Bonne fin de journée
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Une proposition :
    Function nbJMois(debut As Date, Fin As Date, mois) As Long
        Dim dat1 As Date
        If IsDate(mois) Then
            'mois voulu fourni sous forme de date
            dat1 = DateSerial(Year(mois), Month(mois), 1)
        Else
            ' mois fourni sous forme d'offset (mois =1 pour mois de Debut)
            dat1 = DateAdd("m", mois - 1, DateSerial(Year(debut), Month(debut), 1))
        End If
        nbJMois = Application.Max(0, Application.Min(DateAdd("m", 1, dat1) - 1, Fin) - Application.Max(dat1, debut) + 1)
    End Function
    

    Syntaxe :
    =nbJMois(debut, fin, mois)

    debut et fin sont les dates.
    mois peut être passé de 2 manière :
    - une date quelconque du mois voulu
    - le n° de mois dans la période (mois debut=1, 2e mois = 2, etc)
    =nbJMois($A2;$B2;E$1)
    =nbJMois($A2;$B2;1/6/18)
    =nbJMois($A2;$B2;"juin-18"))
    ou
    =nbJMois($A2;$B2;1)
    J'ai fait au plus simple sans option pour ôter les we comme ce n'était pas spécifié.
    https://www.cjoint.com/c/HGEqCpEFalM
    eric

    Edit : modif pour retourner 0 en cas de jours négatifs. Fichier joint sans la modif

    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      version avec paramètre optionnel pour ne pas compter jour de début et/ou de fin,
      et annulation de l'erreur #VALEUR si une date n'est pas conforme (retourne 0) :
      Function nbJMois(debut, Fin, mois, Optional jDeb As Boolean = True, Optional jFin As Boolean = True) As Long
          Dim dat1 As Date
          If Not IsDate(debut) Or Not IsDate(Fin) Then nbJMois = 0: Exit Function
          If Not jDeb Then debut = debut + 1 ' jour debut non compté
          If Not jFin Then Fin = Fin - 1 ' jour fin non compté
          If IsDate(mois) Then 'mois voulu fourni sous forme de date
              dat1 = DateSerial(Year(mois), Month(mois), 1)
          Else ' mois fourni sous forme de n° de mois dans la période
              dat1 = DateAdd("m", mois - 1, DateSerial(Year(debut), Month(debut), 1))
          End If
          If Month(dat1) = Month(Fin) And Not jFin Then nbJMois = nbJMois - 1
          nbJMois = Application.Min(DateAdd("m", 1, dat1) - 1, Fin) - Application.Max(dat1, debut) + 1
          nbJMois = Application.Max(0, nbJMois)
      End Function

      https://www.cjoint.com/c/HGErGmCXgfM

      Villette54, ta formule en B27 devient :
      =nbjmois($D2;$E2;B$25;FAUX;FAUX)

      à tirer vers le bas et vers la droite
      eric
      0
  4. Villette54 Messages postés 300 Date d'inscription   Statut Membre Dernière intervention   28
     
    Bonjour,

    Merci pour cette proposition, je vais regarder ça de plus près pour essayer de comprendre le fonctionnement. Je connais les fonctions personnalisées mais j'ai toujours beaucoup de mal à les utiliser.

    Quoi qu'il en soit merci et bonne journée,
    0