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 :

Piloter la fenetre windows en vba


Sujet :

Macros et VBA Excel

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

    • Ne plus mettre cette discussion en résolu, cela peut aider pour avoir de l'aide …

    • Prévenir les autres forums où la même demande initiale a été aussi postée que c'est réglé
    sinon c'est encore un flagrant manque de correction !
    (comme le fait de ne pas prévenir ni mettre de lien en ouvrant de multiples discussions sur divers forums [wild cross posting])

    • Le code initial comme celui de davido84 ne fonctionne pas de mon côté sur différents ordinateurs, différents Windows & Excel :
    aucun paramètre n'est inscrit comme les dates, le code ISIN etc … Ce problème est un classique à cause de la déclaration d'IE …
    Et certainement le problème de l'échec de vos tests, quoique l'on n'a vu aucune des tentatives !
    Par contre juste en suivant l'exemple de mon lien, c'est à dire à partir d'un nouveau classeur sans activer aucune référence
    donc en déclaration tardive, je n'ai aucun souci en moins de 20 lignes de code et c'est assez rapide,
    environ 4 secondes pour obtenir la fenêtre Enregistrer sous (tests entre 3,2s et 4,8s) …

    • Peut-on m'expliquer à quoi cela sert d'enregistrer le fichier texte sous un nom particulier si c'est pour le traiter dans Excel ?‼
    Et encore une fois, comme pourtant expliqué dans l'étape n°3 de mon lien, encore faut-il qu'il ait été lu !
    Donc est-il nécessaire de conserver le fichier texte sur le disque dur ? etc cf tenants & aboutissants.

    En suivant cette étape 3 et ses liens (méthode et tutoriel), après avoir observé la requête via l'outil d'inspection d'un navigateur,
    il est assez facile de reproduire la requête qui au passage est équivalente à l'API proposé sur le site …
    Je me serais fait un plaisir de la proposer si au moins un code ressemblant à mon lien pour le pilotage d'IE avait été présenté,
    conformément aux règles (à lire) de ce forum exigeant un minimum d'investissement.

    Donc à vous de commencer cette nouvelle procédure, à poster un code et ne pas hésiter à poser des questions au préalable
    ni de consulter les nombreux exemples de requête Web dans les discussions de ce forum …
    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)

  2. #22
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Le code initial comme celui de davido84 ne fonctionne pas de mon côté sur différents ordinateurs
    Oui c'est possible je n'ai pas non plus beaucoup testé : c'était juste un exemple pour débloquer la situation.
    Après je n'ai pas repris le code initial donc il y a surement des points à corriger sur le code de départ fourni par les demandeurs pour que cela fonctionne.
    Je pense qu'on doit pouvoir y arriver mais cela reste du bricolage donc à leur place je m'orienterais sur une requête parce que là au moins c'est plus sûr, plus rapide, etc.
    Attendons donc qu'une structure de code de requête soit proposé par les demandeurs pour les aider parce que je pense qu'ils n'y arriveront pas tout seuls.
    A+

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


    En fait la logique du code n'est pas en cause car de mon côté avec la même instruction cela passe !
    Cela coince au niveau de la boucle d'attente, le readyState est souvent bloqué à 3 (interactive)
    au lieu de finalement passer à 4 (complete) et c'est apparemment dû au type de la déclaration de l'objet IE …
    Par contre en augmentant à 20 ou plus le TimeOut, parfois cela passe alors qu'avec mon code c'est rapide !

    Encore une fois avec le pilotage d'IE, selon la configuration un code fonctionne ou pas, un classique.
    Par contre pas de souci au niveau de l'émulation clavier via SendKeys ou une bibliothèque …

    C'est sûr sans se documenter la requête est moins accessible que le simple pilotage d'IE !




    Comme en fait la requête n'a pas l'air si évidente, avec une fine observation de la page source
    les données peuvent directement apparaitre dans Excel en cinq secondes chrono (de mon côté en tout cas) en pilotant IE !

    Il suffit juste de paramétrer la zone Format en "Excel" puis de lancer le téléchargement et de valider le bouton Ouvrir …
    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. #24
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Comme en fait la requête n'a pas l'air si évidente
    Si tu as testé des requêtes de ton côté et si tu veux communiquer tes essais je regarderai de mon côté...il serait tout de même intéressant de voir s'il n'y a pas moyen de passer avec une requête !
    A+

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

    Récemment sur un autre forum avec une page certainement générée de la même manière vu le nom des ID
    je n'ai eu aucun souci, en dehors des setRequestHeader tout a l'air de se passer au niveau des paramètres du Send
    et comme je cherche à ne passer que l'essentiel afin d'alléger le code, peut-être suis-je passé à côté d'un indispensable …
    A moins que ce ne soit le PC de tests car déjà en pilotant IE j'ai eu des surprises
    sans compter un ActiveX ne pouvant plus être appelé en VBA mais sans souci en VBScript !
    Je testerais sur un autre PC quand j'aurais le temps, là je suis passé vite fait sur le forum, pas le temps cet après-midi …

    Comme tu n'as rien à m'envier de ce côté là, mieux vaut que je ne t'induise pas en erreur !
    De toute manière j'en connais deux autres qui ne pourront résister à l'appel de la requête, PatrickToulon & Cerede2000 !

    Mais bon cinq secondes avec IE c'est acceptable …
    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. #26
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bon j'ai pris le temps de regarder cette histoire de requête.
    Effectivement c'est coton mais j'ai fini par trouver : je récupère l'ensemble des entêtes de la requête (je passe par Chrome) puis j'incorpore les données (Form Data) dans le Send.
    Les information sont ensuite récupérées via le responseText puis intégrées dans la feuille de calcul.
    Un petit traitement histoire de séparer les données dans les colonnes de la feuille de calcul et le tour est joué.
    Vitesse de traitement : 0,20 sec

    A+

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




    Le problème pourrait être certains des headers qui changent malgré une requête strictement identique :
    ont-ils une pérennité ? A vérifier dans le temps …
    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. #28
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Apparemment seul le Content-Type semble indispensable au bon fonctionnement de cette requête : tu peux donc te passer des autres entêtes.
    A+

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



    Là je suis quelque peu étonné car mon vieil IE comme Firefox (à jour) ont le même paramètre de requête :

    Content-Type : application/x-www-form-urlencoded

    et de mon côté c'est insuffisant !

    A moins que ce ne soit l'ActiveX, j'ai essayé avec MSXML2.XMLHttp et WinHttp.WinHttpRequest.5.1 …
    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)

  10. #30
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Je passe par l'objet XmlHttp mais je viens de tester avec WinHttp.WinHttpRequest (le 5.1) et cela fonctionne également uniquement avec l'entête Content-type.
    Es-tu sûr de la syntaxe du corps de la requête envoyé dans le Send ?
    A+
    Edit : ceci dit si cela fonctionne de ton côté avec l'ensemble des entêtes c'est que le corps de ta requête doit être correct.

  11. #31
    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
    Bonjour
    le soucis avec l'argument du send dans la requête c'est qu'il est différent pour chaque Isin la partie en base 64 (charabia)
    même si c'est trop tard je te propose quand même avec IE et les apis comme je l'ai précédemment dis

    dans ton code base j'ai ajouté le choix de format il n'y était pas
    si tout fonctionne le nouveau classeur"cotation" devrait s'ouvrir
    si tu veux le télécharger après la touche vbta il faudra ajouter un sleep et une nouvelle fois la simulation de la touche vbtab

    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
    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub test()
        Dim ie As Object
        Dim oDoc As Object
        Set ie = CreateObject("internetexplorer.application")
        ie.Visible = True
           ie.Navigate "http://www.abcbourse.com/download/historiques.aspx"
        Do: DoEvents: Loop While ie.readystate <> 4 Or ie.busy
        ' Page chargée, on continue
        Set oDoc = ie.Document
        ' modification de la Valeur date
        oDoc.getElementsByName("ctl00$BodyABC$strDateDeb")(0).Value = "26/05/2015"    'la variable entre () => afficher la page et faire afficher la source rechercher la variable
        oDoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = "26/05/2016"
        'modification du n° de la valeur
        oDoc.getElementsByName("ctl00$BodyABC$txtOneSico")(0).Value = "FR0000120222"
        'activer la coche
        oDoc.getElementsByName("ctl00$BodyABC$oneSico")(0).Click
        'combobox du choix de format de sortie
        oDoc.getElementsByName("ctl00$BodyABC$dlFormat")(0).selectedIndex = 4
        ' ou par son ID
        ' oDoc.getElementById("ctl00_BodyABC_dlFormat").selectedIndex = 4
        'maintenant on click sur le bouton  telecharger
        oDoc.getElementsByName("ctl00$BodyABC$Button1")(0).Click
        Do: DoEvents: Loop While ie.readystate <> 4 ' on attend que ie finisse son job apres le clic
        Sleep 1000 ' on fait une pause avec sleep le application.wait de vba a tendance a rendre le focus a excel et il ne le faut pas !!!!
        clickOK
        'wait_telechargement
    End Sub
     
    'on apuie sur les touches pour la fentre de telechargement en bas de page IE
    Sub clickOK()
    'on simule les touche tab et enter successivement avec les apis : le sendkeys vba de excel fonctionne que dans l'application !!!!!!
        keybd_event vbKeyTab, 0, 0, 0&
        DoEvents
        Sleep 500
        keybd_event vbKeyReturn, 0, 0, 0&
        DoEvents
    End Sub
    voila je l'ai un peu finalisé
    ie se ferme automatiquement apres ouverture du classeur "cotationxxxxxxx"(seulement la session de la page ) pas les autres

    j'ai volontairement réduit mon débit de téléchargement a 200k afin de le régler pour éviter tout raté dans la procédure et c'est du 100% réussite

    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
    Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub test()
        Dim ie As Object
        Dim oDoc As Object
        Set ie = CreateObject("internetexplorer.application")
        ie.Visible = True
        ie.Navigate "http://www.abcbourse.com/download/historiques.aspx"
        Do: DoEvents: Loop While ie.readystate <> 4 Or ie.busy
        ' Page chargée, on continue
        Set oDoc = ie.Document
        ' modification de la Valeur date
        oDoc.getElementsByName("ctl00$BodyABC$strDateDeb")(0).Value = "26/05/2015"    'la variable entre () => afficher la page et faire afficher la source rechercher la variable
        oDoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = "26/05/2016"
        'modification du n° de la valeur
        oDoc.getElementsByName("ctl00$BodyABC$txtOneSico")(0).Value = "FR0000120222"
        'activer la coche
        oDoc.getElementsByName("ctl00$BodyABC$oneSico")(0).Click
        'combobox du choix de format de sortie
        oDoc.getElementsByName("ctl00$BodyABC$dlFormat")(0).selectedIndex = 4
        ' Clic sur bouton telecharger
        oDoc.getElementsByName("ctl00$BodyABC$Button1")(0).Click
        Do: DoEvents: Loop While ie.readystate <> 4
        Sleep 2000
        clickOK ie
        Sheets(1).Activate
    End Sub
    Sub clickOK(ie)
    'on simule les touche tab et enter successivement
        keybd_event vbKeyTab, 0, 0, 0&
        DoEvents
        Sleep 200
        keybd_event vbKeyReturn, 0, 0, 0&
        'keybd_event vbKeyReturn, 0&, 1, 0&
        Sleep 1000
        ie.Quit' on ferme ie après une seconde de pause JUSTE après avoir simuler la touche ENTER
    End Sub
    VOILA
    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

  12. #32
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Indépendamment de la vitesse de traitement plus importante et du fait de l'action aléatoire des keybd_event sans avoir préalablement ciblé l'identifiant de la fenêtre cible (bien que dans le cas présent cela ne semble pas être un problème mais dans d'autres cas s'en est un) le principal problème que je vois à passer dans ce cas précis par IE est le blocage rapidement engendré par le fonctionnement de la macro.

    Je ne sais pas ce que cela donne chez vous mais chez moi j'obtiens cela au bout de la 2ème tentative :
    Nom : screenshot.13.png
Affichages : 358
Taille : 3,4 Ko

    De plus quand j'avais testé en passant par IE le nombre de téléchargements journaliers était limité.

    Je n'ai aucun de ces deux problèmes en passant par une requête.

    A+

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

    David, pour IE voici un code à placer dans le module ThisWorkbook fonctionnant sans souci de mon côté :

    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
    43
    44
    45
    Dim T!
     
    Sub Demo2()
           Const ELT = "ctl00_BodyABC_Button1"
             Dim Wb As Workbook
             T = Timer
        For Each Wb In Workbooks
              If Wb.Name Like "Cotations*.csv" Then Wb.Close False
        Next
        With CreateObject("InternetExplorer.Application")
                  .Navigate "http://www.abcbourse.com/download/historiques.aspx"
            While .ReadyState < 3
                If Timer - T > 9 Then GoTo Fin
            Wend
            While Not IsObject(.Document.all(ELT))
                If Timer - T > 9 Then GoTo Fin
            Wend
                On Error GoTo Fin
            With .Document.all
                 .ctl00_BodyABC_strDateDeb.Value = "26/05/2015"
                 .ctl00_BodyABC_strDateFin.Value = "26/05/2016"
                 .ctl00_BodyABC_oneSico.Click
                 .ctl00_BodyABC_txtOneSico.Value = "FR0000120222"
                 .ctl00_BodyABC_dlFormat.Value = "x"
                 .Item(ELT).Click
            End With
                On Error GoTo 0
                Application.Wait Now + 0.00002
                .Visible = True
                AppActivate "Téléchargement des cotations"
                CreateObject("WScript.Shell").SendKeys "{TAB}~"
                Application.Wait Now + 0.00001
    Fin:
                If Not .Visible Then Beep: T = 0
                .Quit
        End With
    End Sub
     
    Private Sub Workbook_Deactivate()
        If ActiveWorkbook.Name Like "Cotations*.csv" And T Then
           ActiveWorkbook.Saved = True
           MsgBox "Chargé en " & Format$(Timer - T, "0.000s")
            T = 0
        End If
    End Sub
    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)

  14. #34
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Marc,
    chez moi ton code provoque l'apparition de ce message lorsque la procédure arrive à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With CreateObject("InternetExplorer.Application")
    :
    Nom : screenshot.14.png
Affichages : 382
Taille : 3,3 Ko
    A+

  15. #35
    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
    re
    oui marc utilise un object wscript pour lancer les simulation de touche
    le principe est le meme a savoir simuler la touche tab et enter en dehors de l'application excel

    je vais tester ta version marc et reviens
    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

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

    J'ai édité le code dans mon précédent post en ajoutant une ligne pour les versions plus récentes d'Excel / IE / Windows …

    Testé avec succès de mon côté sur deux configurations :
    • i5 2.5Ghz / Seven / IE9 / Excel 2003
    • i7 2.4Ghz / Windows 8 / IE10 / Excel 2010 (sans la ligne n°30 échec sur cet ordinateur) …

    Cela risque de ne rien changer pour toi David, mais sait-on jamais …

    Tu as le même genre de message que parfois j'ai eu avec ton code,
    comme quoi piloter IE n'est pas fiable d'une configuration à une autre !

    Au passage, ton code du post #11 fonctionne sur la configuration sous Windows 8 mais bien plus long que le mien …

    Edit : le code du post #11 fonctionne si IE passe au premier plan mais parfois IE reste en second plan …

    Sur une troisième configuration (i3 2.4Ghz / Seven / IE9 / Excel 2007) mon code sans la ligne n°30 passe
    mais celui de David boucle sans fin, le ReadyState restant bloqué à 3 …
    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)

  17. #37
    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
    bon alors après tests du code Marc ca marche 1 coup sur 6 a 100%
    et 1 coup sur 6 a 50% ,j'entends par la que

    la procédure va jusqu'à sélectionner le bouton ouvrir de la fenêtre de téléchargement mais ne simule pas la touche enter
    on vois bien sur cette capture que le bouton ouvrir est bleu donc sélectionné
    Nom : Capture.JPG
Affichages : 403
Taille : 115,2 Ko
    je pense que dans le wscript.shell on devrait séparer les deux touche avec un wait ou sleep entre les deux
    ensuite il faut faire en sorte que le .visible soit mieux synchronisé pour pouvoir manipuler les touches

    configuration perso
    Windows 7 ultimate sur pc fixe et premium sur portable + office 2007 32 bits et assez de puissance pour faire 4 ordi qui pourrait encore bien concurrencer des pcs en version commerciales

    qu'en pense tu Marc

    davido
    quand tu a ce message c'est que internet explorer s'est fermer y a pas long temps il faut lui laisser du temps

    cela est du au fait que les modules complémentaire de IE du style le checkspell (correcteur orthographique )est activé qui relativement lourd

    essaie en désactivant tout tes modules complémentaires
    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

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



    Patrick, j'ai édité mon code, as-tu testé avec la ligne n°30 ajoutée ?
    Il passe ce soir de mon côté sur trois ordinateurs.

    Quelle est ta version d'IE ?
    Sinon augmente le second Wait comme le premier pour voir …
    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)

  19. #39
    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
    voila une version de ton code légèrement modifié qui fonctionne a 100%
    et ma version IE c'est la 11 on est obligé maintenant sinon plein de site ne répondent plus avec les versions antérieurs
    j'ai mis IE en public et il se ferme dans le thisworkbook deactivate en effet il se fermait trop top
    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
    43
    44
    45
    46
    Dim T!
    Public IE As Object
    Sub Demo2()
           Const ELT = "ctl00_BodyABC_Button1"
             Dim Wb As Workbook
             T = Timer
        For Each Wb In Workbooks
              If Wb.Name Like "Cotations*.csv" Then Wb.Close False
        Next
        Set IE = CreateObject("InternetExplorer.Application")
        With IE
                   '.Visible = True
                   .Navigate "http://www.abcbourse.com/download/historiques.aspx"
            While .ReadyState < 3
                If Timer - T > 9 Then GoTo Fin
            Wend
            While Not IsObject(.document.all(ELT))
                If Timer - T > 9 Then GoTo Fin
            Wend
     
     
                On Error GoTo Fin
            With .document.all
                 .ctl00_BodyABC_strDateDeb.Value = "26/05/2015"
                 .ctl00_BodyABC_strDateFin.Value = "26/05/2016"
                 .ctl00_BodyABC_oneSico.Click
                 .ctl00_BodyABC_txtOneSico.Value = "FR0000120222"
                 .ctl00_BodyABC_dlFormat.Value = "x"
                 .Item(ELT).Click
            End With
     
                Application.Wait (Now + TimeValue("0:00:02"))
                .Visible = True
               Application.Wait (Now + TimeValue("0:00:01"))
                With CreateObject("WScript.Shell")
                .SendKeys "{TAB}"
                Do: I = I + 1: Loop Until I = 1000 ' on fait 100 tour du jardin et on fume une clope en attendant tout du moins une taff
                .SendKeys "{ENTER}"
                End With
     
    Fin:
                If Not .Visible Then Beep: T = 0
               Application.Wait Now + 0.00002
               '.Quit' deplacement de la commande 
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Deactivate()
        If ActiveWorkbook.Name Like "Cotations*.csv" Then
           ActiveWorkbook.Saved = True
           MsgBox "Chargé en " & Format$(Timer - T, "0.000s")
            T = 0
        IE.Quit
        End If
    End Sub
    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

  20. #40
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    J'ai testé sur un autre ordinateur équipé d'IE 9 (le mien est équipé d'IE 11) : c'est évidemment moins rapide que via une requête (5-6 sec contre 0.1-0.2 sec) mais cela fonctionne sans problème.

    @Patrick : la désactivation des modules complémentaires sur mon ordinateur équipé d'IE 11 ne change rien : cela fonctionne la première fois de la journée quand je teste le fichier puis plus rien, même plusieurs heures après.

    A+

Discussions similaires

  1. [FAQ VB/VBA] Piloter MSN et Windows Messenger
    Par SilkyRoad dans le forum Contribuez
    Réponses: 8
    Dernier message: 03/02/2010, 16h13
  2. variable globale + fenetre de debogage vba
    Par papy_tergnier dans le forum Access
    Réponses: 5
    Dernier message: 08/09/2005, 11h32
  3. [newbie] piloter une fenetre DOS
    Par GroGorZ dans le forum C++
    Réponses: 6
    Dernier message: 23/10/2004, 17h26
  4. Fenetre windows
    Par casafa dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 25/07/2003, 17h18
  5. [VB6] Listage des fenêtres windows
    Par gg78 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 27/05/2003, 11h36

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