Calculer la moyenne de certaines cellules sur plusieurs feuilles

Résolu/Fermé
Enaxor18
Messages postés
23
Date d'inscription
jeudi 8 octobre 2015
Statut
Membre
Dernière intervention
4 octobre 2018
- 8 oct. 2015 à 17:49
Boisgontierjacques
Messages postés
175
Date d'inscription
jeudi 19 septembre 2013
Statut
Membre
Dernière intervention
26 décembre 2018
- 8 oct. 2015 à 21:50
Hello tout le monde !

Je vous pose mon problème :

Je souhaite calculer la moyenne de plusieurs cellules sur différentes feuilles en prenant en compte un critère textuel en plus. Par exemple :
Feuille Salle 1, A2 : Toto, G2 : 3
Feuille Salle 1, A3 : Titi, G3 : 6
Feuille Salle 1, A10 : Toto, G10 : 8

Feuille Salle 2, A2 : Toto, G2 : 5
Feuille Salle 2, A12 : Titi, G3 : 4
Feuille Salle 2, A23 : Toto, G10 : 13

Je ne veux connaître que la moyenne de Toto (3+8+5+13)/4=7.25
L'ordre des colonnes ne change pas, je cherche toujours les informations en colonne A et G. Mais la longueur de la plage peut varier d'une feuille à l'autre.

Je m'en sors à peu près en ce qui concerne les formules, mais en macro je n'y connais rien, et ce fichier est à destination d'une personne qui ne connait pas les macros non plus.

Merci par avance pour votre aide, vous êtes géniaux !! ;D

5 réponses

via55
Messages postés
13800
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
10 août 2022
2 471
Modifié par via55 le 8/10/2015 à 19:01
Re

Formule plus courte non ou alors il faut passer par une macro en VBA et une fonction personnalisée; est ce que tu souhaites ?

En ce cas :
- mettre la feuille récap en dernier
- Copier coller la macro suivante dans un module (ALT +F11 pour ouvrir Editeur VBA puis Insertion et Module coller la macro dans la page
-Fermer Editeur

Function moyfeuille(nom As Range)
Boucle sur les feuilles jusqu'à l'avant dernière
For n = 1 To Sheets.Count - 1
' SOMME SI des notes en col G si nom en A
a = Application.WorksheetFunction.SumIfs(Sheets(n).Range("G:G"), Sheets(n).Range("A:A"), nom)
' NB SI du nom
b = Application.WorksheetFunction.CountIf(Sheets(n).Range("A:A"), nom)
' incrementation Total
Total = Total + a
'Incrémentation nbre notes
nbnotes = nbnotes + b
Next
' Valeur  calculée à retourner
moyfeuille = Total / nbnotes
End Function


La fonction s'utilise comme toute fonction Excel à partir de son nom (est dans la liste des fonctions)
Par exemple dans la feuille Recap en A2 le nom Toto, en B2 mettre la formule
=moyfeuille(A2)
pour avoir le résultat

Cdlmnt
Via


"L'imagination est plus importante que le savoir." A. Einstein
2
Enaxor18
Messages postés
23
Date d'inscription
jeudi 8 octobre 2015
Statut
Membre
Dernière intervention
4 octobre 2018

8 oct. 2015 à 19:13
Re !

Super cool !

J'ai tout intégré, cependant quand j'active ma formule =moyfeuille(a2), l'appli pour les macros s'ouvre avec le message "erreur de compilation : erreur de syntaxe",

et me surligne la phrase "Boucle sur les feuilles jusqu'à l'avant dernière" en bleu et "Function moyfeuille(nom As Range)" en jaune fluo.
0
Enaxor18
Messages postés
23
Date d'inscription
jeudi 8 octobre 2015
Statut
Membre
Dernière intervention
4 octobre 2018

8 oct. 2015 à 19:30
C'est bon j'ai trouvé ! il manquait juste une apostrophe ! ;)

Pour ceux ou celles qui auraient besoin de la solution :

Function moyfeuille(nom As Range)
' Boucle sur les feuilles jusqu'à l'avant dernière
For n = 1 To Sheets.Count - 1
' SOMME SI des notes en col G si nom en A
a = Application.WorksheetFunction.SumIfs(Sheets(n).Range("G:G"), Sheets(n).Range("A:A"), nom)
' NB SI du nom
b = Application.WorksheetFunction.CountIf(Sheets(n).Range("A:A"), nom)
' incrementation Total
Total = Total + a
'Incrémentation nbre notes
nbnotes = nbnotes + b
Next
' Valeur calculée à retourner
moyfeuille = Total / nbnotes
End Function
0
ccm81
Messages postés
10416
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
10 août 2022
2 303
8 oct. 2015 à 19:31
En attendant que via55 (salut à toi) ai fini de dîner, tu mets un apostrophe devant cette ligne pour l'inhiber ( 'Boucle .....) ça la transformera en commentaire non interprété

Cdlmnt
0
via55
Messages postés
13800
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
10 août 2022
2 471 > ccm81
Messages postés
10416
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
10 août 2022

8 oct. 2015 à 20:22
De retour de dîner, salut CCM, oui j'ai mis les commentaires après coup directement dans le message et je n'ai pas fait attention qu'il manquait l'apostrophe, le clavier ne suit pas toujours ma vitesse de frappe lol,
Merci d'avoir rectifié

Cdlmnt
Via
0
via55
Messages postés
13800
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
10 août 2022
2 471
8 oct. 2015 à 18:06
Bonjour

Par formule :
=(SOMME.SI('Salle 1'!A:A;"Toto";'Salle 1'!G:G)+SOMME.SI('Salle 2'!A:A;"Toto";'Salle 2'!G:G))/(NB.SI('Salle 1'!A:A;"Toto")+NB.SI('Salle 2'!A:A;"Toto"))

Cdlmnt
Via
1
ccm81
Messages postés
10416
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
10 août 2022
2 303
8 oct. 2015 à 18:07
Bonjour

Essaies ceci (résultat en feuille 3)
http://www.cjoint.com/c/EJiqg67B8h2

Cdlmnt
1
Enaxor18
Messages postés
23
Date d'inscription
jeudi 8 octobre 2015
Statut
Membre
Dernière intervention
4 octobre 2018

8 oct. 2015 à 18:23
Bonjour à vous deux,

Merci pour vos solutions, en effet ça marche très bien et cela résout ma problématique !

Cependant, j'ai 8 feuilles, donc la formule est extrêmement longue et sera amenée à bouger jusqu'à normalement 12 feuilles.

Dans l'idéal, auriez-vous une formule plus courte ?
Si ce n'est pas le cas merci beaucoup quand même, c'est déjà super !!!!

Enaxor18
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Boisgontierjacques
Messages postés
175
Date d'inscription
jeudi 19 septembre 2013
Statut
Membre
Dernière intervention
26 décembre 2018
64
8 oct. 2015 à 21:50
0