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 :

weekend et jours fériés dans les dates VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 80
    Points : 46
    Points
    46
    Par défaut weekend et jours fériés dans les dates VBA
    bonjour,

    Est-ce que quelqu'un sait comment savoir si une date est un jour férié ou samedi/dimanche dans VBA

    merci

  2. #2
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Quelques sujets parlent déja des jours fériés :
    http://www.developpez.net/forums/d57...s-jour-feries/

    La FAQ pour les jours ouvrables :
    http://access.developpez.com/faq/?pa...nip#NbJourOuvr

    Et ici pour le weekend :
    http://www.developpez.net/forums/d54...date-week-end/

    Tu devrais avoir quelques pistes avec ceci. Et sinon, propose ton code commencé!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 58
    Points : 38
    Points
    38
    Par défaut
    Salut,

    Je ne pense pas que Vb en soit capable puisque les jours fériés ne sont pas les mêmes pour tous les pays.
    Par contre si ce n'est que pour une période définie tu peux très bien entrer les dates fériées dans un tableau et réaliser des tests.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 6
    Points
    6
    Par défaut Weekday
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function IsWeekend(InputDate As Date) As Boolean
        Select Case Weekday(InputDate)
            Case vbSaturday, vbSunday
                IsWeekend = True
            Case Else
                IsWeekend = False
        End Select
    End Function

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le fête catholique sont toujours fixé en fonction de pâque;
    Aïd, Yom Kipour je sais pas.
    pour les fête nationale le 14 juillet, le 4 juillet et autre il faut te faire un tableau selon le pays!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim FerierNationeau()
    FerierNationeau = Array(Array("05-08", "08-14"), Array("01-01", "08-04"))
    Debug.Print "Fête Nationale Française : " & CDate(Format(Date, "yyyy-") & FerierNationeau(0)(1))
    Debug.Print "Fête Nationale Amméricaine : " & CDate(Format(Date, "yyyy-") & FerierNationeau(1)(1))
    End Sub
    Dernière modification par Invité ; 25/02/2015 à 10h08.

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, et une de plus pour la route .....
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Option Explicit
     
    Dim JFeries(11) As Long
     
    Private Sub JoursFeries(An As Long)
    Dim Nb As Long, Epacte As Long
    Dim PLune As Date, LPaques As Date
    Dim i As Long, j As Long, k As Long, tmp As Long
     
        '   Calcul du Lundi de Pâques
        Nb = (An Mod 19) + 1
        '   Différence entre calendrier solaire et lunaire
        Epacte = (11 * Nb - (3 + Int(2 + Int(An / 100)) * 3 / 7)) Mod 30
        PLune = DateSerial(An, 4, 19) - ((Epacte + 6) Mod 30)
        If Epacte = 24 Then PLune = PLune - 1
        '   Valable entre 1900 et 2199 : on verra bien ?
        If Epacte = 25 And (An >= 1900 And An < 2200) Then PLune = PLune - 1
        '   Lundi de Pâques
        LPaques = PLune - Weekday(PLune) + vbMonday + 7
     
        Erase JFeries
     
        '   Jour de l'An
        JFeries(1) = DateSerial(An, 1, 1)
        '   Paques
        JFeries(2) = LPaques
        '   Ascension
        JFeries(3) = LPaques + 38
        '   Pentecôte
        JFeries(4) = LPaques + 49
        '   Fete du travail
        JFeries(5) = DateSerial(An, 5, 1)
        '   Anniversire 1945
        JFeries(6) = DateSerial(An, 5, 8)
        '   Fete Nationale
        JFeries(7) = DateSerial(An, 7, 14)
        '   Assomption
        JFeries(8) = DateSerial(An, 8, 15)
        '   Toussaint
        JFeries(9) = DateSerial(An, 11, 1)
        '   Armistice 1918
        JFeries(10) = DateSerial(An, 11, 11)
        '   Noel
        JFeries(11) = DateSerial(An, 12, 25)
     
        '   Tri Tableau JFeries()
        For i = LBound(JFeries) To UBound(JFeries)
            j = i
            For k = j + 1 To UBound(JFeries)
                If JFeries(k) <= JFeries(j) Then j = k
            Next k
            If i <> j Then
                tmp = JFeries(j)
                JFeries(j) = JFeries(i)
                JFeries(i) = tmp
            End If
        Next i
    End Sub

  7. #7
    Invité
    Invité(e)
    Par défaut
    Regarde le fichier joint!
    Fichiers attachés Fichiers attachés

  8. #8
    Candidat au Club
    Homme Profil pro
    Agent technique de laboratoire
    Inscrit en
    Mai 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Agent technique de laboratoire
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, et une de plus pour la route .....
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Option Explicit
     
    Dim JFeries(11) As Long
     
    Private Sub JoursFeries(An As Long)
    Dim Nb As Long, Epacte As Long
    Dim PLune As Date, LPaques As Date
    Dim i As Long, j As Long, k As Long, tmp As Long
     
        '   Calcul du Lundi de Pâques
        Nb = (An Mod 19) + 1
        '   Différence entre calendrier solaire et lunaire
        Epacte = (11 * Nb - (3 + Int(2 + Int(An / 100)) * 3 / 7)) Mod 30
        PLune = DateSerial(An, 4, 19) - ((Epacte + 6) Mod 30)
        If Epacte = 24 Then PLune = PLune - 1
        '   Valable entre 1900 et 2199 : on verra bien ?
        If Epacte = 25 And (An >= 1900 And An < 2200) Then PLune = PLune - 1
        '   Lundi de Pâques
        LPaques = PLune - Weekday(PLune) + vbMonday + 7
     
        Erase JFeries
     
        '   Jour de l'An
        JFeries(1) = DateSerial(An, 1, 1)
        '   Paques
        JFeries(2) = LPaques
        '   Ascension
        JFeries(3) = LPaques + 38
        '   Pentecôte
        JFeries(4) = LPaques + 49
        '   Fete du travail
        JFeries(5) = DateSerial(An, 5, 1)
        '   Anniversire 1945
        JFeries(6) = DateSerial(An, 5, 8)
        '   Fete Nationale
        JFeries(7) = DateSerial(An, 7, 14)
        '   Assomption
        JFeries(8) = DateSerial(An, 8, 15)
        '   Toussaint
        JFeries(9) = DateSerial(An, 11, 1)
        '   Armistice 1918
        JFeries(10) = DateSerial(An, 11, 11)
        '   Noel
        JFeries(11) = DateSerial(An, 12, 25)
     
        '   Tri Tableau JFeries()
        For i = LBound(JFeries) To UBound(JFeries)
            j = i
            For k = j + 1 To UBound(JFeries)
                If JFeries(k) <= JFeries(j) Then j = k
            Next k
            If i <> j Then
                tmp = JFeries(j)
                JFeries(j) = JFeries(i)
                JFeries(i) = tmp
            End If
        Next i
    End Sub
    Comment exécute-t-on le code ? Je ne comprends pas vraiment ce qui bloque.

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, cette procédure permet de remplir un tableau JFeries pour l'année x.
    Ne tient pas compte des jours fériés supplémentaires en Alsace Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle Calédonie, Polynésie, Réunion, Wallis Futuna contrairement à Calendrier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Tst()
    Dim i As Long
        JoursFeries 2018
        For i = 1 To 11
            Feuil1.Cells(i, 1) = JFeries(i)
        Next i
    End Sub

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    J'avais posté ça il y a quelques années . Pas de code VBA, que des formules. Par contre il n'y a que les jours fériés français.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  11. #11
    Candidat au Club
    Homme Profil pro
    Agent technique de laboratoire
    Inscrit en
    Mai 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Agent technique de laboratoire
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, cette procédure permet de remplir un tableau JFeries pour l'année x.
    Ne tient pas compte des jours fériés supplémentaires en Alsace Moselle, Guadeloupe, Guyane, Martinique, Mayotte, Nouvelle Calédonie, Polynésie, Réunion, Wallis Futuna contrairement à Calendrier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Tst()
    Dim i As Long
        JoursFeries 2018
        For i = 1 To 11
            Feuil1.Cells(i, 1) = JFeries(i)
        Next i
    End Sub
    Je découvre peu à peu le langage informatique. Je trouve ça génial.

    Je ne comprenais pas pourquoi ne n'arrivais pas à lancer la procédure ""Private Sub JoursFeries(An As Long)"". Mais c'est seulement parce qu'il faut assigner une valeur à la variable "An" déclarée dans la parenthèse. J'essayais de définir cette dernière dans la procédure elle même mais ça ne fonctionnait pas. J'en apprends chaque jour un peu plus. Mais j'ai de grosses lacunes encore sur les classes. Pas vraiment intuitif. Merci en tout cas.

  12. #12
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Pour tester ce genre de function qui attendent un ou plusieurs paramètres, tu peux créer une petite procédure (Sub),

    Exemple

    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
    Sub TestFunc()
    Dim yFeries As Byte
    'On execute la fonction pour connaitre les Jours Feries de 2018
    'Cette fonction renseigne le tableau JFeries
    JoursFeries 2018
     
    'On affiche le contenu du tableau JFeries dans la feuil1
    With Feuil1.Range("A1")
        .Value = "Les jours fériés"
        For yFeries = 1 To 11
            Feuil1.Range("A1").Offset(yFeries).Value = JFeries(yFeries)
        Next
     
        'On change le format de cellule pour afficher les dates
        .Offset(1).Resize(11, 1).NumberFormat = "m/d/yyyy"
     
        'On ajuste la largeur de la colonne
        .EntireColumn.AutoFit
     
    End With
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. Coloriser les jours fériés dans un calendrier en console
    Par alain35 dans le forum Général Python
    Réponses: 0
    Dernier message: 23/12/2016, 10h03
  2. Inversion (mois et jour) dans les dates
    Par hortencia dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/02/2012, 19h03
  3. Les jours fériés dans un contrôle CAlendar
    Par zooffy dans le forum ASP.NET
    Réponses: 0
    Dernier message: 15/02/2010, 15h51
  4. INversement dasn mois et jour dans les dates
    Par HULK dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 10/07/2007, 10h27
  5. Extraire les semaines dans les dates
    Par LE CORRE dans le forum C
    Réponses: 4
    Dernier message: 22/02/2006, 12h34

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