Recherche…


Calendrier

VBA prend en charge 2 calendriers: Gregorian et Hijri

La propriété Calendar est utilisée pour modifier ou afficher le calendrier actuel.

Les 2 valeurs du calendrier sont les suivantes:

Valeur Constant La description
0 vbCalGreg Calendrier grégorien (par défaut)
1 vbCalHijri Calendrier Hijri

Exemple

Sub CalendarExample()
    'Cache the current setting.
    Dim Cached As Integer
    Cached = Calendar

    ' Dates in Gregorian Calendar
    Calendar = vbCalGreg
    Dim Sample As Date
    'Create sample date of 2016-07-28
    Sample = DateSerial(2016, 7, 28)

    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    ' Date in Hijri Calendar
    Calendar = vbCalHijri
    Debug.Print "Current Calendar : " & Calendar
    Debug.Print "SampleDate = " & Format$(Sample, "yyyy-mm-dd")
    
    'Reset VBA to cached value.
    Cached = Calendar
End Sub

Ce sous-groupe imprime les éléments suivants:

Current Calendar : 0
SampleDate = 2016-07-28
Current Calendar : 1
SampleDate = 1437-10-23

Fonctions de base

Récupérer la date et l'heure du système

VBA prend en charge 3 fonctions intégrées pour récupérer la date et / ou l'heure de l'horloge du système.

Fonction Type de retour Valeur de retour
À présent Rendez-vous amoureux Renvoie la date et l'heure actuelles
Rendez-vous amoureux Rendez-vous amoureux Renvoie la date de la date et de l'heure actuelles
Temps Rendez-vous amoureux Renvoie la partie heure de la date et de l'heure actuelles
Sub DateTimeExample()

    ' -----------------------------------------------------
    ' Note : EU system with default date format DD/MM/YYYY
    ' -----------------------------------------------------
    
    Debug.Print Now   ' prints 28/07/2016 10:16:01 (output below assumes this date and time)
    Debug.Print Date  ' prints 28/07/2016
    Debug.Print Time  ' prints 10:16:01
    
    ' Apply a custom format to the current date or time
    Debug.Print Format$(Now, "dd mmmm yyyy hh:nn")  ' prints 28 July 2016 10:16
    Debug.Print Format$(Date, "yyyy-mm-dd")         ' prints 2016-07-28
    Debug.Print Format$(Time, "hh") & " hour " & _
                Format$(Time, "nn") & " min " & _
                Format$(Time, "ss") & " sec "       ' prints 10 hour 16 min 01 sec
    
End Sub

Fonction minuterie

La fonction Timer renvoie un Single représentant le nombre de secondes écoulées depuis minuit. La précision est un centième de seconde.

Sub TimerExample()

    Debug.Print Time    ' prints 10:36:31  (time at execution)
    Debug.Print Timer   ' prints 38191,13  (seconds since midnight)

End Sub

Parce que les fonctions Now and Time ne sont précises qu'en secondes, Timer offre un moyen pratique d'augmenter la précision de la mesure du temps:

Sub GetBenchmark()
       
    Dim StartTime  As Single
    StartTime = Timer       'Store the current Time
    
    Dim i As Long
    Dim temp As String
    For i = 1 To 1000000    'See how long it takes Left$ to execute 1,000,000 times
        temp = Left$("Text", 2)
    Next i
    
    Dim Elapsed As Single
    Elapsed = Timer - StartTime
    Debug.Print "Code completed in " & CInt(Elapsed * 1000) & " ms"

End Sub

IsDate ()

IsDate () teste si une expression est une date valide ou non. Renvoie un Boolean .

Sub IsDateExamples()

    Dim anything As Variant
       
    anything = "September 11, 2001"

    Debug.Print IsDate(anything)    'Prints True
            
    anything = #9/11/2001#

    Debug.Print IsDate(anything)    'Prints True
   
    anything = "just a string"

    Debug.Print IsDate(anything)    'Prints False

    anything = vbNull
    
    Debug.Print IsDate(anything)    'Prints False
    
End Sub

Fonctions d'extraction

Ces fonctions prennent en paramètre un Variant pouvant être converti en Date et renvoient un Integer représentant une partie d'une date ou d'une heure. Si le paramètre ne peut pas être converti en une Date , il en résultera une erreur d'exécution 13: incompatibilité de type.

Fonction La description Valeur retournée
An() Renvoie la partie année de l'argument date. Entier (100 à 9999)
Mois() Renvoie la partie mois de l'argument de date. Entier (1 à 12)
Journée() Renvoie la partie du jour de l'argument date. Entier (1 à 31)
Jour de la semaine() Renvoie le jour de la semaine de l'argument date. Accepte un second argument optionnel définissant le premier jour de la semaine Entier (1 à 7)
Heure() Renvoie la partie heure de l'argument date. Entier (0 à 23)
Minute() Renvoie la partie minute de l'argument date. Entier (0 à 59)
Seconde() Renvoie la deuxième partie de l'argument date. Entier (0 à 59)

Exemples:

Sub ExtractionExamples()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56

    Debug.Print Year(MyDate)                           ' prints 2016
    Debug.Print Month(MyDate)                          ' prints 7
    Debug.Print Day(MyDate)                            ' prints 28
    Debug.Print Hour(MyDate)                           ' prints 12
    Debug.Print Minute(MyDate)                         ' prints 34
    Debug.Print Second(MyDate)                         ' prints 56
    
    Debug.Print Weekday(MyDate)                        ' prints 5
    'Varies by locale - i.e. will print 4 in the EU and 5 in the US
    Debug.Print Weekday(MyDate, vbUseSystemDayOfWeek)
    Debug.Print Weekday(MyDate, vbMonday)              ' prints 4
    Debug.Print Weekday(MyDate, vbSunday)              ' prints 5
    
End Sub

Fonction DatePart ()

DatePart() est également une fonction renvoyant une partie d'une date, mais fonctionne différemment et offre plus de possibilités que les fonctions ci-dessus. Il peut par exemple retourner le trimestre de l'année ou la semaine de l'année.

Syntaxe:

DatePart ( interval, date  [, firstdayofweek] [, firstweekofyear] )

L' argument d' intervalle peut être:

Intervalle La description
"yyyy" Année (100 à 9999)
"y" Jour de l'année (1 à 366)
"m" Mois (1 à 12)
"q" Trimestre (1 à 4)
"ww" Semaine (1 à 53)
"w" Jour de la semaine (1 à 7)
"ré" Jour du mois (1 à 31)
"h" Heure (0 à 23)
"n" Minute (0 à 59)
"s" Deuxième (0 à 59)

firstdayofweek est facultatif. c'est une constante qui spécifie le premier jour de la semaine. Si non spécifié, vbSunday est supposé.

firstweekofyear est facultatif. c'est une constante qui spécifie la première semaine de l'année. Si elle n'est pas spécifiée, la première semaine est supposée être la semaine au cours de laquelle le 1er janvier se produit.

Exemples:

Sub DatePartExample()

    Dim MyDate As Date
    
    MyDate = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)

    Debug.Print Format$(MyDate, "yyyy-mm-dd hh:nn:ss") ' prints 2016-07-28 12:34:56
    
    Debug.Print DatePart("yyyy", MyDate)              ' prints 2016
    Debug.Print DatePart("y", MyDate)                 ' prints 210
    Debug.Print DatePart("h", MyDate)                 ' prints 12
    Debug.Print DatePart("Q", MyDate)                 ' prints 3
    Debug.Print DatePart("w", MyDate)                 ' prints 5
    Debug.Print DatePart("ww", MyDate)                ' prints 31

End Sub

Fonctions de calcul

DateDiff ()

DateDiff() renvoie un Long représentant le nombre d'intervalles de temps entre deux dates spécifiées.

Syntaxe

DateDiff ( interval, date1, date2  [, firstdayofweek] [, firstweekofyear] )
  • intervalle peut être l'un des intervalles définis dans la fonction DatePart()
  • date1 et date2 sont les deux dates que vous souhaitez utiliser dans le calcul
  • firstdayofweek et firstweekofyear sont facultatifs. Reportez-vous à la fonction DatePart() pour obtenir des explications

Exemples

Sub DateDiffExamples()

    ' Check to see if 2016 is a leap year.
    Dim NumberOfDays As Long
    NumberOfDays = DateDiff("d", #1/1/2016#, #1/1/2017#)
    
    If NumberOfDays = 366 Then
        Debug.Print "2016 is a leap year."              'This will output.
    End If
           
    ' Number of seconds in a day
    Dim StartTime As Date
    Dim EndTime As Date
    StartTime = TimeSerial(0, 0, 0)
    EndTime = TimeSerial(24, 0, 0)
    Debug.Print DateDiff("s", StartTime, EndTime)       'prints 86400

End Sub

DateAdd ()

DateAdd() renvoie une Date à laquelle une date ou un intervalle de temps spécifié a été ajouté.

Syntaxe

DateAdd ( interval, number, date  ) 
  • intervalle peut être l'un des intervalles définis dans la fonction DatePart()
  • nombre Expression numérique correspondant au nombre d'intervalles à ajouter. Cela peut être positif (pour obtenir des dates dans le futur) ou négatif (pour obtenir des dates dans le passé).
  • date est une Date ou un littéral représentant la date à laquelle l'intervalle est ajouté

Exemples :

Sub DateAddExamples()

    Dim Sample As Date
    'Create sample date and time of 2016-07-28 12:34:56
    Sample = DateSerial(2016, 7, 28) + TimeSerial(12, 34, 56)
    
    ' Date 5 months previously (prints 2016-02-28):
    Debug.Print Format$(DateAdd("m", -5, Sample), "yyyy-mm-dd")
    
    ' Date 10 months previously (prints 2015-09-28):
    Debug.Print Format$(DateAdd("m", -10, Sample), "yyyy-mm-dd")
    
    ' Date in 8 months (prints 2017-03-28):
    Debug.Print Format$(DateAdd("m", 8, Sample), "yyyy-mm-dd")

    ' Date/Time 18 hours previously (prints 2016-07-27 18:34:56):
    Debug.Print Format$(DateAdd("h", -18, Sample), "yyyy-mm-dd hh:nn:ss")
    
    ' Date/Time in 36 hours (prints 2016-07-30 00:34:56):
    Debug.Print Format$(DateAdd("h", 36, Sample), "yyyy-mm-dd hh:nn:ss")

End Sub

Conversion et création

CDate ()

CDate() convertit quelque chose de n'importe quel type de données en un type de données Date

Sub CDateExamples()

    Dim sample As Date

    ' Converts a String representing a date and time to a Date
    sample = CDate("September 11, 2001 12:34")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 12:34:00
    
    ' Converts a String containing a date to a Date
    sample = CDate("September 11, 2001")
    Debug.Print Format$(sample, "yyyy-mm-dd hh:nn:ss")      ' prints 2001-09-11 00:00:00

    ' Converts a String containing a time to a Date
    sample = CDate("12:34:56")
    Debug.Print Hour(sample)                        ' prints 12
    Debug.Print Minute(sample)                      ' prints 34
    Debug.Print Second(sample)                      ' prints 56
    
    ' Find the 10000th day from the epoch date of 1899-12-31
    sample = CDate(10000)
    Debug.Print Format$(sample, "yyyy-mm-dd")       ' prints 1927-05-18
    
End Sub

Notez que VBA a également faiblement typé CVDate() qui fonctionne de la même manière que le CDate() autre fonction que de retourner une date tapés Variant au lieu d'un fortement typé Date . La version de CDate() doit être préférée lors du passage à un paramètre Date ou à une variable Date , et la version CVDate() doit être préférée lors du passage à un paramètre Variant ou lors de l’attribution à une variable Variant . Cela évite le casting de type implicite.


DateSerial ()

DateSerial() est utilisée pour créer une date. Il renvoie une Date pour une année, un mois et un jour spécifiés.

Syntaxe:

DateSerial ( year, month, day ) 

Les arguments année, mois et jour étant valides Entiers (Année de 100 à 9999, Mois de 1 à 12, Jour de 1 à 31).

Exemples

Sub DateSerialExamples()

    ' Build a specific date
    Dim sample As Date
    sample = DateSerial(2001, 9, 11)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the first day of the month for a date.
    sample = DateSerial(Year(sample), Month(sample), 1)
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
    ' Find the last day of the previous month.
    sample = DateSerial(Year(sample), Month(sample), 1) - 1
    Debug.Print Format$(sample, "yyyy-mm-dd")                   ' prints 2001-09-11
    
End Sub

Notez que DateSerial() acceptera les dates "invalides" et en calculera une date valide. Cela peut être utilisé de manière créative pour de bon:

Exemple positif

Sub GoodDateSerialExample()

    'Calculate 45 days from today
    Dim today As Date
    today = DateSerial (2001, 9, 11)
    Dim futureDate As Date
    futureDate = DateSerial(Year(today), Month(today), Day(today) + 45)
    Debug.Print Format$(futureDate, "yyyy-mm-dd")            'prints 2009-10-26

End Sub

Cependant, il est plus probable que vous tentiez de créer une date à partir d'une entrée utilisateur non validée:

Exemple négatif

Sub BadDateSerialExample()

    'Allow user to enter unvalidate date information
    Dim myYear As Long
    myYear = InputBox("Enter Year")                                         
            'Assume user enters 2009
    Dim myMonth As Long
    myMonth = InputBox("Enter Month")                                       
            'Assume user enters 2
    Dim myDay As Long
    myDay = InputBox("Enter Day")                                           
            'Assume user enters 31
    Debug.Print Format$(DateSerial(myYear, myMonth, myDay), "yyyy-mm-dd")   
            'prints  2009-03-03

End Sub


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow