Faire moyenne à chaque fois que l'article est différent

Bonjour

Je suis désolé pour ce titre c'est le mieux que j'ai trouvé pour essayer d'expliquer mon problème.

Je vous met une copie de mon fichier. J'ai cherché sur le forum mais en vain.

J'ai une liste de plusieurs commandes passés sur le même article. Pour chacune des commandes j'ai un délai de livraison qui varie.

Je voudrais avoir la moyenne du délai de livraison pour chaque chaque article. Mon fichier fait plus de 15 000 lignes je vous met un petit extrait en pièce jointe.

delai Commande Code Article

24 70001 03/000713

15 700002 03/000713

11 700003 03/000713

9 700004 03/000713

29 700005 03/006179

18 700006 03/006179

18 700007 03/006180

6 700008 03/006362

Merci de votre aide.

Bonjour Sanaa,

Tu peux faire un combinaison d'un somme.si.ens / nb.si.ens

=SOMME.SI.ENS($A$2:$A$27;$D$2:$D$27;C2)

mais sur tes 15000 lignes cela alourdira beaucoup ton fichier. As tu besoin que cette moyenne soit calculée sur chacune des lignes de la base ? (Sinon, une feuille intermédiaires avec un tableau du délai moyen par articles pourrait être une piste).

Bonne fin de journée.

Bonjour,

En utilisant la commande Sous-total de l'onglet Données ?

Trier la colonne des codes articles en ordre croissant, puis Sous-total : À chaque changement de Code Article, Utiliser la fonction Moyenne, Ajouter un sous-total à Délai de livraison.

Bonsoir,

Et comme ça !

Merci pour vos réponses.

Mferrand c'est exactement ça mais j'aimerai comprendre. Pourriez vous m'expliquer la marche à suivre pour les prochaine fois. Il n'y a aucune formule sur votrre fichier je vois que le résultat.

Bonjour sanaa16, toutes et tous,

Une proposition par formules colonnes "F & G" sur le fichier que t'as fait MFerrand.

Concernant le fichier de MFerrand, c'est du VBA, pour voir le code tu fais "alt + F11".

Cela convient-il ?

Cordialement.

oyobrans a écrit :

Bonjour,

En utilisant la commande Sous-total de l'onglet Données ?

Trier la colonne des codes articles en ordre croissant, puis Sous-total : À chaque changement de Code Article, Utiliser la fonction Moyenne, Ajouter un sous-total à Délai de livraison.

Tout simplement! Merci

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.

Bonjour

Lorsque que je vois les réponses et surtout le niveau des réponses je me dis que je suis qu'une merde sur excel excusez moi du terme mais appelons un chat un chat.

Merci à vous tous et je vais essayer de m'améliorer grâce à vous.

Rechercher des sujets similaires à "moyenne chaque fois que article different"