myphilvba
Messages postés5Date d'inscriptionvendredi 7 décembre 2007StatutMembreDernière intervention 8 décembre 2007
-
7 déc. 2007 à 12:51
guelowrd
Messages postés5Date d'inscriptionlundi 29 octobre 2007StatutMembreDernière intervention20 mai 2009
-
20 mai 2009 à 11:56
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
A voir également:
Calculatrice jours ouvrés
"Nouveaux sites ajoutés ces 30 derniers jours" - Meilleures réponses
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 8 déc. 2007 à 10:46
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
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
cs_akzo
Messages postés133Date d'inscriptiondimanche 23 juin 2002StatutMembreDernière intervention 3 janvier 20153 7 déc. 2007 à 18:13
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
myphilvba
Messages postés5Date d'inscriptionvendredi 7 décembre 2007StatutMembreDernière intervention 8 décembre 2007 7 déc. 2007 à 20:12
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!!
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).
guelowrd
Messages postés5Date d'inscriptionlundi 29 octobre 2007StatutMembreDernière intervention20 mai 2009 20 mai 2009 à 11:56
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