Calculer la moyenne de certaines cellules sur plusieurs feuilles

Résolu
Enaxor18 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
Boisgontierjacques Messages postés 175 Date d'inscription   Statut Membre Dernière intervention   -
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 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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 14512 Date d'inscription   Statut Membre Dernière intervention   2 746 > ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention  
 
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 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
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 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour

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

Cdlmnt
1
Enaxor18 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   64
 
0