Gestion des dates et heures en VBA 2


La gestion des dates et des heures est un sujet très important que ce soit dans Excel ou dans VBA. Microsoft a mis à notre disposition de nombreuses fonctions – ce qui manque, c'est souvent la compréhension du concept même des dates et des heures. Le tutoriel qui suit essaie de vous montrer comment les dates et heures sont gérés bans VBA. Vous trouverez à la fin la liste des fonctions VBA utiles pour travailler avec les dates et les heures (la liste contient également les exemples et des explications).

Dates et Heures dans Excel

Les dates et heures que nous pouvons voir dans les fichiers Excel ne sont pas stockés sous la même forme que celle qui s’affiche sur l’écran. En pratique, les dates et temps sont stockés sous forme de nombres à virgule flottante – par exemple: 1254,02589.

La partie entière est une représentation numérique de la date. Il s’agit du nombre de jours qui se sont écoulés depuis le 31/12/1899. Le numéro 1 correspond donc au 1/1/1900 et le numéro 42.293 représente la date de 16/10/2015. Dans l’autre sens, si vous inscrivez la date 30/4/2015 dans Excel, elle sera stocké non comme une date mais comme le nombre 42.124.

La partie décimale représente la partie d’une journée – c’est-à-dire le temps. Si on augmente le nombre de 1, on l’augmente d’un jour, c’est-à-dire de 24 heures. 12 heures correspondent donc à 0,5. Une heure représente 1/24 de jour, c’est-à-dire 0,041666 d’un jour. Une minute représente 1/1440 du jour (0,000694 du jour) et une seconde est égale à 1/86400 du jour (=0,000011574 du jour).

Donc, une cellule qui contient l’heure 14:00 correspond en fait au nombre 0,58333.

Tout ceci peut sembler assez abstrait mais il existe en VBA (tout comme en Excel) de nombreuses fonctions pour nous faciliter la vie lors d’une manipulation des dates et des heures.

Voici la liste des fonctions VBA pour gérer le temps et heures avec des exemples et des explications…

Dates et Heures en VBA – les fonctions utiles

Fonction VBADescriptionExemple
NowRetourne la date et l'heure actuellex = Now

résultat:
x = 16/10/2015 14:34:25
DateRetourne la date actuelle (= aujourd'hui)x = Date

résultat:
x = 16/10/2015
TimeRetourne l'heure actuellex = Time

résultat:
x = 14:41:23
TimerRetourne le nombre de secondes depuis minuitx = Timer

résultat:
x = 53165,42
DateValue(Argument)Retourne la partie "date" de l'Argumentx = TimeValue(#16/12/2014 14:34:25#)

résultat:
x = 16/12/2014
TimeValue(Argument)Retourne la partie "heure" de l'(Argument)x = TimeValue(#16/12/2014 14:34:25#)

résultat:
x = 14:34:25
DateSerial()Crée une date à partir de 3 arguments: année (Year); mois (Month); jour (Day)

! - attention aux formats des arguments. Il doit s'agir des nombres entiers (Integer)
x = DateSerial(2015, 1, 23)

résultat:
x = 23/1/2015
DatePart(intervale, date, premier jour de semaine, première semaine de l'année)Returne une partie de la date.
Pour les détails des arguments: DatePart
x = DatePart("yyyy", Date)
y = DatePart("q", Date)
z = DatePart("ww", #12/8/2015#)

Résultats:
x = 2015 (=l'année d'aujourd'hui)
y = 4 (le trimestre d'aujourd'hui)
z = 50 (semaine de l'année)
Year(Argument)Retourne l'année de l'Argumentx = Year(Date)

résultat:
x = 2015 (l'année d'aujourd'hui)
Month(Argument)Retourne le mois de l'Argumentx = Month(#15/8/2010#)

résultat:
x = 8
Day(Argument)Retourne le jour de l'Argumentx = Day(#15/8/2010#)

résultat:
x = 15
MonthName(Argument)Retourne le nom du mois de l'Argument
- attention, le résultat dépend de la langue d'Excel
x = MonthName(Month(#15/2/2015#))
ou
x = MonthName(2)

résultat:
x = "février"
Weekday(date, premier jour de semaine)Retourne le numéro du jour de la semaine.
! - par défaut, le 1 correspond au dimanche. Pour commencer la semaine lundi, le 2ème argument doit être vbMonday
x = Weekday(#11/11/2016#,vbMonday)

résultat:
5
WeekdayName(Argument)Retourne le nom du jour de semaine de l'Argument
- attention, le résultat dépend de la langue d'Excel
x = WeekdayName(Weekday(#11/11/2016#,vbMonday))

résultat:
x = "vendredi"
DateDiffRetourne le nombre d'intervales entre deux dates.
- les intervales peuvent être: seconde, minute, heure, semaine, jour de la semaine, jour, jour de l'année, mois, trimestre, année.
Plus sur le site de Microsoft
x = DateDiff("q", #15/2/2010#,#28/4/2015#)

résultat:
21 (il y a 21 trimestres complets entre 15/2/2010 et 28/4/2015)
DateAddAjoute ou soustrait des intervales à une date
- les intervales peuvent être: seconde, minute, heure, semaine, jour de la semaine, jour, jour de l'année, mois, trimestre, année.
Plus sur le site de Microsoft
x = DateAdd("yyyy", 2, #22/5/2012#)
y = DateAdd("d", 20, Date)

résultats:
x = 22/5/2014 (on a ajouté deux ans)
y = 5/11/2015 (la date dans 18 jours à partir d'aujourd'hui - 16/10/2015)

Conclusion

Avec ces fonctions ou leur combinaisons, il est possible d'effectuer la plupart des opérations liés à la manipulation des dates et des unités de temps. Dans les cas plus complexes (par exemple certains calculs financiers), la gestion de dates peut rester compliquée mais c'est un autre sujet…

Un conseil à la fin…

Lors de l'utilisation des fonctions VBA cités plus haut, il est important de faire attention aux paramètres régionaux et linguistiques de votre ordinateur/Excel (noms des mois, des jours de la semaine,…).

Un autre point d'attention est la bonne utilisation du "premier jour de la semaine" – aux États-Unis, contrairement à l'Europe, la semaine commence le dimanche! Et donc, par défaut, c'est le jour qu'Excel utilise. N'oubliez donc pas d'ajouter l'argument optionnel firstdayofweek (avec la valeur vbMonday) dans les fonctions qui utilisent, de manière optionnelle, cet argument.

Pour aller plus loin

6 0

 

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

2 commentaires sur “Gestion des dates et heures en VBA

  • Didier G.

    Dans les fonctions DateAdd et DaeDiff, le paramètre d'intervalle (par ex "yyyy") dépend de la langue? Dans un Excel en français, "aaaa" va fonctionner?

    • excel-malin.com Auteur du billet

      Bonjour,
      Non, DateDiff et DateAdd sont dess fonctions "purement VBA" où les paramètres disponibles sont fixés et sont en anglais. Vous trouverez la liste des paramètres d'intervalle sur le site de Microsoft (le lien se situe dans le tableau avec les fonctions sur cette page).