VBA ou autres formules ! Calcul moyenne en fonction de, tant que

justinev

XLDnaute Nouveau
Bonjour à tous,

Je me casse les dents actuellement sur un projet excel, j'ai beaucoup appris en peu de temps mais là je coince.

Si vous avez plus d'idée que moi, je suis preneuse ! J'ai essayé "Moyenne.si", fonction "Si" imbriqué en nb.val mais sans succès.

Alors j'ai un fichier (ci-joint) comprenant une colonne "bon de livraison" et une colonne "coût de la livraison", les lignes correspondent aux produits.

Je souhaite calculer la moyenne pour chaque produit en fonction du coût de livraison. Sachant que les BL ne contiennent pas tous le même nombre de produit.

Donc tant que mon bon de livraison est égal à celui de la ligne en dessous compter le nombre de valeur et faire la moyenne en fonction du coût de livraison.

Je ne suis pas assez douée pour coder une boucle en vba.

En vous remerciant !
 

Pièces jointes

  • Classeur1.xlsx
    10 KB · Affichages: 54
  • Classeur1.xlsx
    10 KB · Affichages: 51
  • Classeur1.xlsx
    10 KB · Affichages: 49

VDAVID

XLDnaute Impliqué
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

Bonjour Justinev,

Peut-être comme ceci: (Voir PJ)

La colonne B ne doit pas contenir de cellules vides.

Bonne journée !
 

Pièces jointes

  • Justine).xlsx
    11.2 KB · Affichages: 47
  • Justine).xlsx
    11.2 KB · Affichages: 45
  • Justine).xlsx
    11.2 KB · Affichages: 49

justinev

XLDnaute Nouveau
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

Bonjour VDAVID,

Merci ça marche il faut que je m'arrange pour que les cellules vides soit égales à 0. Mais serait-il possible d'afficher la moyenne de chaque produit dans chacune des cases qui restent vides.
Par exemple sur le fichier, C3 afficher 1255. Pour la suite de mes calculs j'ai besoin que chaque produit possède son cout moyen.

Merci !
 

justinev

XLDnaute Nouveau
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

J'ai adapté mon fichier original sauf que cette formule est très bien pour les données qui ne varient pas de taille.

Seulement mon fichier est aléatoire et le nombre de cellule occupée diffère d'une utilisation à l'autre. Le nombre de cellule pleine est donc variable...

Une autre idée ? Désolé je n'ai pas assez détaillé mes intentions au préalable...
 

justinev

XLDnaute Nouveau
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

Ca marche sur le fichier que j'ai joins seulement ça ne marche pas sur mon fichier original.

Je te joins du coup le fichier original, j'ai beau décortiquer ta formule, je ne vois pas ce qui cloche !
:confused:
 

Pièces jointes

  • Justine).xlsx
    13.2 KB · Affichages: 55
  • Justine).xlsx
    13.2 KB · Affichages: 70
  • Justine).xlsx
    13.2 KB · Affichages: 52

VDAVID

XLDnaute Impliqué
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

Re,

Essaye comme ceci (En N3):

=SOMMEPROD(DECALER($A$3;0;11;NBVAL(A:A); )*(DECALER($A$3;0;;NBVAL(A:A); )=A3)*(DECALER($A$3;0;11;NBVAL(A:A); )<>""))/SOMMEPROD(1*(DECALER($A$3;0;;NBVAL(A:A); )=A3))

L'erreur venait de deux choses:

Les cellules vides (Réglé en rajoutant une condition dans la sommeprod initiale)
Le décalage de départ qui n'était pas bon

Normalement ça doit coller maintenant :p
 

justinev

XLDnaute Nouveau
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

-_- Et bien non toujours pas. Même en modifiant les =A3 en A4 car c'était la cellule à calculée cela ne marche pas :'(

C'est vraiment bien pour mon projet de Bts, Excel m’agace de plus en plus surtout depuis que j'ai commencé à coder en vba !

Mais bon j'en apprend chaque jour et c'est pas plus mal !

En tout cas merci pour ton aide !
 

justinev

XLDnaute Nouveau
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

J'ai enlevé les valeurs vides de la colonne L. Puis modifier les lignes à 1. Mais les moyennes sont faites en fonction des poids des Bl, et non pas en fonction du coût ...
J'ai essayé de modifier les colonnes, mais la 12 étant vide...
 

justinev

XLDnaute Nouveau
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

C'est bon j'ai du modifier ligne et colonne à 1 & 12. Je croyais qu'il comptait le nombre de colonne à décaler et non pas qu'il fallait saisir le numéro de la colonne.

Merci et bonne journée !
 

justinev

XLDnaute Nouveau
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

Alors ta formule est super pour les petits fichiers contenant peu de valeur, mon fichier gère plus de 13000 valeurs au plus bas de sa forme et ça lui prend beaucoup de temps de comparer toutes les valeurs.

Sais-tu coder en VBA ? Une boucle serait appropriée dans mon cas ?
 

VDAVID

XLDnaute Impliqué
Re : VBA ou autres formules ! Calcul moyenne en fonction de, tant que

Re,

Un exemple de code qui te permet de faire ça:


Code:
Option Explicit
Option Base 1
Option Compare Text


Dim i As Long, h As Long, LFin As Long
Dim Ws As Worksheet
Dim ColL As String, ColM As String
Dim tabl()
Dim NbMoy As Integer, LStart As Integer


Sub Moyenne()

    Set Ws = Sheets("Feuil1")
     
    'Colonne où se trouve les livraisons
    ColL = "A"
    
    'Colonne où se trouve les poids totals par BL
    ColM = "L"
    
    'Ligne de départ du tableau
    LStart = 3
    
    NbMoy = 0
    
    '3 est la ligne de départ du tableau
    
    With Ws
    
        LFin = .Range(ColL & 65536).End(xlUp).Row
    
        tabl = .Range(ColL & LStart & ":" & ColM & LFin).Value
        ReDim Preserve tabl(UBound(tabl()), UBound(tabl(), 2) + 1)
        
        For i = LBound(tabl()) To UBound(tabl())
            
            For h = LBound(tabl()) To UBound(tabl())
            
                If tabl(h, LBound(tabl(), 2)) = tabl(i, LBound(tabl(), 2)) Then
                    
                    tabl(i, UBound(tabl(), 2)) = tabl(i, UBound(tabl(), 2)) + tabl(h, UBound(tabl(), 2) - 1)
                    NbMoy = NbMoy + 1
                
                End If
            
            Next h
            If NbMoy > 0 Then tabl(i, UBound(tabl(), 2)) = tabl(i, UBound(tabl(), 2)) / NbMoy
            NbMoy = 0
        
        Next i
        .Range(Cells(LStart, .Range(ColL & 1).Column), .Cells(LFin, Range(ColM & 1).Column + 1)).Value = tabl
    
    End With
        
End Sub

Par contre la colonne où se situe la moyenne va être incrémentée directement à droite de la colonne "Poids total par BL". Les valeurs dans cette colonne de droite vont être écrasées.
 

Discussions similaires

Statistiques des forums

Discussions
312 541
Messages
2 089 412
Membres
104 163
dernier inscrit
Lolo37