Calculateur Excel Entre Deux Dates
Calculez précisément la différence entre deux dates avec options avancées pour jours ouvrés, weekends et jours fériés
Guide Complet : Calculer la Différence Entre Deux Dates dans Excel
Le calcul de la différence entre deux dates est une opération courante dans Excel, que ce soit pour gérer des projets, calculer des durées de contrat, ou analyser des données temporelles. Ce guide expert vous expliquera toutes les méthodes disponibles, leurs avantages et limites, avec des exemples concrets et des astuces professionnelles.
1. La Fonction DATEDIF : Le Couteau Suisse des Calculs de Dates
La fonction DATEDIF (Date Difference) est la méthode la plus puissante pour calculer des différences entre dates dans Excel. Bien qu’elle ne soit pas documentée dans l’aide d’Excel (pour des raisons historiques), elle reste parfaitement fonctionnelle.
Syntaxe de base :
=DATEDIF(date_début; date_fin; unité)
Où unité peut prendre les valeurs suivantes :
- “D” : Nombre de jours complets entre les deux dates
- “M” : Nombre de mois complets entre les deux dates
- “Y” : Nombre d’années complètes entre les deux dates
- “YM” : Nombre de mois restants après les années complètes
- “MD” : Nombre de jours restants après les mois complets
- “YD” : Nombre de jours entre les dates comme si elles étaient de la même année
Exemples concrets :
| Formule | Résultat | Explication |
|---|---|---|
| =DATEDIF(“15/01/2023”; “20/03/2023”; “D”) | 64 | Nombre total de jours entre le 15 janvier et le 20 mars 2023 |
| =DATEDIF(“15/01/2023”; “20/03/2023”; “M”) | 2 | Nombre de mois complets (février complet + mars partiel) |
| =DATEDIF(“15/01/2020”; “20/03/2023”; “Y”) | 3 | Nombre d’années complètes entre les deux dates |
| =DATEDIF(“15/01/2023”; “20/03/2023”; “YM”) | 2 | Mois restants après les années complètes (0 année ici) |
Limites de DATEDIF :
- Ne gère pas directement les jours ouvrés (excluant weekends et jours fériés)
- Peut donner des résultats inattendus avec des dates inversées (elle retourne alors #NOMBRE!)
- N’est pas disponible dans toutes les versions locales d’Excel (mais fonctionne dans la version française)
2. Méthodes Alternatives pour des Calculs Spécifiques
Selon vos besoins précis, d’autres approches peuvent être plus adaptées que DATEDIF :
a) Simple soustraction pour les jours
=B2-A2 (où A2 contient la date de début et B2 la date de fin)
Cette méthode donne le nombre de jours avec un format personnalisable :
- Format “Standard” : 64 (nombre de jours)
- Format “Date” : 20/03/1900 (64 jours après le 01/01/1900)
b) Fonction DAYS pour une syntaxe plus claire
=DAYS(date_fin; date_début)
Introduite dans Excel 2013, cette fonction est plus intuitive que la soustraction directe.
c) Fonction NETWORKDAYS pour les jours ouvrés
=NETWORKDAYS(date_début; date_fin; [jours_fériés])
Cette fonction exclut automatiquement les samedis et dimanches, et peut optionnellement exclure une liste de jours fériés.
Exemple avec jours fériés :
=NETWORKDAYS(A2; B2; $D$2:$D$10)
Où D2:D10 contient la liste des jours fériés.
d) Fonction YEARFRAC pour des fractions d’année précises
=YEARFRAC(date_début; date_fin; [base])
Calcule la fraction d’année entre deux dates selon différentes bases de calcul :
- 0 ou omis : US (NASD) 30/360
- 1 : Réel/réel
- 2 : Réel/360
- 3 : Réel/365
- 4 : Européen 30/360
3. Calculs Avancés avec Jours Ouvrés
Pour des calculs professionnels prenant en compte les weekends et jours fériés, combinez plusieurs fonctions :
a) Liste dynamique de jours fériés
Créez un tableau des jours fériés qui s’adapte automatiquement à l’année :
=DATE(ANNEE(A2); 1; 1) '1er janvier
=DATE(ANNEE(A2); 5; 1) 'Fête du travail
=DATE(ANNEE(A2); 5; 8) 'Victoire 1945
=DATE(ANNEE(A2); 7; 14) 'Fête nationale
=DATE(ANNEE(A2); 8; 15) 'Assomption
=DATE(ANNEE(A2); 11; 1) 'Toussaint
=DATE(ANNEE(A2); 11; 11) 'Armistice
=DATE(ANNEE(A2); 12; 25) 'Noël
b) Calcul avec NETWORKDAYS.INTL
Pour des semaines de travail non standard (ex: du lundi au vendredi) :
=NETWORKDAYS.INTL(A2; B2; 1; $D$2:$D$10)
Où le troisième paramètre (1) indique que le weekend est samedi-dimanche. Autres options :
- 1 : Samedi-Dimanche (par défaut)
- 2 : Dimanche-Vendredi
- 11 : Dimanche seulement
- 12 : Samedi seulement
- 17 : Vendredi-Samedi
c) Calcul de jours ouvrés entre deux dates avec heures
Pour inclure les heures de travail dans le calcul :
=(NETWORKDAYS(A2; B2)*24 + MOD(B2-A2; 1)*24)*60
Cette formule donne le résultat en minutes de travail, en supposant 24h de travail par jour ouvré.
4. Visualisation des Résultats avec des Graphiques
Excel offre plusieurs options pour visualiser les différences entre dates :
a) Graphique en barres empilées
Idéal pour montrer la répartition entre jours ouvrés, weekends et jours fériés :
- Créez un tableau avec les catégories (Jours ouvrés, Weekends, Fériés)
- Ajoutez les valeurs calculées
- Insérez un graphique en barres empilées
- Personnalisez les couleurs (bleu pour ouvrés, gris pour weekends, rouge pour fériés)
b) Diagramme de Gantt
Parfait pour visualiser des périodes dans le temps :
- Créez un tableau avec tâches, dates de début et durée
- Utilisez un graphique à barres horizontales
- Ajustez l’axe des dates
- Supprimez les barres de valeur pour ne garder que les barres de durée
c) Chronologie (Timeline)
Pour Excel 2013 et versions ultérieures :
- Sélectionnez vos données avec des dates
- Allez dans l’onglet “Insertion” > “Chronologie”
- Personnalisez la période affichée
- Utilisez les filtres pour analyser des sous-périodes
5. Gestion des Dates dans Différents Fus Horaires
Lorsque vous travaillez avec des dates provenant de différents fuseaux horaires, Excel peut générer des incohérences. Voici comment les gérer :
a) Conversion de fuseaux horaires
Utilisez cette formule pour convertir une date/heure :
=A2 + (décalage_heures/24)
Exemple pour convertir de New York (UTC-5) à Paris (UTC+1) :
=A2 + (6/24) (car 1 – (-5) = 6 heures de différence)
b) Fonction WORKDAY.INTL avec fuseaux horaires
Pour calculer des jours ouvrés en tenant compte des fuseaux horaires :
=WORKDAY.INTL(A2 + (décalage/24); jours; [weekend]; [fériés])
6. Erreurs Courantes et Solutions
| Erreur | Cause Probable | Solution |
|---|---|---|
| #VALEUR! | Format de date incorrect | Vérifiez que les cellules sont bien formatées en date (Ctrl+1) |
| #NOMBRE! | Date de fin antérieure à la date de début dans DATEDIF | Inversez les dates ou utilisez ABS(DATEDIF(…)) |
| Résultat inattendu | Année bissextile non prise en compte | Utilisez DATE(année;mois;jour) pour forcer le calcul correct |
| #N/A | Référence à une cellule vide dans NETWORKDAYS | Vérifiez que toutes les dates sont remplies |
| Dates affichées comme nombres | Format numérique au lieu de format date | Appliquez le format “Date” (Ctrl+Shift+#) |
7. Automatisation avec VBA
Pour des calculs complexes ou répétitifs, le VBA (Visual Basic for Applications) offre une puissance supplémentaire :
a) Fonction personnalisée pour jours ouvrés
Function JoursOuvres(Debut As Date, Fin As Date, Optional Feries As Range) As Long
Dim Jour As Date
Dim Compteur As Long
Compteur = 0
For Jour = Debut To Fin
Select Case Weekday(Jour, vbMonday)
Case 1 To 5 'Lundi à vendredi
If Not EstFerie(Jour, Feries) Then
Compteur = Compteur + 1
End If
Case Else 'Weekend
'Ne rien compter
End Select
Next Jour
JoursOuvres = Compteur
End Function
Function EstFerie(Jour As Date, Feries As Range) As Boolean
Dim Cellule As Range
If Not Feries Is Nothing Then
For Each Cellule In Feries
If Cellule.Value = Jour Then
EstFerie = True
Exit Function
End If
Next Cellule
End If
EstFerie = False
End Function
b) Macro pour générer un calendrier
Cette macro crée un calendrier mensuel avec mise en évidence des weekends et jours fériés :
Sub GenererCalendrier()
Dim Annee As Integer, Mois As Integer
Dim DebutMois As Date, FinMois As Date
Dim i As Integer, j As Integer
Dim Ligne As Integer, Colonne As Integer
Annee = InputBox("Entrez l'année:", "Calendrier", Year(Date))
Mois = InputBox("Entrez le mois (1-12):", "Calendrier", Month(Date))
DebutMois = DateSerial(Annee, Mois, 1)
FinMois = DateSerial(Annee, Mois + 1, 1) - 1
'Effacer l'ancienne feuille si elle existe
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Calendrier").Delete
Application.DisplayAlerts = True
On Error GoTo 0
'Créer une nouvelle feuille
Sheets.Add.Name = "Calendrier"
'Titre
Cells(1, 1).Value = MonthName(Mois) & " " & Annee
Cells(1, 1).Font.Bold = True
Cells(1, 1).Font.Size = 14
'En-têtes des jours
For i = 1 To 7
Cells(3, i).Value = Format(DateSerial(2023, 1, i), "ddd")
Cells(3, i).Font.Bold = True
Cells(3, i).HorizontalAlignment = xlCenter
Next i
'Remplir les dates
Ligne = 4
Colonne = Weekday(DebutMois, vbMonday)
For i = 1 To Day(FinMois)
Cells(Ligne, Colonne).Value = i
'Mise en forme conditionnelle
Select Case Weekday(DateSerial(Annee, Mois, i), vbMonday)
Case 6, 7 'Samedi, dimanche
Cells(Ligne, Colonne).Interior.Color = RGB(240, 240, 240)
Case Else
'Vérifier si jour férié (à implémenter)
End Select
Colonne = Colonne + 1
If Colonne = 8 Then
Colonne = 1
Ligne = Ligne + 1
End If
Next i
'Ajustement des colonnes
Columns("A:G").AutoFit
Rows("1:1").RowHeight = 20
End Sub
8. Comparaison des Méthodes de Calcul
Voici un comparatif des différentes méthodes selon différents critères :
| Méthode | Précision | Jours Ouvrés | Fuseaux Horaires | Complexité | Performance |
|---|---|---|---|---|---|
| Soustraction simple | ⭐⭐⭐⭐⭐ | ❌ Non | ❌ Non | ⭐ | ⭐⭐⭐⭐⭐ |
| DATEDIF | ⭐⭐⭐⭐⭐ | ❌ Non | ❌ Non | ⭐⭐ | ⭐⭐⭐⭐ |
| NETWORKDAYS | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ Non | ⭐⭐⭐ | ⭐⭐⭐ |
| NETWORKDAYS.INTL | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ❌ Non | ⭐⭐⭐ | ⭐⭐⭐ |
| YEARFRAC | ⭐⭐⭐⭐ | ❌ Non | ❌ Non | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| VBA personnalisé | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| Power Query | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
9. Études de Cas Réels
a) Calcul de Durées de Projet
Dans la gestion de projet, le calcul précis des durées est crucial. Voici comment structurer un tableau de suivi :
| Tâche | Début | Fin | Jours Totaux | Jours Ouvrés | % Complétion | Retard (jours) |
|---|---|---|---|---|---|---|
| Analyse des besoins | 01/06/2023 | 15/06/2023 | =DATEDIF(B2;C2;”D”) | =NETWORKDAYS(B2;C2) | 100% | =MAX(0;C2-TODAY()) |
| Conception | 16/06/2023 | 30/06/2023 | =DATEDIF(B3;C3;”D”) | =NETWORKDAYS(B3;C3) | 85% | =MAX(0;C3-TODAY()) |
| Développement | 01/07/2023 | 31/08/2023 | =DATEDIF(B4;C4;”D”) | =NETWORKDAYS(B4;C4) | 60% | =MAX(0;C4-TODAY()) |
| Tests | 01/09/2023 | 15/09/2023 | =DATEDIF(B5;C5;”D”) | =NETWORKDAYS(B5;C5) | 0% | =MAX(0;C5-TODAY()) |
| Total Projet | =MIN(B2:B5) | =MAX(C2:C5) | =DATEDIF(B6;C6;”D”) | =NETWORKDAYS(B6;C6) | =MOYENNE(F2:F5) | =MAX(0;C6-TODAY()) |
b) Calcul d’Ancienneté en Entreprise
Pour le service RH, calculer l’ancienneté des employés avec précision :
=SI(DATEDIF(B2;AUJOURDHUI();"Y")>0;
DATEDIF(B2;AUJOURDHUI();"Y") & " an(s) " &
DATEDIF(B2;AUJOURDHUI();"YM") & " mois";
DATEDIF(B2;AUJOURDHUI();"M") & " mois " &
DATEDIF(B2;AUJOURDHUI();"MD") & " jours")
c) Calcul de Délais de Livraison
Dans la logistique, estimer les dates de livraison en excluant weekends et jours fériés :
=WORKDAY.INTL(A2; B2; “0000011”; $D$2:$D$15)
Où :
- A2 = date de commande
- B2 = délai en jours ouvrés
- “0000011” = weekend est samedi-dimanche (1=jour travaillé, 0=weekend)
- $D$2:$D$15 = plage des jours fériés
10. Bonnes Pratiques et Astuces Professionnelles
- Validez toujours vos formats de date : Utilisez CTRL+1 pour vérifier que les cellules sont bien formatées en date.
- Gérez les années bissextiles : Excel les prend en compte automatiquement, mais vérifiez les calculs manuels.
- Utilisez des noms de plage : Pour les listes de jours fériés, créez des noms comme JoursFeries pour plus de clarté.
- Documentez vos formules : Ajoutez des commentaires (Nouveau commentaire) pour expliquer les calculs complexes.
- Testez avec des dates limites : Vérifiez vos formules avec des dates identiques, des dates inversées, et des plages incluant des changements d’année.
- Utilisez le format conditionnel : Mettez en évidence les dates expirées ou les retards avec des règles de mise en forme.
- Considérez les fuseaux horaires : Pour les données internationales, ajoutez toujours une colonne avec le fuseau horaire d’origine.
- Archivez vos calendriers : Conservez une feuille avec tous les jours fériés par année pour référence future.
- Validez les entrées : Utilisez la Validation des données pour limiter les entrées aux dates valides.
- Automatisez les rapports : Créez des tableaux croisés dynamiques pour analyser les durées par catégorie.
11. Évolution des Fonctions de Date dans Excel
Les fonctions de date dans Excel ont évolué au fil des versions. Voici un historique des principales améliorations :
| Version Excel | Année | Nouveautés sur les Dates |
|---|---|---|
| Excel 2.0 | 1987 | Introduction du système de dates (1=01/01/1900) |
| Excel 97 | 1997 | Fonction DATEDIF “cachée” mais fonctionnelle |
| Excel 2003 | 2003 | Amélioration de NETWORKDAYS avec gestion des jours fériés |
| Excel 2007 | 2007 | Nouveaux formats de cellule pour les dates |
| Excel 2010 | 2010 | Fonctions DAYS, ISOWEEKNUM introduites |
| Excel 2013 | 2013 | NETWORKDAYS.INTL pour des weekends personnalisés |
| Excel 2016 | 2016 | Intégration avec Power Query pour le traitement des dates |
| Excel 2019 | 2018 | Fonctions dynamiques de tableau (débordement) |
| Excel 365 | 2020+ | Fonctions LET et LAMBDA pour des calculs de dates complexes |
12. Alternatives à Excel pour les Calculs de Dates
Bien qu’Excel soit l’outil le plus courant, d’autres solutions existent pour calculer des différences entre dates :
a) Google Sheets
Les équivalents des fonctions Excel :
- =DATEDIF (identique)
- =NETWORKDAYS (identique)
- =DAYS (identique)
- =WORKDAY (équivalent à WORKDAY.INTL)
Avantages :
- Collaboration en temps réel
- Intégration avec d’autres outils Google
- Accès depuis n’importe quel appareil
b) Python avec pandas
Pour les développeurs, la bibliothèque pandas offre des capacités avancées :
import pandas as pd
start_date = pd.to_datetime('2023-01-15')
end_date = pd.to_datetime('2023-03-20')
# Différence en jours
total_days = (end_date - start_date).days
# Jours ouvrés (exclut samedi-dimanche)
business_days = pd.bdate_range(start_date, end_date).size
c) JavaScript
Pour les applications web, JavaScript propose :
const startDate = new Date('2023-01-15');
const endDate = new Date('2023-03-20');
// Différence en millisecondes
const diffTime = Math.abs(endDate - startDate);
// Convertir en jours
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
d) SQL
Dans les bases de données, les fonctions de date varient selon le SGBD :
-- MySQL
SELECT DATEDIFF('2023-03-20', '2023-01-15') AS days_diff;
-- SQL Server
SELECT DATEDIFF(day, '2023-01-15', '2023-03-20') AS days_diff;
-- PostgreSQL
SELECT '2023-03-20'::date - '2023-01-15'::date AS days_diff;
13. Conclusion et Recommandations
Le calcul de la différence entre deux dates dans Excel est une compétence essentielle pour de nombreux professionnels. Voici nos recommandations finales :
- Pour des calculs simples : Utilisez la soustraction directe ou la fonction DAYS.
- Pour des durées en années/mois/jours : Préférez DATEDIF malgré son absence de documentation.
- Pour les jours ouvrés : NETWORKDAYS ou NETWORKDAYS.INTL sont indispensables.
- Pour des analyses complexes : Combinez plusieurs fonctions ou utilisez Power Query.
- Pour l’automatisation : Le VBA offre des possibilités illimitées pour des calculs personnalisés.
- Pour la visualisation : Les graphiques en barres empilées ou les chronologies sont très efficaces.
- Pour la collaboration : Google Sheets peut être une alternative intéressante.
- Pour les développeurs : pandas (Python) ou les bibliothèques JavaScript offrent plus de flexibilité.
En maîtrisant ces techniques, vous serez capable de gérer pratiquement tous les scénarios impliquant des calculs de dates dans Excel, que ce soit pour des projets personnels ou professionnels.
N’oubliez pas que la précision est cruciale lorsque vous travaillez avec des dates – une petite erreur dans une formule peut avoir des conséquences importantes, surtout dans des contextes juridiques ou financiers. Testez toujours vos calculs avec des cas limites et documentez votre travail pour faciliter les audits ou les reprises ultérieures.