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 : Fonction calcul du nombre de samedi dimanche et férié


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut VBA : Fonction calcul du nombre de samedi dimanche et férié
    Bonjour,
    Pour calculer le nombre de samedi dimanche et jour férié, j'essaye d'utiliser une fonction qui se trouve dans un module.
    Dans le fichier ci joint, ma fonction bloque sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For I = vDateD To vDateF
    Je dois avoir un problème de format,mais je n'arrive pas à trouver.
    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    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 928
    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 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tes explications sont très succinctes. La première ligne d'une boucle dont tu n'expliques même pas ce que représentent les variables de celles-ci.
    Si les dates sont de véritables dates pour excel, tu pourrais connaître le nombre de samedi et dimanche avec une formule de la catégorie Base de données

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

    I doit être une variable de type date au lieu d'integer.

    Cordialement.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 238
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    J'ai changé le type de variable et je l'ai passé en Date.
    ça fonctionne.
    Par contre si je sélectionne dans l'USF du 01/04/2015 au 30/04/2015, je devrais avoir 8 samedis et dimanches plus 1 jour férié( le lundi de pâques),
    mais je n'obtiens que 8 samedi, dimanche et jours fériés
    Merci pour votre aide

  5. #5
    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, qqch comme ceci te renvoie bien : 8 samedi/dimanche et 1 férié
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Option Explicit
     
    Dim JFeries(10) As Long
     
    Sub Tst()
    Dim dDeb As Date, dFin As Date
    Dim i As Long, samdim As Long, ferie As Long
        samdim = 0: ferie = 0
        dDeb = CDate(#4/1/2015#)
        dFin = CDate(#4/30/2015#)
        JoursFeries (2015)
        For i = dDeb To dFin
            If Weekday(i, vbMonday) > 5 Then samdim = samdim + 1
            If EstFerie(i) Then ferie = ferie + 1
        Next i
        Debug.Print samdim, ferie
    End Sub
     
    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(0) = DateSerial(An, 1, 1)
        '   Paques
        JFeries(1) = LPaques
        '   Ascension
        JFeries(2) = LPaques + 38
        '   Pentecôte
        JFeries(3) = LPaques + 49
        '   Fete du travail
        JFeries(4) = DateSerial(An, 5, 1)
        '   Anniversire 1945
        JFeries(5) = DateSerial(An, 5, 8)
        '   Fete Nationale
        JFeries(6) = DateSerial(An, 7, 14)
        '   Assomption
        JFeries(7) = DateSerial(An, 8, 15)
        '   Toussaint
        JFeries(8) = DateSerial(An, 11, 1)
        '   Armistice 1918
        JFeries(9) = DateSerial(An, 11, 11)
        '   Noel
        JFeries(10) = 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
     
    Private Function EstFerie(ByVal dDate As Date) As Boolean
    Dim i As Long
        EstFerie = False
        For i = LBound(JFeries) To UBound(JFeries)
            If dDate = JFeries(i) Then
                EstFerie = True
                Exit Function
            End If
        Next i
    End Function

  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 928
    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 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le nombre de jours entre deux dates peut se faire par une simple soustraction de la date la plus récente avec la date la plus ancienne.
    Ainsi si A2=samedi 4/4/2015 et B2 samedi 11/4/2015 la formule =B2-A2 reverra 7 (il suffira donc d'ajouter éventuellement 1)
    La formule NB.JOURS.OUVRES calcul le nombre de jours ouvrés (sans les samedi et dimanche + éventuellement les jours fériés si le 3ème argument est rempli) soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.JOURS.OUVRES(A2;B2;pJFerie)
    renverra 4 (où pJFerie est la plage contenant les jours fériés)
    Donc la formule ci-dessous renverra le nombre de samedi; dimanche et jours fériés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =B2-A2-NB.JOURS.OUVRES(A2;B2;pJFerie)
    En VBA il suffit d'utiliser la fonction EVALUATE ou utiliser la Application.WorksheetFunction
    Exemple avec Evaluate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox Evaluate("=B2-A2-NETWORKDAYS(A2,B2,pJFerie)")

Discussions similaires

  1. [XL-2010] Calcul du nombre de 2 dimanches consécutifs travaillés ?
    Par novice06 dans le forum Excel
    Réponses: 3
    Dernier message: 02/09/2014, 14h50
  2. [CR XI] Calcul ne nombre de samedi et dimanche pour une période
    Par 007max31 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 26/08/2009, 16h07
  3. [Dates] Fonction calcule le nombre de demi-heures
    Par bigltnt dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2007, 15h31
  4. Réponses: 4
    Dernier message: 11/06/2006, 12h05
  5. [Optimisation][Fonction]calcul du nombre de jours ...
    Par m-mas dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/10/2005, 14h39

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