Calcul jour ouvre [Résolu]

Signaler
Messages postés
5
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
8 décembre 2007
-
Messages postés
5
Date d'inscription
lundi 29 octobre 2007
Statut
Membre
Dernière intervention
20 mai 2009
-
Bonjour
Je souhaite développer en VBA une fonction me permettant de déterminer la date du 30 eme jour ouvré (samedi compris) précédent une date donnée.Ceci a pour but de gérer le plafond de paiement d'une carte bancaire. J'ai récupéré un tableau Excel contenant les jours fériés.
Je compte sur vous pour m'aider. Je préciseque je cherche un algorithme autour de la macro NB.JOURS.OUVRES

11 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
c'est normal que personne ne passe si tu valides toutes les réponses que te sont données.

ne valide que la ou les réponses qui résolvent ton problème

c'est corrigé
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour à tous,

Le script ci-dessous n'est ni du VBA, ni VB6, mais l'algo est là !
Adaption de la fonction IsFerie d'un script vb6, trouvé sur le forum [algo d'Oudin]

Option Explicit

MsgBox AfficheJour("15/05/2007"),,"30ème jour ouvré avant"

Private Function AfficheJour(DateDeb)
    DateDeb = CDate(DateDeb)-1
    Dim DateLue, compteur, result, cpt, NbJourOuvre
    NbJourOuvre = 30 'nombre de jours ouvrés

    Do
   
       DateLue = DateSerial(Year(DateDeb), Month(DateDeb), Day(DateDeb)-cpt)
      
       If IsFerie(DateLue) = False Then
          result = compteur+1 &vbTab& FormatDateTime(DateLue,1) &vbCr& result
         
          If compteur = NbJourOuvre-1 Then
             AfficheJour = DateSerial(Year(DateDeb), _
                                      Month(DateDeb), _
                                      Day(DateDeb)-cpt) & _
                           vbCr&vbcr& "Liste complète" &vbCr&vbCr& result
             Exit Do
          End If
          compteur = compteur + 1
         
       End If
       cpt = cpt + 1
      
    Loop
End Function

Private Function IsFerie(datetoanalyse)                 'As Date) As Boolean
    Dim jour, mois, annee, Ascension, Pentecote, Paques 'As Integer
    Dim G, C, C_4, E, H, k, P, Q, i, B, J1, J2          'As Integer

    If DatePart("w", CDate(datetoanalyse)) = vbSunday Then
       IsFerie = True : Exit Function
    End if
   
    jour = Day(datetoanalyse)
    mois = Month(datetoanalyse)
    annee = Year(datetoanalyse)
    
    'Calcul des jours fériés "non fixes" (Lundi de Pâques, Ascension, Pentecôte)
    'Lundi de Pâques (Algorithme de Oudin)
    G = (annee Mod 19)
    C = Fix(annee / 100)
    C_4 = Fix(C / 4)
    E = Fix((8 * C + 13) / 25)
    H = Fix((19 * G + C - C_4 - E + 15) Mod 30)
    k = Fix(H / 28)
    P = Fix(29 / (H + 1))
    Q = Fix((21 - G) / 11)
    i = ((k * P * Q - 1) * k + H)
    B = (Fix(annee / 4) + annee)
    J1 = (B + i + 2 + C_4 - C)
    J2 = (J1 Mod 7)
   
    'Ici on obtient le jour de Pâques (dimanche),
    'on lui ajoute 1 pour avoir le jour du lundi
    paques = 28 + i - J2 + 1

    'Ascension
    Ascension = paques - 23

    'Pentecôte
    Pentecote = paques - 12

    Select Case mois
        Case 1
            'Jour de l'An            If jour 1 Then IsFerie True
        Case 3
            'Pâques si paques<=31
            If paques <= 31 Then                If jour paques Then IsFerie True
            End If
        Case 4
            'Pâques si paques>31
            If paques > 31 Then
               paques = paques - 31               If jour paques Then IsFerie True
            End If
        Case 5
            'Fête du travail, Victoire, Ascension et Pentecôte            If jour 1 Or jour 8 Or jour = Ascension Or _                jour Pentecote Then IsFerie True
        Case 7
            'Fête Nationale            If jour 14 Then IsFerie True
        Case 8
            'Assomption            If jour 15 Then IsFerie True
        Case 11
            'Toussaint et Armistice            If jour 1 Or jour 11 Then IsFerie = True
        Case 12
            'Noël            If jour 25 Then IsFerie True
        Case Else
             IsFerie = False
    End Select
End Function

jean-marc
Messages postés
94
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
16 janvier 2008

Messages postés
133
Date d'inscription
dimanche 23 juin 2002
Statut
Membre
Dernière intervention
3 janvier 2015
3
Salut vu que tu desire travailler en vbA je te dirige vers un site qui est aussi tres bien fait pour trouver des infos comme ici
c'est http://www.excelabo.net/ en cherchant sur le site tu as des choses sur les jours ouvrés bonne continuation
Messages postés
5
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
8 décembre 2007

Je voudrais une aide au niveau algorythmique
Messages postés
5
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
8 décembre 2007

Je voudrais par exemple gérer automatiquement les dépenses de ma carte bancaire et ainsi savoir combien j'ai dépensé sur les 30 derniers jours ouvrables avant.
Je pensais faire une sorte de décrémentation de jours ouvrables en tenant des jours fériés.
Ceci m'est indispensable pour bien gérer mon budget.
Pour le moment,étant nivice en VBA, j'ai besoin d'aide urgente!!
Messages postés
5
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
8 décembre 2007

Comment traduire ce script VB6 en VBA sous excel
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour Myphilvba,

Pour vba/excel, tu peux aller voir notre ami Mortalino sur son site.

http://www.technos-sources.com/membresite.aspx?ID=647037

Dans son Forum, il y a un thème Visual Basic pour Applications, dont évidemment Excel.

(Bonjour) PCPT t'as indiqué qu'il ne fallait valider ("Réponse acceptée", le bouton" qui rend vert!) que les
réponses qui résolvaient ton (tes) problème(s).

bonne continuation.

jean-marc
Messages postés
5
Date d'inscription
vendredi 7 décembre 2007
Statut
Membre
Dernière intervention
8 décembre 2007

Malheuresement son site est vide!
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

Bonsoir le fil,

le code de JMO est en vba, il te suffit de remplacer &vbCr& par& vbCr &

cordialement
Messages postés
5
Date d'inscription
lundi 29 octobre 2007
Statut
Membre
Dernière intervention
20 mai 2009

JMO ton code est très bien mais il manque le cas où le lundi de Pentecôte tombe le 1er juin (cf. cette année 2009). Sinon c'est impeccable.
Il faut donc rajouter :

        Case 6
            'Pentecôte si pentecote>31
            If pentecote > 31 Then
               pentecote = pentecote - 31               If jour pentecote Then IsFerie True
            End If

Ciao