Calculer nombre de jours entre 2 dates sous condition

Résolu
badjoyce Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
DevAxia Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

4 réponses

via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
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
badjoyce Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
badjoyce Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, c'est tout à fait ce que je cherchais
0
Vaucluse Messages postés 26496 Date d'inscription   Statut Contributeur Dernière intervention   6 438
 
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
badjoyce Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Bien tenté, mais ça ne semble pas fonctionner. Merci tout de même
0
DevAxia Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   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
badjoyce Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour cette version améliorée, claire, précise... Et qui fonctionne parfaitement!
0
DevAxia Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   2 > badjoyce Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Plaisir!
0