XL pour MAC Moyenne pondérée sans O

lola18

XLDnaute Junior
Bonjour le forum,

J'ai une formule basique SOMME((D2*E2)+(D3*E3)+(D4*E4)+(D5*E5))/SOMME(D2:D5) que je dois appliquer à d'autres plages qui ne sont pas de la même taille, ex SOMME((D7*E7)+(D8*E8)+(D9*E9)+(D10*E10)+(D11*E11))/SOMME(D7:D11).

Comment appliquer automatiquement cette formule, la simplifiée ? champs calculé TCD ?

Merci de votre aide🙏
Fichier en PJ avec en vert les résultats attendus
 

Pièces jointes

  • Feuille de calcul sans titre.xlsx
    47.5 KB · Affichages: 5
Solution
Hello
les macros, c'est pas pour toi.. parce que tu ne sais pas comment les utiliser?? ou parce que tu ne peux pas les utiliser ?
c'est assez simple
1) les fichiers excel qui contiennent des macros ont une extension ".xlsm" m comme macro
2) pour ouvrir l'éditeur vba
vérifie que dans le ruban, l'onglet développeur apparait (sinon, il faut simplement aller dans les options excel / personaliser le ruban et cocher la case développeur dans la liste de droite)
3) Alt+F11 pour ouvrir l'éditeur vba
et dans l'arborescence du projet (à gauche) tu doubles clic sur le Module1 pour faire apparaitre la fenetre d'édition du code à droite==> ici tu y retrouve la macro "résultats" que j'ai écrite
ensuite.. suffit de regarder le code==> en...

vgendron

XLDnaute Barbatruc
par formule, il faudrait pouvoir détecter la zone à prendre en compte pour les calculs... surement possible à base de grande.valeur, decaler, si (ligne.....) mais me semble complexe..

sinon.. une solution par macro que voici..
 

Pièces jointes

  • Feuille de calcul sans titre.xlsm
    93.9 KB · Affichages: 5

lola18

XLDnaute Junior
par formule, il faudrait pouvoir détecter la zone à prendre en compte pour les calculs... surement possible à base de grande.valeur, decaler, si (ligne.....) mais me semble complexe..

sinon.. une solution par macro que voici..
Mince ...

En fait j'ai besoin d'une moyenne pondérée (par la valeur de la colonne D) avec les résultats de juillet et aout... du coup les 0 impactent mon résultats...

Merci bcp pour la macro, je vais essayé de l'appliquer à mon fichier..
 

vgendron

XLDnaute Barbatruc
Si tu veux ignorer les lignes dont la valeur "Juillet" ou "Aout" est nulle, suffit de modifier la macro comme ceci
VB:
Sub résultats()
With ActiveSheet
    fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'dernière ligne de la feuille +1 pour pouvoir mettre le dernier calcul
    tabdata = .Range("A2:H" & fin).Value 'toute la feuille dans un tablo
    
'initialisation des calculs
    ProdJ = 0
    ProdA = 0
    sommeJ = 0
    sommeA = 0

    For i = LBound(tabdata, 1) To UBound(tabdata, 1) 'pour chaque ligne
        If tabdata(i, 5) <> 0 Then 'si juillet<>0
            ProdJ = ProdJ + tabdata(i, 4) * tabdata(i, 5) 'on caclule le produit Juillet*valeur 
            sommeJ = sommeJ + tabdata(i, 4) 'on calcule la somme
        End If
        If tabdata(i, 6) <> 0 Then 'idem pour aout
            ProdA = ProdA + tabdata(i, 4) * tabdata(i, 6)
            sommeA = sommeA + tabdata(i, 4)
        End If
        If tabdata(i, 3) = "" Then 'si on est sur une ligne vide
            tabdata(i, 7) = ProdJ / sommeJ 'on met le résultat pour juillet
            tabdata(i, 8) = ProdA / sommeA 'on met le résultat pour aout
'réinitialise les calculs
            ProdJ = 0
            ProdA = 0
            sommeJ = 0
            sommeA = 0
        End If
    Next i
    .Range("A2").Resize(UBound(tabdata, 1), UBound(tabdata, 2)) = tabdata 'on colle le tablo final dans la feuille
End With
End Sub
 

lola18

XLDnaute Junior
Si tu veux ignorer les lignes dont la valeur "Juillet" ou "Aout" est nulle, suffit de modifier la macro comme ceci
VB:
Sub résultats()
With ActiveSheet
    fin = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'dernière ligne de la feuille +1 pour pouvoir mettre le dernier calcul
    tabdata = .Range("A2:H" & fin).Value 'toute la feuille dans un tablo
   
'initialisation des calculs
    ProdJ = 0
    ProdA = 0
    sommeJ = 0
    sommeA = 0

    For i = LBound(tabdata, 1) To UBound(tabdata, 1) 'pour chaque ligne
        If tabdata(i, 5) <> 0 Then 'si juillet<>0
            ProdJ = ProdJ + tabdata(i, 4) * tabdata(i, 5) 'on caclule le produit Juillet*valeur
            sommeJ = sommeJ + tabdata(i, 4) 'on calcule la somme
        End If
        If tabdata(i, 6) <> 0 Then 'idem pour aout
            ProdA = ProdA + tabdata(i, 4) * tabdata(i, 6)
            sommeA = sommeA + tabdata(i, 4)
        End If
        If tabdata(i, 3) = "" Then 'si on est sur une ligne vide
            tabdata(i, 7) = ProdJ / sommeJ 'on met le résultat pour juillet
            tabdata(i, 8) = ProdA / sommeA 'on met le résultat pour aout
'réinitialise les calculs
            ProdJ = 0
            ProdA = 0
            sommeJ = 0
            sommeA = 0
        End If
    Next i
    .Range("A2").Resize(UBound(tabdata, 1), UBound(tabdata, 2)) = tabdata 'on colle le tablo final dans la feuille
End With
End Sub
Merci bcp
 

lola18

XLDnaute Junior
Merci @vgendron pour la Macro, mais malgré ton accompagnement c'est pas pour moi

Du coup j'ai renommé la discussion pour que ce soit plus clair

J'ajoute un exemple de ce que je souhaiterai obtenir, je n'ai pas le détail du calcul (provient d'un logiciel) mais le résultat est juste.

J'ai conservé les sommes prod et ajouté le résultats recherché dans le fichier joint

Merci d'avance pour votre aide
 

Pièces jointes

  • exemple 2.xlsx
    45.7 KB · Affichages: 8

vgendron

XLDnaute Barbatruc
Hello
les macros, c'est pas pour toi.. parce que tu ne sais pas comment les utiliser?? ou parce que tu ne peux pas les utiliser ?
c'est assez simple
1) les fichiers excel qui contiennent des macros ont une extension ".xlsm" m comme macro
2) pour ouvrir l'éditeur vba
vérifie que dans le ruban, l'onglet développeur apparait (sinon, il faut simplement aller dans les options excel / personaliser le ruban et cocher la case développeur dans la liste de droite)
3) Alt+F11 pour ouvrir l'éditeur vba
et dans l'arborescence du projet (à gauche) tu doubles clic sur le Module1 pour faire apparaitre la fenetre d'édition du code à droite==> ici tu y retrouve la macro "résultats" que j'ai écrite
ensuite.. suffit de regarder le code==> en général, si tu traduits en français, tu comprends ce que ca fait
ex: With ACtivesheet ===> avec la feuille active
après, j'essaie toujours (ou presque) de mettre des commentaires pour expliquer les instructions

note: pour l'instant, la macro met le résultat calculé à chaque fois qu'il y a une cellule vide en colonne C
j'imagine qu'au final, il faudra que la macro soit capable de detecter les changements de "sous catégorie.. ou de catégorie.. ou les deux??)==> dans ce cas..un TCD est tout aussi efficace je crois.

dans ton dernier exemple.. comment fais-tu pour arriver à 9.83 ??
 

Pièces jointes

  • Feuille de calcul sans titre.xlsm
    97.2 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 945
Membres
103 989
dernier inscrit
jralonso