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

Excel Discussion :

Problème avec la fonction Vlookup [XL-2003]


Sujet :

Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Problème avec la fonction Vlookup
    Bonjour à tous,

    c'est la deuxième fois que je rencontre ce problème :

    j'ai un tableau avec 2 colonnes (la première, et la deuxième). J'utilise dans la sub ComboBox1_Change() la fonction Vlookup de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Start_Wavelength = ComboBox1.Value
    Start_Band = Application.VLookup(Start_Wavelength, Worksheets("Feuil1").Range("A2:B288"), 2)
    Startband est une variable de type single.

    La liste de choix du combobox1 est initialisée par la première colonne du tableau.

    Or, quand je sélectionne la première valeur du tableau (1ere ligne du combobox, donc), j'ai une erreur "incompatibilité de type" à l'exécution de la fonction Vlookup.

    En fouillant un peu plus, je me rends compte que la fonction semble "décaler" d'une ligne, c'est à dire que pour une valeur de la ligne x dans la première colonne, elle me renvoie la correspondance de la ligne x-1 dans la seconde colonne (d'ou, visiblement, l'incompatibilité de type, vu que la ligne x-1 de la première ligne ne contient pas de valeur numérique, mais du texte)

    J'ajoute que j'ai fait le test en utilisant la fonction rechercheh directement dans une cellule de la feuille de donnée, et que je n'ai pas ce problème.

    L'un d'entre vous a-t-il déja rencontré ce soucis ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par CriCri98 Voir le message
    L'un d'entre vous a-t-il déja rencontré ce soucis ?
    Salut, Non désolé, par contre...
    Dans ton explication tu parle de rechercheh mais dans ton code tu utilise Vlookup (recherchev), est-ce une coquille ?
    Sinon, essaie avec Hlookup

    A+
    N'oubliez pas le si votre problème est solutionné.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Je viens de tester, j'ai la même erreur mais uniquement quand Start_Wavelength="" sinon ça à l'air de marcher niquel. Peut-être que la fonction ne marche pas si tu mets rien dans ta combobox ; mais un test de la valeur du combobox et un end if pour tester ça

    EDIT : j'ai compris, quand ta fonction VLOOKUP ne trouve pas (plusieurs cas possibles) elle renvoie la valeur Null (#N/A) qui n'est pas supportée par une variable déclarée en String... d'où l'incompatibilité de type.

    ps : c'est la même chose avec les fonction GetOpenFilename quand on fait clic sur Annuler

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Bonjour à vous,

    merci de vos réponses.

    Il y a effectivement une coquille : j'ai bien fait le test avec recherchev, qui fonctionne.

    Sinon, oohcalme, c'est bien ça : lorsque VLOOKUP ne trouve pas la valeur, il renvoit Null, etc..., mais ce n'est pas parce qu'il n'y a rien dans la combobox, mais parce que la valeur selectionnée correspond à la première ligne de mon tableau.
    Et c'est là que je ne comprend pas : la liste de la combobox vient elle-même du tableau (la propriété "ListFillRange" est la première colonne de mon tableau) : quand je séléctionne la première valeur, il devrait y avoir correspondance exacte et donc pas de problème !

    C'est comme si la fonction recherchev faisait un test type "inférieur ou égal" (lorsque je lui passe comme argument de recherche la première valeur du tableau, j'ai le bon résultat, en testant directement la formule dans la feuille), alors que Vlookup (utilisé dans le module sub) ferait un test "strictement inférieur", et du coup, quand la valeur est égale, elle décale d'une ligne (et par conséquent, quand elle est sur la première ligne, elle renvoit Null)

    Etonnant, non ?

    Quelqu'un aurait une piste ?

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Tu pourrais pas donner les quelques premières lignes de ton tableau pour que je test sur mon pc avec tes valeurs vois si ça vient de là et ton bout de code aussi.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    oohcalme,

    désolé de répondre un peu tard, j'étais parti sur un autre truc en attendant.

    Extrait de mon tableau : 1530.33 est en A2 sur Feuil1, et B2 contient le 1 (je ne sais pas pourquoi, je n'arrive pas à espacer plus les deux colonnes, même avec les balises [INDENT][/INDENT]):
    1530.33 1
    1530.53 1
    1530.59 1
    1530.72 1
    1530.86 1
    1533.47 2
    1533.66 2
    1533.73 2
    1533.86 2

    Le combobox1 est sur Feuil2. Sa propriété ListFillRange (déclarée dans la feuille de propriétés en mode création) est Feuil1!A2:A10. et son code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ComboBox1_Change()
     
        Start_Wavelength = ComboBox1.Value
        Start_Band = Application.VLookup(Start_Wavelength + 0.001, Worksheets("Feuil1").Range("A2:B288"), 2)
     
    [...]
     
    End Sub
    La partie [...] est un bout de code qui agit sur d'autre contrôles, en fonction du contenu de "start_wavelength" : cela n'affecte pas ce qui nous occupe. Comme tu vois, j'ai dû insérer '+0.001' pour que cela fonctionne. Si tu fais le test avec juste "Start_Wavelength" comme argument de Vlookup, on obtient une erreur d'execution 13 Incompatibilité de type.

    C'est fou ! Je viens de me rendre compte qu'il y a le même problème avec la fonction Equiv (que je code en vba par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.Application.Match(Start_Wavelength, Sheets("Feuil1").Range("A2:A288")
    Si Start_Wavelength est égal à la première valeur (celle de la cellule A2), j'ai encore une erreur Incompatibilité de type

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Je viens de tester, moi j'ai une erreur quand je rajoute le '+ 0.001' et pas quand je l'enlève.

    Je pense qu'il faut que tu cherches du côté de tes déclarations de variable au niveau du type.

    Les valeurs que tu fais passer dans ta combobox sont (certainement) du texte.
    Dans mon cas quand j'essai d'ajouter 0.001 à du texte ça bug, logique !

    Donc voit avec tes déclarations de variable.
    Après comme je te l'ai dit, sans cet ajout, je trouve bien les bonnes valeurs et tout fonctionne...

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    OK, je comprends.

    Et tu as entièrement raison : Start_Wavelength était déclaré en single. Quand je la déclare en double, plus de problème.

    Je ne suis pas certain de bien comprendre pourquoi : combobox1.Value est de type variant, et devrait bien rentrer dans un single, dès lors que la valeur ne dépasse pas la plage du type single, non ?

    Bon, en même temps, je suis pas un cador en info, et j'ai toujours eu quelques lacunes du coté des déclarations de variables !

    En tout cas, merci beaucoup pour ton aide !

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 56
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par CriCri98 Voir le message
    combobox1.Value est de type variant, et devrait bien rentrer dans un single, dès lors que la valeur ne dépasse pas la plage du type single, non ?
    Alors là j'aimerai bien l'avis d'un expert sur ça. Si tu déclare une variable en variant est-ce qu'il n'y a pas une taille de variable allouée ? ou peut être que vba fait un test dessus pour éviter les bug... don't know.

    Content que ça marche. a plus !

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Je laisse le sujet ouvert encore quelques temps, des fois qu'un expert passe par là et réponde à la question.

    Merci encore oohcalme

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

Discussions similaires

  1. [XL-2003] Problème avec la fonction Vlookup (RechercheV)
    Par Nana18 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/01/2013, 12h39
  2. Problème avec la fonction "VLookup"
    Par Domino40 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/08/2008, 09h57
  3. Problème avec la fonction VLookup
    Par pinocchio dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/07/2008, 11h59
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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