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 :

Télécharger un fichier sur internet grâce à une macro VBA


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Télécharger un fichier sur internet grâce à une macro VBA
    Bonjour,

    Je souhaite réaliser un fichier excel tout simple, qui à chaque actualisation va télécharger le fichier .csv ci-contre:

    https://www.banque-france.fr/fileadm...page3_quot.csv

    Je voudrais juste que dès que je clique sur un bouton (que j'aurais dessiné et placé sur ma Feuil1), le fichier se télécharge et se copie directement sur la Feuil1 à partir de la cellule A1.

    Si une copie du fichier téléchargé s'effectue sur le disque dur, il faudrait l'effacer également.

    J'ai bien tenté de compiler des macros existantes, mais je n'arrive à chaque fois qu'à ouvrir mon fichier .csv dans Internet Explorer....

    Si quelqu'un à la macro qui peut créer ce fichier je le remercie par avance.

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour,

    tout fichier compatible peut s'ouvrir directement dans Excel, même via le net ‼

    Donc directement l'ouvrir manuellement et tout en utilisant l'Enregistreur de macros, le code est livré sur un plateau !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci Marc-L pour ta réponse.

    Le pb est que j'ai déjà essayé cette solution mais:

    - par Internet Explorer, si je souhaite enregistrer le fichier, il ne s'enregistre pas en .csv mais en .txt
    Du coup, impossible de l'importer dans Excel par la suite convenablement

    - Le fichier s'enregistre bien en .csv mais quand je le télécharge via Google Chrome... Or ces manips ne se retrouvent pas dans le code à la fin de l'enregistrement...

    S'il y a un code général je suis donc preneur

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par geotz Voir le message
    Merci Marc-L pour ta réponse.

    Le pb est que j'ai déjà essayé cette solution mais:

    - par Internet Explorer, si je souhaite enregistrer le fichier, il ne s'enregistre pas en .csv mais en .txt
    Du coup, impossible de l'importer dans Excel par la suite convenablement

    - Le fichier s'enregistre bien en .csv mais quand je le télécharge via Google Chrome... Or ces manips ne se retrouvent pas dans le code à la fin de l'enregistrement...

    S'il y a un code général je suis donc preneur


    Bonjour, relis la réponse à Marc-L

    Citation Envoyé par Marc-L Voir le message

    Bonjour, bonjour,

    tout fichier compatible peut s'ouvrir directement dans Excel, même via le net ‼

    Donc directement l'ouvrir manuellement et tout en utilisant l'Enregistreur de macros, le code est livré sur un plateau !
    il n'est question ni de Chrome ni d'Internet explorer

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Alors soit c'est la fin de semaine, soit je ne comprends rien...

    Il s'agit de créer une requête web? Non parce que je vois pas du tout la procédure à suivre avec l'enregistreur de macro si je ne dois pas ouvrir de page internet...

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Merci bbil

    geotz, tu n'as donc rien relu ! J'ai juste évoqué l'ouverture directe du fichier !

    Comment fais-tu pour ouvrir un classeur depuis Excel ?
    Et au lieu de naviguer sur ton disque dur, tu entres directement la Web adresse du fichier ‼ (Copier / Coller du lien)
    Vraiment pas compliqué d'ouvrir un fichier Excel …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    marcL et bbil t'on dis comment faire cette manipulation

    je repete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv
    Sub ouvre_fichier()
    fichier = "https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv"
    Workbooks.Open fichier
    End Sub
    cela dit la restitution ne traduit peut être pas l'intention très souvent avec un ".csv"

    montre moi comment les entêtes de colonne doivent être ainsi que la première ligne sur le sheets je te ferais un exemple
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut 2 solutions completes
    Bonjour

    comme je te l'ai dis précédemment les fichiers csv ne sont a coup sur restitués correctement sur le sheets l'ors de la copie
    (plusieurs données sur une même cellule, des cellules vides ,etc....)

    alors la fonction"workbooks.open" a ces limetes surtout si l'on veut travailler sur la grille par la suite

    alors comme j'aime beaucoup faire ce genre d'exercice ,je t'ai concocté 2 solutions

    je doit dire avant que si tu avais fait une recherche dans les contributions tu aurais trouvé certainement un début de piste puisque une de mes fonctions utilisée se trouve justement dans une de mes contributions
    pour l'occasion aussi j'en est créé une nouvelle qui fera certainement son bout de chemin ,on en reparlera pour la 2 Emme solution
    1 ère solution
    on va donc récupérer le texte du csv avec ma fonction getcodesource
    et on va se servir de la fonction "split" pour charger une variable tableau
    puis la retranscrire sur le sheet
    1 er code

    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
     
     
     
    'https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv
     
    Public Function GetCodeSource(sURL)
        Dim Lapage_en_HTML As Object
        Set Lapage_en_HTML = CreateObject("Microsoft.XMLHTTP")    'instancie l'object
        Lapage_en_HTML.Open "GET", sURL & "?nocache= + Math.random()", False   'ouvre l'url dans l'Object
        Lapage_en_HTML.Send    ' envoie la requette
        'selon si la variable "au_format_text" est a true ou falsele texte de sortie sera en html ou texte
        GetCodeSource = Lapage_en_HTML.ResponseText
    End Function
     
    Sub recuperation_du_csV()
           Dim textebrut As Variant, textetablo As Variant, tablo, lignes As Variant
        URL = "https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv"
        textebrut = GetCodeSource(URL)    'on recupere le texte en entier
     
        textetablo = Split(textebrut, "POUR")(UBound(Split(textebrut, "POUR")))   'on supprime tout sauf le tableau des données
        lignes = UBound(Split(textetablo, Chr(13))) ' on determines le nombres de lignes du tableau dans le csv
            ReDim tablo(lignes, 7)    'on dimentionne la variable tablo  avec le nombres de ligne et de colonne
        For e = 1 To 10 'lignes - 1
            For a = 0 To 6
                tablo(e, a) = Split(Split(textetablo, Chr(13))(e), ";")(a)
                'MsgBox Split(Split(textetablo, Chr(13))(e), ";")(a)
            'DoEvents
            Next
            Next
        Range("A1:G1", "A3").Resize(UBound(tablo), 7).ClearContents
        Range("A2").Resize(UBound(tablo), 7) = tablo
    [A1:G1] = Split(textebrut, Chr(13))(1)
     
    End Sub
    alors comme tu peut le voir ce code est a la porté de tout le monde ,il n'est pas très compliqué en soit
    le problème ici en l'occurrence c'est le temps de travail quelques fois sur plusieurs essais plus de une minute
    pas très performant me diras tu

    alors maintenant je te propose une 2 emme solution

    toujours avec getcodesource on récupère le texte du csv
    et avec ma toute nouvelle petite fonction on va transformer le texte format csv au format HTML
    tu me diras : A quoi ca sert
    et bien tout simplement a charger un dataobject qui lui gère le format html ou xml
    ensuite on copy dans le clipboard (presse papier) et on le colle dans le sheets
    et la ....miracle ta grille parfaitement rangé cellule par cellule
    voila le code de la 2 eme solution

    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
     
    'https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv
    Public Function GetCodeSource2(sURL)
        Dim Lapage_en_HTML As Object
        Set Lapage_en_HTML = CreateObject("Microsoft.XMLHTTP")    'instancie l'object
        Lapage_en_HTML.Open "GET", sURL & "?nocache= + Math.random()", False   'ouvre l'url dans l'Object
        Lapage_en_HTML.Send    ' envoie la requette
        'selon si la variable "au_format_text" est a true ou falsele texte de sortie sera en html ou texte
        GetCodeSource2 = Lapage_en_HTML.ResponseText
    End Function
    Public Function CSVtoXHTML(codesource)
    'on créé un objet html
        codesource = "<table><tr>" & codesource
        codesource = Replace(codesource, Chr(13), "</tr><tr><td>")
        codesource = Replace(codesource, ";", "</td><td>")
         codesource = Replace(codesource, "<tr></tr>", "")
        With CreateObject("htmlfile")
            'on y ecrit le codesource complet
            .Write codesource
            'Ici on garde que le texte au format outerhtml qui garde en memoire la mise en forme(pratique pour les tables)
            CSVtoXHTML = .body.outerHTML & "</table>"    'la fonction devient l'element mis en forme
        End With
    End Function
    Sub recuperation_du_csV_version2()
        Columns("A:G") = ""
        Dim textebrut As Variant, textetablo As Variant
        Dim tablo, lignes As Variant
        URL = "https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv"
        textebrut = GetCodeSource2(URL)    'on recupere le texte en entier
        [A1:G1] = Split(textebrut, Chr(13))(1)
        textetablo = Split(textebrut, "POUR")(UBound(Split(textebrut, "POUR")))    'on supprime tout sauf le tableau des données
         Set mydata = New DataObject
          mydata.SetText CSVtoXHTML(textetablo)
        'le code du tableau est copié dans le presse-papiers
        mydata.PutInClipboard
        Set fich = ThisWorkbook
        Set pag = fich.Sheets(1)
        [A2].Select
        pag.Paste
    End Sub
    l'avantage de la 2 eme solution c'est le temps de travail(moins de 4 secondes) chez moi

    j'espère que tu appréciera

    j'ai presque envie de demander a MarcL ce qu'il en pense si il est pas trop énervé
    c'est vrai Marc qu'en pense tu ???
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Hello,

    Désolé de ne vous revenir que ce matin ,mais je n'ai pas utilisé Internet du week-end.

    Marc-L, il est vrai que je n'avais vraiment rien pigé... Mais que ta solution était assez évidente au final.

    Merci beaucoup Patrick!!

    Alors pour la ligne de code simple qui était la retranscription des réponses de Marc-L et bbil, celle ci me va déjà bien

    Sinon oui c'est bien ce que j'avais déjà trouvé sur d'autres forums, mais impossible de réussir à faire tourner ce que je trouvais...

    J'ai testé tes 2 solutions, la 1ère me va parfaitement pour le besoin que j'en ai actuellement. Je n'ai plus qu'à redimensionner le tableau comme souhaité et c'est niquel.

    La 2ème s'avère plus intéressante je pense, mais je n'arrive pas à la faire tourner malheureusement...

    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
    Sub recuperation_du_csV_version2()
        Columns("A:G") = ""
        Dim textebrut As Variant, textetablo As Variant
        Dim tablo, lignes As Variant
        URL = "https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv"
        textebrut = GetCodeSource2(URL)    'on recupere le texte en entier
        [A1:G1] = Split(textebrut, Chr(13))(1)
        textetablo = Split(textebrut, "POUR")(UBound(Split(textebrut, "POUR")))    'on supprime tout sauf le tableau des données
    Set mydata = New DataObject
          mydata.SetText CSVtoXHTML(textetablo)
        'le code du tableau est copié dans le presse-papiers
        mydata.PutInClipboard
        Set fich = ThisWorkbook
        Set pag = fich.Sheets(1)
        [A2].Select
        pag.Paste
    End Sub
    J'ai le message suivant qui s'ouvre: "Erreur de compilation: Type défini par l'utilisateur non défini"

    A priori c'est au niveau du DataObject que ca ne marche pas... si tu as une idée sur le pourquoi du comment

    Sinon tes deux solutions sont bien efficaces et réutilisables pour d'autres types de fichiers donc je te remercie grandement

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    oui j'avais oublier
    pour se servir de la version 2 il faut activer la reference"Microsoft forms object(2.0).Library "

    on ne la trouve pas dans la liste
    le seul moyen a ma connaissance aujourd'hui c'est d' ajouter un userform si il n'y en a pas et de l'enlever immédiatement
    cette manipulation active cette référence

    tiens récupère ce fichier
    tu a 2 boutons un lance la version1 et l'autre la version2 tu constatera toi même la différence
    récupère le vite je ne laisse pas les fichiers dans les discutions j'ai besoins de place pour mes contributions
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    OK merci pour l'astuce d'activation je la note précieusement!

    J'ai DL le fichier c'est bon, tu peux le retirer

    Je teste ton fichier et te fais un feedback dans qques minutes!

    En tout cas maintenant je suis incollable sur la récupération de fichiers sur le net grâce à VBA!

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    En tout cas maintenant je suis incollable sur la récupération de fichiers sur le net grâce à VBA!
    ne crois surtout pas ca

    l'exemple que je t'ai donné et un exemple qui te conviens étant donné le contexte mais parfois selon les cites cela peut s'avérer beaucoup plus difficile
    les librairie utilisée pour ce travail peuvent être différente selon le mode utile
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ok!

    En tout cas la 2ème solution me plait beaucoup mieux! l'adaptation du fichier est parfaite

    Un grand merci à toi pour m'avoir éclairé sur tout ça!

    Patrick,

    Si je ne souhaite garder que 2 lignes du texte (et non tout couper), comment je fais?

    J'aimerais ne garder que la ligne des titres et la ligne des dates des dernieres MAJ.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [A1:G1] = Split(textebrut, Chr(13))(1)
        textetablo = Split(textebrut, "POUR")(UBound(Split(textebrut, "POUR")))    'on supprime tout sauf le tableau des données
         Set mydata = New MSForms.DataObject
          mydata.SetText CSVtoXHTML(textetablo)

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    J'aimerais ne garder que la ligne des titres et la ligne des dates des dernieres MAJ.
    tu veux bien t'expliquer????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re pour sirou
    Bonjour sirou
    normalement la charte dit que l'on évite de faire des demandes de ce genre par MP
    sinon tu image bien que c'est la débandade
    alors dans cette discussion il n'y a pas de fichier c'est du code
    depuis je l'ai améliorer je me sert plus du dataobject obligeant a activer une référence je me sert d'un autre clipboard
    voila le code a mettre dans un module standard
    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
    'https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv
    Public Function GetCodeSource2(sURL)
        Dim Lapage_en_HTML As Object
        Set Lapage_en_HTML = CreateObject("Microsoft.XMLHTTP")    'instancie l'object
        Lapage_en_HTML.Open "GET", sURL & "?nocache= + Math.random()", False   'ouvre l'url dans l'Object
        Lapage_en_HTML.Send    ' envoie la requette
        'selon si la variable "au_format_text" est a true ou falsele texte de sortie sera en html ou texte
        GetCodeSource2 = Lapage_en_HTML.ResponseText
    End Function
    Public Function CSVtoXHTML(codesource)
    'on créé un objet html
        codesource = "<table><tr>" & codesource
        codesource = Replace(codesource, Chr(13), "</tr><tr><td>")
        codesource = Replace(codesource, ";", "</td><td>")
         codesource = Replace(codesource, "<tr></tr>", "")
        With CreateObject("htmlfile")
            'on y ecrit le codesource complet
            .Write codesource
            'Ici on garde que le texte au format outerhtml qui garde en memoire la mise en forme(pratique pour les tables)
            CSVtoXHTML = .body.outerHTML & "</table>"    'la fonction devient l'element mis en forme
        End With
    End Function
    Sub recuperation_du_csV_version2()
        Columns("A:G") = ""
        Dim textebrut As Variant, textetablo As Variant
        Dim tablo, lignes As Variant
        URL = "<a href="https://www.banque-france.fr/fileadmin/user_upload/banque_de_france/Economie_et_Statistiques/Changes_et_Taux/page3_quot.csv" target="_blank">https://www.banque-france.fr/fileadm...page3_quot.csv</a>"
        textebrut = GetCodeSource2(URL)    'on recupere le texte en entier
        [A1:G1] = Split(textebrut, Chr(13))(1)
        textetablo = Split(textebrut, "POUR")(UBound(Split(textebrut, "POUR")))    'on supprime tout sauf le tableau des données
     
     
        With CreateObject("htmlfile")
        faire = .ParentWindow.clipboardData.SetData("text", CSVtoXHTML(textetablo))
            With Sheets(1)
                Set cel = .Cells(2, 1)
                cel.Select
                .Paste:
            End With
            faire = .ParentWindow.clipboardData.ClearData("text")
    End With
    End Sub
    la prochaine demande si il y a lieu fait le ici:
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Télécharger un fichier sur internet grâce à une macro VBA
    Par hupdhulu dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/04/2014, 19h44
  2. Télécharger un fichier sur internet.
    Par rico63 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 19/06/2012, 19h21
  3. [Toutes versions] Traiter un fichier txt à partir d'une macro VBA Excel
    Par alaize dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/07/2011, 15h25
  4. Réponses: 0
    Dernier message: 29/12/2010, 00h09
  5. Réponses: 2
    Dernier message: 19/12/2005, 13h15

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