Simplifier une formule
Résolu/Fermé
marceletienne
Messages postés
23
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
13 décembre 2020
-
7 août 2015 à 14:05
marceletienne Messages postés 23 Date d'inscription mardi 7 juillet 2015 Statut Membre Dernière intervention 13 décembre 2020 - 12 août 2015 à 16:32
marceletienne Messages postés 23 Date d'inscription mardi 7 juillet 2015 Statut Membre Dernière intervention 13 décembre 2020 - 12 août 2015 à 16:32
A voir également:
- Simplifier une formule
- Formule si et - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Formule excel moyenne - Guide
- Excel mise en forme conditionnelle formule - Guide
- Formule excel - Guide
6 réponses
Raymond PENTIER
Messages postés
58826
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
19 janvier 2025
17 273
8 août 2015 à 19:14
8 août 2015 à 19:14
Bonjour.
Moi non plus, je n'ai pas tout compris !
1) "somme des valeurs moyennes des lignes d'un tableau sans tenir compte des maxi et mini". Or ton fichier-exemple contient 10 colonnes ; donc on ne devrait pas avoir =((SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:F2))/3
mais =((SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:F2))/8, non ?
2) Pourquoi MIN(B2:F2), et non MIN(B2:K2) ?
3) Et à quoi servent les parenthèses avant et après les signes + ?
=(SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:F2))/3+(SOMME(B3:K3)-MAX(B3:K3)-MIN(B3:F3))/3+(SOMME(B4:K4)-MAX(B4:K4)-MIN(B4:F4))/3+(SOMME(B5:K5)-MAX(B5:K5)-MIN(B5:F5))/3+(SOMME(B6:K6)-MAX(B6:K6)-MIN(B6:F6))/3+(SOMME(B7:K7)-MAX(B7:K7)-MIN(B7:F7))/3+(SOMME(B8:K8)-MAX(B8:K8)-MIN(B8:F8))/3 fonctionne très bien ...
4) Le diviseur 3 suppose que ton tableau n'a que 5 colonnes (5-2=3) ; c'est donc la plage B2:F8 qui serait concernée. Puisque tu parles de cellules en colonne K, c'est que ton tableau occupe la plage B2:K8 ! Le diviseur devient 10-2=8. Dans le cas où ton tableau a un nombre quelconque de colonnes, il faut remplacer 7 fois le "3" de ta formule par (NB(Bi:Ki)-2) ce qui donne cette "usine à gaz" :
=(SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:K2))/(NB(B2:K2)-2)+(SOMME(B3:K3)-MAX(B3:K3)-MIN(B3:K3))/(NB(B3:K3)-2)+(SOMME(B4:K4)-MAX(B4:K4)-MIN(B4:K4))/(NB(B4:K4)-2)+(SOMME(B5:K5)-MAX(B5:K5)-MIN(B5:K5))/(NB(B5:K5)-2)+(SOMME(B6:K6)-MAX(B6:K6)-MIN(B6:K6))/(NB(B6:K6)-2)+(SOMME(B7:K7)-MAX(B7:K7)-MIN(B7:K7))/(NB(B7:K7)-2)+(SOMME(B8:K8)-MAX(B8:K8)-MIN(B8:K8))/(NB(B8:K8)-2)
Moi non plus, je n'ai pas tout compris !
1) "somme des valeurs moyennes des lignes d'un tableau sans tenir compte des maxi et mini". Or ton fichier-exemple contient 10 colonnes ; donc on ne devrait pas avoir =((SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:F2))/3
mais =((SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:F2))/8, non ?
2) Pourquoi MIN(B2:F2), et non MIN(B2:K2) ?
3) Et à quoi servent les parenthèses avant et après les signes + ?
=(SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:F2))/3+(SOMME(B3:K3)-MAX(B3:K3)-MIN(B3:F3))/3+(SOMME(B4:K4)-MAX(B4:K4)-MIN(B4:F4))/3+(SOMME(B5:K5)-MAX(B5:K5)-MIN(B5:F5))/3+(SOMME(B6:K6)-MAX(B6:K6)-MIN(B6:F6))/3+(SOMME(B7:K7)-MAX(B7:K7)-MIN(B7:F7))/3+(SOMME(B8:K8)-MAX(B8:K8)-MIN(B8:F8))/3 fonctionne très bien ...
4) Le diviseur 3 suppose que ton tableau n'a que 5 colonnes (5-2=3) ; c'est donc la plage B2:F8 qui serait concernée. Puisque tu parles de cellules en colonne K, c'est que ton tableau occupe la plage B2:K8 ! Le diviseur devient 10-2=8. Dans le cas où ton tableau a un nombre quelconque de colonnes, il faut remplacer 7 fois le "3" de ta formule par (NB(Bi:Ki)-2) ce qui donne cette "usine à gaz" :
=(SOMME(B2:K2)-MAX(B2:K2)-MIN(B2:K2))/(NB(B2:K2)-2)+(SOMME(B3:K3)-MAX(B3:K3)-MIN(B3:K3))/(NB(B3:K3)-2)+(SOMME(B4:K4)-MAX(B4:K4)-MIN(B4:K4))/(NB(B4:K4)-2)+(SOMME(B5:K5)-MAX(B5:K5)-MIN(B5:K5))/(NB(B5:K5)-2)+(SOMME(B6:K6)-MAX(B6:K6)-MIN(B6:K6))/(NB(B6:K6)-2)+(SOMME(B7:K7)-MAX(B7:K7)-MIN(B7:K7))/(NB(B7:K7)-2)+(SOMME(B8:K8)-MAX(B8:K8)-MIN(B8:K8))/(NB(B8:K8)-2)
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
9 août 2015 à 10:33
9 août 2015 à 10:33
Bonjour marceletienne,
bonjour Raymond,
Si tu n'es pas allergique à VBA, je peux te proposer une fonction personnalisée.
=CalculerSommeMoy(Plage1;Plage2)
A tester ...
https://www.cjoint.com/c/EHjiD4Vnv2X
A+
bonjour Raymond,
Si tu n'es pas allergique à VBA, je peux te proposer une fonction personnalisée.
=CalculerSommeMoy(Plage1;Plage2)
A tester ...
https://www.cjoint.com/c/EHjiD4Vnv2X
A+
marceletienne
Messages postés
23
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
13 décembre 2020
10 août 2015 à 10:04
10 août 2015 à 10:04
Bonjour Gyrus,
Je ne suis pas à priori allergique à VBA, mais je ne connais pas du tout.
Toutefois ta proposition m'intéresse sous réserve que tu veuilles bien me décomposer la démarche pour l'installer ainsi l'explication de son fonctionnement.
Merci dans tous les cas.
Je ne suis pas à priori allergique à VBA, mais je ne connais pas du tout.
Toutefois ta proposition m'intéresse sous réserve que tu veuilles bien me décomposer la démarche pour l'installer ainsi l'explication de son fonctionnement.
Merci dans tous les cas.
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
10 août 2015 à 10:56
10 août 2015 à 10:56
Bonjour,
Voici donc quelques explications :
Comme dit précédemment, j'ai utilisé une fonction personnalisée.
Pour la visualiser :
Appuie sur alt +F11 afin d'ouvrir l'éditeur.
Appuie sur ctrl +R afin d'ouvrir l'explorateur de projet.
Tu vois alors le Module1 sous « Modules »
En faisant un double-clic sur ce module, tu vois le code de la fonction CalculerSommeMoy.
Code commenté :
Si tu ouvres ton classeur et le classeur que je t'ai envoyé, tu verras alors les deux projets dans l'explorateur.
Pour copier le code, il suffit que tu sélectionnes le Module1 et que tu le fasses glisser dans le projet de ton classeur. La fonction est alors disponible.
A+
Voici donc quelques explications :
Comme dit précédemment, j'ai utilisé une fonction personnalisée.
Pour la visualiser :
Appuie sur alt +F11 afin d'ouvrir l'éditeur.
Appuie sur ctrl +R afin d'ouvrir l'explorateur de projet.
Tu vois alors le Module1 sous « Modules »
En faisant un double-clic sur ce module, tu vois le code de la fonction CalculerSommeMoy.
Code commenté :
Function CalculerSommeMoy(Plage1 As Range, Optional Plage2 As Range) As Double
Dim UnionPlage As Range, Ligne As Range, Cel As Range, L As Range
Dim Mini As Double, Maxi As Double, Cumul As Double, MoyenneD As Double
Dim N As Integer
'Si la plage2 (optionnelle) existe, on l'intègre à la plage traitée
If Not Plage2 Is Nothing Then
Set UnionPlage = Application.Union(Plage1, Plage2)
Else
Set UnionPlage = Plage1
End If
'On balaye chaque ligne de la plage
For Each Ligne In UnionPlage.Rows
'On définit la partie à traiter
Set L = Range(Ligne.Address)
'On relève la valeur minimum
Mini = Application.Min(L)
'On relève la valeur maximum
Maxi = Application.Max(L)
'On effectue la somme des valeurs
For Each Cel In L
If Cel <> "" Then
Cumul = Cumul + Cel.Value
N = N + 1
End If
Next Cel
'Si le nombre de valeurs est supérieur à 2, on calcule la moyenne _
après avoir soustrait le mini et le maxi.
'Puis on effectue le cumul des moyennes.
If N > 2 Then
MoyenneD = MoyenneD + (Cumul - Mini - Maxi) / (N - 2)
Cumul = 0
N = 0
End If
Next Ligne
'La fonction renvoie le cumul des moyennes
CalculerSommeMoy = MoyenneD
End Function
Si tu ouvres ton classeur et le classeur que je t'ai envoyé, tu verras alors les deux projets dans l'explorateur.
Pour copier le code, il suffit que tu sélectionnes le Module1 et que tu le fasses glisser dans le projet de ton classeur. La fonction est alors disponible.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
marceletienne
Messages postés
23
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
13 décembre 2020
11 août 2015 à 08:00
11 août 2015 à 08:00
Bonjour Gyrus,
Excuses pour la réponse tardive, mais petit fil de 3 ans en pension demande beaucoup de temps.
Merci pour ton explication détaillée, je comprend un peu la démarche (notion de basic), mais quelques petites choses me gênent.
Par exemple comment sont définies les zones de plage de calculs B2:K13;B16:K27 (plage1 et plage2)?
A+
Excuses pour la réponse tardive, mais petit fil de 3 ans en pension demande beaucoup de temps.
Merci pour ton explication détaillée, je comprend un peu la démarche (notion de basic), mais quelques petites choses me gênent.
Par exemple comment sont définies les zones de plage de calculs B2:K13;B16:K27 (plage1 et plage2)?
A+
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
524
11 août 2015 à 19:57
11 août 2015 à 19:57
Bonjour,
Dans ta demande, tu indiquais que le tableau était double et variable (nb de lignes et colonnes, exemple: tableau(b2k13;b16:k27).
Pour permettre que la fonction prenne en compte ces conditions, j'ai placé les deux plages comme arguments de la fonction.
Si une plage à prendre en compte est modifiée, il suffit de l'indiquer dans la fonction.
Exemple :
=CalculerSommeMoy(b2k132; b160:k270)
A+
Dans ta demande, tu indiquais que le tableau était double et variable (nb de lignes et colonnes, exemple: tableau(b2k13;b16:k27).
Pour permettre que la fonction prenne en compte ces conditions, j'ai placé les deux plages comme arguments de la fonction.
Si une plage à prendre en compte est modifiée, il suffit de l'indiquer dans la fonction.
Exemple :
=CalculerSommeMoy(b2k132; b160:k270)
A+
marceletienne
Messages postés
23
Date d'inscription
mardi 7 juillet 2015
Statut
Membre
Dernière intervention
13 décembre 2020
12 août 2015 à 16:32
12 août 2015 à 16:32
Bonjour Raymond,
Bonjour Gyrus,
L'installation de la macro dans mon dossier est faite (après quelques petits problèmes dus à l'impasse, à plusieurs reprises, de l'enregistrement proprement dit de cette dernière et non un simple copier/coller), elle fonctionne parfaitement.
C'est effectivement la solution qui permet la souplesse relative à l'évolution continue du tableau. Encore faut-il connaître le VBA bien utile dans ce cas..
Je vous remercie tous deux pour votre aide ainsi qu'à sa promptitude.
A+
Bonjour Gyrus,
L'installation de la macro dans mon dossier est faite (après quelques petits problèmes dus à l'impasse, à plusieurs reprises, de l'enregistrement proprement dit de cette dernière et non un simple copier/coller), elle fonctionne parfaitement.
C'est effectivement la solution qui permet la souplesse relative à l'évolution continue du tableau. Encore faut-il connaître le VBA bien utile dans ce cas..
Je vous remercie tous deux pour votre aide ainsi qu'à sa promptitude.
A+
8 août 2015 à 19:16
"la formule ne doit pas prendre en compte les cellules vides" ces cellules sont toujours en dernières colonnes ou concerner les dernières lignes, ou peuvent -elles se glisser entre 2 cellules renseignées ?
9 août 2015 à 08:03
1) comme expliqué, le contenu du tableau n'est pas figé. actuellement, 5 colonnes et 7 lignes contiennent une valeur. Dans ce cas, la moyenne d'une ligne est bien 5-2(max. et min.)=3
2)actuellement seules les cellules B2:F2 contiennent une valeur. De même que les lignes 2 à 8.
3)effectivement ces parenthèses peuvent être supprimées.
4)La réponse est en 1). Effet, pour la moyenne ou le mini. il faut neutraliser les cellules vides des dernières colonnes.
La formule doit tenir compte de "l'enrichissement progressif" du tableau.
Cordialement.