Création d'un outil de correction de données avec moyennes flottante

Bonjour à toutes et à tous.

Je suis actuellement en stage et l'une de mes missions consiste à analyser les données de compteurs de passage à certains endroits.
Or ces compteurs ne sont pas très performants, ils ont tendance à s'emballer pour différentes raisons ce qui produit des données parfois très éloignées de la réalité.

J'ai donc mis en place un protocole de correction des données que jusqu'alors j'effectuais à la main. Mais la taille de mes bases de données est telle que cette partie de mon stage bouffe tout mon temps, m’empêchant de remplir mes autres missions.

J'ai découverts Excel VBA il y a quelques heures et malgré mes recherches je n'ai pas trouvé de tuto me permettant de réaliser mon protocole.

Voici mon idée :
("n" étant le numéro de cellule, le seuil de valeur aberrante est déjà fixé mais est différents pour chaque compteurs et "H" étant la colonne)

Dans la feuille 3,

Si la cellule Hn > (seuil valeur aberrante) alors la remplir en jaune

Si la cellule Hn > (seuil valeur aberrante) et H(n+170) < (seuil valeur aberrante)

Alors remplacer Hn par la moyenne de H(n-170) et H(n+170) arrondit à l’entier inférieur

Si moyenne de H(n-170) et H(n+170) arrondit à l’entier inférieur = 0

Alors remplacer moyenne de H(n-170) et H(n+170) arrondit à l’entier inférieur par 1

Si H(n+170) > (seuil de valeur aberrante)

Alors remplacer Hn par 1

Je ne peux malheureusement pas vous transmettre de fichier, ces données étant confidentielles mais globalement il s'agit de base de données comptant les passage devant les compteurs toutes les heures depuis 2010.

Merci d'avance pour votre coup de main, et pour me permettre de mieux utiliser ces outils !

A Bientôt

Ugo

bonjour,

une proposition, vérifier les hypothèses (ce qu'il faut faire quand n<170 n>dernière ligne -170)

Sub aargh()
    '("n" étant le numéro de cellule, le seuil de valeur aberrante est déjà fixé mais est différents pour chaque compteurs et "H" étant la colonne)

    'Dans la feuille 3,
    '
    'Si la cellule Hn > (seuil valeur aberrante) alors la remplir en jaune
    '
    'Si la cellule Hn > (seuil valeur aberrante) et H(n+170) < (seuil valeur aberrante)
    '
    'Alors remplacer Hn par la moyenne de H(n-170) et H(n+170) arrondit à l’entier inférieur
    '
    'Si moyenne de H(n-170) et H(n+170) arrondit à l’entier inférieur = 0
    '
    'Alors remplacer moyenne de H(n-170) et H(n+170) arrondit à l’entier inférieur par 1
    '
    'Si H(n+170) > (seuil de valeur aberrante)
    '
    'Alors remplacer Hn par 1

    vab = 800 'valeur aberrante <- à adapter

    With Sheets("feuil3")
        dl = .Cells(Rows.Count, 8).End(xlUp).Row 'ligne dernière mesure
        For i = 1 To dl
            hn = .Cells(i, 8)
            hnp170 = .Cells(Application.Min(dl, i + 170), 8) 'hn+170 vérifier hypothèse si n>dl on prend dl pour n+170
            hnm170 = .Cells(Application.Max(1, i - 170), 8) 'hn-170 vérifier hypothèse si n<170 on prend 1 pour n-170
            If hn > vab Then
                .Cells(i, 8).Interior.Color = vbYellow
                If hnp170 < vab Then
                    mh = Int((hnp170 + hnm170) / 2)
                    If mh = 0 Then
                        nouveauHn = 1
                    Else
                        nouveauHn = mh
                    End If
                Else 'hnp170>vab
                    nouveauHn = 1
                End If
                .Cells(i, 8) = nouveauHn
            End If
        Next i
    End With
End Sub

Bonjour,

Merci beaucoup pour cette réponse rapide, je semble comprendre la logique mais quand j'utilise ce code apparait juste un pop-up "UserForm2" et rien ne se passe.

J'ai essayé de simplifier le code en supprimant des variables (en gros j'ai écrit en tout chiffres les valeurs aberrantes et la dernière ligne du tableur) mais rien y fait toujours ce satané pop-up sans modification dans mon tableur.

Pour ce qui est des hypothèses émises lorsque "n-170" ou "n+170" est en dehors du tableau, il n'est pas nécessaire de les détailler puisque il n'y a pas de cas d'anomalie vers ces dates là.

Avez-vous une idée de la raison de ce pop-up ?

Merci d'avance

Ugo

Re-bonjour,

Ne tenez pas compte du message d'avant, j'ai réussi à régler le problème, j'avais tout simplement oublié de sélectionner le document.

Mais, un autre problème vient d'apparaître, j'ai maintenant un autre pop-up : "l'indice n'appartient pas à la sélection"

Je continue mes recherches mais si vous savez déjà comment le régler je vous écoute !

Merci d'avance

Ugo

bonjour,

"l'indice n'appartient pas à la sélection"

quelle est l'instruction qui provoque cette erreur ?

si c'est With Sheets("feuil3")

c'est que la feuillle feuil3 n'existe pas dans le classeur. Sinon, c'est sur une instruction .cells(), c'est que le numéro de ligne ou de colonne n'est pas valide (<1)

Re-re-bonjour !

On a réussi, ENFIN, j'ai réussi à débugger le macro !

Tout fonctionne parfaitement

voici l'algo final, expliqué pour les prochains stagiaires

Sub CorrectionRomain() 'le sub est la procédure, remplacez "CorrectionRomain" par le nom du site

    With Sheets("correction") 'Nom du feuillet à corriger, par défaut "correction" dans votre fichier excel
        dl = .Cells(Rows.Count, 8).End(xlUp).Row 'formule permettant d'identifier la dernière cellule non vide du tableau ligne dernière mesure

    For i = 2 To dl 'i est votre numéro de ligne
        hn = .Cells(i, 8) '8 est le numéro de votre colonne par défaut H dans votre fichier excel
        hnp170 = .Cells(Application.Min(dl, i + 170), 8) 
        hnm170 = .Cells(Application.Max(1, i - 170), 8)

    If hn > 300 Then 'remplacer "300" par le seuil de valeur aberrante de votre site
        .Cells(i, 8).Interior.Color = vbYellow 'colorie les cellules en jaune pour une vérification visuelle

    If hnp170 < 300 Then

           mh = Int((hnp170 + hnm170) / 2)

    If mh = 0 Then
            nouveauHn = 1

    Else
        nouveauHn = mh

    End If

    Else 'hnp170>vab
        nouveauHn = 1

    End If
        .Cells(i, 8) = nouveauHn

    End If

    Next i

    End With

    End Sub

Merci beaucoup, pour moi et pour les prochains stagiaires qui auront à faire la mise à jour des données !

Puis-je avoir votre nom pour les remerciements de mon mémoire ?

Remercie les contributeurs du site Excel pratique !

Rechercher des sujets similaires à "creation outil correction donnees moyennes flottante"