Moyenne sur les 10 produits les + bas

Ken Hutchinson

XLDnaute Occasionnel
Bonjour le forum,

J'ai une demande un peu particulière que je dois satisfaire rapidement. On me demande de calculer la moyenne des 10 produits les plus bas...




Voici un fichier exemple.


Merci pour votre aide....
 

Pièces jointes

  • kenhelp.xls
    40 KB · Affichages: 106

Tibo

XLDnaute Barbatruc
Re : Moyenne sur les 10 produits les + bas

Bonjour,

Un essai avec en AL23 :

Code:
=(SI(Y3>10;10;Y3)*Y$2+SI(SOMME(W3:Y3)>10;MAX(0;10-SOMME(Y3:Y3));Y3)*X$2+
SI(SOMME(V3:Y3)>10;MAX(0;10-SOMME(W3:Y3));W3)*W$2+SI(SOMME(U3:Y3)>10;
MAX(0;10-SOMME(V3:Y3));V3)*V$2+SI(SOMME(T3:Y3)>10;MAX(0;10-SOMME(U3:Y3));
U3)*U$2)/10

On peut rallonger pour prendre en compte les colonnes antérieures.

à recopier vers le bas

Je te laisse tester

@+

Edit : Salut Kjin :)

J'ai également "apprécié" à sa juste valeur la proposition d'alexis ;)

Bonne soirée

@+
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Moyenne sur les 10 produits les + bas

bonjour Ken Hutchinson

Salut alexis62

Vois si cela te convient

Edit: Salut kjin :)
Salut Tibo :)
NB: a mon grand soulagement la formule de Tibo donne le même resultat que ma macro
rectif: sauf pour la ligne 35
 

Pièces jointes

  • kenhelp.zip
    15.1 KB · Affichages: 40
Dernière édition:

HIJACK

XLDnaute Junior
Re : Moyenne sur les 10 produits les + bas

Salut
Ben, moi contrairement à certain, j'ai essayé, de comprendre, mais il doit me manquer un stap:
encore plus dur pour la ligne 35

le produit de la colonne Y est vendu à 2

donc il faut passer à la colonne X qui a vendu 0
donc il faut passer à la colonne W qui a vendu 3
puis la colonne V qui a vendu 3
puis la colonne U et n'en prendre que 2

soit la formule :
(2x23)+(3x133)+(3x86)+(2x120) et ensuite diviser le tout par 10

et pouquoi pas (2x23)+(8x67):confused:
Interprete!, siouplai
 

pierrejean

XLDnaute Barbatruc
Re : Moyenne sur les 10 produits les + bas

Re

Bien vu HIJACK !!!

J'ai suivi le raisonnement de Ken sans m'apercevoir qu'il aurait fallu au prealable classer les colonnes
@ Ken
Si tu classes tes colonnes du plus cher au moins cher la macro est OK sinon il me faut la revoir
A te lire
 

pierrejean

XLDnaute Barbatruc
Re : Moyenne sur les 10 produits les + bas

RE

Cette version tient compte de la remarque fort judicieuse de HIJACK sans necessiter le classement des colonnes (fait par la macro) et confirme la valeur de la ligne 35 a savoir (2x23)+(8x67)/10
 

Pièces jointes

  • kenhelp_b.zip
    15.9 KB · Affichages: 43

Ken Hutchinson

XLDnaute Occasionnel
Re : Moyenne sur les 10 produits les + bas

Bonjour à tous !

Je découvre les solutions ce matin et là je dis "BRAVO" ! Effectivement je cherche les produits les moins chers. Mais je n'avais pas trié mon tableau.

Bravo pour les solutions. J'ai une plus grande affinité pour la solution par macro.

Merci à tous !

Respect et Robustesse !
 

Ken Hutchinson

XLDnaute Occasionnel
Re : Moyenne sur les 10 produits les + bas

Re,

Et vous avez même poussé la reflexion pluis loin que moi car je vois que mon idée de départ n'est pas la bonne.

PierreJean Tu as trouvé la solution la meilleurs mais en reprenant mon idée de départ qui était de classer les valeurs. Si les valeurs sont classées la première condition qui dit "si la colonne Y a vendu plus de 10 produits alors prendre cette valeur pour la moyenne"

Il faut retirer cette condition et en fait commencer par la colonne Z.

La seule condition a mettre est que s'il n'y a pas de prix en haut (ça peut arriver" alors il ne faut pas prendre la valeur...

Sinon pierreJean je suis assez preneur d'une explication du code que je ne comprends qu'à moitié...

Ce que je cherche c'est bien la moyenne des 10 ventes des produits les moins chers

Merci pour l'aide précieuse
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Moyenne sur les 10 produits les + bas

Re

Voici une version adaptée de la precedente
Ici on commence en fait par la colonne du plus bas prix existant
les colonnes peuvent ne pas etre classées
Je te laisse tester (c'est un boulot que je n'aime pas trop)
NB: je n'ai pas examiné le cas ou il n'y aurait pas 10 articles !!
Si pb n'hesite pas a revenir (j'ai commenté le code du mieux que j'ai pu)
 

Pièces jointes

  • kenhelp_c.zip
    16.2 KB · Affichages: 40

Ken Hutchinson

XLDnaute Occasionnel
Re : Moyenne sur les 10 produits les + bas

Merci PierreJean !! cette nouvelle version est superbe ! J'ai réussi à finir mon travail en avance grâce à ta macro. Je n'ai plus que de la mise en forme à faire et finalement c'est cela qui va me prendre le plus de temps.

Merci à tous pour votre aide !!!
 

ROGER2327

XLDnaute Barbatruc
Re : Moyenne sur les 10 produits les + bas

Bonjour à tous
Une version paramétrable traitant le cas où il n'y aurait pas dix articles dans certaines lignes.
Code:
[COLOR="DarkSlateGray"]Sub mini_nPrix()
Dim zPrix As String, sPrix, zMoy As String, sMoy, zDat As String, sDat As String
Dim Prix, Moy, Dat, rPrix, nPrix As Integer
Dim temp, aux
Dim col As Long
Dim i As Long, j As Long, k As Long
[COLOR="SeaGreen"]'---------------------------- PARAMETRES A ADAPTER ----------------------------[/COLOR]
   sPrix = "Feuil1": zPrix = "H2:Z2"   [COLOR="SeaGreen"]'Liste des prix[/COLOR]
   sMoy = "Feuil1": zMoy = "AG3:AG36"  [COLOR="SeaGreen"]'Zone des résultats[/COLOR]
   sDat = "Feuil1": zDat = "H3:Z36"    [COLOR="SeaGreen"]'Table de données[/COLOR]
   nPrix = 10                          [COLOR="SeaGreen"]'Nombre maximum d'articles pris en compte
'------------------------------------------------------------------------------[/COLOR]
   Prix = Sheets(sPrix).Range(zPrix).Value
   Moy = Sheets(sMoy).Range(zMoy).Value
   Dat = Sheets(sDat).Range(zDat).Value
   col = UBound(Prix, 2)
   ReDim rPrix(1 To col)
   temp = Prix
   For i = 1 To col - 1                [COLOR="SeaGreen"]'Liste des prix en ordre croissant dans 'temp'[/COLOR]
      For j = i + 1 To 2 Step -1
         If temp(1, j) < temp(1, j - 1) Then
            aux = temp(1, j): temp(1, j) = temp(1, j - 1): temp(1, j - 1) = aux
         Else
            Exit For
         End If
      Next j
   Next i
   i = 1
   Do Until i > col                    [COLOR="SeaGreen"]'Indexation de la liste des prix en ordre croissant[/COLOR]
      For j = 1 To col
         If temp(1, i) = Prix(1, j) Then k = k + 1: rPrix(k) = j
      Next j
      i = k + 1
   Loop
   For i = 1 To UBound(Moy, 1)
      temp = 0: aux = 0
      For j = 1 To col
         If IsNumeric(Prix(1, rPrix(j))) And Prix(1, rPrix(j)) <> 0 Then
            k = Application.Min(Application.Max(0, nPrix - aux), Dat(i, rPrix(j)))
            temp = temp + k * Prix(1, rPrix(j))
            aux = aux + k
         End If
      Next j
      If aux = nPrix Then Moy(i, 1) = temp / aux Else Moy(i, 1) = "ND"
   Next i
   Sheets(sMoy).Range(zMoy).Value = Moy
End Sub[/COLOR]
ROGER2327
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 333
Membres
103 519
dernier inscrit
Thomas_grc11