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 :

Sélectionner une valeur proche [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut Sélectionner une valeur proche
    Bonjour à toutes et à tous !
    J'ai commencé la programmation via Visual Basic il y a une semaine, pour l'instant je m'en suis sorti (notamment grâce aux messages de ce forum) mais désormais je bute !
    Je vais tenter de vous expliquer simplement mon problème :
    J'ai créé des boîtes de dialogues,
    Les valeurs saisies dans ses boîtes de dialogues permettent de retrouver des valeurs exactes dans un tableau Excel
    Le problème est que si j'utilise cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set findcell1 = Rows("12").Find(value1, LookIn:=xlValues)
    Jusque là tout marche très bien !
    Maintenant j'aimerais que lorsque l'on saisi des valeurs qui ne sont pas dans mon tableau, le programme trouve la valeur supérieure (présente dans mon tableau) la plus proche de la valeur saisie !
    Voilà j'espère avoir été assez clair !
    En attendant avec impatience un petit coup de pouce,
    Bonne journée

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not findcell1 Is Nothing then
    '--
    Else
    'Tu recherches ta valeur proche si c'est du numérique c'est simple... Pour du texte c'est plus galère mais aussi jouable
    end if

  3. #3
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    Tout d'abord merci de ta réponse si rapide !
    Mais tout çà j'ai déjà fait et ça marche sans problèmes,
    C'est juste que je ne parviens pas à trouver le bon code pour sélectionner une valeur qui ne figure pas dans mon tableau.
    si je reprends cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set findcell1 = Rows("12").Find(valeursaisie1, LookIn:=xlValues)
    ensuite tout marche bien si l'utilisateur saisit une valeur qui est dans mon tableau, j'ai aussi programmé pour qu'il y est un message d'erreur si la valeur saisie ne figure pas dans mon tableau, j'ai bloqué la saisie de lettres etc.
    Maintenant je veux que quand l'utilisateur rentre une valeur qui n'est pas dans mon tableau le programme trouve la valeur supérieure la plus proche de la valeur saisie et c'est ça que je n'arrive pas à programmer !

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not findcell1 Is Nothing then
    '--
    Else
    'Pour chaque valeur du tableau tu compares ta data à celle du tableau et tu prends la difference positive la plus petite.. Ou tu différencies ton tableau et tu prends le min des valeurs positives.. ou... 
    end if
    Tu as les capacités de coder cela

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    J'avais pensé à cette solution en effet mais ça me paraissait un peu lourd !
    je pensais qu'une formule plus simple pourrait m'aider à résoudre mon problème en fait !!

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Un vlookup ?

  7. #7
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    Du genre vlookup(find(If(min etc. ?

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Si ton tableau est trié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    worksheetfunction.vlookup(Valeurrecherche,tableau,1,true)
    va te donner la valeur proche, mais je crois qu'elle est inférieure... il suffira de tester et si inférieure, prendre la suivante tant qu'elle est plus petite..

  9. #9
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    haa c'est plus une réponse comme ça que j'espérais
    Merci je vais essayer ça !

    Bonjour !
    Malheureusement je ne parviens pas a utiliser cette formule,
    Deja je dois rechercher mes valeurs dans des colonnes donc Hlookup est plus approprie non ?
    Ensuite je rentre en premiere valeur : la valeur saisie par l utilisateur
    en deuxieme valeur : la plage de cellule ou sont mes valeurs
    et enfin : l indice de ma ligne en question ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim entervalue1 As Boolean, value1 As String
    If TextBox1.Value = "" Then
    Else
    entervalue1 = UserForm5.TextBox1.Value
        If entervalue1 = True Then
        value1 = UserForm5.TextBox1.Value
        Else
        End If
            WorksheetFunction.HLookup(value1, ("E11:AG12"), 2)
            MsgBox "you value is :" & ActiveCell.Value
    End If
    Mais ca ne marche pas, le programme me demande de mettre un "=" a la fin ..

    Quand je lance le programme en fractionne avec F8 la valeur saisie s affiche bien dans value1 donc le probleme vient de la plage ou de l indice ou de la suite !
    Je vous remercie tres sincerement pour votre aide !!

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mais ca ne marche pas, le programme me demande de mettre un "=" a la fin ..
    Afin d'éviter aux contributeurs de deviner ou de rechercher dans le code à quelle ligne se produit l'erreur, il serait sympathique sinon plus pratique d'indiquer le n° de ligne où une erreur a été déclenchée.
    J'imagine que cela se passe à la ligne 9 qui contient une fonction.
    Une fonction renvoie toujours une valeur et cette valeur doit soit être imprimée soit doit renvoyer sa valeur à une variable.
    Donc soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox WorksheetFunction.HLookup(value1, ("E11:AG12"), 2)
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maVariable = WorksheetFunction.HLookup(value1, ("E11:AG12"), 2)
    Bien entendu il y a lieur de prévoir la gestion d'une erreur éventuelle renvoyée pas la fonction au cas par exemple où la valeur contenue dans value1 ne serait pas trouvée.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Hlookup: Horizontal look up
    V look up, vertical look up

    Je ne comprends pas pourquoi tu as deux rows dans ton range...

  12. #12
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox WorksheetFunction.HLookup(Value1, Feuil1.Range("E11:AG12"), 2)

  13. #13
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Par défaut
    bonjour merci beaucoup de votre aide !
    Grace a vous j ai finalement reussit a parvenir a mes fins avec cette fonction que j ai tiree d excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveCell.FormulaR1C1 = "=HLOOKUP(R[1]C,R[10]C[4]:R[11]C[36],2)"
    valuefinal = Range("A1").Value
    MsgBox "your cable size :" & valuefinal & "mm"
    Merci encore,
    Cordialement

  14. #14
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Valeur proche supérieure ?

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

Discussions similaires

  1. [langage] Sélectionner une valeur dans une balise
    Par Melvine dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2006, 17h57
  2. Réponses: 6
    Dernier message: 06/09/2006, 14h50
  3. sélectionner une valeur d'un liste box par le l'ascenceur
    Par marco62118 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/05/2006, 13h13
  4. Sélectionner une valeur dans un RxDBLookupCombo
    Par Oluha dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/09/2005, 09h10
  5. Est-il possible de sélectionner une valeur d'un menu déroula
    Par pontus21 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/05/2005, 09h44

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