Moyenne mobile progressive

Bonjour à tous (je ne pratique pas l’écriture inclusive et de toutes façons, à mon âge, c’est bien à toutes et tous que je m’adresse :wink: )

Il y a bien longtemps que je ne m’étais pas remis au tableur Excel (au moins depuis 2005) et je me trouve confronté à un petit problème que mes neurones vieillissant ne savent plus traiter.

Le classeur joint illustre et pose le problème !
élaboration carte petite série.xlsx (11,9 Ko)

Soit une série de données, en colonne (colonne B)

Je cherche à calculer les moyennes de ces données regroupées chronologiquement par “n” valeurs (ici n=5). Cependant, je cherche aussi les valeurs moyennes “intermédiaires” successives observées jusqu’à constitution de la taille de l’échantillon voulu, ainsi qu’on le voit dans les colonnes C et D.

De plus, pour diverses raisons, il peut y avoir une rupture de continuité dans la succession des données, cette rupture étant matérialisée par une ligne vide (lignes 11 et 19). La séquence de calcul des moyennes doit être réinitialisée, comme représentée par les champs C12:C18 et C20:C28.

Problème : imaginer une fonction “moyenne mobile progressive” dont un des paramètres sera ce “n”
qui satisfasse à ces contraintes.

D’avance, un grand merci !

Bonjour,
Je propose une version avec Macro qui remplit les conditions
A tester

Sub Moyenne()
Dim Dl%, i As Double, donnee As Double, plage As Range

Dl = Range("A65536").End(xlUp).Row 'Dernière ligne rempli depuis le bas
  For i = 2 To Dl 'boucle sur les ligne
    If Cells(i, 1).Value = "" Then i = i + 1 'si la ligne est vide, je saute une ligne
    donnee = Mid(Cells(i, 4), Application.WorksheetFunction.Find("=", Cells(i, 4)) + 1, Len(Cells(i, 4))) - 1 'valeur de n=
    Set plage = Range(Cells(i, 2), Cells(i - donnee, 2)) 'attribue la plage pour la moyenne
    Cells(i, 3).Value = Application.WorksheetFunction.Average(plage) 'calcul de la moyenne et la place en colonne C
  Next i
End Sub

élaboration carte petite série.xlsm (18,3 Ko)

@Mimimathy
Oui, ça semble fonctionner avec mon jeu de données et même en changeant quelques valeurs à la volée.
Il faut maintenant que j’intègre cette macro dans mon “vrai” classeur… et que j’ajoute une autre fonction (étendue, en l’occurrence).

Mes capacités en VBA étant assez limitées, je reviendrai sûrement pour d’autres approches.

Merci.

Bonjour,
en fait si la macro de @Mimimathy fonctionne sur les données d’exemple, je n’arrive pas à l’exploiter pour ce que je souhaite faire et il faut donc que je complète ma description de ce que je souhaite faire.

Dans la feuille de calcul, seules les colonnes A et B importent, l’une n’étant qu’un index ou numéro d’ordre pour la chronologie des observations (A:A) et l’autre la valeur “observée” qui porte l’information à traiter (B:B).
En colonne C je souhaite faire apparaitre une information statistique, prenant en compte la valeur actuelle (même ligne) et un certain nombre “k-1” de valeurs précédentes – k étant prédéfini par ailleurs et dans l’exemple pris égal à 5. Cette information statistique peut être, comme pour l’exemple, la moyenne mais aussi bien l’écart-type ou l’étendue ou n’importe quelle autre fonction.

Au départ, je ne dispose que d’une seule valeur (n=1) puis “l’instant” suivant (donc ligne suivante) je dispose de n=2 valeurs, etc. jusqu’à n=k. On est dans une phase de progression jusqu’à obtenir k observations. Ensuite, au fur et à mesure de la progression on effectue le calcul sur une sélection “glissante” de k valeurs.

Mais les choses se compliquent en ce sens que de la valeur obtenue en colonne C je déciderai, par comparaison à des limites par ailleurs spécifiées, si je dois poursuivre la procédure ou si je dois la réinitialiser. Si je suis amené à décider de réinitialiser le calcul pour la prochaine observation, j’insère une ligne vide et l’observation suivante sera inscrite sur la ligne d’après (ce qui est simulé ici par les lignes vides 11 et 19 la séquence de calcul des moyennes étant réinitialisée, comme représentée par les champs C12:C18 et C20:C28).

Je reformule donc ma demande : est-il possible d’écrire une formule avec des SI() et des évaluations de nombre de lignes non-vides qui puissent satisfaire à cette procédure ?

Merci encore de vos implications !

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.