VBA: télécharger fichier de l’internet 23


Tout le monde a probablement déjà eu besoin de télécharger un ou plusieurs fichiers d'internet – des images, des vidéos, des PDF,… Mais peu de gens savent qu'il est possible de télécharger un fichier avec Excel – en utilisant une fonction VBA.

Télécharger des fichiers d'internet avec VBA

La fonction VBA suivante permet de télécharger un fichier (peu importe son type) à partir de l'internet. Vous n'avez besoin que du lien (URL) du fichier et de son emplacement.

En combinaison avec une boucle, cette procédure devient très puissante pour un téléchargement en masse des photos, documents, vidéos etc. car cette méthode est très rapide et ne requière pas d'interaction de l'utilisateur. Elle est donc idéale pour être automatisée.

Astuce: si les liens URL des fichiers en ligne ont une structure logique (par exemple A001.jpg, A0002.jpg,…) ou si vous disposez de la liste des liens, il vous suffit de créer une logique pour attribuer un nom à utiliser pour la copie, une boucle et vous pouvez télécharger des dizaines de fichiers par minute! À utiliser avec modération.

Le code de la fonction qui télécharge des fichiers

Voici donc le code VBA de la fonction en question. Comme le code contient une déclaration ( Declare ), le code doit se trouver au début du Module qui contient le code VBA. Si ce n'est pas le cas, vous aurez droit à un message d'erreur de la par de l'éditeur VBA. La fonction utilise donc deux arguments de type String: SourceUrl (contenant l'URL du fichier distant) et FichierLocal (contenant le nom et l'emplacement de la copie).

 

Exemple: télécharger une image d'Internet

La procédure VBA qui suit montre comment utiliser la fonction de téléchargement TelechargerFichiersURL. Tant que l'on y est, autant prendre un cas réel! Disons que l'on veut télécharger le logo de la chaîne France 2 et le sauvegarder Dans le dossier MesImagesDuNet sur le disque C:\. Rien de plus simple!

Il vous suffit l'URL de l'image et l'emplacement (chemin + nom du fichier) où vous voulez sauvegarder le fichier et le tour est joué. Aucune boîte de dialogue ne s'ouvre: dans cet exemple, le nom et le chemin à utiliser pour sauvegarder le fichier sont utilisés comme le second paramètre de la fonction.

Voici donc un exemple concret de la fréquente sous-estimation d'Excel. Qui aurait cru pouvoir utiliser Excel pour télécharger des fichiers sur Internet? Et pourtant… VBA vous donne à disposition de nombreuses possibilités qui dépassent largement l'idée que le public se fait d'un "tableur"…

Pour aller plus loin

Tant que l'on est dans le thème de VBA et des fichiers, voici quelques articles qui pourraient vous intéresser

 

 

13 0

Pourrait vous intéresser

Partagez cette page...
Share on FacebookShare on Google+Share on LinkedInTweet about this on TwitterShare on RedditShare on TumblrDigg thisEmail this to someone

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.

23 commentaires sur “VBA: télécharger fichier de l’internet

  • Bruno G

    Un simple merci pour ce code.
    Que de temps vous m'avez fait gagner.
    J'ai pu faire une boucle pour télécharger en un seul clic une centaine de fichiers.

    Bon été à vous

    Bruno

  • Calimero

    bonjour,
    Je n'y connais rien en VBA mais je suis un ancien du DOS et du BASIC donc autant ne pas parler de mon âge 😉
    Quand je fais un copier-coller de l'exemple, j'ai le message "erreur de compilation Sub ou Function non définie".
    J'ai un gros catalogue de fichiers avec des URL pointant sur des images et cette astuce m'aiderait beaucoup.
    Cordialement,

    • excel-malin.com Auteur du billet

      Bonjour Calimero.
      Sur cette page, vous trouverez le code de la fonction VBA pour télécharger le fichier (le premier code sur la page) et l'exemple (deuxième code VBA de la page) qui utilise cette fonction (= le premier code).

      Vous devez donc copier/coller LES DEUX codes qui se trouvent sur cette page. En fait, l'exemple est juste une illustration comment utiliser la fonction – vous devez donc avoir copié la fonction dans votre macro avant de pouvoir utiliser l'exemple…

      J'espère que cela résout votre problème. Bonne chance avec les téléchargements.
      Bien à vous, Martin

      • Calimero

        Bonjour,
        Merci pour cette réponse rapide. En effet, ça fonctionne. Le problème est que c'est sur un site sécurisé dont j'ai les codes. Je peux afficher et enregistrer les images une par une quand je vais sur le site en faisant un simple clic droit, enregistrer l'image etc… Voilà ce que je voudrais faire : J'ai une société et un commercial qui se promène avec des tonnes de catalogues. J'ai donc récupéré par le biais de mes fournisseurs leur catalogue sous format excel. Nous sommes dans une région où la 3g est loin d'être partout, je voulais donc faire un catalogue d'images pour mon commercial pour qu'il puisse tout avoir sur son portable : références, caractéristiques et images…
        Si vous connaissez une solution
        Cordialement,

        • excel-malin.com Auteur du billet

          Bonjour.
          Avez vous essayé de d'abord lancer Internet Explorer, se connecter sur le site avec le login et le mot de passe et une fois que vous êtes bien connecté, lancer la macro?

          Sinon, il y a une autre méthode mais c'est nettement plus compliqué: il faut utiliser VBA pour ouvrir une session de IE, aller sur la page, remplir le formulaire de connection, lancer la connection et ensuite télécharger les fichiers. Mais c'est un code particulier pour chaque cas spécifique. Voyez par exemple ici (commentaire n°6 de "Norie").

          J'espère que cela vous aidera…
          Bien à vous, Martin

    • excel-malin.com Auteur du billet

      Bonjour Alex,
      vous devez copier/coller le code sur cette page dans un "Module" dans l'éditeur VBA. Ce serait un peu longue pour tout expliquer ici et comme le tutoriel général sur le VBA sur lequel je travaille pour le moment n'est pas encore fini, je vous ai préparé un fichier où il vous suffit d'écrire l'URL du fichier et la destination et de cliquer sur un bouton pour effectuer le téléchargement.

      Si vous voulez voir le code et comment il est utilisé, vous devez aller dans l'éditeur VBA (pour y accéder, appuyez Alt + F11 quand vous êtes dans le fichier Excel).
      Le fichier se trouve ici: exemple_telechargement_internet.xlsm

      J'espère que cela va vous aider. Cordialement, Martin

      • vandenabeele

        Bonjour,
        J'ai essayé votre code/fichier.
        J'ai bien un message de téléchargement réussi mais lorsque j'ouvre le ficheir de destination, aucun élément n'a été enregistré…
        Pouvez-vous m'aider?
        merci beaucoup pour votre aide

        • excel-malin.com Auteur du billet

          Bonjour,
          c'est difficile d'estimer à distance ce qui ne marche pas. Si vous essayez le fichier que j'ai préparé dans un des commentaires pour Alex:
          1) essayez de télécharger différents fichiers (par exemple: http://excel-malin.com/wp-content/uploads/2016/04/Calendrier_2018_France_horizontal.png mais aussi d'autres sites)
          2) essayez de les sauvegarder dans différents dossiers

          Vu que le code fonctionne pour presque tous les utilisateurs, je crois que ce sera lié à votre machine:
          * avez-vous les droits nécessaires pour écrire dans le dossier en question?
          * vous essayez de le sauvegarder sur un disque local ou sur le réseau?
          * …

          Si vous ne trouvez vraiment pas, contactez-moi sur contact@excel-malin.com avec les infos sur votre système, le(s) fichier(s) que vous voulez télécharger et les dossiers où vous voulez les sauvegarder – et je regarderai ce que je peux faire.

        • jike

          Merci pour votre réponse.
          Cela fonctionne au niveau de l'identification. Le code que je souhaite doit ouvrir le lien internet qui est dans la colonne "I2", télécharger le fichier et le stocké dans le lien qui se trouve dans la colonne "M2".

          Donc à la place de mettre l'adresse direct du fichier je l'ai modifié comme cela :

          fichier_internet = Range("I2").Value
          fichier_local = Range("M2").Value

          Comment créer une boucle pour lire toute la colonne (télécharger I3 et stocker à l’emplacement M3; télécharger i4 et stocker à l'emplacement M4;…).

          Merci d'avance pour votre aide;

          J. (novice en vba :-))

          • excel-malin.com Auteur du billet

            Bonjour Jike,
            ceci devrait faire l'affaire:


            Sub BoucleTelechargement()
            For LigneDeLien = 2 To Range("I" & Rows.Count).End(xlUp).Row
            fichier_internet = Range("I" & LigneDeLien).Value
            fichier_local = Range("M" & LigneDeLien).Value

            Call TelechargerFichierInternet(fichier_internet, fichier_local)

            Next LigneDeLien
            End Sub

    • Chris

      Bonjour, je ne dois vraiment pas être doué !! j'essaie en vain le code je n'y arrive pas. Je m'explique j'ai 5111 url (photos de mon grossistes) que je voudrais ouvrir en une seule fois et enregistrer. mais je galère terriblement, si l'on pouvait m'apporter une aide ce serait des plus sympathiques
      Bien a vous

      • excel-malin.com Auteur du billet

        Bonjour Chris,
        je vous ai fait un petit outil pour voir si cela fonctionne.
        Vous pouvez le télécharger ici

        Il suffit de remplacer les valeurs exemples par vos valeurs (le dossier où les fichiers doivent être stockés & la liste des URL). Vous cliquez sur le bouton et le tour est (devrait être) joué.
        Attention, s'il y a des images qui ont le même nom, il vont se "surécrire". Si c'est le cas, faites moi signe et je verrai ce que je peux faire.

        PS: le code VBA est déverrouillé donc vous pouvez y jeter un coup d'œil.
        Cordialement, Martin

  • Lucien

    Bonjour,

    Tout d'abord merci pour votre code, cela fonctionnait parfaitement !

    "Fonctionnait" car en effet, la semaine dernière je m'en suis servi à merveille mais voilà qu'en ce début de semaine cela ne fonctionne plus, j'ai bien le message "Le téléchargement a réussi" mais aucun fichier n'a en fait été téléchargé.

    Le contexte est que j'ai besoin de mettre à jour un effectif de personnel avec le planning disponible sur l'extranet de mon entreprise, j'allais donc chercher le planning avec votre code et je pouvais ensuite l'ouvrir directement dans excel. Mais depuis aujourd'hui cela ne fonctionne plus, en tout cas sur le réseau entreprise, lorsque j'utilise ma connexion de données personnelle aucun problème.

    Est-il donc possible que le service informatique ait-pu bloquer certaines fonctions de VBA ?

    Merci par avance,

    Lucien

    • excel-malin.com Auteur du billet

      Bonjour Lucien,
      d'après ce que vous dites, c'est presque certain que c'est votre service IT qui a bloqué cette fonctionnalité.
      Surtout si le code fonctionne toujours comme il faut sur votre connexion privée…

      Il est possible qu'il aient décelé une activité inhabituelle et l'ont bloqué – en tout cas, c'est ainsi que fonctionne des services informatiques des (grandes) entreprises.

      Il est toujours possible, surtout que cela n'a commencé qu'aujourd'hui, qu'il s'agit simplement d'un problème de connexion de votre réseau d'entreprise. À votre place, j'essaierait encore par ex. demain pour être sûr que le "problème" persiste.

      Bien à vous,
      Martin

      • Lucien

        D'accord merci, je ne pensais pas que l'on pouvait bloquer indépendamment de telles choses. Je réessayerais quand même demain mais j'ai peu d'espoir.

        Lucien

  • Beneroz

    Bonjour,
    je trouve cette fonction super intéressante et elle m'a beaucoup dépanné dans mes projets.

    Cependant je voulais savoir si en vba il était possible d'utiliser le même système pour télécharger un fichier dont on ne connait pas le type (.pnj ou .bmp) et le nom à l'avance mais juste en possédant un lien Url de type : http://www.bidule/dossier/?id=558

    Bien cordialement ^^