Calculer nombre de jours entre 2 dates sous condition

Résolu
badjoyce Messages postés 5 Statut Membre -  
DevAxia Messages postés 37 Statut Membre -
Bonjour,
Je cherche désespérément une formule permettant de calculer le nombre de jours entre 2 date sous condition. Je connais la formule datedif, mais je voudrais n'afficher que le nombre de jours total d'un même mois, défini préalablement.
Par exemple
En A1: 01/01/2014
En A2: 31/12/2016
En B1: comment obtenir par calcul Excel le nombre de jours total des mois de janvier entre ces 2 dates (soit dans ce cas présent 62)?
Merci aux âmes charitables qui auraient une solution à me proposer.
Bien cordialement

4 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Une possibilité avec une fonction personnalisée à mettre dans un module
    (ALT+F11 pour ouvrir Editeur VBA puis Insertion et Module Copier-coller la macro)
    Function Nmois(date1 As Range, date2 As Range, mois As String)
    m = date2.Value - date1.Value
    For n = 0 To m
    jour = (date1.Value + n)
    cemois = Month(CDate(jour))
    If cemois = mois Then J = J + 1
    Next
    Nmois = J
    End Function


    La fonction s'utilise comme nimporte quelle fonction, syntaxe : =Nmois(cellule1ere date;cellule 2eme date; n° du mois désiré)
    Par ex :=Nmois(B3;B4;1) pour avoir le nombre de jours de janvier

    Soit dit en passant dans ton exemple cela fait 93 et non 62 !

    Cdlmnt
    Via
    1
    1. badjoyce Messages postés 5 Statut Membre
       
      Génial, ça fonctionne parfaitement! Merci beaucoup, ça faisait des heures que je me prenais la tête là-dessus, au point de ne même plus arriver à faire un simple calcul ;)
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Une tentative via une macro
    http://www.cjoint.com/c/EFzr1df2cJg

    RQ. Il va bien y avoir quelqu'un pour faire sans macro

    Cdlmnt
    0
    1. badjoyce Messages postés 5 Statut Membre
       
      Merci, c'est tout à fait ce que je cherchais
      0
  3. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Bonjour
    essayez celle ci pour janvier
    =DATEDIF(A1;A2;"Y")*31+SI(A1<DATE(ANNEE(A1);1;1);0;DATEDIF(A1;DATE(ANNEE(A1);2;1);"d"))+SI(A2>DATE(ANNEE(A2);1;31);0;DATEDIF(A2;DATE(ANNEE(A2);2;1);"d"))

    je ne garantis pas...

    pour changement de mois, modifier les valeurs des limites dans les codes DATE(....;mois;...)
    bonne chance

    crdlmnt
    0
    1. badjoyce Messages postés 5 Statut Membre
       
      Bien tenté, mais ça ne semble pas fonctionner. Merci tout de même
      0
  4. DevAxia Messages postés 37 Statut Membre 2
     
    Bonjour,

    Je pense que vous devrez créer votre propre fonction.
    Cette méthode est un peu différente de celle mentionnée précédemment, elle évite de créer une boucle sur toutes les dates entre la date de début et de fin.

    Sauvegarder votre document Excel en Excel avec macros (.xlsm)
    Ouvrir l'éditeur Visual Basic (Alt + F11)
    Cliquez bouton-droit sur "Microsoft Excel Objects" dans le VBAProject et faire Insertion - Module

    Dans la fenêtre du Module1, insérer le code suivant

    Function DateDiffJM(date1 As Date, date2 As Date, mois As Long) As Long
    
        Dim YearsVal As Integer
        Dim JoursMois As Integer
        
        ' Validation
        If date1 > date2 Then
            DateDiffJM = 0
            Exit Function
        End If
        
        ' Parcourir les années considérées
        For YearsVal = Year(date1) To Year(date2)
            
            ' Nombre de jours dans le mois concerné
            JoursMois = DateSerial(YearsVal, mois + 1, 1) - DateSerial(YearsVal, mois, 1)
            
            ' Retrancher les jours exclus
            If ((YearsVal = Year(date1)) And (mois < Month(date1))) Or _
               ((YearsVal = Year(date2)) And (mois > Month(date2))) Then
                JoursMois = 0
                
            ElseIf (YearsVal = Year(date2)) And (mois = Month(date2)) Then
                JoursMois = Day(date2)
            
            ElseIf (YearsVal = Year(date1)) And (mois = Month(date1)) Then
                JoursMois = JoursMois - Day(date1) + 1
            
            End If
            DateDiffJM = DateDiffJM + JoursMois
        Next YearsVal
    
    End Function
    


    Fermer l'éditeur VBA et sauvegardez votre document Excel.
    Dans votre tableau Excel, utilisez la fonction suivante dans votre cellule B1
    =DateDiffJM(date1, date2, mois)

    date1 pointe sur votre cellule contenant la date de début (A1 dans votre cas)
    date2 pointe sur votre cellule contenant la date de fin (A2 dans votre cas)
    mois est la valeur numérique du mois (1-12).

    EDIT: Précision du langage dans la coloration syntaxique.

    Suppression de la signature non conforme à la charte
    0
    1. badjoyce Messages postés 5 Statut Membre
       
      Merci pour cette version améliorée, claire, précise... Et qui fonctionne parfaitement!
      0
      1. DevAxia Messages postés 37 Statut Membre 2 > badjoyce Messages postés 5 Statut Membre
         
        Plaisir!
        0