Somme pondérée par bloc (Excel 2002)

Résolu/Fermé
Boylan - 4 mai 2010 à 10:28
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 - 5 mai 2010 à 14:06
Bonjour,
Je souhaiterais faire une "somme par bloc". Je m'explique.
J'ai une serie de 810 nombres dans une colonne.
Ces nombres sont en fait 81 bloc de 10 nombres.
J'ai aussi une série de 81 nombre de pondération.
Je voudrais avoir en résultat dans la colonne adjacente:
- à la première ligne, la somme pondérée des premiers nombre de chaque blocs
- à la deuxieme ligne, la somme pondérée des 2 premiers nombres de chaque blocs
- ...
- ...
- à la dizième ligne, la somme pondérée des 10 nombres de chaque bloc.

Merci d'avance.
A voir également:

2 réponses

eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
Modifié par eriiic le 5/05/2010 à 11:25
Re,

Oui, c'est beaucoup mieux avec les formules...
Ca doit être réalisable par formules mais plutôt coton.
Le mieux est de faire une fonction personnalisée :
Function SommeBlocPonderee(valeurs As Range, coefficients As Range, tailleBloc As Long, rang As Long) As Double    
    Dim i As Long, j As Long    
    If valeurs.Cells.Count <> coefficients.Cells.Count * tailleBloc Then SommeBlocPonderee = -999999999    
    If valeurs.Columns.Count > 1 Or coefficients.Column.Count > 1 Then SommeBlocPonderee = -999999999    
    For i = 0 To (valeurs.Cells.Count / tailleBloc) - 1    
        For j = 1 To rang    
            SommeBlocPonderee = SommeBlocPonderee + valeurs.Cells(i * tailleBloc + j, 1) * coefficients.Cells(i + 1, 1)    
        Next j    
    Next i    
End Function


A mettre dans un module.
Dans un fichier quelconque qui doit être ouvert lors du besoin, ou à sauvegarder dans son fichier de fonctions perso ou en macro complémentaire .xla si tu en as un besoin régulier et que tu veux que la fonction soit disponible dès l'ouverture d'excel.
J'ai fait une gestion sommaire des erreurs de parametres.
Si le nombre de blocs * taille des blocs <> nombre de valeurs alors -9999999 en résultat.
Pareil si plus d'une colonne pour les valeurs ou coefficients.

exemple : sommeBlocPonderee.xls
En C tes formules,
en D : =SommeBlocPonderee($A$1:$A$25;$B$1:$B$5;5;LIGNE())
(en 4ème paramètre j'ai mis ligne() pour que la recopie incrémentée fonctionne, tu peux mettre directement le rang, 3 par exemple pour la somme pondérée des 3 premiers items de chaque bloc)

eric

PS : une autre version car je me suis aperçu qu'on pouvait se passer du parametre tailleBloc et quand même controler la cohérence des parametres.
D'autre part dans le 1er fichier un s a sauté dans columns
sommeBlocPonderee v2.xls (je n'ai pas modifié la capture écran...)
1
Merci eriiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiic !!!
Là tu m'aides comme un chef ! En plus ça m'a forcé à regarder de plus près les macro complémentaire et visual basic.
Je vais encore regarder ça de plus près car je pense que j'aurais besoin dans la suite de mon projet de recoder quelques fonctions complémentaires.
En tout cas merci mille fois, tu deviens mon deuxieme idol Eric (après cantona) !!
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
5 mai 2010 à 14:06
Si tu penses revenir poser des question tu devrais t'inscrire, c'est plus facile pour suivre les réponses.
Merci pour le retour et n'oublie pas de mettre en résolu.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
4 mai 2010 à 10:57
Bonjour,

ci joint proposition
https://www.cjoint.com/?fek4b0oARX

Si tu commences en ligne 2
=SI(MOD(LIGNE()-2;10)=0;A2;B1+A2)
en ligne 3
=SI(MOD(LIGNE()-3;10)=0;A2;B1+A2)
0
Merci ça m'aide beaucoup déja. Par contre, je me demande comment avoir la colonne F (du fichier xls que je re-joint) quand on a beaucoup plus de blocs (je vais devoir faire ça sur 8, 256, 625, 1296 et 2401 blocs). Je me vois mal écrire la formule dans ces cas là?

Fichier Joint: http://cjoint.com/data/fembIHEuil.htm
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 306
4 mai 2010 à 12:23
Le problème est complètement différent et ne correspond en rien avec ton 1° message!!!
0
Effectivement, je voulais dire:
- à la première ligne, la somme pondérée du premier nombre de chaque blocs
- à la deuxieme ligne, la somme pondérée des sommes des 2 premiers nombres de chaque blocs
- ...
- ...
- à la dizième ligne, la somme pondérée des sommes des 10 premiers nombres de chaque bloc.

Désolé.
0
eriiic Messages postés 24597 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 22 septembre 2024 7 235
5 mai 2010 à 08:23
Bonjour,

Tu dis à la deuxieme ligne, la somme pondérée des sommes des 2 premiers nombres et dans ton fichier joint on voit que c'est la somme des 2nds nombres...
Peux-tu valider l'un ou l'autre stp ?
eric
0
Je m'explique:
Disons que mes données sont 5 blocs de 5 valeurs. A chacun des blocs correspond un poids:
Pour ma colonne A pour les données:
A1 A2 A3 A4 A5
A6 A7 A8 A9 A10
A11 A12 A13 A14 A15
A16 A17 A18 A19 A20
A21 A22 A23 A24 A25
Colonne B pour les poids:
B1 B2 B3 B4 B5

Je voudrais en résultat dans ma colonne C:
C1=A1*B1+A6*B2+A11*B3+A16*B4+A21*B5
C2=(A1+A2)*B1+(A6+A7)*B2+(A11+A12)*B3+(A16+A17)*B4+(A21+A22)*B5
C3=(A1+A2+A3)*B1+(A6+A7+A8)*B2+(A11+A12+A13)*B3+(A16+A17+A18)*B4+(A21+A22+A23)*B5
C4=(A1+A2+A3+A4)*B1+(A6+A7+A8+A9)*B2+(A11+A12+A13+A14)*B3+(A16+A17+A18+A19)*B4+(A21+A22+A23+A24)*B5
C4=(A1+A2+A3+A4+A5)*B1+(A6+A7+A8+A9+A10)*B2+(A11+A12+A13+A14+A15)*B3+(A16+A17+A18+A19+A20)*B4+(A21+A22+A23+A24+A25)*B5

J'aimerais pouvoir faire ça sachant qu'en réalité ma colonne A contient 1250 valeurs et que suivant le fichier xls que je traite, la taille des mes blocs varie et donc leur nombre:
250 valeurs * 5 blocs
50*25
10*125
2*625

J'espère que j'ai été clair cette fois.
Merci pour votre aide.
0