Remplacement d'une valeur si dépassement

Résolu/Fermé
jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015 - 17 juin 2015 à 14:44
jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015 - 22 juin 2015 à 09:31
Bonjour,

J'aurai à nouveau besoin de votre aide ...
J'étudie un paramètre X auquel est associé une valeur par jour, cependant, des résultats incohérents peuvent apparaître (s'il est inférieur à 0 ou s'il est supérieur à 190, il est considéré comme étant faux).
Dans la deuxième colonne se trouvent deux paramètres X à la suite qui ne correspondent pas au critères. Dans le cas où une incohérence de ce type est constatée, je souhaiterai que la ou les valeurs soient remplacées par une approximation (moyenne entre les valeurs encadrant la ou les cellules concernées).

--> voir fichier ci-joint : https://www.cjoint.com/c/EFrmRekU280

Je vous remercie par avance pour l'aide que vous m'apporterez.
A voir également:

8 réponses

jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015
18 juin 2015 à 07:37
Personne ?
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
18 juin 2015 à 07:53
Si, si,

tu étais simplement passé sous mon radar.

essaie cette formule matricielle :
=SI(ET(B2>=0;B2<=190);B2;(INDEX(B:B;MAX(SI(($B$2:B2>=0)*($B$2:B2<=190);LIGNE($B$2:B2);0)))+INDEX(B:B;MIN(SI((B2:$B$11>=0)*(B2:$B$11<=190);LIGNE(B2:$B$11);9^9))))/2)

à valider par CTRL+MAJ+ENTER

cordialement
0
jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015
18 juin 2015 à 09:17
Merci pour ta réponse, cependant la formule me donne le résultat 123 aulieu de 136,5.
De plus ce n'est pas exactement ce que j'attends, je voudrais que les valeurs fausses soient remplacées. Il faudrait sûrement passer par l'outil VBA, mais je ne sais pas du tout comment m'y prendre :-/ ...
0
Excel-worker Messages postés 589 Date d'inscription mardi 7 avril 2015 Statut Membre Dernière intervention 23 juillet 2015 58 > jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015
18 juin 2015 à 09:37
Faut mieux expliquer ce que tu recherche, refait ton fichier avec de meilleurs explications, sinon j'abandonne. Si toi même, tu ne sais pas l'expliquer correctement, qui le pourrait ? Nous faut un fichier avec des exemples précis et concrets, où, quand, comment, quel logique ? Nous faut tout les éléments sinon pas la peine de poursuivre.

Sur ceux, j'attends de tes nouvelles sur le remplissage du fichier. Pense aux exemples, inutile de le rédiger, un fichier vaut mieux qu'une parole.

Cdlt
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
18 juin 2015 à 09:39
Bonjour,

123, oui, mais sur la première ligne qui est cohérente et donc qui reprend la valeur en colonne B
et 136,5 sur les lignes incohérentes du 4 et 5 janvier.

as-tu un recalcul manuel?
Si tu appliques cette formule sur une autre plage, il faut adapter les bornes bien entendu.

cordialement
0
Excel-worker Messages postés 589 Date d'inscription mardi 7 avril 2015 Statut Membre Dernière intervention 23 juillet 2015 58
18 juin 2015 à 08:49
Bonjour à tous,

@JvDO : pourquoi ne pas faire plus simple avec une formule de ce type ? :

=SI(ET(B2>=0;B2<=190);B2;SI(ET(C2>=0;C2<=190);C2;""))

Cdlt
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
Modifié par JvDo le 18/06/2015 à 08:55
Bonjour,

parce que tu te sers du résultat attendu pour obtenir le résultat.

du moins, c'est ce que j'ai compris.

la colonne attendue est à calculer d'après moi.

la formule est compliquée parce qu'elle doit gérer les séquences multiples de valeurs incohérentes.

cordialement
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 100
18 juin 2015 à 08:57
Salut le fil,

Pour ma part hier je me suis pris la tête sur cette demande, s'il n'y a qu'une plage hors critère plusieurs possibilités effectivement, mais si on pousse le raisonnement plus loin en allongeant la matrice de quelques lignes en intégrant deux valeurs hors critères exemple B12:B13
les résultats sur cette deuxième plage sont erronées.
j'y arrive mais en ajoutant deux colonnes
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
18 juin 2015 à 09:05
Bonjour,

il suffit de rajouter un SIERREUR() à ma formule pour gérer les bornes incohérentes.

pour la partie "allonger la matrice", je ne comprends pas.
j'ai allongé la matrice, j'ai mis des séquences incohérentes et j'obtiens le résultat.

si tu peux expliquer ce qui ne va pas...

cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 100
Modifié par Mike-31 le 18/06/2015 à 09:21
Salt Jvdo,

j'ai allongé la liste pour le mois et en B11 correspondant au 10 janvier j'ai mis 126, en B12 -200 en B13 200 (même critère que sur la première plage)
et en B14 100
en suivant la logique de Jenor il faut retenir 126+100/2 soit 113
et encore en imaginant que le nombre de critère hors champ est limité à 2
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
18 juin 2015 à 09:35
Bonjour Mike-31

d'accord avec toi, mais, 113, c'est le résultat que j'obtiens.

je vais finir par envoyer le fichier.

cordialement
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 100
18 juin 2015 à 09:51
Exact Jvdo, erreur de ma part, je n'avais pas modifié les bornes de ta formule, reste à savoir si le nombre de valeur hors critère du demandeur peuvent être supérieur à 2 consécutivement.
Il serait bien que Jenor le précise
Cordialement
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
Modifié par JvDo le 18/06/2015 à 09:55
Ça fonctionne quel que soit le nombre de valeurs incohérentes successives puisque j'utilise le MAX et le MIN des lignes cohérentes pour repérer les valeurs cohérentes respectivement du dessus et du dessous.

cdlt
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 100
Modifié par Mike-31 le 18/06/2015 à 10:18
Tout à fait, mais ce que je voulais dire, si dans la liste il pouvait y avoir exemple 3 critères consécutifs, exemple B5, B6 et B7 d'après le demandeur Jenor, veut prendre les valeurs B4 et B8 exemple 138 et 140 soit 278 dans ce cas faut il que cette valeur soit divisée par 2 ou par 3 voir plus, mais bon ce n'est pas mon problème je poussais simplement la logique ce qui n'enlève rien à ta merveilleuse formule
cordialement
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
18 juin 2015 à 11:03
Bonjour,

voilà une solution en VBA.
tu sélectionnes la zone de tes données avant de lancer la macro.
les résultats sont affichés en colonne C pour ne pas effacer les données dans un premier temps.
il suffit de remplacer C2 par B2 pour écraser les données.

Option Base 1

Sub rendre_cohérent()
Dim vTab()
Set vZone = Selection()
nb = vZone.Rows.Count
ReDim vTab(nb)

pred = 0: succ = 0
For i = 1 To nb
    If vZone(i) >= 0 And vZone(i) <= 190 Then
        vTab(i) = vZone(i)
        pred = i
    Else
        While (vZone(i) < 0 Or vZone(i) > 190) And i <= nb
            i = i + 1
        Wend
        i = i - 1
        succ = i
        
        If pred = 0 Or succ = nb Then vMoy = "" Else vMoy = (vZone(pred) + vZone(succ + 1)) / 2
        pred = WorksheetFunction.Max(1, pred)
        For j = pred + 1 To succ
            vTab(j) = vMoy
        Next j
        
        pred = i
    End If
Next i

Range("c2").Resize(nb, 1) = WorksheetFunction.Transpose(vTab)
End Sub

je n'ai pas fait dans la dentelle, mais ça semble fonctionner.

Cordialement
0
jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015
22 juin 2015 à 09:31
Je vous remercie vraiment beaucoup pour votre aide !!!
Merci pour le temps que vous m'avez accordé.
A bientôt
0