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 sur nombre de jours ouvrés


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 104
    Points : 72
    Points
    72
    Par défaut Calcul sur nombre de jours ouvrés
    Bonjour,

    j'aimerais connaitre un moyen de faire un calcul sur un nombre de jours mais ouvrés par rapport à deux dates.
    Je m'explique, j'aimerais faire une condition qui s'exécute lors qu'une comparaison entre deux dates est inférieure à 5jours ouvrés.
    Merci d'avance.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu peux le faire facilement par formule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.JOURS.OUVRES(A1;B1)
    Tu peux coller la formule par le code (date début dans colonne A, fin dans B, résultat dans C)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Cells(NoLig,3).FormulaR1C1 = "=NB.JOURS.OUVRES(RC[-2],RC[-1])"
    Tu tiens à du VBA ? C'est très faisable, mais c'est un peu plus long. Le code avec ou sans les jours fériés
    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
    Sub NbreJourOuvres() ' Appelle "NBJoursOuvres(DateDebut, DateFin)"
    Dim DateDebut As Date, Nbre
    Dim DateFin As Date
        DateDebut = CDbl(DateValue("03/04/2008"))
        DateFin = CDbl(DateValue("12/11/2008"))
        Nbre = NBJoursOuvres(DateDebut, DateFin)
        MsgBox Nbre ' sans déduction des jours fériés
        JourFeries = Array("01/01/2008", "01/05/2008", "08/05/2008", "14/07/2008", "15/08/2008", "01/11/2008", "11/11/2008", "25/12/2008")
        For i = 0 To UBound(JourFeries)
            Debug.Print "Date début " & DateDebut
            Debug.Print "Jour férié " & CDate(JourFeries(i))
            Debug.Print "Date fin " & DateFin
            Debug.Print CDbl(CDate(JourFeries(i))) > DateDebut And CDbl(CDate(JourFeries(i))) < DateFin
            If CDbl(CDate(JourFeries(i))) > DateDebut And CDbl(CDate(JourFeries(i))) < DateFin Then
                'Exclusion jours fériés tombant les samedis ou les dimanches
                If Not Weekday(JourFeries(i)) = 1 And Not Weekday(JourFeries(i)) = 7 Then _
                    Nbre = Nbre - 1
            End If
        Next
        MsgBox Nbre ' jours fériés exclus
    End Sub
    Juste à changer la récupération des dates dans ta feuille de calculs

  3. #3
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    Désolé mon cher Ouskel', mais developpez.com dispose de fonction de jours fériés plus performantes :
    http://access.developpez.com/faq/?pa...NbJourSsFeries

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Désolé, Cafeine, je n'ai pas trouvé (mais je n'ai pas tout lu...)
    Je me doutais bien qu'il esistait quelque chose... Si tu pouvais me le montrer du doigt, j'ajouterais bien le nom du chapitre à ton URL

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

    Et pour moi :

    Les jours non ouvrés sont de trois types, selon le pays concerné :

    - jour(s) "normal/aux" de la semaine non ouvré(s) (qui peut/peuvent différer d'un pays à l'autre)
    - jours "fériés" et non ouvrés, dont la liste (et quelquefois le nombre) est arrêté chaque année et, également, en fonction du pays....
    - jours exceptionnels (non prévus avant le début de l'année) pour faire face à certaines situations exceptionnelles (parmi lesquelles les deuils nationaux)

    Ce qui se traduit par trois données : une donnée des jours "normaux" de la semaine , un array (ou un fichier texte par année) des autres jours, et un array (ou un fichier texte) des jours "complémentaires" non prévus avant le début de l'année...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    vi ucfoutu mais on peut calculer les autres par besoin d'array
    si je te demande si le 3 avril 1902 était le lundi de paques où tu cherches l'information

  7. #7
    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 537
    Points
    5 537
    Par défaut
    Bonjour Random ...

    Mais voyons un peu ...

    Le Lundi de Pâques ? ===>> lié à la pratique d'une religion et uniquement dans certains pays ...

    Et si, moi, je te demande de déterminer si la date évoquée (3 avril 1902) correspondait ou non à la Diwali ?

    Et si j'ajoutais que même la fête nationale (tant celle du pays d'accueil que celle du pays d'envoi) est ouvrée dans certaines circonstances (interroge donc une certaine Commission, à Bruxelles... et tu découvriras pourquoi ...) ...

    Edit : au fait, comment fais-tu, y compris en France seulement, sans lier à des époques et des lieux et toujours en relation avec ces fêtes de Pâques, pour déterminer si le vendredi qui précède le dimanche de Pâques était (ou est) ouvré ou non ? Le vendredi en cause est par exemple non ouvré en Moselle et en Alsace ...
    Car la question posée concerne non les jours fériés mais bien les jours ouvrés ou non ouvrés (et ce n'est pas pareil du tout !...)

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ben diwali ne pose aucun problème c'est une fête lunisolaire comme paques si tu veux un programme de calcul de calcul de diwali je le mettrais bien volontiers à ta disposition, au passage j'y ajouterais le calcul de la date de la foire de pushkar et pourquoi pas un calendrier perpétuel des kumba melas qui rendra surement de grands services aux habitués du forum

    en tout cas diwali se situe début novembre fin octobre et ne saurait se passer
    en avril (peut être holi ?? mais je pencherais pour mars)

    je n'avais pas compris que la question concernait l'inde

    j'y ajouterais le gandhi day 2 octobre et l'independant day 15/08 de mémoire

    namaskar sahib

  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 537
    Points
    5 537
    Par défaut
    Toutes les fêtes que tu veux, Random ... pas de problèmes pour en obtenir la date, lorsqu'elles correspondent à un rythme établi.

    Mais la question est et reste celle des jours ouvrés et pas de la date d'une fête.

    Au fait (pas fête ) : quid de la détermination de ce que la Pentecote est ou non ouvrée, en France, selon le lieu et l'année (voire l'entité concernée...) ?... tu vois bien...


    Velumo .

  10. #10
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 104
    Points : 72
    Points
    72
    Par défaut
    Houla je me rend compte que je suis vraiment novice en VBA, car tout ça devient trop compliqué pour mes compétances.
    Donc admettons que je simplifie, que par jour ouvrés j'entend uniquement jours de la semaine et que je ne tienne pas compte des jours fériés.
    Je dois absolument passer par du code VBA, pour des raisons un peu longue à expliqué, mais ce calcul du nombre de jours ouvrés entre deux dates n'est pas un but en soit, mais une condition qui s'intègre dans une macro assez conséquente mais qui n'intervient que lorsque d'autre conditions sont remplies.

    J'en viens à la question :
    est ce que la fonction NBJoursOuvres est une fonction VBA ou une procédure que je dois coder moi même?

    Merci d'avance.

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Weekday est une fonction VBA, jours de la semaine desquels il faut retirer lel jour de la semaine N° 7 (le samedi) et le 1 (Le dimanche)
    Sinon, je ne crois pas que Jourouvrés ait une correspondance ni qu'on puisse l'utiliser avec WorksheetFunction.
    Si j'ai tort, je compte sur les érudits de tout à l'heure pour me contredire

  12. #12
    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 537
    Points
    5 537
    Par défaut
    Bonjour, Ousk,

    Avant de répondre, j'ai tenu à rendre une petite visite aux divers commerçants de mon quartier (même pas la France... même pas la ville entière... juste mon quartier...)

    On y trouve (comme partout ou presque) des boulangers, des restaurateurs, des coiffeurs...etc...

    Ils ont à gérer et leur comptabilité et leur personnel...(comme chacun).

    Hé bé !

    1) leurs jours ouvrables sont différents entre eux (et pas forcément hors samedi et hors dimanche)
    2) leurs jours ouvrables dépendent des époques de l'année, pour certains d'entre eux (nous sommes dans une région touristique)
    3) les jours ouvrables, pour d'autres, sont définis par contrat et ... par employé ... !!!

    et j'en passe ... et des meilleures... (ce serait trop long)

    Ouille !

    Je suis alors allé "interviewer" du moins "aléatoire" (fonction publique) :

    - enseignement : ouille ouille : dépend des années (question du mercredi aujourd'hui, du jeudi auparavant, du samedi demain ...)
    - gendarmerie nationale : ouille ouille ouille ouille !!!! mieux vaut ne pas se lancer dans les 3 huit... on n'en finirait pas ...

    j'ai abandonné rapidement et en suis arrivé à la conclusion selon laquelle ce que j'ai dit plus haut (et qui paraissait déjà strict) n'est finalement pas suffisamment strict !!! Il faudrait compléter par encore d'autres tables, selon le cas (contrat/employé ici, saisons là, époques encore ici, etc...)

    et je ne parle même pas de ceux qui ont consenti (because religion pratiquée) telle ou telle autre différence par rapport aux autres employés !...

    Vala !

    Edit :Ah oui (j'oubliais) : j'ai dit à l'un d'entre eux :
    "mais voyons donc ... vous ne pouvez pas faire en sorte de vous "harmoniser" avec les fonctions prédéfinies de certains logiciels ?"

    Et il m'a répondu :

    "et vous ? vous ne feriez pas mieux de regarder pousser le gazon ?"

    Et... ma foi... j'ai trouvé qu'il avait assez raison de penser qu'il n'était pas au service de l'informatique, mais qu'il attendait de cette dernière qu'elle soit à ... SON service ...

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par ousk'
    Weekday est une fonction VBA, jours de la semaine desquels il faut retirer le jour de la semaine N° 7 (le samedi) et le 1 (Le dimanche)
    Avec ça, je pense que rodrigue62 peut adapter à son besoin... Si lundi => 2, mardi => 3, etc.
    Pour le travail de nuit, là je te laisse poursuivre tes recherches

  14. #14
    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 537
    Points
    5 537
    Par défaut
    Attends, attends ...

    Règle également l'histoire des époques de l'année et des contrats/employé ... et on verra si tu en arrives ou non à l'utilisation de tables (voire par employé !)

    Vois également mon édit du message précédent ...

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    à l'attention de ucfoutu tu aurais mieux fait de demander à google plutot qu'à ton charcutier

    JOURS OUVRABLES : l'ensemble des jours calendrier, à l'exclusion des dimanches et jours fériés légaux. Si le délai exprimé en jours ouvrables expire un samedi, il est prolongé jusqu'au jour ouvrable suivant.

    tu parles de jours ouvrés qui effectivement varient selon les us et coutumes organisations, oserais je dire selon la liberté d'esprit ?

    les jours ouvrables sont définis juridiquement

    pour l'ensemble weekday accepte deux paramètres date et en optional
    Firstdayofweek ce qui permet de choisir son premier jour

  16. #16
    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 537
    Points
    5 537
    Par défaut
    Bonjour Random,

    Je ne sais pas ce que j'aurais mieux fait de faire...

    J'ai fait ceci, par contre : lire la demande :


    Citation Envoyé par rodrigue62 Voir le message
    Bonjour,

    j'aimerais connaitre un moyen de faire un calcul sur un nombre de jours mais ouvrés par rapport à deux dates.
    Je m'explique, j'aimerais faire une condition qui s'exécute lors qu'une comparaison entre deux dates est inférieure à 5jours ouvrés.
    Merci d'avance.

    J'ai mal lu ?

  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il y a un post
    http://www.developpez.net/forums/sho...d.php?t=403854

    sur les jours ouvrés tu pourrais y regarder

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/12/2023, 19h54
  2. [Dates] Calcul du nombre de jours ouvrés entre 2 dates
    Par Pokerstar dans le forum Langage
    Réponses: 6
    Dernier message: 16/07/2011, 16h02
  3. Réponses: 5
    Dernier message: 17/03/2010, 17h11
  4. Réponses: 1
    Dernier message: 10/08/2006, 14h43

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