IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Recherche de valeurs proches


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Recherche de valeurs proches
    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:

    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
    cette approche est pratique mais uniquement pour des séries de valeurs relativement petites... Après, ça pédale (un peu trop à mon gout).

    Pour aller plus vite, je me suis penché sur la fonction find avec ce type de code:
    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).
    ce qui me plait, avec cette seconde approche, c'est que la fonction find semble bien plus rapide que ma boucle for.
    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,

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,

    Tu pourrais calculer "valeur obtenue - valeur cherchée" puis trier pour trouver la plus petite.

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Pourquoi n'utilises-tu pas l'une des multiples fonctions de recherche d'Excel (RECHERCHEV(), EQUIV(), etc.) ?
    Ce serait certainement bien plus rapide que du code.

Discussions similaires

  1. Recherche de valeur proche sur Excel 2010
    Par Frizz dans le forum Excel
    Réponses: 2
    Dernier message: 19/06/2013, 22h37
  2. Rechercher une valeur proche dans tableau à partir d'une liste
    Par bourgui78 dans le forum Général Python
    Réponses: 9
    Dernier message: 15/02/2013, 10h36
  3. Recherche une valeur proche sur une requête
    Par 64moss dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/10/2012, 13h02
  4. Rechercher la plus proche valeur dans un tableau
    Par neoMatrix dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/05/2007, 11h45
  5. rechercher la plus proche valeur dans un tableau ?
    Par Slumpy dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/04/2007, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo