Vb excel

tinon -  
rayonnais Messages postés 51 Statut Membre -
bonjour, voici une macro vb pour compter le nb d'un jour particulier entre deux dates. J'aimerais savoir comment faire pour qu'il décompte automatiquement les jours fériés, merci.

'trouve le nombre d'un jour donné de la semaine entre deux dates

Function NbDe(DateDeb As Double, DateFin As Double, Jour As Byte) As Long
'le jour 1 de la semaine est le lundi
Dim i As Double, Deb#, Fin#

If DateDeb <= DateFin Then
Deb = DateDeb: Fin = DateFin
Else
Deb = DateFin: Fin = DateDeb
End If

For i = Int(Deb) To Int(Fin)
If Weekday(i, vbMonday) = Jour Then
NbDe = NbDe + 1
End If
Next i

End Function 'fs

j'ai aussi une macro pour calculer automatiquement les jours fériés, et il possible de compiler les deux, si oui comment, merci.

'comment compter un nbre de jours entre 2 dates saisies ds 2 cellules en
'otant les samedi,dimanche et jours feries

Function NbOuvrés&(D1, D2)
Dim Prem As Date, Der As Date, i As Date
If D1 = D2 Then
Prem = D1
If TYPEJOUR(Prem) = 0 Then NbOuvrés = 1
Exit Function
End If
Select Case D1 < D2
Case True: Prem = D1: Der = D2
Case False: Prem = D2: Der = D1
End Select
For i = Prem To Der
NbOuvrés = NbOuvrés + (TYPEJOUR(i) = 0) * -1
Next i
End Function

'Cette fonction renvoie 0 si le jour passé en paramètre est un jour de semaine,
'1 s'il s'agit d'un samedi ou d'un dimanche et 2 s'il s'agit d'un jour férié.
'Valide jusqu'en 2099 et pour les jours fériés français
Function TYPEJOUR(D As Date)
'L. Longre
Dim A As Integer, T As Integer
Dim LP As Date, LD As Long
Dim Toto As Long

A = Year(D)
If A > 2099 Then
TYPEJOUR = CVErr(xlErrValue)
Exit Function
End If
LD = Int(D)
If LD <= 2 Then
If LD = 1 Then TYPEJOUR = 2
Exit Function
End If
T = (((255 - 11 * (A Mod 19)) - 21) Mod 30) + 21
LP = DateSerial(A, 3, 2) + T + (T > 48) _
+ 6 - ((A + A \ 4 + T + (T > 48) + 1) Mod 7)
Select Case D
' Jours fériés mobiles
Case Is = LP, Is = LP + 38, Is = LP + 49
TYPEJOUR = 2
' Jours fériés fixes
Case Is = DateSerial(A, 1, 1), Is = DateSerial(A, 5, 1), _
Is = DateSerial(A, 5, 8), Is = DateSerial(A, 7, 14), _
Is = DateSerial(A, 8, 15), Is = DateSerial(A, 11, 1), _
Is = DateSerial(A, 11, 11), Is = DateSerial(A, 12, 25)
TYPEJOUR = 2
Case Else
' Samedi ou dimanche
If Weekday(D, vbMonday) >= 6 Then TYPEJOUR = 1
End Select

End Function

3 réponses

hourrrah Messages postés 6976 Statut Membre 504
 
Salut Tinon...
Autrement dit, tu veux, avec tes combinaisons de macros, calculer le nombre d'un jour hors samedis, dimanches et jours fériés...

Sans trop creuser parce que tu n'es pas sur le bon forum (vois plutôt du côté du forum logiciels), je te dirai que tu dois chaîner les parties 1 et 2 en reprenant en 2 le résultat de ton compteur NbDe...

Bon courage ou bonne chance et @+ 
...Chi va piano va sano...
0
tinon
 
merci hourrrah mais je souhaite savoir entre deux dates données combien il y a de lundi, mardi, mercredi , jeudi, vendredi, samedi dimanche et jours fériés, pas évident.
0
rayonnais Messages postés 51 Statut Membre
 
Sous Excel :

NB.JOURS.OUVRES

Renvoie le nombre de jours ouvrés entiers compris entre date_début et date_fin. Les jours ouvrés excluent les fins de semaine et toutes les dates identifiées comme étant des jours fériés. Utilisez NB.JOURS.OUVRES pour calculer les charges salariales au prorata du nombre de jours travaillés pendant une période donnée.

Si cette fonction n'est pas disponible et renvoie la valeur d'erreur #NOM?, installez et chargez la macro complémentaire Utilitaire d'analyse.

Procédure

Dans le menu Outils, cliquez sur Macros complémentaires.
Dans la liste Macros complémentaires disponibles, activez la case à cocher Utilitaire d'analyse, puis cliquez sur OK.
Si nécessaire, suivez les instructions fournies par le programme d'installation.
Syntaxe

NB.JOURS.OUVRES(date_début;date_fin;jours_fériés)

Important Les dates doivent être entrées en utilisant la fonction DATE, ou sous la forme de résultats d'autres formules ou fonctions. Par exemple, utilisez DATE(2008; 5; 23) pour le 23e jour du mois de mai 2008. Des problèmes peuvent survenir si les dates sont entrées sous forme de texte.

date_début est une date qui représente la date de début.

date_fin est une date qui représente la date de fin.

jours_fériés représente une plage facultative d'une ou de plusieurs dates à exclure du calendrier des jours de travail, comme les jours fériés ou d'autres jours contractuellement chômés. La liste peut être soit une plage de cellules contenant les dates, soit une constante matricielle (matrice : Permet de créer des formules uniques permettant d'obtenir plusieurs résultats et qui agissent sur un groupe d'arguments répartis dans des lignes et des colonnes. Une plage matricielle partage une même formule tandis qu'une constante matricielle est un groupe de constantes qui sert d'argument.) des numéros de série qui représentent les dates.

Courage !
0