IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

génération de dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut génération de dates
    Bonjour , je sais écrire une fonction qui renvoie un nombre aléatoire entre 2 nombres a et b , une fonction qui renvoie un mot dans une chaine , mais il y a une chose dont je réfléchis depuis quelques heures et je n'ai pas trouvé de solution :

    J'aimerais créer une petite fonction qui génère des dates de manière aléatoire .
    Si par exemple on me demande de générer aléatoirement des dates entre 1/1/1901 et 1/1/1915 , comment puis je faire ?

    La génération d'un entier ne servira à rien car il y a des règles à respecter dans les dates et par ailleurs l'entier ne peut pas marcher car dans les entiers , 22111902 et supérieur à 11195 , alors que dans les dates il est inférieur , vous voyez ce que je veux dire ?

    Merci pour vos idées et pistes .

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut shaku et le forum
    La génération d'un entier ne servira à rien car il y a des règles à respecter dans les dates et par ailleurs l'entier ne peut pas marcher car dans les entiers , 22111902 et supérieur à 11195 , alors que dans les dates il est inférieur , vous voyez ce que je veux dire ?
    Je ne pense pas que ce soit le bon raisonnement : excel calcule les dates en Basant le 01/1/1900 =1 et en comptant le nombre de jours depuis pour trouver la date.
    Pour trouver une date aléatoire entre le 1/1/2009 et le 15/1/2009, il faut trouver un nombre entier entre 0 et 14 et l'additionner au nombre représentant le 1/1/2009 (39814). Par exemple si tu trouves 10, ça te donnera la date correspondant à 39824, soit le 11/1/2009

    Évidement, je parle de nombres au format date et dans ce cas, le 22/11/1902 (1057) et bien inférieur au 01/11/1995 (35004)
    A+

  3. #3
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    bonjour à tous

    Comme la dit gorfael, les date sont des entiers :
    le 01/01/1901 = 367
    le 01/01/1915 = 5480

    donc un aléatoire entre 367 et 5480 avec une format date doit fonctionner
    Il est souhaitable de gérer l'aléatoire en VBA, plus souple que les formules dans ce domaine
    voici néanmoins une formule (mettre un format date).
    En A1 la date de départ
    En A2 la date de fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ENT(ALEA()*(A2-A1))+A1

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Une approche en VBA différente (parmi des dizaines possibles) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Randomize
      Dim date1 As Date, date2 As Date, nbj As Single
      date1 = "1/1/1901"
      date2 = "2/1/1915"
      MsgBox date1 + Int((DateDiff("d", date1, date2) * Rnd))

    Nous n'avons de cette manière pas à nous préoccuper de la borne inférieure en vue de tirer entre 2 bornes, mais uniquement d'un entier

    EDIT :
    qui pourrait d'ailleurs s'écrire plus simplement, puisque, lorsqu'il fait une soustraction de dates, VB calcule en jours, précisément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox date1 + Int((date2 - date1) * Rnd)

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    merci les gars pour ces infos intéressants , j'ai juste une question : vous avez bien dit que le 1/1/1900 correspondait à l'entier 1 , et ensuite le 1/1/2009 à 39814 . Je suppose que vous ne vous êtes pas amusé à compter les jours pour mes beaux yeux et comme parfois une année vaut 365 jours et une autre 366 , comment faites vous pour savoir immédiatement à quel entier correspondt telle date ?

  6. #6
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:, bonjour ucfoutu

    tu mets une date dans une cellule, et ensuite tu y place un format standard et ça te donne le nombre de jours

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Merci Wilfried_42...

    J'espère que shaku aura compris que tu LUI répondais...

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    merci les gars ça marche , tt va bien

  9. #9
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    c'est vrai qu'après relecture, cela peut porter à confusion mais je souhaitais seulement te donner le bonjour comme je l'avais oublié auparavant.
    sinon pour la réponse je ne me serais pas permis de te l'adresser ayant parcouru plusieurs de tes post....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de génération de date
    Par Guillaume63 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 25/05/2012, 15h14
  2. [XL-2003] [débutant] Aide génération de dates
    Par garheb dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/06/2011, 13h37
  3. Génération d'une série de Date
    Par schnock dans le forum Langage SQL
    Réponses: 12
    Dernier message: 05/02/2009, 15h42
  4. [Dates] Génération de dates aléatoires
    Par Whombat dans le forum Langage
    Réponses: 6
    Dernier message: 11/01/2009, 11h47
  5. Réponses: 3
    Dernier message: 05/09/2008, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo