Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes dates et les calendriers

Consultez le tutoriel pour utiliser les fonctions Date et Heure sous Excel 2007.

Vous y découvrirez :
     Une présentation générale sur les dates et les heures, ainsi qu'une description des fonctions disponibles dans le tableur.
     Comment créer un calendrier perpétuel gérant les jours fériés, les vacances et les temps partiels.
     De nombreux exemples d'utilisation.


Consultez également l'article concernant les fonctions Excel.

Mis à jour le 19 février 2009  par SilkyRoad
Vba
Sélectionnez

Sub Test()
Dim Annee As Integer, Semaine As Integer, NumJour As Integer
 
Annee = 2007
Semaine = 43
NumJour = 0 ' 0=Lundi, 1=Mardi ...
 
MsgBox Evaluate("TEXT(DATE(" & Annee & ",1,3)-WEEKDAY(DATE(" & Annee & _
    ",1,3))-5+(7*" & Semaine & ")+" & NumJour & ",""dd/mm/yyyy"")")
End Sub
Créé le 5 décembre 2007  par SilkyRoad

Cette procédure est facilement intégrable à un évènement de la feuille de calcul ou à une barre d'outils personnelle: La date sélectionnée est automatiquement insérée dans la cellule active. Vous devez disposer de l'ocx MSCOMCT2.ocx pour utiliser les contrôles MonthView et DataPicker.


Ce premier exemple utilise le contrôle Monthview:

Enlevez le commentaire sur cette ligne '.insertlines j + 3, " Unload Me" pour que la fenêtre se referme automatiquement après l'insertion de la date.

Vba
Sélectionnez

Option Explicit
Dim Usf As Object
 
Sub LancementProcedure()
    Dim X As Object
    Dim NomMonthView As String
 
    NomMonthView = "MonthView1"
    'Lance la procédure de création du userform et du contrôle MonthView
    Set X = UserForm_Et_MonthView_Dynamique(NomMonthView)
 
    'Affichage userform
    X.Show
 
    'Suppression du userform après la fermeture
    ThisWorkbook.VBProject.VBComponents.Remove Usf
    Set Usf = Nothing
End Sub
 
 
Function UserForm_Et_MonthView_Dynamique(NomObjet As String) As Object
    Dim Obj As Object
    Dim j As Integer
    'Création UserForm
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Usf
        .Properties("Caption") = "Mon calendrier"
        .Properties("Width") = 135
        .Properties("Height") = 140
    End With
 
    'Création du contrôle MonthView
    Set Obj = Usf.Designer.Controls.Add("MSComCtl2.MonthView.2")
 
    With Obj
        .Left = 0: .Top = 0: .Width = 150: .Height = 140
        .Name = NomObjet
        .ForeColor = &HC000C0
        .TitleBackColor = &HC000C0
    End With
 
 
    'Ajout de la procédure évènementielle DateClick du contrôle MonthView
    With Usf.CodeModule
        j = .CountOfLines
        .insertlines j + 1, "Sub " & NomObjet & "_DateClick(ByVal DateClicked As Date)"
        'Insère la date dans la cellule active
        .insertlines j + 2, "   ActiveCell = DateClicked"
        'Option pour refermer l'userform après l'insertion de la date.
        '.insertlines j + 3, "   Unload Me"
        .insertlines j + 4, "End Sub"
    End With
 
    VBA.UserForms.Add (Usf.Name)
    Set UserForm_Et_MonthView_Dynamique = UserForms(UserForms.Count - 1)
 
End Function




Voici une deuxième procédure qui utilise le contrôle DataPicker:

Vba
Sélectionnez

Option Explicit
Dim Usf As Object
 
Sub LancementProcedure()
    Dim X As Object
    Dim NomdtPicker As String
 
    NomdtPicker = "DtPicker1"
    Set X = UserForm_Et_DataPicker_Dynamique(NomdtPicker)
 
    X.Show
 
    ThisWorkbook.VBProject.VBComponents.Remove Usf
    Set Usf = Nothing
End Sub
 
 
Function UserForm_Et_DataPicker_Dynamique(NomObjet As String) As Object
    Dim Obj As Object
    Dim j As Integer
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Usf
        .Properties("Caption") = "Mon calendrier"
        .Properties("Width") = 130
        .Properties("Height") = 40
    End With
 
    Set Obj = Usf.Designer.Controls.Add("MSComCtl2.DTPicker.2")
 
    With Obj
        .Left = 0: .Top = 0: .Width = 130: .Height = 20
        .Name = NomObjet
        .CalendarBackColor = &HFF00FF
    End With
 
    With Usf.CodeModule
        j = .CountOfLines
        .insertlines j + 1, "Sub " & NomObjet & "_Change()"
        .insertlines j + 2, "   ActiveCell.Value = Format(DateSerial(Year(" _
            & NomObjet & "), Month(" & NomObjet & "), Day(" _
            & NomObjet & ")), " & Chr(34) & "dd mmmm yyyy" & Chr(34) & ")"
        'Option pour refermer l'userform après l'insertion de la date.
        '.insertlines j + 3, "   Unload Me"
        .insertlines j + 4, "End Sub"
    End With
 
    VBA.UserForms.Add (Usf.Name)
    Set UserForm_Et_DataPicker_Dynamique = UserForms(UserForms.Count - 1)
 
End Function
Créé le 5 décembre 2007  par SilkyRoad

La procédure suivante permet obtenir l'heure universelle, c'est-à-dire au méridien de Greenwich.

Vba
Sélectionnez

Sub Donner_HeureGMT()
    Dim dtTime As Object
 
    Set dtTime = CreateObject("Wbemscripting.swbemdatetime")
    dtTime.setvardate (FormatDateTime(Time))
 
    MsgBox "heure GMT: " & dtTime.getvardate(False)
End Sub
Créé le 5 décembre 2007  par Michel_M

Pour insérer la date du jour rapidement, sélectionnez une cellule puis utilisez le raccourci clavier Ctrl + ; (Touche Ctrl et le point virgule).


Pour insérer l'heure, utilisez le raccourci clavier Ctrl + : (Touche Ctrl et les deux points).

Créé le 15 avril 2007  par SilkyRoad

Par exemple, la date 04/01/2005 renvoie la valeur 2 alors qu'il s'agit de la semaine 1.

En Europe, la première semaine doit contenir au moins 4 jours. Par contre, la fonction NO.SEMAINE est basé sur la norme US (La semaine 1 commence le 1er janvier). Cette différence de norme donne donc un résultat erroné pour les européens si le premier jeudi de l'année tombe après le 4 janvier.

Vous pouvez utiliser la fonction suivante pour régler ce problème:

=ENT(MOD(ENT((A1-2)/7)+0,6;52+5/28))+1

Créé le 5 décembre 2007  par SilkyRoad

TimeStamp est un format standard représentant un nombre de secondes écoulées depuis le 1er janvier 1970.

Vba
Sélectionnez

Sub Test_V1()
    MsgBox Timestamp_To_Date(1193499779)
End Sub
 
 
Function Timestamp_To_Date(TimeStamp As Long) As Date
    Timestamp_To_Date = DateAdd("s", TimeStamp, CDate("01/01/1970"))
End Function




Et si vous souhaitez transformer une date classique en TimeStamp:

Vba
Sélectionnez

Sub Test_V2()
    MsgBox Date_To_StampTime(CDate("27/10/2007 15:42:59"))
End Sub
 
 
Function Date_To_StampTime(DateLocale As Date) As Long
    Date_To_StampTime = DateDiff("s", CDate("01/01/1970"), DateLocale)
End Function
Créé le 5 décembre 2007  par SilkyRoad

Le module DateTime contient les procédures et les propriétés adoptées dans les opérations portant sur la date et l'heure. Ces constantes peuvent être utilisées partout dans votre code.

Consultez le tutoriel de Maxence Hubiche: Les Fonctions Date/Heure

Créé le 19 février 2008  par Maxence Hubiche

Avec l'année en A1, et le mois en B1, utilisez la fonction :
=DATE(A1;B1 + 1;1) + MOD(3 - JOURSEM(DATE(A1;B1 + 1;1);2);7) - 7


Description de la formule:

DATE(A1;B1 + 1;1)
Donne le 1er du mois suivant.

JOURSEM(Réf;2)
Donne le numéro de jour dans la semaine, en commençant par le lundi.

MOD()
Est la fonction modulo, qui renvoie le reste entier d'une division. Le 3 utilisé comme 1er argument de MOD() correspond au numéro de jour du mercredi dans la semaine.

=DATE(A1;B1 + 1;1) + MOD(3 - JOURSEM(DATE(A1;B1 + 1;1);2);7)
Renvoie le premier mercredi du mois suivant. En ôtant 7, on a le dernier mercredi du mois de référence.

Créé le 19 février 2008  par Michel Gaboly

Vous pouvez utiliser la fonction Like pour retrouver un format particulier dans une chaîne.
Dans cet exemple, le format est supposé être de type ##/##/####

Vba
Sélectionnez

Dim strTexte As String
Dim i As Integer
Dim varDate As String
 
strTexte = "Nous viendrons le 04/02/2008 à 15H0"
 
For i = 1 To Len(strTexte)
    If Mid(strTexte, i, 10) Like "##/##/####" Then
        varDate = Mid(strTexte, i, 10)
        Exit For
  End If
Next
 
If Not varDate = "" Then MsgBox CDate(varDate)
Créé le 20 septembre 2008  par SilkyRoad

Voici un code permettant de convertir une date de type Julienne (ex. 107142) vers une date 2007/05/22.

Vba
Sélectionnez

Function cjulian(julian As Long) As Date
cjulian = DateSerial(1900 + CInt(Left(julian, 3)), 1, CInt(Right(julian, 3)))
End Function



Appel de la fonction :

Vba
Sélectionnez

Dim MaDate As Date
 
MaDate = Format(cjulian(107142), "yyyy/mm/dd")
Créé le 20 septembre 2008  par Random

Saisissez votre première date (qui doit être un jour ouvré) en A1.
Utilisez les poignées de recopies vers le bas, jusqu'à la date de fin.
Chaque cellule contient maintenant une date.
Cliquez sur la balise active qui apparait en bas et à droite de la dernière cellule.
Sélectionnez l'option "Incrémenter les jours ouvrés".
La liste est automatiquement modifiée pour ne faire apparaitre que les jours ouvrés (Les dates correspondant aux samedis et aux dimanches ont été éliminés de la plage de cellules).

Remarque:
Si la première date saisie correspond à un jour non ouvré, celle ci ne sera pas supprimée de la liste.

Créé le 20 septembre 2008  par SilkyRoad

Lorsque vous concaténez une cellule contenant une date avec une autre cellule ou une autre donnée, la date est remplacée par son numéro de série.

Utilisez la fonction TEXTE pour conserver le format date et résoudre l'anomalie.
Par exemple, votre date initiale est saisie en A1.
Insérez cette formule en B1.

Formule
Sélectionnez

="Rendez vous le "&TEXTE(A1;"jj/mm/aaaa")



La fonction TEXTE permet de paramétrer le format d'affichage de la date lors de la concaténation.
j représente le jour.
m représente le mois.
a représente l'année.

L'association des différents symboles permet de personnaliser l'affichage. Par exemple si une date (05/07/2006) est saisie dans une cellule:
j renvoie 5.
jj renvoie 05.
jjj renvoie mer (nom du jour au format court).
jjjj renvoie mercredi.
m renvoie 7.
mm renvoie 07.
mmm renvoie juil (nom du mois au format court).
mmmm renvoie juillet.
a et aa renvoient 06.
aaa et aaaa renvoient 2006.
jjjj jj mmmm aaaa renvoie mercredi 05 juillet 2007.

Un autre exemple qui affiche la date complète :

Formule
Sélectionnez

="Rendez vous le "&TEXTE(A1;"jjjj jj mmmm aaaa")
Créé le 19 février 2009  par SilkyRoad

Dans Excel, la valeur 1 représente 1 jour, soit 24 heures.
Les heures, minutes et secondes quant à elles sont identifiées par les décimales de 0 à 0,99999.
Une heure est un numéro de série qui représente la portion d'une journée et la cellule est formatée pour afficher cette heure.
Par exemple la valeur 0,624 représente 15H00, qui correspond à la fraction 15/24.

A partir de ces définitions, si vous souhaitez par exemple ajouter 8 heures à une date saisie en A1 (sous la forme JJ/MM/AAAA hh:mm:ss), utilisez la syntaxe suivante :

Formule
Sélectionnez

=A1+(8/24)
Créé le 22 mars 2009  par SilkyRoad
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.