Moyenne et VBA

Bonjour à tous,

Je suis nouveau dans le forum et autodidacte sur VBA.

Je fais appel à vos connaissances pour m'aider à résoudre mon problème.

J'ai un fichier avec un peu plus de 2000 lignes et je voudrais faire une moyenne toutes les 100 lignes sur la colonne à côté et sans lignes vides. Je pense qu'il faudrait utiliser une boucle mais j'ai du mal à la faire.

Merci pour votre aide.

Bonjour,

Ce que vous voulez faire a l'air largement faisable sans utiliser VBA, en inscrivant la formule =MOYENNE() sur la ligne de votre choix et en étendant la sélection. Puis "copier"/"coller les valeurs" de votre colonne de résultats dans une autre colonne avant de faire une suppression des doublons pour supprimer toutes les cases vides.

En tant qu'autodidacte, il est possible d'enregistrer des macros via l'enregistreur de macro dans la bande "Développeur". Vous commencez l'enregistrement, vous effectuez les tâches décrites précédemment et vous arrêtez l'enregistrement. Voilà votre macro est faite

Cindy

Bonjour,

Pourquoi toutes les 100 lignes ?

Et moyenne par lot de 100 lignes, ou cumul des moyennes sucessives (1re sur 100, 2e sur 200, 3e sur 300, ainsi de suite...) ?

Cordialement.

Bonjour,

Oui effectivement une petite boucle :

y = 1
For i = 1 To ActiveSheet.UsedRange.Rows.Count
    If i Mod 100 = 0 Then
        ActiveSheet.Cells(i, ActiveSheet.UsedRange.Columns.Count + 1).FormulaLocal = "=MOYENNE(range(cells(y,2), cells(i,2))"
        y = i
    End If
Next i

ou sinon tu peux passer par une formule

=si(MOD(G100/100);moyenne(F1;F100)

Bonne continuation

y = 1
For i = 1 To ActiveSheet.UsedRange.Rows.Count
    If i Mod 100 = 0 Then
        ActiveSheet.Cells(i, ActiveSheet.UsedRange.Columns.Count + 1).FormulaLocal = "=MOYENNE(range(cells(y,2), cells(i,2))"
        y = i 
    End If
Next i

Ta formule ne fonctionnera pas écrite comme ça, je pense. Mais plutôt :

ActiveSheet.Cells(i, ActiveSheet.UsedRange.Columns.Count + 1) = Application.Average(Range(Cells(y+1,2), Cells(i,2))

Bonjour,

Très juste Pedro... ! Et c'est mieux à mon avis de mettre le résultat que la formule, en VBA...

Merci à vous tous pour vos réponses; je vais essayer.

Bonjour et merci pour vos réponses.

Votre solution fonctionne mais par contre le résultat est décalé à chaque fois d'une colonne : 1ère moyenne sur ligne 100 et colonne 2, 2ème moyenne sur ligne 200 et colonne 3, et ainsi de suite.

Comment on fait pour que toutes les moyennes soient dans la 2ème colonne et, de préférence sans lignes vides: 1ère moyenne sur ligne 1 et colonne 2, 2ème moyenne sur ligne 2 et colonne 2, ...?

Merci par avance

Bonjour,

peut-être ainsi :

y = 1
lCol = ActiveSheet.UsedRange.Columns.Count + 1
For I = 1 To ActiveSheet.UsedRange.Rows.Count
    If I Mod 100 = 0 Then
        ActiveSheet.Cells(I, lCol).Value = Application.Average(Range(Cells(y + 1, 2), Cells(I, 2)))
        y = I
    End If
Next I

Merci ça fonctionne; les moyennes se trouvent toutes sur la 2ème colonne par contre j'ai toujours les lignes vides?

Merci ça fonctionne; les moyennes se trouvent toutes sur la 2ème colonne par contre j'ai toujours les lignes vides?

Bonjour,

Comme ceci ?

y = 1
lCol = ActiveSheet.UsedRange.Columns.Count + 1
LignePleine = ActiveSheet.Cells(Rows.Count, lCol).End(xlUp).Row
For I = 1 To ActiveSheet.UsedRange.Rows.Count
    If I Mod 100 = 0 Then
        LignePleine = LignePleine + 1
        ActiveSheet.Cells(LignePleine, lCol).Value = Application.Average(Range(Cells(y + 1, 2), Cells(I, 2)))
        y = I
    End If
Next I

Merci cela fonctionne.

J'ai juste changé à la fin de la formule "(Range(Cells(y + 1, 2), Cells(I, 2)))" par (Range(Cells(y + 1, 2), Cells(I, 1))) car cela me donnait une erreur DIV/0.

Merci à vous tous pour votre aide précieuse !!!

Merci cela fonctionne.

J'ai juste changé à la fin de la formule "(Range(Cells(y + 1, 2), Cells(I, 2)))" par (Range(Cells(y + 1, 2), Cells(I, 1))) car cela me donnait une erreur DIV/0.

Merci à vous tous pour votre aide précieuse !!!

Si tes données sont en colonne "A", c'est même les 2 indices qu'il faut remplacer, comme ceci :

(Range(Cells(y + 1, 1), Cells(I, 1)))
Rechercher des sujets similaires à "moyenne vba"