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 :

Problème avec VLookup sous VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut Problème avec VLookup sous VBA
    Salut à tous,
    J'ai un problème que je n'arrive pas à résoudre et pourtant j'ai l'impression d'avoir tout essayé.

    J'ai un fichier excel dans lequel dans la colonne A il y a des dates et dans la colonne B les cours d'une action correspondant.
    J'ai le petit programme suivant:
    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
     
     
    Function payOff(dateDebut As Date, cellACote As Range) As Variant
    On Error GoTo gestionErreur:
     
    Dim coursFinAnnee1, coursFinAnnee2, coursFinAnnee3, x As Double
    Dim position As Integer
    Dim dateFin1, dateFin2, dateFin3 As Date
    dateFin1 = DateAdd("yyyy", 1, dateDebut)
    dateFin2 = DateAdd("yyyy", 2, dateDebut)
    dateFin3 = DateAdd("yyyy", 3, dateDebut)
     
     
    coursDebut = cellACote.Offset(0, -1).Value
     
    coursFinAnnee1=Application.WorksheetFunction.VLookup(dateFin1, Range("A1:B2017"), 2,0)

    Ce code ne marche pas...J'ai tracé l'erreur suivante:
    unable to get the VLookup property of the worksheetfunction class

    Alors j'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    coursFinAnnee1 = Application.VLookup(dateFin1, Range("A1:B2017"), 2, 0)
    Mais si j'affiche les variables en mode debug, je vois que dans coursFinAnnee1 j'ai "Error 2042".

    Est-ce que quelqu'un peut m'aider?
    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
    Peut être une piste
    Erreur 2042 c'est la valeur que retourne la formule si elle ne trouve rien.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut
    Merci pour ta réponse.
    Le truc c'est que si je fais le VLookUp dans excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VLOOKUP(A256;$A$4:$B$2017;2;0)
    là ça me retourne bien une valeur. J'ai bien vérifié et la valeur de la variable
    dateFin1
    est la bonne et elle est présente dans la colonne A...

  4. #4
    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
    ca a peut etre une incidence, mais ta variable dateFin1 est de type variant et non de type date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim dateFin1, dateFin2, dateFin3 As Date
    il faut plutot delcarer comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim dateFin1 as Date, dateFin2 as Date, dateFin3 As Date

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut
    J'ai corrigé en ajoutant un as Date partout mais j'ai toujours la même erreur (2042)...

  6. #6
    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
    essai en forcant dans ta formule la valeur recherchée.
    Une valeur existante dans le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coursFinAnnee1=Application.WorksheetFunction.VLookup("01/01/2007", Range("A1:B2017"), 2,0)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut
    J'ai changé en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    coursFinAnnee1 = Application.VLookup("20/07/2000", Range("A1:B2017"), 2, 0)
    puis en:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    coursFinAnnee1 = Application.VLookup(CDate("20/07/2000"), Range("A1:B2017"), 2, 0)
    Et j'ai toujours l'erreur 2042....

  8. #8
    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
    je ne suis pas bien réveillé aujourd hui
    Le lookup recherche une date, alors que dans ta cellule tu as une valeur numérique qui a un format date, mais ca valeur est un nombre.
    Donc il ne trouve pas.

    Il faudrait utiliser dateval(madate) qui converti ta date en nombre

    J'ai utilisé une cellule vide pour récupèrer la valeur de la date a rechercher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Range("F1").FormulaLocal = "=dateval(""" & dateFin1  & """)"
     
    coursFinAnnee1=Application.WorksheetFunction.VLookup(Range("F1").Value, Range("A1:B2017"), 2,0)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut
    Ok je vois l'idée. Par contre je ne trouve pas de fonction qui convertit une date en nombre.
    J'ai essayé CInt(dateFin1) mais j'ai l'erreur: Overflow
    J'ai regardé la fonction dateValue mais j'ai aussi la même erreur.
    Merci de ton aide

  10. #10
    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
    c'est ce que fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F1").FormulaLocal = "=dateval(""" & dateFin1  & """)"
    Je n'ai pas trouvé en vba

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut
    Le problème c'est que si j'utilise ça, il faut que j'écrive dans une cellule. Or une fonction VBA ne peut pas ecrire un résultat dans une cellule, il faut passer par une sub pour faire ça.
    Tu ne vois pas une autre solution ?
    Merci

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 38
    Par défaut
    J'ai touvé une alternative:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    dateFin1 = DateAdd("yyyy", 1, dateDebut)
    Dim res As String
    res = CStr(dateFin1)
     
    Dim res2 As Double
    res2 = DateValue(res)
    MsgBox res2
     
    coursFinAnnee1 = Application.VLookup(res2, Range("A1:B2017"), 2, False)
    Il faut d'abord convertir la date en chaine de caractères puis le string en double...
    Une fois que c'est fait on peut appeller VLookup, c'est completement tordu !
    Merci pour ton aide en tout cas

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

Discussions similaires

  1. Problème avec open() [Excel VBA]
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21
  2. Problème avec EInOutError sous delphi 2005
    Par Teb dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2005, 11h48
  3. fichier .bat : problèmes avec des sous-répertoires
    Par aymron dans le forum Windows
    Réponses: 4
    Dernier message: 23/06/2005, 09h33
  4. Problème avec glutFullScreen() sous linux...
    Par MaxPayne dans le forum OpenGL
    Réponses: 1
    Dernier message: 29/11/2004, 11h30
  5. Problème avec CopyDir sous D5
    Par Houben Jacques dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 22h02

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