VBA : Moyenne d'une partie de ligne

Résolu/Fermé
Signaler
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
-
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
-
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

Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
9
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
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
9
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
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 677
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
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
9
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
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 677
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
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
9
Je vais tester ça merci !
0
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
9
apparemment ça ne fonctionne pas...
C'est bizarre, j'obtiens une valeur assez incompréhensible.
0
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 677
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
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
9
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
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
9
Et bien pour info, ça fonctionne.
Merci Pikaju
Au plaisir
0