Tableau de Date : recherche de Date min et Date max

Bonjour,

Je souhaite traiter un tableau de date afin de déterminer la date min et la date Max .

Mon code est le suivant et ca ne marche pas : la valeur dans MaxDate est 00:00:00.

    Dim TableDate(3) As Date
    Dim MaxDate As Date

TableDate(0) = #1/2/2019 9:15:25 AM#
TableDate(1) = #1/1/2019 4:15:25 PM#
TableDate(2) = #1/3/2019 9:15:25 AM#
TableDate(3) = #1/4/2019 9:15:25 AM#

MaxDate = Application.WorksheetFunction.Max(TableDate)

J'ai vérifié que la fonction Application.WorksheetFunction.Max fonctionne bien sur les dates : ce code renvoie MaxDate = 1/1/2019 16:15:25 .

Dim MaxDate As Date
Dim MyDate1 As Date
Dim MyDate2 As Date

MyDate1 = #1/1/2019 9:15:25 AM#
MyDate2 = #1/1/2019 4:15:25 PM#

MaxDate = Application.WorksheetFunction.Max(MyDate1, MyDate2)

J'ai également vérifié que la fonction fonction Application.WorksheetFunction.Max s'applique à un tableau en essayant avec un table de Integer : MaxInt = 3.

Dim TableInt () As Integer
Dim MaxInt as Integer 

TableInt(0) = 0
TableInt(1) = 1
TableInt(2) = 2
TableInt(3) = 3

MaxInt = Application.WorksheetFunction.Max(TableInt)

Donc je ne vois pas pourquoi ca ne marche pas : le fonction Application.WorksheetFunction.Max Marche sur les Date, marche également sur les tableau de Int, mais ne marche pas sur les tableaux de Date?

Merci pour votre aide,

Cdt

Bonjour,

à tester,

Sub test1()
Dim TableDate(3) As Double, m As Double, MaxDate As Date

TableDate(0) = #1/2/2019 9:15:25 AM#
TableDate(1) = #1/1/2019 4:15:25 PM#
TableDate(2) = #1/3/2019 9:15:25 AM#
TableDate(3) = #1/4/2019 9:15:25 AM#

m = Application.WorksheetFunction.Max(TableDate)
MaxDate = m
End Sub

Bonjour,

Ca marche effectivement, merci! Mais j'essaye de comprendre pourquoi.

1) Ca converti le format Date #1/4/2019 9:15:25 AM# en Double équivalent qui permet la recherche de Max?

2) Pourquoi ca marchait sans passer par le Double dans ce cas ?

MyDate1 = #1/1/2019 9:15:25 AM#
MyDate2 = #1/1/2019 4:15:25 PM#
MaxDate = Application.WorksheetFunction.Max(MyDate1, MyDate2)

3) Je constate que le format #1/4/2019 9:15:25 AM# est au format mm/dd/yyyy renvoie la date 4/1/2019.

Comment dire que je veux le fomat dd/mm/yyyy ( que 1/4/2019 vale 1/4/2019)?

Merci pour votre aide,

Cdt

1) Ca converti le format Date #1/4/2019 9:15:25 AM# en Double équivalent qui permet la recherche de Max?

oui

2) Pourquoi ca marchait sans passer par le Double dans ce cas ? 

parce que c'est du texte

3) Je constate que le format #1/4/2019 9:15:25 AM# est au format mm/dd/yyyy renvoie la date 4/1/2019.

Comment dire que je veux le fomat dd/mm/yyyy ( que 1/4/2019 vale 1/4/2019)?

MaxDate = Format(m, "dd/mm/yyyy")

Toujours pas compris désolé

Dans ce cas, mes types sont bien des Date.

Dim TableDate(3) As Double, m As Double, MaxDate As Date

TableDate(0) = #1/2/2019 9:15:25 AM#
TableDate(1) = #1/1/2019 4:15:25 PM#
TableDate(2) = #1/3/2019 9:15:25 AM#
TableDate(3) = #1/4/2019 9:15:25 AM#

m = Application.WorksheetFunction.Max(TableDate)
MaxDate = m

Dans ce cas aussi mais pas besoin de passer en Double.

Dim MaxDate As Date
Dim MyDate1 As Date
Dim MyDate2 As Date

MyDate1 = #1/1/2019 9:15:25 AM#
MyDate2 = #1/1/2019 4:15:25 PM#
MaxDate = Application.WorksheetFunction.Max(MyDate1, MyDate2)

parce que c'est du texte

Qu'est ce qui est du texte?

Pour les autre points, c'est OK merci.

re,

oui, c'est du texte, pour t'en convaincre fait les tests suivant,

Sub test1()
Dim TableDate(0) As Date, v1 As Boolean, v2 As Boolean
TableDate(0) = #1/2/2019 9:15:25 AM#
v1 = Application.IsText(TableDate(0))
v2 = Application.IsNumber(TableDate(0))
End Sub

Sub test2()
Dim TableDate(0) As Double, v1 As Boolean, v2 As Boolean
TableDate(0) = #1/2/2019 9:15:25 AM#
v1 = Application.IsText(TableDate(0))
v2 = Application.IsNumber(TableDate(0))
End Sub 

D'accord! Merci ,c'est beaucoup plus clair!

Un tableau de Date contient en fait du texte donc la fonction Application.WorksheetFunction.Max ne s'applique pas comme on le souhaite.

Mais lorsqu'on fait ca, ce n'est pas du texte mais bien des Date alors la fonction Application.WorksheetFunction.Max. s'applique bien .

Dim MaxDate As Date
Dim MyDate1 As Date
Dim MyDate2 As Date

MyDate1 = #1/1/2019 9:15:25 AM#
MyDate2 = #1/1/2019 4:15:25 PM#

MaxDate = Application.WorksheetFunction.Max(MyDate1, MyDate2)

C'est bien ça?

Mais alors pourquoi un tableau qu'on déclare de type Date et dans lequel on met bien un contenu de type Date se met à contenir du texte ?

Merci!

en fait avec les # c'est une date littéral

littéral date

Toute séquence de caractères de format valide délimitée par des signes dièse (#). Les formats valides comprennent le format de date indiqué par les paramètres régionaux de votre code et le format de date universel.

Par exemple, #12/31/92# est le littéral date représentant le 31 décembre 1992 si le paramètre régional de votre application est Anglais (États-Unis). L'utilisation de littéraux date vous permet d'accroître la portabilité de votre application dans diverses langues.

mais en réalité une date avec heure est un nombre avec décimal

c'est pour cette raison que j'aime mieux le déclarer As double

en plus celle-ci est universelle.

C'est compris, merci pour votre aide!

Rechercher des sujets similaires à "tableau date recherche min max"