Moyenne entre intervalle variable

Bonjour,

J'ai un problème à soumettre à tous ceux qui ont le temps de me répondre.

J'ai 2 colonnes A et B

En A j'ai des valeurs qui en réalité continue sur des milliers de lignes. Parfois avec des cellules avec une valeur parfois vide.

Et en colonne B j'ai des 1 de manière irrégulière. Il peut y avoir 50 cellules vides entre deux 1 comme une seule ligne.

Je souhaite faire la moyenne des valeurs de ma colonne A entre deux 1 de ma colonne B

Voir feuille de calcul Test pour l'illustration de mes propos.

J'ai essayé avec une macro.

Avec des fonctions diverses.

je n'y arrive pas !

Merci à vous !

Hache

24test.xlsx (8.95 Ko)

Bonjour,

une solution via une macro

Sub aargh()
    With Sheets("feuil1")
        dl = .Cells(Rows.Count, 2).End(xlUp).Row
        For i = 1 To dl
            If .Cells(i, 2) = 1 Then
                If ctr <> 0 Then .Cells(i, 3) = som / ctr
                som = 0
                ctr = 0
            Else
                If .Cells(i, 1) <> "" Then
                    ctr = ctr + 1
                    som = som + .Cells(i, 1)
                End If
            End If
        Next i
    End With
End Sub

Bonjour H2SO4

ça fonctionne ! C'est génial merci beaucoup !

J'ai quelques questions pour que je progresse si tu as le temps - ou un lien qui explique bien les bases des macros excel; je débute.

.Cells(Rows.Count, 2).End(xlUp).Row --> signifie " jusqu'à la derniere ligne de la colonne 2" ? il y a toujours un "." avant Cells ?

Tu n'as pas défini la somme et le compteur comme étant des 'Dim as Long' par exemple; je pensais que c'était nécessaire.

Dans tout les cas merci de ton aide !

A+

Bonjour,

je t'ai mis quelques commentaires dans le code

Sub aargh()
    Dim dl as long, i as long, ctr as long, som as double
    With Sheets("feuil1") 'on travaille avec feuil1, à partir d'ici dans le code, tous les objets précédés d'un point appartiennent à cette feuil1
        dl = .Cells(Rows.Count, 2).End(xlUp).Row 'dl dernière ligne non vide en colonne 2(B)
        For i = 1 To dl 'on parcourt toutes les lignes
            If .Cells(i, 2) = 1 Then 'si on a un 1 en colonne 2 -> on écrit la moyenne calculée jusqu'à présent s'il y en a une
                If ctr <> 0 Then .Cells(i, 3) = som / ctr 'si 
                som = 0 'on remet les compteurs et totalisateurs à zero
                ctr = 0
            Else
                If .Cells(i, 1) <> "" Then 'si cellule non vide en colonne 1
                    ctr = ctr + 1 'on incrémente le compteur
                    som = som + .Cells(i, 1) 'on ajoute la valeur trouvée à som
                End If
            End If
        Next i
    End With
End Sub

Bonjour,

Merci pour votre code. Je me demandais si il était possible d'effectuer la même chose, mais en faisant apparaître la moyenne sur le "1" du haut de la série, et non celui d'après. Merci d'avance

bonjour,

cela devrait être possible.

bonsoir,

voici une solution,

Sub aargh()
    Dim dl As Long, i As Long, ctr As Long, som As Double
    With Sheets("feuil1") 'on travaille avec feuil1, à partir d'ici dans le code, tous les objets précédés d'un point appartiennent à cette feuil1
        dl = .Cells(Rows.Count, 2).End(xlUp).Row 'dl dernière ligne non vide en colonne 2(B)
        For i = 1 To dl 'on parcourt toutes les lignes
            If .Cells(i, 2) = 1 Then 'si on a un 1 en colonne 2 -> on écrit la moyenne calculée jusqu'à présent s'il y en a une
                If ctr <> 0 Then .Cells(fi, 3) = som / ctr 'si
                som = 0 'on remet les compteurs et totalisateurs à zero
                ctr = 0
                fi = i 'ligne contenant le 1
            Else
                If .Cells(i, 1) <> "" Then 'si cellule non vide en colonne 1
                    ctr = ctr + 1 'on incrémente le compteur
                    som = som + .Cells(i, 1) 'on ajoute la valeur trouvée à som
                End If
            End If
        Next i
    End With
End Sub
Rechercher des sujets similaires à "moyenne entre intervalle variable"