Faire la moyenne de différents groupes de cellule

Résolu/Fermé
Signaler
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014
-
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014
-
Bonjour tout le monde,

Je suis sur Excel 2007 en VBA et je souhaite réaliser le programme suivant.

J'ai des suites de 32 de données dans une même colonne sur une feuille Excel, et je souhaite faire la moyenne de chaque groupe de données.

Par Exemple:

Groupe 1: Feuille 1 cellule J4 à J35 moyenne à coller en feuille 3 cellule B4
Groupe 2: Feuille 1 cellule J37 à J68 moyenne à coller en feuille 3 cellule B5
etc...

Chaque groupe est espacé d'une ligne.

J'ai tenté plusieurs approches en enregistrant une macro ou en tentant d'utiliser les fonction Offset pour décaler ma sélection mais sans succès.

Merci d'avance pour votre aide et si j'ai par hasard oublié des informations je suis disponible pour donner des précisions.

6 réponses

Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
Bonjour

en B4 feuille2 essaies comme ceci
=MOYENNE(DECALER(Feuil1!J4;32*(LIGNE()-4);0;32;1))
à tirer vers le bas

Cordialement
0
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014

Merci beaucoup pour ta réponse rapide mais elle me fait penser que j'ai oublié un détail.

J'avais vu cette solution mais moi je souhaite réaliser ma fonction sous VBA en fait mon classeur et vide et en appuyant sur un bouton toutes mes moyennes se font et viennent ce mettre les unes en dessous des autres dans la feuille 3.

https://www.cjoint.com/?3Dxo2eitwTE

Voici mon classeur avec en feuille 1 et 2 mes programmes de récupération de données et en feuille 3 le template avec de ce que je veux récupérer
0
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
Désolé, je ne peux pas lire ton fichier. peux tu l'envoyer au format excel 2003 (fichier/enregistrer sous/type .... xls)
0
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014

0
Messages postés
3373
Date d'inscription
vendredi 27 novembre 2009
Statut
Membre
Dernière intervention
9 novembre 2017
719
Salut tu a un bon tutorial ici
0
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014

Oui merci ça je sais faire.
Le but de mon programme VBA est de ne pas à avoir faire ça 2000 fois
0
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
Un début de réponse
https://www.cjoint.com/?3DxpUq8lv9V

Cdlimnt
0
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014

Merci beaucoup !
Par contre je ne vois pas à quoi correspondent les variables après CalculMoyenne
0
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
Comme il me fallait faire un test et que je ne savais pas exactement ce que tu comptais faire, j'ai écris la procédure
Sub essai()
  Call CalculMoyenne("CD", 10, "Synthèse", 4)
End Sub

qui appelle CalculMoyenne
CalculMoyenne(FD As String, co As Long, FS As String, ko As Long)
dont les paramètres
FD est le nom de la feuille de données, co est le n° de colonne à traiter
FS est le nom de la feuille de Synthèse et ko la colonne où on mettra le résultat
Ce paramétrage devrait te permettre d'utiliser plusieurs fois CalculMoyenne

Cdlmnt
0
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014

Ouais merci beaucoup j'ai réussi à comprendre entre temps =)
0
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014

Tout d'abord merci beaucoup, utilisée plusieurs fois la fonction est une excellente idée!
Mais j'ai un petit problème, j'ai changé les varibles maintenant et le programme ressemble à ça


Option Explicit

Public Sub CalculMoyenne(sh1 As String, Colsh1 As Long, sh3 As String, Colsh3 As String)

Dim PLsh1 As Long, lifin As Long, n As Long, plage As Range, i As Long, moy As Double, PLsh3 As Long
PLsh1 = 4
PLsh3 = 4

With Sheets(sh1)

lifin = .Cells(Rows.Count, Colsh1).End(xlUp).Row
Set plage = .Range(.Cells(PLsh1, Colsh1), .Cells(lifin, Colsh1))
n = Application.WorksheetFunction.CountIf(plage, "") + 1

For i = 1 To n
Set plage = .Cells(PLsh1 + (i - 1) * 33, Colsh1).Resize(32, 1)
moy = Application.WorksheetFunction.Average(plage)
Sheets(sh3).Cells(PLsh3 + i - 1, Colsh3) = moy
Next i

End With

End Sub

Sub Synthese()

Dim derlig As Long

Call CalculMoyenne("CD", 10, "Synthese", "D")

Call CalculMoyenne("CD", 11, "Synthese", "I")

End Sub

Mais au niveau de la ligne en gras l'erreur d'éxecution 9 apparait
"l'indice n'appartient pas à la sélection"

Comment peut on l'enlever? j'ai fait pleins d'essais impossible de régler le problème
0
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
Quand tu es en erreur, passes le curseur sur les différentes variables pour voir leur valeur, tu verras (peut être) d'où vient le problème
Chez moi

Public Sub CalculMoyenne(FD As String, co As Long, FS As String, ko As Long)
Dim lidebFD As Long, lifin As Long, n As Long, plage As Range, k As Long, moy As Double, lidebFS
lidebFD = 4
lidebFS = 4
With Sheets(FD)
  lifin = .Cells(Rows.Count, co).End(xlUp).Row
  Set plage = .Range(.Cells(lidebFD, co), .Cells(lifin, co))
  n = Application.WorksheetFunction.CountIf(plage, "") + 1
  For k = 1 To n
    Set plage = .Cells(lidebFD + (k - 1) * 33, co).Resize(32, 1)
    moy = Application.WorksheetFunction.Average(plage)
    Sheets(FS).Cells(lidebFS + k - 1, ko) = moy
  Next k
End With
End Sub

Sub essai()
  Call CalculMoyenne("CD", 10, "Synthèse", 4)
  Call CalculMoyenne("CD", 11, "Synthèse", 9)
End Sub


ceci fonctionne
0
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
Je viens de voir l'erreur, le nom de la feuille au niveau de l'appel "Synthèse" et non "Synthese"
Comme quoi...

Cdlmnt
0
Messages postés
39
Date d'inscription
lundi 24 mars 2014
Statut
Membre
Dernière intervention
24 avril 2014

Ouais je viens de changer le nom de l'onglet le problème est réglé.
J'ai testé les plusieurs appels c'est nickel aussi donc merci beaucoup pour ton aide problème résolue
0