Somme pondérée par bloc (Excel 2002)
Résolu
Boylan
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Somme pondérée par bloc (Excel 2002)
- Formule somme excel colonne - Guide
- Moyenne pondérée - Guide
- Liste déroulante excel - Guide
- Excel trier par ordre croissant chiffre - Guide
- Somme si couleur excel - Guide
2 réponses
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 :
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...)
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...)
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)
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)
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
Fichier Joint: http://cjoint.com/data/fembIHEuil.htm
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é.
- à 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é.
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.
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.
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) !!
Merci pour le retour et n'oublie pas de mettre en résolu.