Calcul de prix moyen d'achat

IBOURKSIMO

XLDnaute Nouveau
Bonjour
j'ai une base d'articles qui s'élève à 4000 articles .
chaque article fait l'objet de plusieurs commandes.
ce que j'espère que vous m'aidiez à réaliser c'est un moyen automatique de faire le calcul .
pour bien m'expliquer ,ci joint y a une feuille base qui contient un échantillon des articles et dans la feuille récap y a le résultat souhaité
Merci
 

Pièces jointes

  • prix d'achat moyen.xlsx
    13.2 KB · Affichages: 1 042

job75

XLDnaute Barbatruc
Re : Calcul de prix moyen d'achat

Bonjour,

Fichier joint avec formules matricielles en F3 et G3 de la feuille recap.

Elles sont à valider par Ctrl+Maj+Entrée et à copier vers le bas.

Edit : noter que pour le maximum on peut écrire plus simplement en G3 :

Code:
=MAX((base!B$4:B$5000=A3)*base!E$4:E$5000)
Toujours avec validation matricielle.

A+
 

Pièces jointes

  • prix d'achat moyen(1).xls
    37 KB · Affichages: 533
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Calcul de prix moyen d'achat

Bonjour,

Il me semble que le prix unitaire moyen doit se calculer sur la moyenne des prix unitaires et non sur le montant total divisé par la quantité.

En dehors de cette réserve, vois les formules placées en Recap!13:13, elles sont matricielles et valables pour tout le tableau.
 

Pièces jointes

  • PrixaAchatMoyen.xlsx
    13.1 KB · Affichages: 330

IBOURKSIMO

XLDnaute Nouveau
Re : Calcul de prix moyen d'achat

Bonjour
je vous remercie tous pour vos réponse
mais je tiens à vous dire que dans la réalité moi je n'ai que la feuille BASE; et donc
à travers un Marcro je veux créer d'une manière automatique le tabeau dans la feuille récap
et qui fait :

+ supprimer les doulons
+ calcul des prix moyen
+ calcul de prix min
+ calcul de prix max

Merci
 

job75

XLDnaute Barbatruc
Re : Calcul de prix moyen d'achat

Re,

Voir le fichier joint et cette macro :

Code:
Sub CreerTableau()
Dim d As Object, tablo, t
Set d = CreateObject("Scripting.Dictionary")
tablo = Sheets("base").Range("B2", Sheets("base").[B65536].End(xlUp))
For Each t In tablo
  If t <> "" Then d(t) = t
Next
Application.ScreenUpdating = False
[3:65536].ClearContents
If d.Count < 2 Then Exit Sub
[A2].Resize(d.Count) = Application.Transpose(d.Keys)
[B3].Formula = "=VLOOKUP(A3,base!B$4:C$5000,2,0)"
[C3].Formula = "=SUMIF(base!B$4:B$5000,A3,base!D$4:D$5000)"
[D3].Formula = "=SUMIF(base!B$4:B$5000,A3,base!F$4:F$5000)"
[E3].Formula = "=D3/C3"
[F3].FormulaArray = "=MIN(IF(base!B$4:B$5000=A3,base!E$4:E$5000))"
[G3].FormulaArray = "=MAX((base!B$4:B$5000=A3)*base!E$4:E$5000)"
[H3].Formula = "=(F3-G3)/F3"
If d.Count > 2 Then [B3:H3].AutoFill [B3:H3].Resize(d.Count - 1)
'---si l'on veut ne conserver que les valeurs---
'[B3:H3].Resize(d.Count - 1) = [B3:H3].Resize(d.Count - 1).Value
End Sub
En fait elle entre les formules qu'on a établies et les tire vers le bas.

Noter que les bordures se font par MFC sur les colonnes A:H.

Edit : ajouté une ligne de code (en commentaire) pour supprimer les formules.

A+
 

Pièces jointes

  • prix d'achat moyen par macro(1).xls
    50 KB · Affichages: 325
Dernière édition:

job75

XLDnaute Barbatruc
Re : Calcul de prix moyen d'achat

Re,

J'avais limité le tableau de base à la ligne 5000, ce n'est pas forcément correct.

Ici on détermine effectivement la dernière ligne :

Code:
Sub CreerTableau()
Dim d As Object, derlig As Long, tablo, t
Set d = CreateObject("Scripting.Dictionary")
derlig = Sheets("base").[B65536].End(xlUp).Row
tablo = Sheets("base").Range("B2:B" & derlig)
For Each t In tablo
  If t <> "" Then d(t) = t
Next
Application.ScreenUpdating = False
[3:65536].ClearContents
If d.Count < 2 Then Exit Sub
[A2].Resize(d.Count) = Application.Transpose(d.Keys)
[B3].Formula = "=VLOOKUP(A3,base!B$4:C$" & derlig & ",2,0)"
[C3].Formula = "=SUMIF(base!B$4:B$" & derlig & ",A3,base!D$4:D$" & derlig & ")"
[D3].Formula = "=SUMIF(base!B$4:B$" & derlig & ",A3,base!F$4:F$" & derlig & ")"
[E3].Formula = "=D3/C3"
[F3].FormulaArray = "=MIN(IF(base!B$4:B$" & derlig & "=A3,base!E$4:E$" & derlig & "))"
[G3].FormulaArray = "=MAX((base!B$4:B$" & derlig & "=A3)*base!E$4:E$" & derlig & ")"
[H3].Formula = "=(F3-G3)/F3"
If d.Count > 2 Then [B3:H3].AutoFill [B3:H3].Resize(d.Count - 1)
'---si l'on veut ne conserver que les valeurs---
'[B3:H3].Resize(d.Count - 1) = [B3:H3].Resize(d.Count - 1).Value
End Sub
Fichier (2).

A+
 

Pièces jointes

  • prix d'achat moyen par macro(2).xls
    50.5 KB · Affichages: 298

job75

XLDnaute Barbatruc
Re : Calcul de prix moyen d'achat

Re,

Une question à cent sous (surtout pour les initiés).

Pourquoi ai-je mis B2 dans la définition de tablo, et non pas B3 ?

Réponse : parce que tablo doit avoir au moins 2 éléments, la macro beugue s'il n'y en a qu'un.

B2 doit rester vide pour ne pas entrer dans l'objet d.

Désolé, il est probable que seuls les initiés comprendront.

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 854
Membres
103 975
dernier inscrit
denry