calcul délai

T

tracor

Guest
salut le phorum

comment peux t' on calculer un nb de jours ouvrés entre 2 dates
en choississant l'intervalle entre ces 2 dates
ex
colonne a : intervalle choisi
du 01/07/04 au 05/07/04
colonne b : date de livraison
copier les deux colonnes
puis effectuer le calcul nbjoursouvrés
et afficher le nombre de jours supérieur à 2

merci pour toutes propositions ou idées

tracor
 
D

Dugenou

Guest
Salut Tracor champion du quizz !

je ne comprends pas bien ta question : ou est l'intervalle choisi ? nb de jours ouvrés entre le début de l'intervalle et la date de livraison ou entre la fin et la date ?

Connais tu la fonction nb.jours.ouvres (date début; date fin; matrice jour fériés) ? (disponible avec utilitaire d'analyse)

a+
 
M

Monique

Guest
Bonjour,

Il existe la fonction NB.JOURS.OUVRES ( date de début; date de fin; fériés)
=NB.JOURS.OUVRES(A1;B1;Feries)
"fériés" étant le nom que tu donnes à une plage de ta feuille (ou d'1 autre feuille) et contenant les dates des fériés.
Pour pouvoir utiliser cette fonction :
barre de menu - Outils - Macros complémentaires
et tu coches "Utilitaire d'analyse"
Sauf que je n'ai pas compris la question.
 
T

tracor

Guest
salut à tous

en fait je souhaiterai le faire par macro
cad :
je défini un intervalle entre 2 dates dans la colonne A
la macro me copierai dans un autre classeur la colonne A et B
la colonne A correspond à une date d'expédition
la colonne B correspond à une date de livraison
et le calcul de porter sur le délai entre la date d'expédition et la date de livraison qui ne doit pas exceder 2 jours ouvrés
enfin
une fois le calcul effectue
prendre le nombre total de livraison excedant 2 jours divisé par le nombre total d'expédition afin d'avoir un taux de livraison


j'espére avoir été plus clair dans mon explication

super tracor
 
M

michel

Guest
bonsoir Monique , Dugenou et Tracor

j'espere que cette macro pourra t'aider . La fonction de calcul des jours feries et weekends est de Laurent Longre
dans l'exemple , les dates d'expedition doivent etre dans la colonne A , et les date de livraison dans la colonne B
un delai est considéré comme dépassé si la durée est superieure à deux jours( le jour de l'expedition n'est pas comptabilisé dans le calcul de durée )


Sub DelaisJoursOuvres()
'dans cet exemple les samedi ne sont pas comptés en jour ouvré
Dim Debut As Date, Fin As Date
Dim Compte As Byte, Total As Byte, i As Byte
Dim Cell As Range
Dim Tableau() As Byte
Dim Repartition As String
Dim NbExp As Integer

'colonne A date d'expedition
'colonne B date de livraison
NbExp = Range("A65536").End(xlUp).Row
ReDim Tableau(0)
For Each Cell In Range("A1:A" & NbExp)
Compte = 0
Debut = CDate(Cell) 'date expedition
Fin = CDate(Cell.Offset(0, 1)) 'date livraison

While Debut < Fin
Debut = Debut + 1
If Not TYPEJOUR(Debut) = 2 And Not TYPEJOUR(Debut) = 1 Then Compte = Compte + 1
'pour comptabiliser les Samedi comme jours ouvrés
'If Not TYPEJOUR(Debut) = 2 And Weekday(Debut, vbMonday) <>7 Then Compte = Compte + 1
Wend

If Compte > 2 Then
If UBound(Tableau()) < Compte Then
ReDim Preserve Tableau(Compte)
Tableau(Compte) = Tableau(Compte) + 1
Else
Tableau(Compte) = Tableau(Compte) + 1
End If
Total = Total + 1
End If

Next

MsgBox "Nombre de livraisons dont le délai est supérieur à 2 jours : " & Total, , "Resultat"

For i = 3 To UBound(Tableau())
' ! le pourcentage est calculé sur le nombre total d'expeditions
Repartition = Repartition & i & " jours : " & vbTab & Tableau(i) & vbTab & " soit " & Format(Tableau(i) / NbExp, "0.00%") & Chr(10)
Next i
MsgBox Repartition, , "Repartition des dépassements "

End Sub


Function TYPEJOUR(D As Date)
'procedure de Laurent Longre
Dim A As Integer, T As Integer
Dim LP As Date, LD As Long

A = Year(D)
If A > 2099 Then
TYPEJOUR = CVErr(xlErrValue)
Exit Function
End If

LD = Int(D) + 1
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



bonne soiree
MichelXld
 
T

tracor

Guest
salut michel

j'avais rangé ce fil afin de l'adapter dans mes macro
en lisant rapidement la macro je pense que cela devrait convenir cependant je souhaite pouvoir définir un intervalle entre deux date et ensuite lancer la macro pour ne voir afficher que le ratio calculé

dois je redefinir les variable de la colonne a et b

actuellement j'utilise ce système pour comptabiliser un nombre entre 2 dates

en tout cas merci


tracor
 
M

michel

Guest
bonjour Tracor

dans le fichier joint il est possible de cibler une periode d'expédition pour effectuer les statistiques de dépassement de délais


bon week end
MichelXld
 

Pièces jointes

  • DelaisJoursOuvresEtStatistiques_V02.zip
    12.5 KB · Affichages: 268
T

tracor

Guest
re à tout le phorum et Michel

j'essaie en vain depuis 2 heures d'adapter la macro à celle que j'utilise actuellement
en fait je souhaiterai choisir l'intervalle a travers 2 cellules et non par l'intermediaire d'une combobox
ex
début = a1
fin = a2
pour afficher le résultat dans une cellule défini également (a3)
livraisons > 2 jours / nbre expedition total
je mets le début de mon code afin d'aider à la compréhension de la macro utilisée
Sub mise_à_jour_données()



Dim DateFrom As Date
Dim DateTo As Date
Dim Tableau As Variant
Dim domdom As Long, A As Long
Dim PDV As Long, b As Long
Dim expdom As Long, c As Long
Dim expdomhc As Long, D As Long
Dim exppdv As Long, f As Long
Dim exppdvhc As Long, g As Long
Dim exppdvc As Long, h As Long

With Sheets("importation")
DateFrom = .Range("B8")
DateTo = .Range("B9")
End With

Tableau = Sheets("données").Range("A1:CB65000") 'à adapter


Application.StatusBar = "interventions ouvertes gestion client"
For A = 1 To UBound(Tableau)
If Tableau(A, 25) >= DateFrom And Tableau(A, 25) <= DateTo Then
If Tableau(A, 3) = "Domicile->Domicile" Then
domdom = domdom + 1
End If
End If
Next A
With Sheets("SUIVI PL2 EN COURS")
.Range("c13") = domdom
End With

merci d'avance

tracor
 
T

tracor

Guest
salut michel

merci de ta réponse
en fait je souhaiterai plutôt qu'un userform dans lequel on choisit les dates
je souhaite que la macro prenne les informations de l'intervalle dans 2 cellules définies à l'avance
date expe = a1
date livraison = a2

et le pourcentage des livraisons supérieures à 2 jours en a3

j'espére avoir été plus clair

tracor
 

Statistiques des forums

Discussions
312 967
Messages
2 094 028
Membres
105 920
dernier inscrit
SAUSSARd