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 :

IE - piloter une boîte de dialogue "téléchargement de fichier"


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut IE - piloter une boîte de dialogue "téléchargement de fichier"
    Bonjour à tous,

    Comme cela fait un certain temps que je cherche une solution à mon problème, je m'en remets à vous
    Je cherche un moyen de créer une macro qui permettrait, à partir d'un fichier excel A:
    1/ d'ouvrir Internet Explorer,
    2/ de se connecter à un site avec un pseudo/mot de passe,
    3/et de faire un export de données du site à partir de critères définis (le site permet d'exporter un nouveau fichier excel B avec certaines données que je souhaite ensuite copier et coller dans le fichier excel initial A).


    Jusqu'à présent, j'ai réussi les étapes 1 et 2, mais je bloque à la 3: j'ai sélectionné les critères de recherche correctement sur le site internet, et j'ai réussi à cliquer sur le bouton "OK" qui permet de lancer l'extraction, mais là les choses se corsent:
    Quand on clique sur ce bouton OK, une nouvelle page internetexplorer s'ouvre, qui contient une boîte de dialogue IE "téléchargement de fichiers" dans laquelle il faut cliquer sur "Ouvrir". Mais impossible de pointer sur cette boîte de dialogue et d'actionner le bouton

    J'ai trouvé sur le web divers bouts de code utilisant les API findwindow, findwindowEx... mais qui ne marche pas
    (le bout de code suivant, qui permet de récupérer le handle de la fenêtre "téléchargement de fichier", me retourne toujours "window not found"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Ret As Long
     
    Ret = FindWindow(vbNullString, "Téléchargement de fichiers")
     
    If Ret <> 0 Then
    MsgBox "Window Found"
    Else
    MsgBox "Window Not Found"
    End If
    (NB: j'ai pris soin avant de déclarer la fonction findwindow)

    J'ai essayé en changeant le nom de la fenêtre, "Téléchargement de fichiers", Téléchargement de fichier", "File Download"... il ne la trouve pas.

    J'ai essayé également de pointer sur la seconde fenêtre IE qui s'affiche, et de faire un sendkeys pour sélectionner le bouton "ouvrir", mais sans succès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim winShell As New ShellWindows
     
    On Error Resume Next
     
    For Each IE In winShell
    If IE.LocationURL = "www.siteinternet.com" Then
    IE.Visible = True
    'IE.Quit 'option pour les fermer
    End If
    Next IE
    SendKeys "{TAB}", True
    SendKeys "{TAB}", True
    SendKeys "{ENTER}", True
    Sinon, je me demande s'il n'existe pas un moyen d'éviter de passer par cette seconde fenêtre IE qui finit par m'empoisonner la vie . Sur le bouton OK de la première fenêtre, il y a un attribut HTML "onclick" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['Criteria'].action='download/export_report.asp?ID=641'; document.forms['Criteria'].target='_blank'
    je pourrais peut-être en tirer profit, mais je ne sais pas comment?

    J'ai beau chercher, je ne trouve pas..
    Je vous remercie d'avance de vos réponses, et n'hésitez pas à me signaler si je n'ai pas été assez claire dans ma demande!
    Merci

  2. #2
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Pour le téléchargement, je recherche exactement la même chose et je n'ai trouvé pour l'instant que la possibilité de simuler des clics sur cette "f..ameuse" fenêtre de téléchargement.

    Mais ceci ne fonctionnerai pas toujours selon l'affichage du PC.

    Si quelqu'un a une idée.

  3. #3
    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,

    voir cette contribution, attendre la dernière étape prochainement … Voir aussi cette discussion.

    Si Victoire ton souci est toujours d'actualité, il suffit de pointer l'élément et d'y appeler sa propriété onclick

    _________________________________________________________________________________________________
    Je suis Charlie

    Jour d'ouverture des soldes : liquidation totale chez Charlie Hebdo …

    Un scientifique lira des centaines de livres au cours de sa vie, mais sera toujours persuadé qu'il lui reste beaucoup à apprendre.
    Un religieux n'en lira qu'un et sera persuadé d'avoir tout compris …

    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)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Points : 14
    Points
    14
    Par défaut Perso, je clique sur le bouton + fin du code et relance avec OnTime
    Bonjour,

    Je viens de résoudre ce genre de PB, Alors comme je profite pas mal des bouts de code des forums, je vous en fais profiter !
    En fait, il y a deux PB. Il faut cliquer le bouton mais aussi interrompre l'exécution.
    Dans le second bout de code ci dessous, j'envoie un clic ciblé sur le bouton qui garde la même position (si zoom de fenêtre à 100%) dans mon objet IE qui se nomme PopUp pour moi. Et je programme le lancement d'une seconde macro 3 sec après le clic.

    Pour que cela fonctionne, il vous faut déclarer les fonctions Ad Hoc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
    Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Public Const MOUSEEVENTF_LEFTDOWN = &H2
    Public Const MOUSEEVENTF_LEFTUP = &H4
    Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
    Public Const MOUSEEVENTF_RIGHTUP As Long = &H10
    Le truc que j'ai remarqué c'est que si j'essaye de continuer mon code après le clic, cela ne marche plus.
    L'exécution de la macro bloque l'ouverture du nouveau fichier.
    Du coup, je programme le lancement de la macro "LaSuite" 3 sec après mon clic et cela fonctionne


    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
     
    Set Bouton = PopUp.document.all("button")
            Bouton.Click
     
     ' et là grosse attente (5 min) pour avoir la fenêtre orange... Le temps que le fichier se fasse. Du coup, je ne boucle que toute les secondes
     
    Do
        DoEvents
       If Not PopUp.Busy Then Exit Do  'pas besoin du PopUp.readyState = READYSTATE_COMPLETE
      Sleep 1000 'je ne boucle que toute les secondes
    Loop
     
    Sleep 100 ' sans doute inutile ...
     
            ' On envoie le clic
     
    SetCursorPos PopUp.Left + 0.5 * PopUp.Width, PopUp.Top + PopUp.Height - 30 'position x et y en bas et au centre par rapport à la position de ma fenêtre PopUp
     Sleep 500   'si pas d'attente, parfois cela foire. IL faut laisser le curseur arriver et le bouton se sélectionner.
     
    Application.OnTime Now + TimeValue("00:00:03"), "LaSuite" 'il faut stopper le code pour permettre l'ouverture => Lance la macro "LaSuite" qui traite mon nouveau fichier après 3 sec.
     
      mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
      mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
     
    End Sub
    Je pense que d'envoyer des TAB et Enter doit aussi fonctionner à condition là aussi d'interrompre l'exécution.

    Hope this will help !

  5. #5
    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




    Oui cela fonctionne avec Tab + Enter comme dans la contribution en lien dans mon précédent message …

    Mais il y a bien plus efficace sans besoin de temporiser ni de simuler des touches ou la souris ni se préoccuper du zoom !
    Ce sera bientôt présenté dans la troisième étape de la contribution …



    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    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)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Points : 14
    Points
    14
    Par défaut Forcer le niveau de zoom pour avoir un affichage constant
    Citation Envoyé par mzfr1 Voir le message
    Pour le téléchargement, je recherche exactement la même chose et je n'ai trouvé pour l'instant que la possibilité de simuler des clics sur cette "f..ameuse" fenêtre de téléchargement.

    Mais ceci ne fonctionnerai pas toujours selon l'affichage du PC.

    Si quelqu'un a une idée.
    La fonction ExecWB (WB pour Web Browser) permet de faire plein de choses:
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    objIE.ExecWB 63, 2, CLng(100), vbNull
    Impose un zoom à 100%. Cela peut permettre de cliquer au bon endroit.

  7. #7
    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




    La troisième étape de la contribution a été publiée et comme évoqué elle permet
    de s'affranchir de simuler touche comme souris sans se préoccuper du zoom ! …





    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    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)

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Points : 14
    Points
    14
    Par défaut
    OK, super. Commencer par prendre le focus avant le clic puis envoyer des tab et enter.
    Plus propre que de localiser le clic (qui nécessite en plus du zoom 100% de mettre la fenêtre au premier plan).

    Par contre, j'ai des utilisateurs qui ont des erreurs avec CreateObject("WScript.Shell") et comme je ne peux pas intervenir sur leur machine, j'évite.

    Pour faire la requête directe, je vais creuser mais ce sera sans doute pour une autre occasion.

    merci en tout cas.

Discussions similaires

  1. [VI-2007] Ouverture d'une boîte de dialogue pour ouvrir un fichier
    Par Ariaar dans le forum Visio
    Réponses: 3
    Dernier message: 14/12/2012, 16h56
  2. Réponses: 3
    Dernier message: 25/12/2006, 17h28
  3. [MFC] afficher une boîte de dialogue
    Par bigboomshakala dans le forum MFC
    Réponses: 13
    Dernier message: 10/05/2004, 14h22
  4. [Kylix] Imprimer le contenu d'une boîte de dialogue
    Par cmp-france dans le forum EDI
    Réponses: 13
    Dernier message: 18/10/2003, 20h31
  5. Réponses: 3
    Dernier message: 29/08/2003, 10h57

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