VBA : Moyenne d'une partie de ligne

Résolu/Fermé
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 - 17 mai 2010 à 15:55
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 - 19 mai 2010 à 11:38
Bonjour,

J'ai posté un message un peu plus tôt dans la journée au sujet de calcul de moyennes sous vba.
Post résolu, cependant, j'ai un autre petit problème que je souhaite vous soumettre.
J'aimerais réaliser une moyenne d'un bout de ligne.
Globalement, pour k allant de 4 à 10, calculer moy((cellule(1,4),cellule(1,5)...cellule(1,k)).
Je pense que cela est simple, mais n'étant pas un expert, je galère un peu.

Accessoirement, je veux faire ça jusqu'à la dernière ligne de mon tableau (mais ça j'y arriverai je pense ;-))

Voilà ce que j'ai pour l'instant

Sub Bouton18_QuandClic()

Dim dercol5 As Byte
Dim derline5 As Byte
dercol5 = Range("B4").End(xlToRight).Column
derline5 = Range("B4").End(xlDown).Row


Cells(4, dercol5).Value = Application.Average(Range("B" & 6 : "B" & dercol5-1))
Next


End Sub



Merci d'avance et bon aprem


5 réponses

jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
18 mai 2010 à 10:27
Bonjour à tous,

Je me permets de réitérer ma demande.
Je suis un peu bloqué sans cela à vrai dire.

Merci beaucoup aux aideurs
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
18 mai 2010 à 11:39
Bon ben j'ai opté pour la bonne vieille solution de la somme puis de la division.

Dim dercol5 As Byte
Dim derline5 As Byte
dercol5 = Range("B4").End(xlToRight).Column
derline5 = Range("B4").End(xlDown).Row

Dim somme As Integer
Dim moyenne As Integer

somme = 0

Dim b As Byte
For b = 6 To dercol5 - 1

somme = somme + Cells(4, b).Value

Next
moyenne = somme / (dercol5 - 1 - 5)
Cells(4, dercol5).Value = moyenne


ça fonctionne, mais quand même, si certains peuvent me donner la syntaxe à utiliser pour faire directement la moyenne, pour ma culture...merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 18/05/2010 à 11:43
Salut,
Je ne connait pas la fonction :
Application.Average
mais perso, pour une moyenne je ferais comme ceci : !!! Il se peux que je n'ai rien compris à ton souhait. Pense donc à tester cette macro sur une copie de ton fichier...

Sub Bouton18_QuandClic() 
Dim dercol5, derline5, i, j ,nbre As Integer 
Dim moyenne As Double
dercol5 = Range("B4").End(xlToRight).Column 
derline5 = Range("B4").End(xlDown).Row 
For i = 5 To derline5 'boucle sur toutes les lignes à partir de 5 
If dercol5 - 1 < 2 then Exit Sub 
nbre = dercol5 - 3 
For j = 2 To dercol5 - 1 'boucle des colonnes B à dercol5 - 1 
moyenne = moyenne + Cells(i, j).Value 
Next j 
Cells(i, dercol5).Value = CDbl(moyenne / nbre)
Next i 
End Sub


Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
18 mai 2010 à 11:56
Merci pour ta réponse Pijaku,

Mais le bout de code que j'ai proposé au dessus règle déjà mon problème.
Je me demandais juste s'il existait une fonction permettant de faire directement une moyenne sur un morceau de ligne, et je m'explique car effectivement je ne suis pas forcément très clair.

En gros faire la moyenne de F4 à F(dercol5-1).
Je ne peux pas écrire average(F4 : F#) puisque dercol5-1 est variable et c'était mon soucis.

Mais j'ai ce que j'ai besoin maintenant merci quand même !

Petite question subsidiaire quand même si tu me le permets.
Comment fait-on pour définir une variable en fonction d'une autre ?

Je veux que pour t allant de 4 à derline5, j'obtienne la moyenne dans la dernière case.
J'ai maintenant ma moyenne (code précédent), est ce possible d'écrire quelquechose comme somme(t) = blablabla ?

Désolé, je suis encore débutant sous vba et merci pour ton aide.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 mai 2010 à 14:04
Pour la moyenne essaye ceci :
Cells(4, dercol5).Value = Application.Average(Range("F4:F" & dercol5-1))

A toi de définir au préalable dercol5
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
18 mai 2010 à 14:07
Je vais tester ça merci !
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
18 mai 2010 à 14:17
apparemment ça ne fonctionne pas...
C'est bizarre, j'obtiens une valeur assez incompréhensible.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 mai 2010 à 16:13
quel c** je fais...
Ben oui on calcule la moyenne entre F4 et F... Donc c'est po ça... Essaye :
Cells(4, dercol5).Value = Application.Average(Range(Cells(4, 6), Cells(4, dercol5 - 1)))

Excuse moi encore, par moment ça crève l'écran et on ne voit rien...
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
18 mai 2010 à 16:28
héhé, pas de soucis ;-)
Comme je le disais j'ai opté pour la solution "longue" de calcul de somme puis la diviser.
Mais c'est très bien comme ça.
Je vais quand même essayer ta solution pour la "culture" et juste pour dire aux autres si ça fonctionne.

Merci en tous cas
0

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

Posez votre question
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
19 mai 2010 à 11:38
Et bien pour info, ça fonctionne.
Merci Pikaju
Au plaisir
0