OVH Cloud OVH Cloud

Date aléatoire

6 réponses
Avatar
Doft
Bonjour!

Je d=E9sire faire une function qui me renvoie une date=20
al=E9atoire entre une date mini donn=E9 et une date de fin=20
donn=E9.

Function DateAleatoire(DateMini as date, DateMaxi as date)=20
as date

????????????????????

end function

Quelqu'un aurait-il une solution?

Merci de vos r=E9ponse et bonne journ=E9e!

Doft

6 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

La fonction qui suit devrait te convenir :

Je désire faire une function qui me renvoie une date
aléatoire entre une date mini donné et une date de fin
donné.


*************************************************
Function fDtRnd(dtStart As Date, dtEnd As Date) As Date
'** Fonction retournant une date aléatoire
'** entre dtStart et dtEnd
Dim lngStart As Long
Dim lngEnd As Long
Dim lngResult As Long

lngStart = CLng(dtStart)
lngEnd = CLng(dtEnd)

lngResult = Int((lngEnd - lngStart + 1) * Rnd + lngStart)
fDtRnd = CDate(lngResult)
End Function
*************************************************

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

Avatar
Xavier HUE
Bonjour Doft,

Peut être en convertissant les deux dates en
nombre "serial" puis, calculer un nombre aléatoire compris
entre ces deux valeurs, et finalement convertir ce nombre
en date...

C'est une piste.
Cordialement.
Avatar
Xavier HUE
Bonjour Jessy,

Bien vu!
Je cherchais dans Access, l'équivalent de la conversion
d'une date en un nombre Serial (comme dans Excel), et pas
trouvé! Merci pour l'info ;-) J'avions point pensé au CLng.

Ceci étant, j'ai testé ça:

Function DateAleatoire(datDateMini As Date, datDateMaxi As
Date) As Date
Dim dblValAleatoire As Double
Dim NbJourEntreDates As Double

NbJourEntreDates = DateDiff("d", datDateMini,
datDateMaxi, vbUseSystemDayOfWeek, vbUseSystem)

dblValAleatoire = Int(Rnd * (NbJourEntreDates - 1)) + 1

DateAleatoire = DateAdd("d", dblValAleatoire,
datDateMini)

End Function

Cordialement.
Avatar
Doft
Merci Jessy!

Cela fonctionne à merveille!

Bonne après-midi!

Doft
Avatar
Anor
Bonjour,

Doft wrote:
| Merci Jessy!
|
| Cela fonctionne à merveille!
|
| Bonne après-midi!
|
| Doft


oui sauf que si tu exécutes ce code :

Sub test()
Dim i As Integer
For i = 1 To 100
Debug.Print fDtRnd(#1/1/2000#, #12/31/2000#)
Next i
End Sub

puis tu fermes et réouvres access et que tu relances cette fonction,
tu auras 2 séries de 100 dates strictement identiques.

Il conviendrait donc de modifier la routine en :

Sub test()
Randomize '<<<----
Dim i As Integer
For i = 1 To 100
Debug.Print fDtRnd(#1/1/2000#, #12/31/2000#)
Next i
End Sub

autrement dit, appeler la Fonction Randomize sur ouverture de la base,
ou du formulaire, ou sur timer, ou au moment le plus opportun
pour s'assurer qu'on ne va pas avoir 2 fois la même série de chiffres.

Voilà

Espérant avoir aidé
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
Jessy Sempere [MVP]
Salut Anor

Merci de ces précisions, quand je dis qu'on en apprend tous les jours...
;-))

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message
news:
Bonjour,

Doft wrote:
| Merci Jessy!
|
| Cela fonctionne à merveille!
|
| Bonne après-midi!
|
| Doft


oui sauf que si tu exécutes ce code :

Sub test()
Dim i As Integer
For i = 1 To 100
Debug.Print fDtRnd(#1/1/2000#, #12/31/2000#)
Next i
End Sub

puis tu fermes et réouvres access et que tu relances cette fonction,
tu auras 2 séries de 100 dates strictement identiques.

Il conviendrait donc de modifier la routine en :

Sub test()
Randomize '<<<----
Dim i As Integer
For i = 1 To 100
Debug.Print fDtRnd(#1/1/2000#, #12/31/2000#)
Next i
End Sub

autrement dit, appeler la Fonction Randomize sur ouverture de la base,
ou du formulaire, ou sur timer, ou au moment le plus opportun
pour s'assurer qu'on ne va pas avoir 2 fois la même série de chiffres.

Voilà

Espérant avoir aidé
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------