ECART ENTRE 2 DATES

  • Initiateur de la discussion Valy
  • Date de début
V

Valy

Guest
Bonsoir
Je souhaite faire des statistiques entre date d'ouverture des dossiers
et date de réception pour facturation. J'ai rentré les deux dates pour
un grand nombre de dossiers (dans excel)
et souhaite savoir si le programme permet le calcul
automatique des jours écoulés. Merci d'avance pour votre conseil :)
 

ChTi160

XLDnaute Barbatruc
Salut Valy
bonjour Franz63
bonjour le Forum
Valy j'ai fais cette petite Fonction à Placer dans un Module ex Module1
ensuite tu utilises la fonction dans une cellule comme celles du système
on peut adapter les critéres premier jour de la semaine et première semaine de L'année

Function EcartDates(DateOuverture As Date, DateReception As Date)
EcartDates = DateDiff('d', DateOuverture, DateReception, vbMonday, vbFirstJan1)
End Function
ex dans une cellule tu tappes = EcartDates(sélection de la cellule contenant la date1;sélection de la cellule contenant la date2)

Message édité par: ChTi160, à: 10/05/2005 08:57
 

ChTi160

XLDnaute Barbatruc
Salut habiler
avant le Dodo
la fonction que je t'ai fourni permet de Changer de ref
ici c'est d pour jour
tu as
'q ' pour trimestre
'm' pour mois
'ww ' pour les semaines
'a ' pour année' etc
donc tu change le d par m et le tour est joué
bonne nuit

Message édité par: ChTi160, à: 13/05/2005 23:03
 

ChTi160

XLDnaute Barbatruc
Salut habiler
ci joint une procèdure trouvée sur le Net ( VB Code Source )je crois
en espèrant t'avoir aidé
Code:
Private Function Calc_Diff (ByVal maDate1 As Date, _ 
ByVal maDate2 As Date) As String
   ' Renvoie une chaîne comme '2 ans 3 mois 18 jours ...'
    
    Dim lAn As Long, lMois As Long, lJour As Long
    Dim lHeure As Long, lMinute As Long, lSeconde As Long
    Dim DateTemp As Date, Temp As String
    
    ' Remet les dates dans l'ordre si besoin : Date1 avant Date2
    If maDate1 > maDate2 Then
        DateTemp = maDate1
        maDate1 = maDate2
        maDate2 = DateTemp
    End If
    
    ' L'inconvénient de DateDiff, c'est qu'il arrondi le résultat :
    ' Si on cherche le nombre d'années entre deux dates alors que _
      ces dates ne sont séparées que de 11 mois, il renverra 1 an.
    ' Pour éviter cela, après avoir récupéré le nombre, on teste _
      si la (Date1 + Nombre) > Date2, c'est qu'il y a eu un arrondi
    ' Dans ce cas, on enlève 1 et le tour est joué.
    
    '--- Nombre d'années
    lAn = DateDiff('yyyy', maDate1, maDate2)
    If DateAdd('yyyy', lAn, maDate1) > maDate2 Then lAn = lAn - 1
    ' Décale la date d'autant
    maDate1 = DateAdd('yyyy', lAn, maDate1)
    
    '--- Nombre de mois
    lMois = DateDiff('m', maDate1, maDate2)
    If DateAdd('m', lMois, maDate1) > maDate2 Then lMois = lMois - 1
    ' Décale la date d'autant
    maDate1 = DateAdd('m', lMois, maDate1)
    
    '--- Nombre de jours
    lJour = DateDiff('d', maDate1, maDate2)
    If DateAdd('d', lJour, maDate1) > maDate2 Then lJour = lJour - 1
    ' Décale la date d'autant
    maDate1 = DateAdd ('d', lJour, maDate1)
    
    '--- Nombre d'heures
    lHeure = DateDiff ('h', maDate1, maDate2)
    If DateAdd ('h', lHeure, maDate1) > maDate2 Then lHeure = lHeure - 1
    ' Décale la date d'autant
    maDate1 = DateAdd ('h', lHeure, maDate1)
    
    '--- Nombre de minutes
    lMinute = DateDiff ('n', maDate1, maDate2)
    If DateAdd ('n', lMinute, maDate1) > maDate2 Then lMinute = lMinute - 1
    ' Décale la date d'autant
    maDate1 = DateAdd ('n', lMinute, maDate1)
    
    '--- Nombre de secondes
    lSeconde = DateDiff ('s', maDate1, maDate2)

'Debug.Print lAn, lMois, lJour, lHeure, lMinute, lSeconde
    
    ' Mise en forme de la chaîne à renvoyer :
    Temp = IIf (lAn > 0, CStr (lAn) & 'an(s) ', ''Â'Â')
    Temp = Temp & IIf (lMois > 0, CStr (lMois) & ' mois ', ''Â'Â')
    Temp = Temp & IIf (lJour > 0, CStr (lJour) & ' jours ', ''Â'Â')
    Temp = Temp & IIf (lHeure > 0, CStr (lHeure) & ' heure(s) ', ''Â'Â')
    Temp = Temp & IIf (lMinute > 0, CStr (lMinute) & 'minute (s) ', ''Â'Â')
    Temp = Temp & IIf (lSeconde > 0, CStr (lSeconde) & 'seconde (s)', ''Â'Â')
    Calc_Diff = Temp
    
End Function

Message édité par: ChTi160, à: 14/05/2005 18:14
 

niki42

XLDnaute Occasionnel
Bonjour

Je me permets de prendre part au fil et de proposer une soluce sans macro:
avec en A1 et B1 les 2 dates

=DATEDIF(A1;B1;'y')&SI(DATEDIF(A1;B1;'y')>1;' ans, ';' an, ')&DATEDIF(A1;B1;'ym')&' mois'

Ca fonctionne aussi très bien

Voilà pour ma petite contribution

@+

Niki

B)

Message édité par: niki42, à: 15/05/2005 11:34
 

Discussions similaires

Réponses
9
Affichages
587
Réponses
6
Affichages
379

Statistiques des forums

Discussions
312 393
Messages
2 087 962
Membres
103 687
dernier inscrit
olivier72