VBA_calcul de délai moyen

Bonjour le forum,

Je vous écris car j'ai crée une fonction afin de calculer un délai de livraison moyen annuelle et mensuelle, or le résultat annuel qu'elle retourne n'est pas juste (approchant à 0.4) et pour le calcul mensuelle elle ne fonctionne pas du tout.

Voici ma fonction et le fichier et en PJ :

Function ttdelai(j)

Dim DD, DF, DateD, DateF As Variant

Dim i As Integer

Worksheets("test").Activate

derlig = Worksheets("test").Range("A" & Rows.Count).End(xlUp).Row

j = ActiveCell.Value

resultat = 0

cpt = 0

For i = 2 To derlig

DD = Cells(i, 2).Value

DF = Cells(i, 3).Value

DateD = Format(DD, "dd/mm/yyyy")

DateF = Format(DF, "dd/mm/yyyy")

If Year(j) = Year(DD) And Month(j) = Month(DD) Then

diff = DF - DD

resultat = resultat + diff

cpt = cpt + 1

End If

Next

ttdelai = (resultat / cpt)

End Function

Je ne serais pas contre un coup de main

Merci et au plaisir de vous lire !!!

16testax.xlsm (36.49 Ko)

bonjour

lorsque l'on crée une fonction en vba il faut essayer de s'approcher le plus possible des fonctions natives d'excel, ainsi, on ne rentre pas en dure dans le code les colonnes à visiter, mais on le demande à l'utilisateur.

dans ce que je te retourne, on ne traite que la comparaison mensuelle, à toi de nous dire

en pièce jointe ton fichier

Function ttdelai(plage1 As Range, plage2 As Range, datecompare)
Dim i As Integer
Dim diff As Double
Dim cpt As Integer

For i = 1 To plage1.Rows.Count
    If Year(datecompare) = Year(plage1(i)) And Month(datecompare) = Month(plage2(i)) Then
        diff = diff + (plage2(i) - plage1(i))
        cpt = cpt + 1
    End If
Next i
ttdelai = (diff / cpt)

End Function

a plus

48testax.zip (18.89 Ko)

Merci Hervé, c'est parfait !

Effectivement, ça parait plus logique !

Maintenant je me suis rendu compte que le résultat était biaisé quand le délai était nul (diff=0).

Faut-il que j'intègre cette contrainte dans mon code ou via une formule excel, un =SI() notamment ?

Pour le code :

Function ttdelai (plage1 As Range, plage2 As Range, datecompare)

Dim i As Integer

Dim diff As Double

Dim cpt As Integer

For i = 1 To plage1.Rows.Count

If (plage2(i) - plage1(i)) = 0 Then

Exit For

Else

If Year(datecompare) = Year(plage1(i)) And Month(datecompare) = Month(plage2(i)) Then

diff = diff + (plage2(i) - plage1(i))

cpt = cpt + 1

End If

End If

Next i

ttdelai = (diff / cpt)

End Function

Qu'en pensez vous ?

Au plaisir de vous lire

re

personnellement je ne suis pas adepte pour réinventer la roue, si tu solutionnes ton problème avec un simple =si(, ça me parait bien

a plus

Rechercher des sujets similaires à "vba calcul delai moyen"