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 la première valeur supérieure à la valeur cherchée [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut recherche la première valeur supérieure à la valeur cherchée
    Bonsoir.

    Voici une procédure qui recherche la première valeur supérieure à la valeur cherchée dans la colonne A.

    2011001
    2011002
    2011003
    2011004
    2011005
    2011006
    2011007
    2011008
    2011009
    2011010
    2011011

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Dim lRange As Variant
     
    ValTest = Application.InputBox(Msg, "entrez la valeur à rechercher", , , , , , 1)
    If ValTest = 0 Or ValTest = "" Then Exit Sub
    trouv = ""
    dl = Range("A1", Columns(1).Cells.Find("*", [A1], , , , xlPrevious)).Address
        For Each lRange In Range(dl) 
            If lRange.Value > ValTest Then  
                lRange.Select
                trouv = trouv & lRange
                valeurtrouvée = lRange.Address
                Exit For 
            End If
        Next lRange
    If trouv = "" Then
        MsgBox "Pas de valeur (" & valtest & ") trouvée" & Chr(10) & "dans la plage testée  (" & dl & ") !"
    Else
        MsgBox "Valeur trouvée = " & trouv & " en " & valeurtrouvée & Chr(10) & "dans la plage testée  (" & dl & ") !"
    End If
    Je n’arrive pas à placer la détection d’une correspondance avec l'ensemble du texte recherché.

    Exemple :
    Si la valeur entrée = 20111, la première valeur supérieure trouvée dans la colonne A sera : 2011001, dans ce cas le message "Pas de valeur…., devra s’afficher.

    Pourriez-vous m’indiquer une piste svp.

    Merci d’avance.

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Ta variable valtest n'étant pas déclarée, elle est implicitement de type variant.
    Du coup quand tu saisies 20111, valtest devient numérique (probablement Long)
    20111 est bien plus petit que 2011001.

    Si tu veux faire un test de type texte déclares ta variable en String

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Si j'ai bien compris ta demande
    Si la valeur entrée = 20111, la première valeur supérieure trouvée dans la colonne A sera : 2011001, dans ce cas le message "Pas de valeur…., devra s’afficher.
    tu souhaites que 20111 soit interprété 2011100.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Dim lRange As Variant
    Dim L As Integer
    valtest = Application.InputBox(Msg, "entrez la valeur à rechercher", , , , , , 1)
    If valtest = 0 Or valtest = "" Then Exit Sub
    L = Len(valtest)
    dl = Range("A1", Columns(1).Cells.Find("*", [A1], , , , xlPrevious)).Address
        For Each lRange In Range(dl)
            If lRange.Value / 10 ^ (7 - L) > valtest Then
                lRange.Select
                trouv = trouv & lRange
                valeurtrouvée = lRange.Address
                Exit For
            End If
        Next lRange
    If trouv = "" Then
        MsgBox "Pas de valeur supérieure à (" & valtest & ") trouvée" & Chr(10) & "dans la plage testée  (" & dl & ") !"
    Else
        MsgBox "Valeur trouvée = " & trouv & " en " & valeurtrouvée & Chr(10) & "dans la plage testée  (" & dl & ") !"
    End If
    Cordialement.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    841
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 841
    Par défaut
    Bonsoir jfontaine, gFZT82.

    Merci pour vos réponses, à prime abord elle ne sont pas concluantes.

    J'ai déclaré la variable valtest et ajouté les lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set MyVar = Cells.Find(What:=valtest, LookAt:=xlWhole) 'Détecte une correspondance avec l'ensemble du texte recherché
    If Not MyVar Is Nothing Then

    Voici la procédure corrigée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Dim lRange As Variant
    Dim valtest As String
     
    valtest = Application.InputBox(Msg, "entrez la valeur à rechercher", , , , , , 1)
    If valtest = 0 Or valtest = "" Then Exit Sub
    trouv = ""
    dl = Range("A1", Columns(1).Cells.Find("*", [A1], , , , xlPrevious)).Address
    Set MyVar = Cells.Find(What:=valtest, LookAt:=xlWhole)
    If Not MyVar Is Nothing Then
        For Each lRange In Range(dl)
            If lRange.Value > valtest Then
                lRange.Select
                trouv = trouv & lRange
                valeurtrouvée = lRange.Address
                Exit For
            End If
        Next lRange
    End If
    If trouv = "" Then
        MsgBox "Pas de valeur (" & valtest & ") trouvée" & Chr(10) & "dans la plage testée  (" & dl & ") !"
    Else
        MsgBox "Valeur trouvée = " & trouv & " en " & valeurtrouvée & Chr(10) & "dans la plage testée  (" & dl & ") !"
    End If
    Ça semble fonctionner.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Recherche de la valeur supérieure
    Par hawksidu dans le forum Excel
    Réponses: 1
    Dernier message: 18/06/2015, 15h54
  2. [XL-2010] Trouver la première cellule supérieure à une valeur de test [VBA]
    Par PierrotMfff dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 17/03/2015, 11h29
  3. Réponses: 4
    Dernier message: 19/02/2014, 13h28
  4. Arrondir un nombre à sa valeur supérieure ou inférieure
    Par philben dans le forum Contribuez
    Réponses: 5
    Dernier message: 08/02/2013, 12h35
  5. [XSL] première apparition de la valeur d'un tag
    Par Milouse dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/07/2005, 11h17

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