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 :

Fonction Récupération Date [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut Fonction Récupération Date
    Bonjour,

    Pourriez-vous m'aider svp.
    Je souhaiterai une fonction qui me permette de récupérer une date ou de reconstruire la date avec:
    sJour = jour de la semaine de 1 à 7
    sNumSemaine = au numéro de semaine de 1 à 52 (voir 53)
    sAnnée = année (ex: 2013)

    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    à défaut de code, merci de nous montrer au moins l'analyse, comment le calculer manuellement ? …

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pas sur que ce soit ce que tu cherches:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Test()
      Debug.Print (Format(CreationDate(2013, 9, 19), "dd/mm/yy"))
    End Sub
     
    Private Function CreationDate(Annee%, Mois%, Jour%) As Date
      CreationDate = CDate(Mois% & " " & Jour% & " " & Annee%)
    End Function

  4. #4
    Invité
    Invité(e)
    Par défaut Bonjour, test ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Function ConverSemaineDate(sJour As Integer, sNumSemaine As Integer, sAnnée As Integer) As Date
    'Pourriez-vous m'aider svp.
    'Je souhaiterai une fonction qui me permette de récupérer une date ou de reconstruire la date avec:
    'sJour = jour de la semaine de 1 à 7
    'sNumSemaine = au numéro de semaine de 1 à 52 (voir 53)
    'sAnnée = année (ex: 2013)
     
    j = sNumSemaine * 7 'Je calcul le nombre de jour en fonction du dimanche de la semaine 1
    d = CDate("1/1/" & sAnnée) 'Je me positionne au 01/01/ de l'année
     
    Dim i As Integer
    i = 0
    'Je recherche le dimanche de la semaine 1
    While Weekday(CDate("1/1/" & sAnnée) - i) <> 1 Or CInt(Format(CDate("1/1/" & sAnnée) - i, "w")) <> 1
    DoEvents
    'Debug.Print Weekday(CDate("1/1/" & sAnnée) - i) & " : " & CInt(Format(CDate("1/1/" & sAnnée) - i, "w"))
    i = i + 1
    Wend
     
    d = CDate("1/1/" & sAnnée) - i 'Je fixe le dimanche de la semaine 1
    ConverSemaineDate = d + j - 7 + sJour 'J'ajoute  le nombre de jour pour trouver le dimanche de la semaine concerné, moins 7 jour plus la valeur du jour de la semaine.
    End Function
    Sub test()
    Debug.Print ConverSemaineDate(1, 42, 2013)
    Debug.Print ConverSemaineDate(1, 42, 2012)
    Debug.Print ConverSemaineDate(1, 42, 2011)
    Debug.Print ConverSemaineDate(1, 42, 2010)
    Debug.Print ConverSemaineDate(1, 42, 2009)
    Debug.Print ConverSemaineDate(1, 42, 2008)
    Debug.Print ConverSemaineDate(1, 42, 2007)
    End Sub
    Dernière modification par Invité ; 19/09/2013 à 13h02.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Cette fonction semble suffisante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Test()
      Debug.Print (Format(CreationDate(2011, 42, 1), "dd/mm/yyyy"))
    End Sub
     
    Private Function CreationDate(Annee%, Semaine%, Jour%) As Date
      CreationDate = 7 * Semaine% + CDate("3/1/" & Annee%) - Weekday(CDate("3/1/" & Annee%)) - 5 + Jour% - 1
    End Function

  6. #6
    Invité
    Invité(e)
    Par défaut elle semble marcher mieux
    je trouve 10/10/2011 pour 2011 ce qui est une erreur!
    Citation Envoyé par vcottineau Voir le message
    Cette fonction semble suffisante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Test()
      Debug.Print (Format(CreationDate(2011, 42, 1), "dd/mm/yyyy"))
    End Sub
     
    Private Function CreationDate(Annee%, Semaine%, Jour%) As Date
      CreationDate = 7 * Semaine% + CDate("3/1/" & Annee%) - Weekday(CDate("3/1/" & Annee%)) - 5 + Jour% - 1
    End Function
    Je me la garde en réserve

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 50
    Par défaut pb: Fonction date
    Merci à tous.

    J'ai réussi à résoudre mon problème.

  8. #8
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut récupération date
    Bonjour,

    Peut-on m'expliquer la formule ?

    Pourquoi 3/1/......

    Partant de celle-ci, j'ai fabriqué cette autre qui semble donner le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CreationDate = CDate("1/1/" & 2011) + (semaine%*7) + Jour% - 6
    - CDate("1/1/" & 2011) me donne le nombre correspondant au premier jour de l'année.
    - (semaine%*7) ajoute le nombre de jour écoulé depuis le début de l'année
    - jour% ajoute le nombre de jour de la dernière semaine.

    Mais pourquoi faut-il enlever 6 ou 5 selon la formule ?

    Je comprend bien la différence entre 6 et 5 qui provient de ce que dans ma formule le premier jour de l'année est pris en compte mais ne comprend pas le pourquoi de ce retrait qu'il soit 5 ou 6.

    Cordialement.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Un tentative d'explication en suivant la norme ISO 8601:

    Dans Excel:
    en A1 le jour (de 1 à 7)
    en A2 la semaine de (1 à 53)
    en A3 l'année

    Alors la formule (adaptée à la France) devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =7*(B2-1)+DATE(B3;1;4)-JOURSEM(DATE(B3;1;4);2)+1+B1-1
    Pourquoi la date du 4 janvier ? Parce que le 4 janvier est toujours contenu dans la semaine n°1.

    La logique est donc de partir du 4 janvier, de chercher le lundi de cette même semaine d’où le JOURSEM() et d'y ajouter le nombre de semaine et le nombre de jours pour obtenir la date voulue.

    Voila j'espère que c'est clair.

  10. #10
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut fonction récupération date
    Bonjour,

    Merci pour l'explication que je vais analyser.
    Je vais dans le même temps m'assurer avec de multiples essais que ma formule simplifiée -et peut-être simpliste- est valable dans tous les cas de figure.

    Cordialement.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nibledispo Voir le message
    Bonjour,

    Merci pour l'explication que je vais analyser.
    Je vais dans le même temps m'assurer avec de multiples essais que ma formule simplifiée -et peut-être simpliste- est valable dans tous les cas de figure.

    Cordialement.
    Par exemple:

    Année: 2014
    Semaine: 1
    Jour: 1

    Ta solution donne : 03/01/2014
    Ma solution donne: 30/12/2013

    Et donc ta formule est fausse.

  12. #12
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut fonction récupération date
    Bonjour Vcottineau,

    Effectivement ma formule était trop simple pour être valable dans tous les cas de figure. Le début d'année est toujours délicat à négocier après un réveillon bien arrosé même pour les formules.

    Je pense avoir compris ta formulation mais elle me semble difficile à retenir.

    Cordialement.

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

Discussions similaires

  1. Récupération date et heure
    Par Goldorak2 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 28/08/2009, 22h20
  2. Fonction récupération de Date de modification en T-SQL
    Par simo333 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/10/2007, 09h42
  3. Comment lancer une fonction à une date donnée
    Par ideal dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/02/2006, 12h52
  4. [CR]Aide sur les fonction de date et plage de date.
    Par Job dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/11/2005, 09h19
  5. fonction de date en Excel
    Par spopo dans le forum Excel
    Réponses: 11
    Dernier message: 11/08/2005, 13h36

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