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 :

calcul date avec numero semaine et annee


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut calcul date avec numero semaine et annee
    Je cherche depuis 3 jours une fonction VB EXCEL pour déterminer une date ( Le dimanche) en fonction du numéro de semaine et de l'année. Ex Sem46 en 2007 ( Dim 11 11). Je lance donc ce défi pour une appli qui FONCTIONNE DS TOUS LES CAS! (sous VB EXCEL) Merci d'avance.

  2. #2
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir;

    Je n'arrive pas à la même date que toi ...

    Pourquoi ?

    Parce que la définition de la première semaine de l'année est paramétrable

    Alors voilà comment je calculerais, en convention de mon pays :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command1_Click()
      semaine = 46
      annee = 2007
      MsgBox DateAdd("d", (vbSunday - WeekDay("01/01/" & annee)) + ((semaine) * 7), "01/01/" & annee)
    End Sub

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    si on considère que la première semaine de l'année est celle à 4 jours, la méthode est la suivante sauf erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       Dim d As Date
       Dim iAn As Integer, iSem As Integer
       iSem = 52
       iAn = 2000
       d = DateAdd("d", iSem * 7, "1/1/" & iAn) + IIf(DatePart("ww", "1/1/" & iAn, vbMonday, vbFirstFourDays) > 1, 7, 0)
       Debug.Print d + 1 - Weekday(d, vbSunday)
    Exemples :
    An 2000 sem 52 => dimanche = 31/12/2000
    An 2000 sem 1 => dimanche = 09/01/2000

    Formule simplifiable et à vérifier...

    Philippe

  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
    Points : 5 537
    Points
    5 537
    Par défaut
    Oui, philben.

    Nous arrivons ainsi tous deux au même résultat pour la 46ème semaine de 2007 (à savoir le 18 novembre et non, comme gobc06 , le 11 novembre...).

    Bien sur... (et voilà pourquoi la convention de base est indispensable, pardi).

    Amitiés

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Oui autant pour moi .POur la Sem46 en 2007 le dimanche tombe bien le 18 et non le 11.
    Merci à ucfoutu et à philben de vous interesser à mon Pb, mais je me suis mal expliqué sans doute, je cherche une fonction GENERALE qui aprés saisie du NUMERO DE SEMAINE puis de l'ANNEE (ou récupération sur feuille de calcul) me donne une grille hebdomadaire commencant le dimanche précedent le lundi (1er jour de la Semaine).

    Je reprends donc l'exemple de la Sem 46 en 2007 ce que je cherche à déterminer à TOUS LES COUPS aprés avoir saisi No de Sem et Année, c'est par exemple pour cette semaine précise ( Dim11/11, Lun 12/11, Mar13/11, Mer14/11, Jeu15/11, Vend 16/11 et Sam 17/11)
    Ce srait un code ds le genre de la pièce jointe mais ce code ne fonctionne pas à tous les coups, et je ne sais pas le modifier en conséquence!
    Mais je suis sur qu'il y a une fonction mathématique qui me permette de calculer cela



    est-ce + clair?

    Crd
    Fichiers attachés Fichiers attachés

  6. #6
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Je ne comprends pas ...

    Tu veux tous les jours de la semaine concernée ?
    Si tel est le cas, il te suffit d'ajouter une boucle de 0 à 7 pour ajouter 1 jour à la fois à la date obtenue comme exposé plus haut pour le 1er jour de la série.

    Pour le reste : en faire une fonction : il te suffit de lui passer en argument ton année et ta semaine et de lui faire retourner un tableau (ou une liste) de 7 valeurs...

    EDIT :

    En d'autres termes :

    une fonction reçoit des paramètres et retourne une ou des valeurs.

    Je n'ai pas du tout ouvert ton document xls...

    Je me contente ici de te poser la question suivante, à laquelle nous attendons une réponse précise et claire :
    Quels paramètres en entrée ?
    Quelle(s) valeurs en retour ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    oui mas tu te base sur un cas particulier.
    Moi je veux une formule generale quelque soit l'année ou le no de semaine et effectivement il s'agit bien d'une fonction et effectivement il me suffit ensuite d'une boucle pour determiner les 7 jours mais ce que je veux obtenir c'est le calcul du 1er jour, cad le lundi (debut de la semaine en fonction du numero)


  8. #8
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Oui ?

    Et alors ?

    Il me semble que tu as eu non pas une mais deux solutions...

    Quel est donc ton problème ? Savoir en faire une fonction ? Si oui : plus rien à voir avec les dates en particulier mais tout avec l'apprentissage des fonctions en général ...

    Bon travail et bonne étude.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    ucfoutu, Ta proposition de code a l'air de fonctionner! (pas celle de Phirben par contre).
    Voici ma fonction et son appel, par contre je n'ai pas reussi à passer la valeur obtenue pour DateCherchee ( et en plus cela m'affiche un format style heure)
    mais c'est presque ça!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub AAATest()
        DateCherchee = ucfoutu(2010, 35)
        MsgBox "DateCherchee=" & DateCherchee
    End Sub
    '
    Function ucfoutu(ByVal Annee, ByVal NoSemaine As Integer)
    '
    'APPEL  comme suit    ucfoutu (2007,12)
       d = DateAdd("d", (vbSunday - WeekDay("01/01/" & Annee)) + ((NoSemaine) * 7), "01/01/" & Annee)
       MsgBox d
    End Function
    '
    Peux-tu me dire ce qui ne va pas?

  10. #10
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Ouais...

    C'est bien ce qui me semblait...

    C'est au niveau de l'appel et de l'utilisation d'une fonction (quelle qu'elle soit) que tu as des lacunes ... et pas parce qu'il s'agit de la détermination d'une date...

    Voilà comment marche ta fonction .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
       DateCherchee = ucfoutu(2010, 35)
       MsgBox "DateCherchee=" & DateCherchee
    End Sub
    '
    Function ucfoutu(ByVal Annee as integer, ByVal NoSemaine As Integer) As String
      ucfoutu = DateAdd("d", (vbSunday - WeekDay("01/01/" & Annee)) + ((NoSemaine) * 7), "01/01/" & Annee)
    End Function

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    oui tu as raison, je suis novice en VB je n'en avais pas fait depuis 10 ans. Mais bon ça revient!

    Mais je suis DSL ta fonction est fausse, car si tu fais le test avec Sem 22 en 2007 elle te retourne 03/06/2007 alors que la bonne date est le 28/05/2007. PB donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function DateCherchee(ByVal Annee, ByVal NoSemaine As Integer)
    '
    'APPEL  comme suit    DateCherchee(2007,12)
       DateCherchee = DateAdd("d", (vbSunday - WeekDay("01/01/" & Annee)) + ((NoSemaine) * 7), "01/01/" & Annee)
    End Function

  12. #12
    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
    Points : 5 537
    Points
    5 537
    Par défaut
    Ah...

    Désolé, mais le 1er dimanche de la 22ème semaine de 2007 tombe bien, précisément, le 3 juin 2007 et non le 28 mai 2007 ...

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    oui OK ucfoutu, mais je cherche à déterminer le dimanche précedent à la date trouvée soit le 27/05 pour la sem 22 en 2007 donc je pense qu'il faut juste corriger ta formule qui est OK. je regarde.

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut resolu
    Non, non
    J'ai trouvé mon bonheur sur le net.
    Il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Function LUNDI(annee As Integer, NumSemaine As Integer) As Double
    '
    'retourne la date du lundi de la semaine n° "NumSemaine" (ISO) de l 'année "Annee"
      Dim PremierJour As Date
      PremierJour = DateSerial(annee, 1, 1)
      If WeekDay(PremierJour) = 6 Or WeekDay(PremierJour) = 7 Then
        'si le 1er janvier tombe un vendredi ou un samedi
        PremierJour = PremierJour - WeekDay(PremierJour) + 2
       Else
        PremierJour = PremierJour - WeekDay(PremierJour) - 5
      End If
      LUNDI = PremierJour + 7 * NumSemaine
    End Function
    Et ça marche! Merci à tous

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/12/2014, 17h15
  2. transformer date en numero de semaine et inversement avec Weekday
    Par Scopas dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/03/2009, 21h08
  3. [débutant] Date avec jours semaine
    Par moomba dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 17/04/2007, 16h36
  4. Réponses: 3
    Dernier message: 07/08/2006, 10h01
  5. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 17h14

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