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 177 Statut Membre -
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

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    1. 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
    2. 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
    3. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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
      1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759 > ccm81 Messages postés 11033 Statut Membre
         
        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
  2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

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

    Cdlmnt
    1
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question