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 14405 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 25 avril 2024 2 703
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 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
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 14405 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 25 avril 2024 2 703 > ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024
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