Macro calculant la moy de plusieurs feuilles

Fermé
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012 - 4 mars 2012 à 14:31
ccm81 Messages postés 10562 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 mars 2023 - 7 mars 2012 à 10:22
Bonjour,
Je vais essayer de me faire comprendre après plusieurs heures de recherche.
Je voudrais créer une macro qui mette à jour une feuille "bilan"
La feuille bilan permet de calculer la moyenne d'une cellule située sur plusieurs feuilles.
Je m'explique :
Dans la feuille bilan, dans la cellule B6, je souhaite calculer la moyenne de toutes mes cellules B6 des feuilles nommées evaluation (i). Le nombre de feuille evaluation(i) n'est pas fixe, j'en rajoute au fur et à mesure des semaines. Donc je veux que lorsqu'une nouvelle feuille est crée lorsque je clique sur la macro de mise à jour, la feuille bilan refasse le calcul
Et ainsi de suite pour la cellule B7,B8....., C6,C7...
Merci d'avance

6 réponses

eriiic Messages postés 24513 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 mars 2023 7 168
Modifié par eriiic le 4/03/2012 à 19:39
Bonjour,

Si tes feuilles sont consécutives tu n'as pas besoin de macro :
=MOYENNE(Eval1:Eval1000!B6)
assure toi seulement d'insérer tes feuilles à prendre en compte, et seulement celles là, entre Eval1 et Eval1000 (qui peuvent très bien ne pas servir, la fonction moyenne ne tient pas compte des cellules vides)

eric
1
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012
6 mars 2012 à 10:47
Merci mais ta solution ne correspond pas à ce que je recherche. Car si la feuille n'existe pas ça m'affiche une erreur de valeur.
0
eriiic Messages postés 24513 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 mars 2023 7 168
6 mars 2012 à 17:49
Bien sûr qu'il faut que les 2 feuilles d'extrémité existe, ce n'est pas le plus dur.
C'est plus simple qu'une macro que tu ne sais pas faire évoluer...
Tu les appelles 'début' et 'fin' et tu t'insères entre.

eric
0
ccm81 Messages postés 10562 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 mars 2023 2 339
Modifié par ccm81 le 4/03/2012 à 15:05
bonjour

un exemple attaché à un bouton (activeX) de la feuille bilan qui fait la moyenne des cellules des feuilles "evaluation" ayant la même adresse que celles de "plage"

Option Explicit 

Const plage = "$B$6:$C$8" 
Const nomF = "evaluation" 

Private Sub btOK_Click() 
Dim nuF As Long, nbF As Long 
Dim s As Double 
Dim c As Range 
Dim li As Long, co As Long 
For Each c In Range(plage) 
  li = c.Row 
  co = c.Column 
  s = 0 
  nbF = 0 
  For nuF = 1 To Sheets.Count 
    If InStr(1, Sheets(nuF).Name, nomF) > 0 Then 
      s = s + Sheets(nuF).Cells(li, co).Value 
      nbF = nbF + 1 
    End If 
  Next nuF 
  c.Value = s / nbF 
Next c

bonne suite

bonne suite
0
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012
6 mars 2012 à 11:04
Merci,
A la suite du code Const plage = "$B$6:$y$45"
Const nom = "evaluation"
J'ai un message d'erreur qui indique end sub attendu
0
ccm81 Messages postés 10562 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 mars 2023 2 339
Modifié par ccm81 le 6/03/2012 à 11:24
exact, j'ai zappé la dernière ligne de la procedure
les deux dernière lignes

Next c  
End Sub

https://www.cjoint.com/?0CglxNX3N0d

bonne suite
0
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012
6 mars 2012 à 12:33
Merci ça fonctionne très bien
Puis-je te déranger à nouveau ?
Est-il possible d'ajouter une condition pour qu'il ne renvoi un résultat que si la cellule contient une valeur ?
0
ccm81 Messages postés 10562 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 mars 2023 2 339
6 mars 2012 à 13:44
re

ça doit être possible, mais que veux tu dire exactement par "la cellule contient une valeur" : quelle cellule? de quelle feuille? le mieux est de donner un exemple

bonne suite
0
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012
6 mars 2012 à 13:59
En fait je veux que dans la feuille bilan les cellues restent vides si la moyenne vaut 0
0

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

Posez votre question
ccm81 Messages postés 10562 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 mars 2023 2 339
6 mars 2012 à 16:10
re

quelque chose comme ça?
https://www.cjoint.com/?0CgqiNUBex4

bonne suite
0
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012
6 mars 2012 à 17:41
Ah effectivement je vois que ma demande n'était pas appropriée. En fait, je veux que rien ne s'affiche si il n'y a pas de valeur dans les cellules de chaque feuille.
Par exemple si dans toutes les feuilles eval, les cellules C7 et B9 sont vides je veux que dans bilan ces cellules restent vide. Par contre ce qui est bien avec ton nouveau code c'est qu'il ne considère pas une cellule vide comme 0 dans la moyenne.
0
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012
6 mars 2012 à 18:00
Je te remercie j'ai modifié moi même mon système d'évaluation. Ca fonctionne très bien merci.
0
blanchehermine35 Messages postés 11 Date d'inscription dimanche 26 juillet 2009 Statut Membre Dernière intervention 6 octobre 2012
6 mars 2012 à 18:00
Avec le fichier joint ça aide vraiment.
Très pratique
0
ccm81 Messages postés 10562 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 mars 2023 2 339
7 mars 2012 à 10:22
bonjour

une modification pour différencier les cellules vides de celles qui contiennent un 0 à prendre en compte dans le calcul de la moyenne

Private Sub btOK_Click()
Dim nuF As Long, nbv As Long
Dim s As Double, v
Dim c As Range
Dim li As Long, co As Long
For Each c In Range(plage)
  li = c.Row
  co = c.Column
  s = 0
  nbv = 0
  For nuF = 1 To Sheets.Count
    If InStr(1, Sheets(nuF).Name, nomF) > 0 Then
      v = Sheets(nuF).Cells(li, co).Value
      If v <> "" Then
        s = s + v
        nbv = nbv + 1
      End If
    End If
  Next nuF
  If nbv = 0 Then
    c.Value = ""
  Else
    c.Value = s / nbv
  End If
Next c
End Sub

bonne journée
0