Remplacement d'une valeur si dépassement
Résolu
jenor
Messages postés
51
Statut
Membre
-
jenor Messages postés 51 Statut Membre -
jenor Messages postés 51 Statut Membre -
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.
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.
8 réponses
-
-
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-
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 :-/ ...- 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
-
-
-
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 -
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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. -
-
-
-
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
-
-
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 -
Je vous remercie vraiment beaucoup pour votre aide !!!
Merci pour le temps que vous m'avez accordé.
A bientôt
