FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- 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
Sub
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.
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 :
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
La 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
Sub
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).
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
TimeStamp 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
Function
Et 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
Function
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
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
Function
Appel 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
)