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

VBA Access Discussion :

Piloter Firefox ou IE depuis Access VBA : les téléchargements.


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut Piloter Firefox ou IE depuis Access VBA : les téléchargements.
    Bonjour.

    Je sais que le sujet a été maintes fois abordés su de très nombreux forums en plus de ceux de l’excellent Developpez.com.

    Mais la lecture des différents cas de figure et des réponses qui leur sont apportés ne m'a pas permis d'atteindre mon objectif qui me semble curieusement simple en regard des difficultés à le mettre en œuvre.

    Voici quel est mon objectif :

    Depuis Access, je cherche à télécharger des fichiers Excel depuis un site avec connexion et mot de passe.

    Une fois connecté, je clique sur un bouton sur une page et le site génère un fichier Excel que je peux sois ouvrir, soit télécharger.

    Je peux aussi faire un clic droit sur le bouton en question et ouvrir le document dans un nouvel onglet (En fait, le nouvel onglet s'ouvre vide et j'ai de nouveau la boite de message avec possibilité d'ouvrir ou d'enregistrer).

    Il se trouve qu'une partie de la solution à mon problème pourrait passer par cette ouverture dans un nouvel onglet :

    En effet, l'adresse web qui s'affiche dans le nouvel onglet est commune à tous les documents, sauf la fin qui est propre à chaque document.
    Mais attention, cette adresse ne se termine pas par le nom du document, ni pas son extension (l'adresse de téléchargement d'un fichier Excel ne comporte ni le nom du fichier téléchargé, ni même l'extension Excel).

    Une fois que l'on est connecté, il suffit de saisir cette adresse dans la barre d'adresse pour déclencher l'affichage de la boite de dialogue ouvrir ou enregistrer.

    Sous Firefox, il est possible de paramétrer Firefox pour que ce dernier n'ouvre pas de boite de dialogue, mais lance toujours directement une action sélectionnée (j'ai choisi que les fichiers Excel soient automatiquement téléchargés sans demande de confirmation).

    Une fois fait, il suffit de programmer n'importe quoi pour ouvrir l'adresse en question depuis Firefox pour que ce dernier lance un téléchargement "transparent".

    Le souci, c'est pour piloter Firefox (l'ouvrir, entrer le mot e passe, télécharger les fichiers, fermer les onglets au fur et à mesure).

    Du coup, j'ai utilisé l'excellentissime tuto de Qwazerty "Interaction avec Internet Explorer via VBA Excel".
    http://qwazerty.developpez.com/tutor...-et-vba-excel/

    Encore un énorme merci à lui.

    Grace à ce tuto, j'ai réussi à automatiser l'ouverture d'IE et la saisie des login et mots de passe.

    Mais dès que j'envoie l'adresse, j'ai la fameuse boite de dialogue IE Ouvrir ou télécharger.

    Je n'ai pas trouvé comment paramétrer IE pour qu'elle n'apparaisse pas (Je n'ai pas la ligne dans l'option sécurité qui permettrait de faire cela et qui est présentée sur certain forums).

    J'ai alors retenté avec Firefox et Selenium…

    C'est dur.

    D'abord parce que je n'ai trouvé que des téléchargements datés et des explications pour utilisateurs plus avancés que moi.

    Plus encore, je n'ai pas réussi à trouver d'exemple d'utilisation avec Access (que des exemples avec Excel).

    Ce qui semble me manquer le plus c'est une bibliothèque Wrapper fiable (j'en ai trouvé des récentes qui s'installent comme "corrompues").

    Dans le meilleur des cas, j'arrive sur une page Firefox blanche, à priori paramétrée différemment du Firefox que j'utilise tous les jours et impossible d'aller plus loin.

    Access est planté systématiquement, ou alors affiche :

    " Erreur d'exécution '21': TimeoutError firefox failed to open the listening port 127.0.0.1:51018".

    Dans tous les cas, je n'ai jamais réussi à reproduire l'envoi d'une commande simple telle qu'ouvrir Google.

    Étant donné que c'est un site avec mot de passe, ça va m'être compliqué de vous en donner l'accès.

    Mais pour l'instant voici les deux options :

    Soit utiliser Firefox pour télécharger, mais impossible de faire autre chose que d'y envoyer des adresses web.

    Soit utiliser IE, mais ça ne sert pour ainsi dire à rien puisque la première boite de dialogue Ouvrir / enregistrer bloque le truc.

    J'aimais bien la commande IE, car elle permettait, entre autre, de demander à IE d'attendre réellement que la page soit chargée.

    Par ailleurs, tout apparait facile grâce au tuto de Qwazerty et c'est certainement quelque chose que j'aurais creusé.

    Mais voilà, j'ai besoin que ça fasse ÇA et pour l'instant je n'y arrive pas.

    En dehors de Chrome, je suis prêt à installer et utiliser n'importe quel navigateur.

    Les prérequis sont :

    - Possibilité de saisie de mot de passe dans des champs,

    - Téléchargement sans confirmation, ou possibilité de piloter la confirmation,

    - Management minimum des onglets et fenêtres ouvertes pour ne pas se retrouver avec un milliard de trucs ouverts en même temps.

    - Enfin, j'ai un certain nombre d'onglets qui s'ouvrent en même temps que Firefox. Je veux les garder.


    Existe-t-il une solution que je puisse mettre en œuvre à peu près tout seul ?

    D'avance merci.

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2003
    Messages : 129
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    Et si en vba tu essayais de lancer firefox.exe dans une nouvelle fenêtre (pour préserver les autres onglets) et dont l'url contient ton username/password ?

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shell "chemin_vers_firefox.exe -new-window username:password@www.adresse_de_to_nsite.fr",vbNormalFocus
    Filou07

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    Merci pour cette réponse.

    J'ai tenté cette solution. J'ai un bug avec "fichier introuvable".

    Le site visé n'est pas en https.

    L'adresse de la page se termine par index.php.

    Quand bien même j'arriverais à me connecter, il faudrait encore que je puisse commander un minimum de choses depuis Access vers Firefox.

    Encore une fois, si je me contente d'utiliser VBA pour suivre un lien, ça marche.

    Mais j'ai juste besoin d'un peu plus...

    Encore merci.

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2003
    Messages : 129
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    J'ai trouvé ça chez stackoverflow :

    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
    Sub DownloadFile()
     
    Dim myURL As String
    myURL = "http://www.adresse_de_to_nsite.fr/nom_de_ton_fichier.xls"
     
    Dim WinHttpReq As Object, oStream As Object
    Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    WinHttpReq.Open "GET", myURL, False, "username", "password"
    WinHttpReq.send
     
    myURL = WinHttpReq.responseBody
    If WinHttpReq.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Open
        oStream.TYPE = 1
        oStream.Write WinHttpReq.responseBody
        oStream.SaveToFile "C:\Users\xxxxxx\Desktop\nom_de_ton_fichier.xls", 2 ' 1 = no overwrite, 2 = overwrite
        oStream.Close
    End If
     
    End Sub
    J'ai essayé chez moi mais sans username/password et ça télécharge bien le fichier sur mon bureau
    Filou07

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    Merci pour le suivi.

    J'ai testé et ça ne marche pas :

    Erreur d'execution '-2147467259 80004005)':
    La méthode 'open' de l'objet 'IXMLHTTPRequest' a échoué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WinHttpReq.Open "GET", myURL, False, "monlogin", "monmotdepasse"
    En jaune

    Le problème c'est (aussi) que le fichier Excel que je vise n'a pas d'adresse propre.

    Il n'y a pas de moyen de l'atteindre via une page qui commence par http et qui finit par fichier.xlsx.

    En revanche j'ai bien une adresse web, qui commence par http et qui finit par un chiffre.

    Si je rentre cette adresse dans la barre d'adresse d'un navigateur, quel qu'il soit, alors, en fonction du paramétrage du navigateur, le fichier Excel s'ouvre, s'enregistre en toile de fond, ou bien une boite de message me demande ce que je veux faire du fichier.

    L'adresse ressemble à cela :

    "www.lesiteenquestion.fr/excelgen/attendance.php?fid=256"

    Je suis obligé de mettre des guillemets, sinon le forum rajoute automatiquement des balises URL et le texte est réduit, comme sur un lien classique.

    Le chiffre à la fin distingue les fichiers les uns des autres.

    A termes (enfin, si je trouve comment solutionner mon problème actuel), je ferais une fonction qui se contente de conserver en mémoire le chiffre à la fin et de le concaténer avec la partie fixe du début de l'adresse à envoyer au navigateur.

    Curieusement, je suis pratiquement sûr d'avoir réussi à ouvrir un tel lien depuis un autre logiciel (comme en faisant un copier/coller sur Word et faire un Ctrl + Clic dessus).

    Mais depuis, j'ai essayé tellement de choses, je ne sais plus trop.

    Maintenant quand je clique sur le lien depuis un autre logiciel, j'ai un message d'erreur.

    "Impossible d'ouvrir http://www.lesiteenquestion.fr/excel...ce.php?fid=256. Impossible de télécharger les données demandées.".

    En revanche, si je fais un copier/coller de l'adresse de la barre d'adresse puis entrée, alors là ça marche.

    En fait, le site n'est pas en HTTPS.

    Une fois connecté, je peux agir comme je veux...

    Ou alors, il faut que je trouve comment paramétrer IE pour qu'il enregistre le fichier direct…

    Mais là, j'ai trouvé encore moins d'info exploitables (à mon humble niveau...).

    Encore merci.

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2003
    Messages : 129
    Points : 122
    Points
    122
    Par défaut
    En effet c'est ardu

    Si ça passe en mettant directement l'URL dans la barre d'adresses de IE, ça vaudrait peut-être le coup d'essayer d'intégrer un objet activex "Microsoft web browser" à ton formulaire et de lui faire atteindre l'url :

    exemple si ton controle activeX s'appelle MonBrowser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myURL = "http://www.lesiteenquestion.fr/excelgen/attendance.php?fid=256"
    Set myBrowser = Me.MonBrowser.Object
    myBrowser.Navigate myURL
    Filou07

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    Citation Envoyé par Filou07 Voir le message
    En effet c'est ardu
    exemple si ton contrôle activeX s'appelle MonBrowser :
    Je suppose que si la phrase commence par "exemple", cela signifie que ce nesera pas forcément le cas pour moi.

    Comment je sais si comment s'appelle mon contrôle activeX ?

    Par ailleurs, je sens bien que je ne vais pas pouvoir me contenter de juste copier coller ces 3 lignes dans une procédure pour que ça marche.

    Ne faut-il pas définir autre chose avant ?

    Encore merci.

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2003
    Messages : 129
    Points : 122
    Points
    122
    Par défaut
    Je ne comprends pas ton interrogation.

    Le contrôle activeX est tout simplement un contrôle à positionner sur ton formulaire comme n'importe quel autre contrôle intégré à access : zone de texte, bouton,.....

    Il se renomme aussi de la même manière que n'importe quel autre contrôle.

    Par défaut Access l’appellera "WebBrowser0"

    Mon exemple de code est à coller par exemple dans une procédure sur clic d'un bouton qui permet à ton utilisateur de télécharger le fichier


    Nom : MSACCESS_2017-08-02_12-03-06.png
Affichages : 2917
Taille : 49,5 Ko
    Filou07

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Re Bonjour.
    Re Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande8_Click()
    Dim myUrl As String
    Dim myBrowser As Object
    myUrl = "www.google.fr"
    Set myBrowser = Me.WebBrowser7.Object
    myBrowser.navigate myUrl
    End Sub
    J'ai dû rajouter deux lignes de Dim...

    J'ai dû aussi faire 2 boutons :

    1 pour ouvrir le site et m'identifier sur la page d'accueil (mais je doit rentrer les infos à la main dans la page web), l'autre pour atteindre la page visée.

    Ça fonctionne jusque là.

    J'ai encore la boite de message qui me propose d'ouvrir ou d'enregistrer (en ce sens cet ActiveX se comporte comme IE).

    Est-ce que le fait d'utiliser un ActiveX me permet de contourner ça ?

    Est-ce que je peux faire en sorte qu'Access écrive les login et mot de passe dans cet ActiveX ?

    Je n'ai trouvé que Microsoft web Browser dans la liste des ActiveX. Est-ce que la même chose existe avec un autre navigateur ?

    Encore merci.

  10. #10
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2003
    Messages : 129
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    Je ne veux pas trop m'avancer mais je crois que ce contrôle ActiveX utilise les paramètres d'Internet Explorer. Si c'est le cas (attention : hypothèse) ça veut dire qu'en configurant IE pour retenir les données des formulaires, tu devrais pouvoir ne saisir les login/mdp qu'une seule fois. Pour l'option d'ouverture/enregistrement je ne crois pas que ce soit possible.

    Je ne sais pas s'il existe d'autre contrôle ActiveX de navigation internet
    Filou07

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    Je reviens vers vous.

    J'ai eu un peu de temps pour tester certaines choses et aucunes ne fonctionne.

    L'API IE se comporte de la même manière que IE lui même.

    Lorsqu'on clique sur un lien de téléchargement, IE affiche une boite de message et attend une confirmation, tandis qu'il est possible de paramétrer Firefox pour sauter cette étape, ce qui ne semble pas possible sous IE.

    J'ai bien tenté un SendKeys (pour envoyer la touche "Entrée" qui simulerait un clic sur "Enregistrer").

    Mais une fois la boite de message de IE affichée, le code VBA est en pause jusqu'à ce que je clique manuellement sur "Enregistrer", que la boite de message se ferme et que le code VBA redémarre.

    Donc "Entrée" n'est envoyé qu'après, quand ça ne sert plus à rien.

    Peut-être existe-t-il une façon d'envoyer un clic sur une boite de message de IE.

    Mais chaque fois que je fais un recherche là-dessus, j’obtiens des milliers de réponses sur comment faire un clic sur une boite de message Access, ou sur une boite de message d'un site web, mais pas celles de IE lui-même.

    Il faudrait contourner le fait que l'apparition d'une boite de message sous IE stoppe l’exécution du code...

    Certaines personnes semblent dire qu'il existe une API Firefox, mais les échange ne vont jamais plus loin, car systématiquement, il est conseillé de passer via IE pour ce genre de choses.

    Moi je veux bien, mais je n'ai pas encore réussi à faire ce que je voulais.

    Ce serrait-étonnant qu'il n'existe aucun autre navigateur web "télécommandable" en VBA.

    Encore merci.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 188
    Points : 98
    Points
    98
    Par défaut
    Bonjour.

    Bon, j'ai solutionné le problème en ajoutant des temps de pose entre les action.

    C'est dégueulasse, c'est pas rapide, c'est pas du tout satisfaisant et il ne faut surtout pas toucher le PC pendant qu'il bosse, mais au moins ça fonctionne.

    Je ré-itère mon "ce serrait-étonnant qu'il n'existe aucun autre navigateur web "télécommandable" en VBA", directement ou en utilisant un élément d'interfaçage.

    Je n'ai jamais réussi à faire fonctionner Sélénium, mais l'existence de "Robots" prouve qu'il doit être possible de manipuler n'importe quelle configuration de sites...

    Je laisse ouvert un peu et ensuite je passerai en résolu.

    Merci à tous !

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/07/2017, 20h59
  2. [AC-2010] Lancement de Batch depuis ACCESS VBA impossible
    Par piwa6291 dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/01/2017, 14h40
  3. projet Access vba - les cases à cocher
    Par Loic90 dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/09/2016, 07h34
  4. Piloter un appareil photo depuis Excel/VBA
    Par enerjp dans le forum Excel
    Réponses: 0
    Dernier message: 01/04/2014, 10h57
  5. Ecriture dans Excel depuis Access (VBA)
    Par hoook dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/08/2012, 16h46

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