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 - Extraire la date du 3ème dimanche du mois de septembre - Lundi du Jeûne fédéral Suisse [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut VBA - Extraire la date du 3ème dimanche du mois de septembre - Lundi du Jeûne fédéral Suisse
    Bonjour,

    Comment extraire la date du 3ème dimanche du mois de septembre - lundi du Jeûne fédéral suisse

    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Proposition par formule:

    Procédé un peu basique en attendant mieux, le 3ème dimanche de septembre ne peut tomber qu'entre le 15 et le 21 du mois.
    En supposant que l'année sur laquelle doit s'effectuer la recherche est en A1, la formule est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    =SI(JOURSEM(DATE($A$1;9;15);2)=7;"15/09/"& $A$1;
    SI(JOURSEM(DATE($A$1;9;16);2)=7;"16/09/"& $A$1;
    SI(JOURSEM(DATE($A$1;9;17);2)=7;"17/09/"& $A$1;
    SI(JOURSEM(DATE($A$1;9;18);2)=7;"18/09/"&$A$1;
    SI(JOURSEM(DATE($A$1;9;19);2)=7;"19/09/"& $A$1;
    SI(JOURSEM(DATE($A$1;9;20);2)=7;"20/09/"& $A$1;"21/09/"& $A$1))))))
    Avec une fonction VBA:
    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
    Function Dim_Sept(Annee As Long) As String
        If Application.WorksheetFunction.Weekday(DateSerial(Annee, 9, 15), 2) = 7 Then
            Dim_Sept = Format(DateSerial(Annee, 9, 15), "ddd dd/mm/yyyy")
        ElseIf Application.WorksheetFunction.Weekday(DateSerial(Annee, 9, 16), 2) = 7 Then
            Dim_Sept = Format(DateSerial(Annee, 9, 16), "ddd dd/mm/yyyy")
        ElseIf Application.WorksheetFunction.Weekday(DateSerial(Annee, 9, 17), 2) = 7 Then
            Dim_Sept = Format(DateSerial(Annee, 9, 17), "ddd dd/mm/yyyy")
        ElseIf Application.WorksheetFunction.Weekday(DateSerial(Annee, 9, 18), 2) = 7 Then
            Dim_Sept = Format(DateSerial(Annee, 9, 18), "ddd dd/mm/yyyy")
        ElseIf Application.WorksheetFunction.Weekday(DateSerial(Annee, 9, 19), 2) = 7 Then
            Dim_Sept = Format(DateSerial(Annee, 9, 19), "ddd dd/mm/yyyy")
        ElseIf Application.WorksheetFunction.Weekday(DateSerial(Annee, 9, 20), 2) = 7 Then
            Dim_Sept = Format(DateSerial(Annee, 9, 20), "ddd dd/mm/yyyy")
        Else
            Dim_Sept = Format(DateSerial(Annee, 9, 21), "ddd dd/mm/yyyy")
        End If
    End Function
    La formule devient:


    Cdlt

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 101
    Points : 1 621
    Points
    1 621
    Par défaut
    Il y a plus simple:
    calculer le 1er dimanche du mois, et ajouter 14 jours:
    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
    Sub Test
        Dim FirstSunday as Date
        FirstSunday = FirstWeekDayOfMonth(DateSerial(year(Date), 9, 1), vbSunday)
     
        Dim ThirdSunday As Date
        ThirdSunday = DateAdd("d", 14, FirstSunday)
        Debug.Print ThirdSunday
    End Sub
     
    Public Function FirstWeekDay(myDate As Date, DayOfWeek As VbDayOfWeek) As Date
        Dim d As Date
        d = DateSerial(Year(myDate), Month(myDate), 1)
     
        Dim w As Long
        w = WeekDay(d, DayOfWeek)
        If (w <> 1) Then
            d = DateAdd("d", 8 - w, d)
        End If
        FirstWeekDay = d
    End Function

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 762
    Points : 28 621
    Points
    28 621
    Billets dans le blog
    53
    Par défaut
    Bonjour ARTURO83,
    Procédé un peu basique en attendant mieux, le 3ème dimanche de septembre ne peut tomber qu'entre le 15 et le 21 du mois.
    Il y a effectivement mieux et plus concis
    Formule qui calcule le 3ème dimanche de la date du 1er jour du mois en cellule B3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =B3-JOUR(B3)+22-JOURSEM(B3-JOUR(B3)-7)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 055
    Points : 2 518
    Points
    2 518
    Par défaut
    Bonjour

    Encore plus concis avec en A1 le 1er du mois,
    Stéphane

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 762
    Points : 28 621
    Points
    28 621
    Billets dans le blog
    53
    Par défaut
    Bonjour Stéphane,
    Tu as tout à fait raison
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Super, milles merci

    Encore une question

    En vba, comment trouver le lundi de la semaine d'une date ?

    Bonne semaine

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 101
    Points : 1 621
    Points
    1 621
    Par défaut
    C'est quasiment la même chose que precedement, sauf que la date de référence est la date passée en paramètre, et non le 1er du mois:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function DayOfWeek(ByVal dt As Date, ByVal DesiredWeekDay As VbDayOfWeek) As Date
        Dim d As Date
        d = dt
     
        Dim w As Integer
        w = WeekDay(dt, DesiredWeekDay)
        If (w <> 1) Then
            d = DateAdd("d", 8 - w, dt)
        End If
        DayOfWeek = d
    End Function

  9. #9
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Je n'ai pas tout compris, votre code donne le lundi de la semaine suivante

    Ma correction donne le bon résultat, mais c'est un pansement beurk

    Comment corriger le code pour obtenir la date du lundi de la semaine d'une date ?

    Je vous remercie

    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
    Public Function Jour_de_la_semaine(ByVal dt As Date, ByVal DesiredWeekDay As VbDayOfWeek) As Date
    'Dim Test As Date
    '    MsgBox DayOfWeek(ActiveCell, vbMonday)  'vbMonday pour trouver la date du lundi
    'End Sub
    Dim d As Date
    Dim w As Integer
        d = dt
        w = Weekday(dt, DesiredWeekDay)
    '    If (w <> 1) Then
            d = DateAdd("d", 8 - w, dt)
        Jour_de_la_semaine = d
    '    End If
        If Jour_de_la_semaine <> d Then
            Jour_de_la_semaine = d 'si la date initiale correspond à la date recherchée
        Else
            Jour_de_la_semaine = d - 7 '-7 jours pour la semaine en cours
        End If
    End Function

    Pour trouver N° de la semaine iso de la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'N° semaine EURO VBA
    Function WeekNoIso(MyDate As Date) As Integer
      WeekNoIso = Evaluate("isoweeknum(" & CLng(MyDate) & ")")
    End Function

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 762
    Points : 28 621
    Points
    28 621
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comment corriger le code pour obtenir la date du lundi de la semaine d'une date ?
    Si c'est le lundi qui précède une date, j'avais écrit il y a cinq ans un billet sur le sujet Comment avec Excel calculer la date du lundi qui précède et c'est une formule très simple avec en A1, la date dont on cherche le lundi qui précède celle-ci
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Merci pour l'info, mais je cherche le code vba

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 101
    Points : 1 621
    Points
    1 621
    Par défaut
    >< quel est l'abruti chez Microsoft qui a décidé de faire commencer la semaine un dimanche ?
    Ca décale tout ><

  13. #13
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Extraire la date du lundi de la semaine en cours

    vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La_date - (Weekday(La_date, vbMonday) + 6) + 7
    Formule
    Merci à tous pour votre aide

  14. #14
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    Dans la cellule A1, j'ai la formule suivante Via une formule, sans code VBA, comment afficher la date du 3ᵉ dimanche du mois de septembre ?

    Je vous remercie

  15. #15
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 055
    Points : 2 518
    Points
    2 518
    Par défaut
    Bonjour
    il suffit d'adapter la fonction que le propose en #5 pour utiliser le 1er septembre comme base avec DATE(Année;9;1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DATE(A1;9;1)-JOURSEM(DATE(A1;9;1);2)+21
    Stéphane

  16. #16
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    C'est magique, merci à tous

  17. #17
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    J'ai une mise en forme conditionnelle qui fonctionne avec une plage de cellule de référence pour les Ponts et fériés

    J'aimerais remplacer la plage par la colonne d'un tableau, mais je n'arrive pas à trouver la syntaxe de la formule dans les mises en formes conditionnelles

    Qui fonctionne avec une plage de celulle nommée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(Jours_Feries_Ponts;AD$8)>0
    Qui beug avec une référence de tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(TS_Feries_Vacances[Date];AD$8)>0
    Merci pour votre aide

  18. #18
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    En fait, il faut créer un nom de plage qui a pour référence la colonne du tableau et ça fonctionne, Est-ce correct ?

    =NB.SI(Plage_Feries_Vacances;AD$8)>0

    Nom : 2023-03-22_12-13-43.png
Affichages : 154
Taille : 7,0 Ko

  19. #19
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par goninph Voir le message
    En fait, il faut créer un nom de plage qui a pour référence la colonne du tableau et ça fonctionne, Est-ce correct ?

    =NB.SI(Plage_Feries_Vacances;AD$8)>0

    Nom : 2023-03-22_12-13-43.png
Affichages : 154
Taille : 7,0 Ko
    Est-ce correct ? ou pas ?

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

Discussions similaires

  1. VBA - Filtrer sur date de plus de deux mois
    Par SixteenVBA dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/03/2018, 10h10
  2. [XL-2010] vba - extraire date d'une bd
    Par philppe27 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/03/2013, 15h39
  3. Valeur de la date du dernier dimanche du mois
    Par LeSchtroumpf dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/08/2012, 09h37
  4. SQL:Obtenir la date du 3ème dimanche de chaque mois
    Par twixi dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/04/2009, 10h38
  5. Connaitre la date du Xème Dimanche du mois
    Par gpanpan dans le forum VBScript
    Réponses: 7
    Dernier message: 30/10/2008, 18h22

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