Bonjour,
En faisant comme l'a indiqué mdo100, tu trouveras le code ci-dessous dans Module1.
Sub DélaiMoyenLivraison()
Dim DLMA(), d As Object, k, dm%, n%, i%, a%
Set d = CreateObject("Scripting.Dictionary")
With ActiveSheet
n = .Cells(.Rows.Count, 4).End(xlUp).Row
.Range("A1").Resize(n, 4).Sort key1:=.Range("D1"), order1:=xlAscending, Header:=xlYes
For i = 2 To n
Do
dm = dm + .Cells(i + j, 1): a = a + 1: j = j + 1
Loop While .Cells(i + j, 4) = .Cells(i + j - 1, 4)
d(.Cells(i, 4).Value) = dm / a
i = i + j - 1: j = 0: a = 0: dm = 0
Next i
ReDim DLMA(d.Count, 1): n = 0
For Each k In d.keys
n = n + 1: DLMA(n, 0) = k: DLMA(n, 1) = CDec(d(k))
Next k
DLMA(0, 0) = "Code article": DLMA(0, 1) = "Délai moyen"
Application.ScreenUpdating = False
.Range("K1").CurrentRegion.Clear
With .Range("K1").Resize(n + 1, 2)
.Value = DLMA
With .Rows(1)
.WrapText = True: .Font.Size = 10: .Font.Bold = True
.VerticalAlignment = xlCenter: .HorizontalAlignment = xlCenter
.Interior.Color = vbYellow
End With
.Columns(2).NumberFormat = "0.0"
With .Borders
.LineStyle = xlContinuous: .Weight = xlThin
End With
End With
End With
End Sub
La procédure parcourt ta base de données, pour chaque code article calcule le délai moyen, et restitue un tableau sur deux colonnes de ces délais.
J'ai surligné les éléments sur lesquels elle repose et qui sont susceptibles d'adaptation :
- ActiveSheet : si la procédure est lancée à partir d'une autre feuille (alors que la feuille base n'est pas active), y substituer une expression Worksheets("NomdelaFeuille")...
- 4 : c'est le rang de la colonne Code article.
- .Range("A1") et 4 : la base est positionnée à partir de A1 et occupe 4 colonnes.
Si ces éléments sont modifiés, cela entraine des modifications dans le reste du code concernant les indications de colonnes...
-.Range("K1") : positionnement des résultats (sur la même feuille), que l'on peut bien sûr modifier...
Cordialement.