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 :

[VBA-E] Lundi d'une semaine


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut [VBA-E] Lundi d'une semaine
    Bjr,

    Dans ce code que représente le 3 de DATE et à quoi sert Text ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lundisem = Evaluate("text(date(2008,1,3)-weekday(date(2008,1,3))-5+(7*17)+ 0,""dd/mm/yyyy"")")

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    la fonction "Texte" sert à convertir une valeur en texte et par la même occasion ici, de mettre en forme le résultat: "dd/mm/yyyy"


    bon après midi
    michel

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    bjr,

    Ok pour la transfo en texte mais ici pourquoi on transforme en texte ?

    et pouquoi date part du 3 1 2008 si le 3 représente bien le jour ?
    Cdt

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    mais ici pourquoi on transforme en texte ?
    tu as lu mon message ?

    par la même occasion ici, de mettre en forme le résultat: "dd/mm/yyyy"

    sans la fonction Texte, tu obtiendrais uniquement une valeur numérique représentant la date : 39559


    bon week end
    michel

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Petite précision.
    Ce que tu nous montres est une formule Excel, pas du code VBA.

    Tu pourrais parfaitement analyser cette formule en tapant chacun des mots clés (après un =) dans la barre de formule et en cliquant sur le bouton fx (juste devant la barre de formule).
    Tu obtiendrais toute l'info nécessaire.

    Ceci dit, il est franchement tordu de faire un Evaluate en VBA alors que toutes les fonctions Excel utilisées ont leur équivalent en VBA.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bjr Alain

    C'est pourtant ce que j'ai récupéré qui disait "comment trouver par macro la date du lundi d'une semaine donnée le code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
    Dim Annee As Integer, Semaine As Integer, NumJour As Integer
     
    Annee = 2007
    Semaine = 43
    NumJour = 0 ' 0=Lundi, 1=Mardi ...
     
    MsgBox Evaluate("TEXT(DATE(" & Annee & ",1,3)-WEEKDAY(DATE(" & Annee & _
        ",1,3))-5+(7*" & Semaine & ")+" & NumJour & ",""dd/mm/yyyy"")")
    End Sub
    Existe-t-il mieux en code ?
    Cdt

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    La fonction pour une date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function DayBeforeDate(dDate As Date, Optional iDay As Integer = vbMonday) As Date
      DayBeforeDate = IIf((dDate - (Weekday(dDate) - iDay)) < dDate, _
                          dDate - (Weekday(dDate) - iDay), _
                          (dDate - (Weekday(dDate) - iDay)) - 7)
    End Function
    Son appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
      MsgBox DayBeforeDate(CDate("26/04/2008"), vbTuesday)
    End Sub
    Dès que j'ai 5 minutes je cherche pour une semaine.
    A moins que quelqu'un me précède.

    Edit: Fonction plus générale permettant de choisir le jour.

    Au passage pour bien te former, les cours et tutoriels pour apprendre Excel : https://excel.developpez.com/cours/
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 255
    Points : 325
    Points
    325
    Par défaut
    Bonjour

    Le code que j'utilise pour déterminer le lundi d'une semaine donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub lundi_semaine()
    Dim sem As Integer, lundi As Date
    sem = InputBox("entrez le numéro de semaine")
    lundi = IIf(Weekday(DateSerial(Year(Date), 1, 1)) > 5, _
        DateSerial(Year(Date), 1, 1) - Weekday(DateSerial(Year(Date), 1, 1)) + 2, _
        DateSerial(Year(Date), 1, 1) - Weekday(DateSerial(Year(Date), 1, 1)) - 5) + 7 * sem
    MsgBox lundi
    End Sub

  9. #9
    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 535
    Points
    5 535
    Par défaut
    Bonjour,

    Moi, je verrais bien les choses ainsi (en respect, je crois, des conventions ... qui font que la première semaine d'une année peut commencer l'année d'avant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Command5_Click()
     annee = "2007"
     semaine = 2
     MsgBox DateAdd("ww", semaine, DateSerial(annee, 1, 1 - (WeekDay(DateSerial(annee, 1, 1)) - 1)))
    End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ucfoutu : j'ai essayé avec 2006, 2007, 2008 mais la date renvoyée ne semble pas correspondre au lundi de la 2ème semaine selon la norme ?

  11. #11
    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 535
    Points
    5 535
    Par défaut
    Il suffit d'adapter ma formule à la convention adoptée...

    Celle-là, par exemple :

    http://fr.wikipedia.org/wiki/Semaine_1

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Oui je connais (et je connaissais sans doute avant que Wikipedia existe) :

    La semaine 1 est, d'après la norme ISO 8601, la première semaine de l'année contenant un jeudi.
    Le problème : je ne sais pas adapter la formule.

  13. #13
    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 535
    Points
    5 535
    Par défaut
    Décomposes et tu adapteras plus facilement, alors :

    voilà pour ta norme ISO (en te rappelant qu''existent d'autres conventions)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command5_Click()
     annee = "2008"
     semaine = 2
     toto = IIf(WeekDay(DateSerial(annee, 1, 1)) > 5, -1, -5) ' 5, c'est pour ta norme ISO. 
    MsgBox DateAdd("ww", semaine, DateSerial(annee, 1, 1 - (WeekDay(DateSerial(annee, 1, 1)) - toto)))
    End Sub

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bjr,

    J'ai vu vos code, moi j'avais adapté comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    annee=Format(Date,"yyyy")
    datdeb=Format(annee &",1,3","#####"
    joursem=Weekday(datdeb)
    numsem=DatePart("ww",Date)
    lundi=Format((datdeb-joursem) -5+(7*numsem),"dd/mm/yyyy")

  15. #15
    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 535
    Points
    5 535
    Par défaut
    Mais c'est maintenant autre chose !
    Tu cherches le lundi de la semaine dans laquelle se trouve la date en cours ?

    Si c'est celà, rien de plus simple !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Command1_Click()
      MsgBox Date - WeekDay(Date) + 2
    End Sub

  16. #16
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Comme quoi, mon premier code, même s'il vient d'une lecture incomplète de la question, répondait bien au problème:
    Connaître le lundi précédent une date donnée.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  17. #17
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bjr,
    Non je cherche bien le lundi d'une semaine par rapport au n° de cette semaine.
    Cdt

  18. #18
    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 535
    Points
    5 535
    Par défaut
    Citation Envoyé par porc-bouc Voir le message
    Bjr,
    Non je cherche bien le lundi d'une semaine par rapport au n° de cette semaine.
    Cdt

    Faudrait savoir !

    Cela implique donc que tu ne pars pas d'une date, mais d'un millésime et d'un numéro de semaine (et rien d'autre) et correspond à ta toute première formulation. ===>> Et la solution t'a été donnée plus haut, non ?

  19. #19
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bien sur c'est bien ce que je fais: le format date n'est la que pour recuperer l'annee et datdeb= format(annee & ",1,3","#####") c'est pareil que dateserial(annee,1,1) non ?

  20. #20
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je me base juste sur cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numsem=DatePart("ww",Date)
    où tu récupères le numéro de semaine de la date du jour.

    C'est, un peu, le 22 à Asnières...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. obtenir le premier lundi de la semaine dans une semaine donnée
    Par olivtone dans le forum Développement
    Réponses: 4
    Dernier message: 03/07/2015, 16h54
  2. Réponses: 1
    Dernier message: 06/11/2009, 13h52
  3. Réponses: 2
    Dernier message: 05/07/2006, 14h21
  4. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12
  5. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15

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