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 :

Créer une fonction pour importer une donnée du web [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 53
    Points
    53
    Par défaut Créer une fonction pour importer une donnée du web
    Bonjour à tous,

    Je cherche à créer une fonction qui irait chercher le cours d'une action sur internet (via le site Yahoo Finance), en fontion du symbole de l'action que j'aurais entré dans une cellule voisine sur Excel.

    Je prends l'exemple de l'action ayant pour symbole D-UN.TO, la page correspondante dans Yahoo Finance est l'URL http://finance.yahoo.com/q?s=d-un.to&ql=1 et l'élément à aller chercher possède l'ID yfs_l84_d-un.to cela marche a priori avec n'importe quel symbole et n'importe quelle action.

    En m'inspirant d'une macro que j'ai trouvé dans un tutoriel sur le net, j'ai créé la fonction suivante (en galérant un peu car je suis un pur débutant en VBA):

    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
     
    Function GetQuote(symbol)
     
    Dim ie As InternetExplorer, doc As HTMLDocument, ticker As String, quote As String
     
    ticker = symbol.Value
    Set ie = CreateObject("InternetExplorer.Application")
     
        ie.navigate "http://finance.yahoo.com/q?s=" & ticker & "&ql=1"
     
        Do
            DoEvents
        Loop Until ie.readyState = READYSTATE_COMPLETE
     
        Set doc = ie.document
     
        quote = doc.getElementById("yfs_l84_" & ticker).innerText
     
        GetQuote = quote
     
     
    End Function
    Hélas, il fallait s'y attendre, cela ne fonctionne pas lorsque par exemple je saisi mon symbole dans la cellule A5 et qu'en A6 je rente "=GetQuote(A5)" (Excel me retourne "#NOM?")

    Au passage, j'avoue ne pas comprendre la totalité du code que j'utilise... j'ai simplement tenté d'adapter le code de la macro que j'ai trouvée dans cette vidéo :


    Quelqu'un pourrait-il m'aider à obtenir la fonction souhaitée?

    En vous remerciant par avance,

    Bien cordialement.

  2. #2
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    L'erreur #NOM? Excel ne reconnait pas ta fonction, parce qu'elle n'est pas mise dans un module standard.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    Bonjour et merci pour votre réponse.

    Comment ça elle n'est pas mise dans un module standard? J'ai pourtant créé un module dans lequel j'ai tapé la fonction... à moins que j'ai mal compris
    Nom : Sans titre.jpg
Affichages : 437
Taille : 115,4 Ko

    Lorsque je rajoute une fonction "simple" du style multiplier(nombre1;nombre2) dans ce module celle-ci est pourtant reconnue et fonctionne...

  4. #4
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Renomme ton module ou ta fonction autrement. Ils ne doivent pas avoir le même nom. d'où le conflit
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 53
    Points
    53
    Par défaut
    En effet cela fonctionne!

    Merci.

  6. #6
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Par contre il te faudra ajouter à la fin de ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ie.quit
    set ie=nothing
    sinon, tu auras plein d'instances internet explorer
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. éélaboration d'une macro pour importation de donnée dans excel 2003
    Par wuging dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/09/2010, 08h33
  2. Existe t il une fonction pour effacer une page
    Par teen6517 dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2007, 14h20
  3. Réponses: 12
    Dernier message: 25/07/2006, 18h36
  4. Réponses: 8
    Dernier message: 02/12/2005, 18h07
  5. Utiliser une touche pour appeller une fonction
    Par Hide dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2005, 16h59

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