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 :

bug lorsque vlookup n'aboutit pas [XL-2002]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut bug lorsque vlookup n'aboutit pas
    bonjour a tous

    sur un formulaire me servant de fiche de stock, sur une combobox, j'ai un souci.

    Lorsque le formulaire ce lance cette combo a pour code d'activation ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    produit1.RowSource = "stock!a2:a" & Range("stock!a65536").End(xlUp).Row
       produit1.MatchEntry = fmMatchEntryComplete ' permet d'ecrire les nom dans une zone de liste deroulante
        produit1.MatchRequired = True 'pour forcer une saisie correct
    et lorsque je saisie dans cette box, le code qui recherche les éléments pour renseigner des éléments de prix et quantité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub produit1_Change()
    Dim prix As Single, stockact As Single
    Dim NomPièce As Variant
    NomPièce = produit1.Value
    prix = WorksheetFunction.VLookup(NomPièce, Range("stock"), 5, False)
    prix1.Value = prix
    stockact = WorksheetFunction.VLookup(NomPièce, Range("stock"), 3, False)
    stock_actuel1.Value = stockact
    End Sub
    lorsque je saisie dans la combobox produit1, et que je fasse une faute de frappe, tapant un nom inexistant dans la liste, le code plante
    j'obtient le message
    impossible de lire la propriété VLookup de la classe woorsheetfunction
    avec le focus sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prix = WorksheetFunction.VLookup(NomPièce, Range("stock"), 5, False)

    comment empecher le bug ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Prix est de type Single. Si VLookup n'aboutit pas, tu vas donc lui attribuer une erreur...

    Soit tu testes l'erreur sur un vlookup et si pas erreur =>prix=worksheetfunction.vlookup(...), soit tu fais un FIND sur la colonne de gauche de la plage Stock et si Find aboutit, tu décales pour récupérer le prix

    En gros, et non testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Cellule as range
     
    set cellule = range("stock").columns(1).cells.find(what:=nompiece,lookin:=xlvalues,lookat:=xlwhole)
    if not cellule is nothing then prix= cellule(1,6)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    merci
    je bosse dessus ce soir

    je dirais si j'aboutis, le code que tu as mis ne change rien, donc je vais travailler sur le FIND

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je l'ai mis sans tester et sans connaître la configuration de ton classeur, mais en adaptant à tes besoins, cela devrait aller.

    Reviens si pb.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    merci pour m'avoir indiquer FIND
    en regardant comment ecrire le code de find, j'ai compris ce qui n'allait pas dans mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prix = WorksheetFunction.VLookup(NomPièce, Range("stock"), 5 , False)
    en fait c'est FALSE qui est de trop, c'est lui qui fait planter
    je l'ai retirer et plus de soucis

    merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Note tout de même que supprimer le paramètre False peut avoir des conséquences inattendues, puisque tu récupéreras la valeur proche de la valeur cherchée, et donc pas forcément la valeur exacte...

    A toi de voir ce qui te convient le mieux
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [Débutant] Bug lorsque ce n'est pas une list
    Par b-yza dans le forum C#
    Réponses: 2
    Dernier message: 14/11/2014, 10h45
  2. JS bug sur un hebergeur et pas sur un autre !
    Par lacsap49 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/04/2006, 17h38
  3. [VB6]Bug dont je ne vois pas la cause.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 14/02/2006, 14h22
  4. [mySQL]Requete qui prend 100 % du CPU et n'aboutit pas
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 20
    Dernier message: 12/10/2005, 09h36

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