FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les dates et les calendriers- Comment utiliser les fonctions Date et Heure dans Excel ?
- Comment retrouver par macro le Lundi correspondant à un numéro de semaine spécifié ?
- Comment créer un calendrier dynamiquement et insérer la date sélectionnée dans la cellule active ?
- Comment obtenir l'heure universelle de Greenwich ?
- Comment insérer rapidement la date et l'heure dans une cellule ?
- Pourquoi la fonction NO.SEMAINE renvoie parfois une valeur erronée ?
- Comment convertir un TimeStamp UNIX en date locale ?
- Comment utiliser les fonctions Date/Heure (module DateTime) ?
- Comment retrouver le dernier mercredi d'un mois ?
- Comment extraire une date contenue dans une chaîne de caractères ?
- Comment convertir une date Julienne vers une Date normale ?
- Est-il possible de créer une liste incrémentée contenant uniquement des jours ouvrés, sous Excel 2007 ?
- Comment conserver un format date lors de la concaténation avec une autre donnée ?
- Comment ajouter des heures a une date qui est au format JJ/MM/AAAA hh:mm:ss ?
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.
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 SubCette 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.
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 FunctionVoici une deuxième procédure qui utilise le contrôle DataPicker :
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 FunctionLa procédure suivante permet obtenir l'heure universelle, c'est-à-dire au méridien de Greenwich.
Sub Donner_HeureGMT()
Dim dtTime As Object
Set dtTime = CreateObject("Wbemscripting.swbemdatetime")
dtTime.setvardate (FormatDateTime(Time))
MsgBox "heure GMT: " & dtTime.getvardate(False)
End SubPour 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).
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))+1TimeStamp est un format standard représentant un nombre de secondes écoulées depuis le 1er janvier 1970.
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 FunctionEt si vous souhaitez transformer une date classique en TimeStamp :
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 FunctionLe 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
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.
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 ##/##/####
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)Voici un code permettant de convertir une date de type Julienne (ex. 107142) vers une date 2007/05/22.
Function cjulian(julian As Long) As Date
cjulian = DateSerial(1900 + CInt(Left(julian, 3)), 1, CInt(Right(julian, 3)))
End FunctionAppel de la fonction :
Dim MaDate As Date
MaDate = Format(cjulian(107142), "yyyy/mm/dd")
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.
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.
="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 :
="Rendez vous le "&TEXTE(A1;"jjjj jj mmmm aaaa")
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 :
=A1+(8/24)


