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 :

Explication par rapport a la fonction FIND


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    Points : 19
    Points
    19
    Par défaut Explication par rapport a la fonction FIND
    Bonjour,

    J'aimerais que l'on m'explique pourquoi lorsque j'utilise la fonction FIND, elle ne fonctionne pas lorsque qu'elle doit rechercher une nombre avec décimale (3,2 ; 1,9; ...) dans un range de valeur.. alors que la recherche de nombre entier (1 ; 2 ; 3 ;...) fonctionne.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim lbest As Integer
    Dim bestratiotole As Single
    bestratiotole = Application.WorksheetFunction.Large(Worksheets("résultat").range("E10:E" & DerniereLigne), iratio) 
     
    lbest = Worksheets("résultat").Columns("E").Find(bestratiotole, lookat:=xlWhole).Row
    ici, on recherche "bestratio" dans une plage de donnée, mais lorsque celui ci vaut par exemple, 3.3, la fonction bloque.
    J'ai regardé sur des pages telles que https://msdn.microsoft.com/en-us/vba...d-method-excel .
    J'ai alors essayé d’être plus précis et voulant expliquer à ma fonction FIND que je recherchais des valeurs pouvant prendre des décimales, et donc rechercher des SINGLE mais je n'arrive pas à utiliser la bonne synthaxe.

    Pourriez-vous m'aider ?

    Merci à vous tous.

  2. #2
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    A mon avis, c'est l'éternel problème de la non francisation de VBA.
    Ici, c'est sans doute lié au fait que dans ton Excel français, la décimale est la "," alors que pour VBA farouchement anglophone, la décimale est le ".".
    Find est plus performant pour chercher les chaines de caractères.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Octobre 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Octobre 2017
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    En effet, ca ne peut être que ça...

    Pour ceux à qui ca pourrait servir :

    Pour remplacer la fonction FIND, j'ai utilisé un petit Do While de cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        Dim lbest As Integer
        Dim bestratiotole As Single
        lbest = 10
     
        bestratiotole = Application.WorksheetFunction.Large(Worksheets("résultat").range("E10:E" & DerniereLigne), iratio)
     
            Do While Worksheets("résultat").Cells(lbest, 5) <> bestratiotole
            lbest = lbest + 1
            Loop
    lbest nous donne donc la ligne à laquelle la valeur "bestratiotole" se trouve.
    Cette technique a ses limites, notamment lorsqu'il y a plusieurs valeurs identiques dans le range de donnée... Mais dans mon cas, ce n'est pas grave.

    Bien à vous.

  4. #4
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par adridech Voir le message
    Cette technique a ses limites, notamment lorsqu'il y a plusieurs valeurs identiques dans le range de donnée... Mais dans mon cas, ce n'est pas grave.
    Autres risques : si ta zone de recherche dépasse 35000 ligne, ta variable Interger sera dépassée.
    D'une manière générale, quand une variable contient des numéros de ligne Excel, il vaut mieux utiliser le type "Long".

    Mais même avec cette modif, si la valeur n'est pas trouvée, le code plantera, sans doute par dépassement d'indice sur le Range.
    Il faudrait que tu gères ça en ajoutant une condition avec un While accolé au Loop pour limiter le nombre de lignes scrutées, par exemple à Rows.Count - 1.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    une cellule contient un Double, essaie en typant comme ça ta variable. Une différence de décimale éloignée est possible.
    Et dans .find() il est préférable de définir systématiquement lookat ET lookin. Tu ne sais pas ce qu'un utilisateur aura pu utiliser comme paramètre dans un Rechercher manuel, ils sont repris.
    eric

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/11/2014, 21h29
  2. Réponses: 1
    Dernier message: 12/09/2007, 04h19
  3. Réponses: 2
    Dernier message: 15/06/2006, 10h30
  4. Réponses: 18
    Dernier message: 08/04/2006, 10h39
  5. [10g]Fonction des nouveaux services par rapport à la 9i
    Par Laurent Dardenne dans le forum Oracle
    Réponses: 13
    Dernier message: 04/07/2005, 13h56

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