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 :

[EXCEL 365 Pro plus] remplissage formulaire web et récupération de données via VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut [EXCEL 365 Pro plus] remplissage formulaire web et récupération de données via VBA
    Bonjour,

    Je me retrouve face à un tableaux de 300 lignes de montants en dollars (Colonne B) réalisés à des dates différentes (Colonne A).
    Il me faudrait convertir ces montants en euro (colonne C)avec le taux de change de la date :
    Exemple:

    Colonne A Colonne B Colonne C
    2020-10-17 01:00:29 0,17$ -> 0,14€
    2020-10-24 03:08:51 0,05$ -> etc...

    Pour récupérer l'info du taux de change, j'ai utilisé ce site : https://fxtop.com/fr/conversion-devises-date-passee.php

    Cela dépasse de loin mes compétences de codeur VBA et je n'arrive pas à trouver de quoi m'aider sur le net.
    Merci pour tous ceux qui pourront m'aider.


    Bonne journée

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut, tu veux faire quelque chose de dynamique ou c'est juste pour traiter un fichier de manière rétroactive ?

    Si tu veux le faire de manière rétroactive, essayer de trouver un fichier CSV des taux de conversion jusqu’à la date qui t’intéresse, en suite tu transforme ton premier tableau en tableau structuré, tu mets une formule pour récupérer le taux de change de la date voulue et le multiplier par ton montant en dollar.

    Si c'est de maniere dynamique il va te falloir trouver un site qui génère une fichier CSV mis a jour quotidiennement, et faire une mise a jour de ton tableaux des taux de change.

    Tu peux utiliser cette fonction pour télécharger un fichier CSV (ou même tout type de fichier) depuis le web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Declare Function TelechargerFichierURL Lib "urlmon" _
    Alias "URLDownloadToFileA" _
    (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
     
    Private Const ERROR_SUCCESS As Long = 0
    Private Const BINDF_GETNEWESTVERSION As Long = &H10
     
    Public Function TelechargerFichierInternet(SourceUrl As String, FichierLocal As String) As Boolean
    TelechargerFichierInternet = TelechargerFichierURL(0&, SourceUrl, FichierLocal, BINDF_GETNEWESTVERSION, 0&) = ERROR_SUCCESS
    End Function
    Une fois téléchargé, tu l'ouvre en mode CSV avec VBA, tu copie les data dans ton onglet des taux de change.

    Si tu sait pas comment développer je peux t'aider si c'est ça que tu veux faire.

    CB

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Bonjour Chrisitan,

    Merci pour tes réponses. J'avais donné le site pour voir comment c'était structuré et voir comment faire interagir excel. C'est un site dynamique où il faut saisir la date et la conversion souhaitée.

    Mais en fouillant sur internet, j'ai trouvé un autre site qui recense tous les taux depuis 1999 : https://www.banque-france.fr/statist...s-quotidiennes

    Il faudrait donc que j'importe ce fichier, que je le stocke dans un onglet provisoire et que je supprimerai à la fin.

    Je vais tester ton bout de code pour voir comment ça se comporte et voir si je bloque pour la suite de ma macro.

    Par contre, c'est possible e le commenter pour comprendre ce qu'il fait. Où dois-je renseigner l'adresse que j'ai renseigné plus haut?

    Bonne journée

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Ici tu as simplement la fonction qui va te permettre d'enregistrer ton fichier extrait du web sur ta machine (ou réseau) en local.

    Quand tu fais appel a la fonction il faut préciser l'url du fichier a telecharger dans la variable "SourceUrl" et le chemin+nom fichier+extension dans la variable "FichierLocal"

    Je vais te faire un code pour illustrer, je reviens vers toi cette apres midi.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Voici le code te permettant de charger les données du csv dans ton classeur :

    Les premières lignes servent dans la déclaration des fonctions windows et des variables utilisées dans la fonction de récupération du lien.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Private Declare Function TelechargerFichierURL Lib "urlmon" _
    Alias "URLDownloadToFileA" _
    (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
     
    Private Const ERROR_SUCCESS As Long = 0
    Private Const BINDF_GETNEWESTVERSION As Long = &H10
     
    Public Function TelechargerFichierInternet(SourceUrl As String, FichierLocal As String) As Boolean
    TelechargerFichierInternet = TelechargerFichierURL(0&, SourceUrl, FichierLocal, BINDF_GETNEWESTVERSION, 0&) = ERROR_SUCCESS
    End Function
    Public Function URLexiste(URLaVerifier As String) As Boolean
    'par Excel-Malin.com ( https://excel-malin.com )
     
    On Error GoTo Erreur
     
    Dim oXHTTP As Object
    Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
     
    oXHTTP.Open "HEAD", URLaVerifier, False
    oXHTTP.Send
     
    URLexiste = (oXHTTP.Status = 200)
    Exit Function
     
    Erreur:
    URLexiste = False
    End Function
    Sub main()
    Dim URL As String
    Dim ws As Worksheet
    Dim fichier As String
    Dim nomFichier As String
    'ici l'URL du fichier a telecharger
    URL = "http://webstat.banque-france.fr/fr/downloadFile.do?id=5385698&exportTypecsv"
    'ici le nom du fichier enregistré
    nomFichier = "TauxdeChange.csv"
    'ici le chemin d'enregistrement du fichier en local
    fichier = "C:\Users\bboschi\Documents\taux Change\" & nomFichier
    'verification existance lien
    If URLexiste(URL) = False Then GoTo fin
    'appel a la fonction avec les arguments requis
    TelechargerFichierInternet URL, fichier
    'définition de la feuille hote
    Set ws = Feuil1
    'chargement du fichier csv dans la feuille avec l'outil querytables
    With ws.QueryTables.Add(Connection:="TEXT;" & fichier, Destination:=ws.Range("A1"))
        .TextFileParseType = xlDelimited
        .TextFileSemicolonDelimiter = True
        .Refresh
    End With
    GoTo fin
    Err:
    'si le lien est erroné
    MsgBox "fichier web introuvable, veuillez vérifier le lien : " & URL, vbCritical, "Erreur lien fichier"
    fin:
    End Sub
    Il va falloir que tu modifie le chemin d'enregistrement en fonction de ta machine ainsi que la feuille hote (ici feuil1)

    J'ai également ajouté une fonction censée verifer l'existance de l'URL, a voir (faites par excel malin)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Merci pour ton exemple. J'essai d'adapter ça au plus vite et je reviens vers toi

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Alors j'ai mis ton code dans un classeur vierge en modifiant l'adresse d'enregistrement du fichier csv.

    Il bloque au niveau du chargement du fichier

    Erreur d'exécution '004':
    Impossible de trouver le fichier texte pour l'actualisation de cette plage de données externes.
    Assurez-vous que le texte n'a été ni déplacé ni renommé et réessayez.
    Lors du débogage il me met le .refresh en surbrillant.

    J'ai l'impression qu'il n'arrive pas à récupérer le fichier csv sur le net car j'ai créé un fichier csv avec le nom et au format csv et la macro se déroulé correctement.

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut, déjà il faudrait s'assurer de la récupération du fichier csv en local, essaye de mettre un point d'arrêt avant la requête csv (F8) pour voir si le download to file fonctionne bien et que le lien internet est valide.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Effectivement, le téléchargement ne fonctionne pas

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/05/2019, 16h20
  2. Récupération des données via REST Web services
    Par Leaffy dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 09/04/2012, 21h40
  3. [IP-2010] Récupération de données Via un Service Web SOAP
    Par gjeanne dans le forum InfoPath
    Réponses: 1
    Dernier message: 30/03/2012, 11h10
  4. [web] authentification sur un site via VBA
    Par cafeine dans le forum Contribuez
    Réponses: 0
    Dernier message: 18/04/2008, 16h47
  5. Formulaires word et récupération de données
    Par sellig60 dans le forum VBA Word
    Réponses: 1
    Dernier message: 30/12/2007, 14h32

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