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 heures fériés [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    sécurité
    Inscrit en
    Septembre 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 197
    Par défaut Calcul heures fériés
    Bonjour à tous

    Je me rapproche de vous (personnes pro) pour une formule de calcul concernant les heures des jours fériés travaillés.
    Je rame, je rame !!!

    Dans ma feuille en colonne
    B : il y à les dates (du 1 au 31)
    E : heure début
    F : heure fin
    AB: total heure jour féries (seulement JF)

    Mon souhait est d'avoir les heures féries seulement du jour car le début horaire peut commencer la vieille ou finir le lendemain comme par ex:

    date 7 mai
    début 21h
    fin 5h
    hr férié 5h (puisqu'à partir de 24h c'est le 8 mai donc jour férié)

    J'ai bien une formule qui correspond à cela, adapté pour les dimanches qui fonctionne bien donc j'aimerai s'avoir si il était possible de l'adapter pour les JF ? (que je n'arrive pas à faire)

    Ma formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(G10>H10)*((JOURSEM(B10)=7)*H10+(JOURSEM(B10)=1)*(1-G10))+(G10<H10)*(JOURSEM(B10)=1)*(H10-G10)
    Merci pour votre aide

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    sécurité
    Inscrit en
    Septembre 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 197
    Par défaut
    personne veut me donner un coup de pouce !!!

    Je cherche depuis ce matin mais ça veux pas, heureusement pour me réconforter je trouve d'autres formules, ouufff.

    Cordialement

  3. #3
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut calcul heures feriés
    bonjour,

    ou est le problème ?

    Si en colonne B tu as les jours du mois alors, pour reprendre ton exemple, les écritures passées doivent être:

    jour début fin
    7 21h 24h
    8 0h 5h donc AB connu sur la base d'une liste des jours fériés

    me trompe-je ?

    Cordialement.

  4. #4
    Membre confirmé
    Homme Profil pro
    sécurité
    Inscrit en
    Septembre 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 197
    Par défaut
    bonjour nibledispo

    D'abord merci de ta réponse puis de t'interesser a mon soucis qui est certainement simple mais la pour moi je nage, je nage sur le sable même !!! lol

    Le problème c'est que je n'arrive pas à construire ma formule pour calculer seulement les heures de Jr Fér malgré le modèle que j'ai pour les w.e (dans 1er post)
    Sachant que j'ai listé les jours fériés et sont nommés "Feries"

    Merci pour vos réponses

    Cordialement

  5. #5
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut calcul heures feriés
    re.....,

    si effectivement le mot férié figure dans une colonne alors quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    dim cellule as object
    cellulefin = range(" **65000").end(xlup).select (** = lettre de la colonne)
    heure = 0 : totalheure = 0
    'sélection de la colonne contenant le mot ferié
    range(celluledebut:cellulefin).select 
    for each cellule in selection 
         if cellule = "ferié" then
            heure = cellule.offset(0,4)-cellule.offset(0,3) ' l'offset doit être établi par rapport à la  colonne selection bien entendu
            totalheure= totalheure + heure
         end dif
    next
    non testé.

    cordialement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Un autre quidam du forum a posté un cahier des charges similaire.
    Il n’a pas répondu à la solution proposée, mais elle peut, avec des aménagements, t’inspirer.
    Voici le lien : http://www.developpez.net/forums/d13...d/#post7225668
    La formule est en colonne I
    Lis bien les postes pour comprendre le contexte et si tu pense que c’est jouable adapte la.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Type MyDate
        Deb As Date
        Fin As Date
        Dur As Long
        FinJour As Integer
    End Type
    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
    Private Function Ferie(UneDate As Long, Optional DimanchesOuiNon As Boolean) As Boolean
    ' Par défaut la fonction ne considère pas que les Dimanche de Pâques
    ' et de Pentecôte sont fériés
    ' il suffit de renseigner l'argument DimanchesOuiNon à True à l'appel de la fonction
    ' pour les considérer comme fériés
    If IsSamediDimange(UneDate) Then
        Ferie = True
        Exit Function
    End If
    If IsNull(DimanchesOuiNon) Then DimanchesOuiNon = False
     
    Dim JFF ' table des fériés fixes (jours)
    Dim MFF ' table des fériés fixes (mois)
    JFF = Array(1, 1, 8, 14, 15, 1, 11, 25)
    MFF = Array(1, 5, 5, 7, 8, 11, 11, 12)
    Dim J As Long
    Ferie = False
    ' Recherche dans la table des jours fériés fixes
    For J = 0 To 7
    If Day(UneDate) = JFF(J) And Month(UneDate) = MFF(J) Then
    Ferie = True
    Exit Function
    End If
    Next J
    Dim FM ' contient les dates des lundis de Paques
    'FM = Array(38824, 39181, 39531, 39916, 40273, 40658, 41008, _
    '41365, 41750, 42100, 42457, 42842, _
    '43192, 43577, 43934, 44291, 44675, _
    '45026, 45383, 45768, 46118, 46475, _
    '46860, 47210, 47595)
     
    FM = Paque(Year(UneDate))
    ' Recherche si la date est un lundi de paques
    ' ou jeudi de l'ascension
    ' ou lundi de pentecôte
    'For J = 0 To 24 ' à changer si vous allez au delà de 2030
    If (UneDate = FM) Or (UneDate = FM + 39) Or (UneDate = FM + 50) Then
    Ferie = True
    Exit Function
    End If
    ' si DimanchesOuiNon est vrai
    ' on teste les dimanches de Pâques et Pentecote
     
     
    If DimanchesOuiNon Then
    If (UneDate = FM - 1) Or (UneDate = FM + 48) Then
    Ferie = True
    Exit Function
    End If
    End If
    'Next J
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Function IsSamediDimange(J) As Boolean
    If Weekday(J) = 1 Then IsSamediDimange = True
    If Weekday(J) = 7 Then IsSamediDimange = True
    End Function
    Private Function MDDIF(A, B) As Long
    MDDIF = DateDiff("d", A, B)
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Function MuMod(V, D)
    MuMod = Int(V / D)
    End Function
    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
    Private Function Paque(Annee As Integer) As Date
    Dim A, B, C, D, E, F, G, H, I, J, K, l, M, N, O
    C = Annee - 1900
    D = C Mod 19
    E = (D * 7) + 1
    F = Int(E / 19)
    G = 11 * D - F + 4
    H = G Mod 29
    I = Int(C / 4)
    J = C - H + I + 31
    l = J Mod 7
    K = J Mod 7
    l = 25 - H - K
    M = CDate("31/03/" & Annee)
    Paque = M + l
    End Function
    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
    Public Function NbHeur(D, F) As String
    Dim H As Long
    Dim M As Long
    Dim EcarJ As Long
    Dim EcarMin As Long
    Dim ScanJ As Long
    Dim Normal As MyDate
    Dim Lundi As MyDate
    Dim Vendredi As MyDate
    NbHeur = ""
    Normal.Deb = "00:00:00": Normal.Fin = " 00:00:00": Normal.FinJour = 1: Normal.Dur = DateDiff("n", Normal.Deb, CDate(Normal.Fin) + Normal.FinJour)
    Lundi.Deb = "00:05:00": Lundi.Fin = " 00:00:00": Lundi.FinJour = 1: Lundi.Dur = DateDiff("n", Lundi.Deb, CDate(Lundi.Fin) + Lundi.FinJour)
    Vendredi.Deb = "00:00:00": Vendredi.Fin = " 22:00:00": Vendredi.FinJour = 0: Vendredi.Dur = DateDiff("n", Vendredi.Deb, CDate(Vendredi.Fin) + Vendredi.FinJour)
    EcarJ = DateDiff("d", CDate(D), CDate(F))
    M = 0
    For ScanJ = 0 To EcarJ
        If Ferie(CDate(D) + ScanJ) = False Then
            Select Case Day(CDate(D) + ScanJ)
                Case 2
                    M = M + Lundi.Dur
                Case 6
                    M = M + Vendredi.Dur
                Case Else
                    M = M + Normal.Dur
            End Select
            Select Case Day(CDate(D) + ScanJ)
                Case 2
                    If CDate(Format(CDate(D) + ScanJ, "dd/mm/yyyy")) = Format(CDate(D), "dd/mm/yyyy") And CDate(Format(D, "hh:mm:nn")) > Lundi.Deb Then M = M - DateDiff("n", Lundi.Deb, CDate(Format(D, "hh:mm:nn")))
                    If CDate(Format(CDate(D) + ScanJ, "dd/mm/yyyy")) = Format(CDate(F), "dd/mm/yyyy") And CDate(Format(F, "hh:mm:nn")) < CDate(Lundi.Fin) + Lundi.FinJour Then M = M - DateDiff("n", CDate(Format(F, "hh:mm:nn")), CDate(Lundi.Fin) + Lundi.FinJour)
     
                Case 6
                      If CDate(Format(CDate(D) + ScanJ, "dd/mm/yyyy")) = Format(CDate(D), "dd/mm/yyyy") And CDate(Format(D, "hh:mm:nn")) > Vendredi.Deb Then M = M - DateDiff("n", Vendredi.Deb, CDate(Format(D, "hh:mm:nn")))
                      If CDate(Format(CDate(D) + ScanJ, "dd/mm/yyyy")) = Format(CDate(F), "dd/mm/yyyy") And CDate(Format(F, "hh:mm:nn")) < CDate(Vendredi.Fin) + Vendredi.FinJour Then M = M - DateDiff("n", CDate(Format(F, "hh:mm:nn")), CDate(Vendredi.Fin) + Vendredi.FinJour)
                Case Else
                    If CDate(Format(CDate(D) + ScanJ, "dd/mm/yyyy")) = Format(CDate(D), "dd/mm/yyyy") And CDate(Format(D, "hh:mm:nn")) > Normal.Deb Then M = M - DateDiff("n", Normal.Deb, CDate(Format(D, "hh:mm:nn")))
                    If CDate(Format(CDate(D) + ScanJ, "dd/mm/yyyy")) = Format(CDate(F), "dd/mm/yyyy") And CDate(Format(F, "hh:mm:nn")) < CDate(Normal.Fin) + Normal.FinJour Then M = M - DateDiff("n", CDate(Format(F, "hh:mm:nn")), CDate(Normal.Fin) + Normal.FinJour)
            End Select
        End If
    Next
     
    If M > 0 Then
     
        H = (M - (M Mod 60)) / 60
        M = M Mod 60
        NbHeur = Format(H, "00H:") & Format(M, "00M")
    End If
     
    End Function

  7. #7
    Membre confirmé
    Homme Profil pro
    sécurité
    Inscrit en
    Septembre 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 197
    Par défaut total hr jour particulier
    Bonjour à tous

    Je viens chercher un peu d'aide auprès de vous qui avez beaucoup plus de noronnes que moi .

    Serait-il possible de réssoudre mon soucis de formule sous excel concernant le total hrs d'un jour particulier (ex fériés) entre minuit et 24h.

    J'ai bien une formule pour les dimanches qui marche très bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(F4>G4)*((JOURSEM(C4)=7)*G4+(JOURSEM(C4)=1)*(1-F4))+(F4<G4)*(JOURSEM(C4)=1)*(G4-F4)
    Donc pour les jours fériés je me suis basé sur cette formule mais ça ne marche pas (ça compte les hr du lendemain après 24h d'un jour férié) et moi je souhait les hr du jour férié jusqu'à 24h.
    Mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(F4>G4)*((NON(ESTNA(EQUIV(ENT(C4);Feries;0)))*G4+(NON(ESTNA(EQUIV(ENT(C4);Feries)))=1)*(1-F4))+(F4<G4)*(NON(ESTNA(EQUIV(ENT(C4);Feries)))=1)*(G4-F4))
    Je pense qu'il n'y à certainement pas grand chose à modifier mais là je plante.

    mon tableau
    C4 = date
    F4 = heure début
    G4 = heure fin

    dans l'attente je continu de chercher, à bientôt.

    Cordialement

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

Discussions similaires

  1. Calcul heure dans une requête
    Par Accessbeotien dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/09/2007, 10h12
  2. bouton d'impression + pb calcul heures
    Par brewen dans le forum Excel
    Réponses: 6
    Dernier message: 29/07/2007, 00h51
  3. [Formule] Calcul Heures AVEC EXCEL
    Par JLDEB dans le forum Excel
    Réponses: 2
    Dernier message: 16/04/2007, 17h08
  4. Calcul Heure format "hh:mm"
    Par bnisaid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/03/2007, 10h56
  5. Calcul heure UCT par rapport à heure locale
    Par bobic dans le forum Oracle
    Réponses: 1
    Dernier message: 11/05/2006, 22h45

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