Bonjour,
j'essaye de réaliser un code capable de détecter le passage d'une série de valeurs au dessus et/ou en dessous d'un critère spécifique.
D'habitude je m'en sors avec une boucle for (voir ci dessous un exemple) qui scanne chacune de mes cellules jusqu'à trouver le moment ou mon critère est satisfait:
cette approche est pratique mais uniquement pour des séries de valeurs relativement petites... Après, ça pédale (un peu trop à mon gout).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 for ligne=1 to 100 if cells(ligne,1)>17 then 'ici 17 c'est mon critère! debut_d_analyse=ligne exit for end if next ligne
Pour aller plus vite, je me suis penché sur la fonction find avec ce type de code:
ce qui me plait, avec cette seconde approche, c'est que la fonction find semble bien plus rapide que ma boucle for.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 m = Worksheets("Feuil1").Range("A:A").Find(What:=17,LookAt:=xlWhole).Row #qui affecte à une variable (ici "m") la ligne qui contient mon critère (ici 17).
Aussi, le "whole" me permet d'éviter de "trouver" des critères contenus dans des chaines de caractères plus longues.
Problème: Le critère que je considère n'existe pas forcément dans ma série de données...
exemple:
un capteur me renvoie une série de mesure: 15, 15.5, 15.9, 16.2, 16.5, 16.9, 17.3 etc...
Et mon critère pour déclencher mon analyse des données est 16.
comme la valeur 16 n'apparait pas en chiffre exact dans ma série, ma fonction ne marche plus (elle passe à coté de ce que je cherche :-( ).
Avec la boucle for, l'utilisation des > ou < m'évitaient ce problème.
si je remplace le "LookAt:=xlWhole" par "LookAt:=xlPart" je peux utiliser un critère sous la forme 16# (qui me permet d'englober toutes les décimales existantes du critère). Mais si j'utilise ce "LookAt:=xlPart", je finis par considérer tous les 16 éventuellement contenus dans des chaines de caractères plus longues appartenant à ma série de données (et c'est gênant surtout lorsque l'ensemble des valeurs mesurées sont grandes et ou avec beaucoup de décimales)...
Avez vous une solution pour traiter ce genre de recherche sans passer par une boucle for bête et méchante qui scan tout?
merci,
Partager