Télécharger plusieurs (65) fichiers en même temps de "excel-pratique"

voir https://forum.excel-pratique.com/excel/creation-d-une-matrice-de-ponderation-196871

l'avant-dernier post contient 65 fichiers type "xlsx". Normallement en clicquant dessus, on télécharge chaque fichier, mais si on doit faire cela 65 fois ... .

Y-a-t-il une méthode pour les télécharger en 1 manipulation ?

Hello,

Je te laisse faire le script VBA pour lancer les téléchargements

42listdls.xlsx (11.09 Ko)

Hello,

Pour Chrome , il y a l'extension Simple mass downloader qui doit savoir faire cela.

Ami calmant, J.P

@Jurassic Pork, c'est dangeureux de l'utiliser ?

image

@Saboh12617, un xlsx n contient pas des scripts, je crois. Mais c'est surtout le téléchargement d' "Excel-Pratique" vers ma disque dur que je veux dire.

@Jurassic Pork,

une fois qu'on a installé cet app, il faut clicquer sur chaque PJ ou peut-on choisir le premier puis CTRL+Shift et le dernier ?

Je viens de faire un essai

tu cliques sur le premier et tu restes appuyer et tu descends jusqu'au dernier. Une fois que tous les fichiers sont sélectionnés tu cliques droit et tu sélectionnes add-selection-links to list. Tu sélectionnes HTM (66) et tu cliques sur Download Now et normalement cela va te télécharger les fichiers.

Bonjour à tous,

sous firefox, il y a snap links

Crdlmt

Hello

Tu peux développer un programme, en ligne de commande, pour le faire.

L'idée est de concevoir un web scrapper de page web qui

  • dans un premier temps va récupérer une page web via une simple requête GET
  • dans un second temps va lire et extraire l'ensemble des liens d'une page web. Il est alors possible de filtrer le traitement pour ne récupérer que certains types de fichiers),
  • pour au final parcourir dans une boucle l'ensemble des liens extraits pour exécuter une requête, et ainsi télécharger chaque fichier.

Par exemple, voila un script Python pour télécharger tous les fichiers xlsx d'une page web.

import os
import requests
from bs4 import BeautifulSoup

# URL de la page web
url = '<copier_url_ici>'

# Créer un répertoire pour stocker les fichiers téléchargés
os.makedirs('downloaded_xlsx', exist_ok=True)

# Envoyer une requête GET à la page web
response = requests.get(url)
response.raise_for_status()

# Analyser le contenu HTML de la page
soup = BeautifulSoup(response.text, 'html.parser')
# Extraire tous les liens vers des fichiers Excel (se termine avec l'extension xlsx)
links = soup.find_all('a', href=True)
xlsx_links = [link['href'] for link in links if link['href'].endswith('.xlsx')]

# Itération pour télécharger chaque fichier
for link in xlsx_links:
    # Obtenir le nom de fichier
    filename = link.split('/')[-1]

    # Envoyer une requête GET pour télécharger le fichier
    file_response = requests.get(link)
    file_response.raise_for_status()  # Vérifiez s'il y a des erreurs dans la requête

    # Enregistrer le fichier
    with open(os.path.join('downloaded_xlsx', filename), 'wb') as file:
        file.write(file_response.content)

    print(f'Downloaded: {filename}')

print('See you next time, space cowboy ^^.')

bonjour v20100v, merci pour la reponse. J n'ai pas encore utilisé Python, cela s fait comment, le script, on le met où ?

Bonjour @BsAlv,

Il faut installer Python pour pouvoir compiler/lancer les fichiers de code .py. Ensuite un éditeur de texte/IDE pour coder correctement. Personnellement j'aime bien VSCode, je te met le lien des instructions de démarrage ici.

Si tu veux rester "full vanilla", tu peux juste installer Python, qui je crois a un mini-IDE fourni avec. Le tutoriel sur le site officiel.

Une autre alternative beaucoup utilisée est l'IDE PyCharm de la suite JetBrains, en version "Community Edition" = gratuite. Create and run your first project | PyCharm Documentation

@Saboh12617,

Cela a l'air très prometteur, je vais y travailler

Hello BsAlv,

En complément de la réponse de saboh,

Installer Python

L'installation de python peut sembler complexe au début, surtout avec les multitudes de version disponibles (Jython MicroPython, Anaconda....), du coup on ne sait plus trop quel distribution installé. Pour commencer, la version Python officiel sur le site Python.org est suffisante.

  1. Télécharger l'installeur python v3.13 (LTS) sur le site officiel pour ton OS.
  2. S'assurer que le binaire python est bien défini dans la variable d'environnement PATH.

    Normalement l'installeur te demande l'option "Add Python to PATH". Et si tu as raté cette option, ce n'est pas grave, tu peux toujours allez dans "Windows > Modifier les variables d'environnement système" pour ajouter manuellement le chemin où tu as installé Python dans la variable d'env système PATH (e.g. Tu ajoutes "C:\Tools\Python311\" dans PATH si c'est ton répertoire d'installation). La variable PATH sert simplement à rendre accessible les binaires (.exe, .bat...) depuis n'importe quel chemin dans un terminal Windows.
  3. Vérifiez l'installation, tu ouvres une console Windows (cmd.exe) et tu exécutés python --version
    image

Comme saboh l'indique, j'aime bien utilisé la suite Jetbrains pour de nombreux écosystèmes... dont Python avec l'outil PyCharm. C'est un formidable IDE !

Configurer son environnement Python

  1. La première chose à faire est de créer un environnement virtuel Python (si tu utilises Jetbrains PyCharm, il le fait automatiquement pour toi à la création d'un nouveau projet) ou sinon tu peux le faire simplement avec la ligne de commande suivante. Pour le créer, tu utilise la commande

    Il va créer le répertoire un sous-repertoire .venv, qui va servir à l'installation des dépendances de ton projet (un peu comme le répertoire vendor avec composer en php, ou le repertoire node_modules avec npm en Node Javascript. Bref c'est très pratique d'isoler l'installation de ces dépendances par projet (et ne pas polluer son os via une installation globale)
  2. L'activation de l'environnement se fait par l'appel du script (batch windows) .\.venv\Scripts\activate.bat image
  3. Ensuite tu installes les dépendances (pour faire simple on utilise ici le gestionnaire par défaut dans Python, à savoir pip (rmq : il en existe d'autres gestionnaire de dépendances Python plus évolué comme poetry).

    Pour ce downloader, il faut installer beautifulsoup4 et request.

    Pour installer la librairie beautifulsoup4 utilisé dans le script, tu lances la commande : pip install beautifulsoup4 image

    Si tu navigues dans le répertoire .\.venv\Lib\site-packages tu verras le sous-répertoire \beautifulsoup4-4.12.3.dist-info\ dans lequel la librairie a été installé.

    Pour installer la librairie request, tu lances la commande: (venv)>pip install requests

    Remarque, généralement on exécute la commande en une seule ligne de commande pour installer plusieurs libraires, ou encore mieux on utilise un fichier qui définit toutes les dependances (par défaut nomme requirements.txt) et s'installe avec la commande (venv)> pip install -r requirements.txt
  4. Et finalement tu peux exécuter le programme python avec l'instruction : python monProgramme.py

Bonus :

J'en ai profité pour faire une nouvelle version du downloader.

La précédente version filtrer uniquement les liens qui contiennent des fichiers avec l'extension xlsx... ce qui n'est pas le cas des liens sur ce forum. Cette version ci-dessous est plus "ciblé" pour extraire et filtrer les liens du forum Excel-Pratique... p

Par contre attention désolé dans le code, je n'ai pas le droit d'écrire des liens donc il faut corriger l'écriture du lien dans la règle startswith:p

image
import os
import requests
import re
from bs4 import BeautifulSoup

# Extraire toutes les balises liens (tag HTML <a></a>) d'une page web
def extract_all_links_from_given_page(url):
    # Envoyer une requête GET à la page web à analyser
    response = requests.get(url)
    response.raise_for_status()
    # Analyser le contenu HTML de la page
    soup = BeautifulSoup(response.text, 'html.parser')
    # Extraire tous les liens de la page
    links = soup.find_all('a', href=True)
    return links

# Filter les liens dont l'url (href) commencent par ...forum.excel-pratique.com/d/download? (on ne garde que les liens de téléchargement de fichiers du forum)
def extract_all_download_links_forum_excel_pratique(links):
    links_href_filtered = [link['href'] for link in links if link['href'].startswith('liens_https_forum_excel_pratique_com/d/download?')]
    return links_href_filtered

# Récuperer le nom du fichier depuis l'analyse de la réponse HTTP
def get_filename_from_response(response):
    # Pour rendre les en-têtes insensible à la casse
    headers = {k.lower(): v for k, v in response.headers.items()}
    if 'content-disposition' in headers:
        # Récuperer le nom du fichier depuis l'en-tête content-disposition dans la réponse HTTP
        filename = headers['content-disposition'].split('filename=')[1].strip('"')
    else:
        # Si l'en-tête n'est pas présent, utiliser le dernier segment de l'URL
        filename = link.split('/')[-1]
        # Remplacer les caractères invalides par un underscore
        filename = re.sub(r'[\\/*?:"<>|]', '_', filename)
    return filename

print('\n----------------')
print('Start downloader')
print('----------------\n')

url = "https://forum.excel-pratique.com/excel/creation-d-une-matrice-de-ponderation-196871"
output_directory = 'downloaded'
print(f'Scan the web page: {url}\n')

os.makedirs(output_directory, exist_ok=True)
links = extract_all_links_from_given_page(url)
links_href_download_file_forum_excel_pratique = extract_all_download_links_forum_excel_pratique(links)

# Itération pour télécharger chaque fichier
total_files = len(links_href_download_file_forum_excel_pratique)
file_counter = 0
for link in links_href_download_file_forum_excel_pratique:
    file_counter += 1
    print(f'=== Try to download file {file_counter}/{total_files} ===')
    print(f'> Download link: {link}')

    # Envoyer la requete HTTP sur ce lien
    http_response = requests.get(link)
    http_response.raise_for_status()

    # Informer l'utilisateur du traitement de la requete
    if http_response.status_code == 200:
        print("> OK (200) - The file has been downloaded.")
    else:
        print(f"> Error ({http_response.status_code}) - Unable to download file.")

    # Récuperer le nom du fichier depuis l'analyse de la réponse HTTP
    filename = get_filename_from_response(http_response)
    print("> Founded filename: ", filename)

    # Ecriture du fichier dans le répertoire de sortie
    with open(os.path.join(output_directory, filename), 'wb') as file:
        file.write(http_response.content)
    print("> File saved in :", ".\\" + os.path.join(output_directory, filename))
    print()

print('See you next time, space cowboy ^^.')

c'est pour lundi prochain ...

Re,

Yep bon week-end !

Sur ce forum... ca serait un comble que de ne pas donner une solution en VBA.

image

Les fichiers téléchargés sont stockés dans le répertoire ./downloaded du chemin du classeur Excel.

Voila le code pour avoir une idée sur comment "coder" un scrapper de page web en vba,

  • pour extraire des liens,
  • recuperer les liens de fichiers à télécharger...
  • et télécharger ses fichiers.
Sub Downloader()
    ' URL de la page web
    Dim url As String
    Dim outputDirectory As String
    url = "https://forum.excel-pratique.com/excel/creation-d-une-matrice-de-ponderation-196871"
    outputDirectory = ThisWorkbook.Path & "\downloaded"

    ' Créer le répertoire de sortie s'il n'existe pas
    If Dir(outputDirectory, vbDirectory) = "" Then
        MkDir outputDirectory
    End If

    ' Extraire tous les liens de la page
    Dim html As Object
    Dim links As Object
    Set html = CreateObject("HTMLFILE")
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", url, False
        .send
        html.body.innerHTML = .responseText
    End With
    Set links = html.getElementsByTagName("a")

    ' Filtrer les liens dont l'URL contient un fichier à télécharger sur le forum
    Dim link As Object
    Dim hrefLinksFiltered As Collection
    Set hrefLinksFiltered = New Collection
    For Each link In links
        If InStr(1, link.href, "https://forum.excel-pratique.com/d/download?", vbTextCompare) > 0 Then
            hrefLinksFiltered.Add link.href
        End If
    Next link

    ' Itération pour télécharger chaque fichier
    Dim totalFiles As Integer
    Dim fileCounter As Integer
    totalFiles = hrefLinksFiltered.Count
    fileCounter = 0

    Dim hreflink As Variant
    For Each hreflink In hrefLinksFiltered
        fileCounter = fileCounter + 1
        Debug.Print "=== Try to download file " & fileCounter & "/" & totalFiles & " ==="
        Debug.Print "> Download link: " & hreflink

        ' Envoyer la requête HTTP avec cet url (hreflink)
        Set httpResponse = CreateObject("MSXML2.XMLHTTP")
        With httpResponse
            .Open "GET", hreflink, False
            .send
        End With

        ' Informer l'utilisateur du traitement de la requête
        If httpResponse.Status = 200 Then
            Debug.Print "> OK (200) - The file has been downloaded."
        Else
            Debug.Print "> Error (" & httpResponse.Status & ") - Unable to download file."
        End If

        ' Récupérer le nom du fichier depuis l'en-tête Content-Disposition (s'il existe)
        filename = ""
        If InStr(1, httpResponse.getAllResponseHeaders, "Content-Disposition", vbTextCompare) > 0 Then
            Dim headers As String
            headers = httpResponse.getAllResponseHeaders
            filename = Mid(headers, InStr(headers, "filename=") + 9)
            Dim positionNewline As Integer
            positionNewline = InStr(filename, vbCrLf)
            filename = Left(filename, positionNewline - 1)
        Else
            filename = "download_file_" & fileCounter
        End If
        Debug.Print "> Filename extracted from HTTP headers: " & filename

        ' Écriture du fichier dans le répertoire de sortie
        Open outputDirectory & "\" & filename For Binary As #1
        Put #1, , httpResponse.responseBody
        Close #1

        Debug.Print "> File saved in: " & outputDirectory & "\" & filename
        Debug.Print

    Next hreflink
End Sub

re,

amaai, supér

Rechercher des sujets similaires à "telecharger fichiers meme temps pratique"