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. #101
    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
    oui je te parle simplement de la fenêtre IE qui à certains moments ne s'ouvre pas et donc les SendKeys tombent à l'eau.
    A+

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




    Même souci …
    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)

  3. #103
    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
    Même souci …
    et est-ce que c'est ok ou pas avec l'API proposée ?

  4. #104
    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 code de quel numéro de post ?
    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)

  5. #105
    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
    l'ajout du code proposé au post #99 au fichier du post #97 ou #96

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




    Avec ou sans les modifications du post #99, rien ne se passe que ce soit avec IE9 & Seven ou IE10 & Windows 8,
    j'ai jute l'ouverture de la page du site sous IE mais pas de mise à jour de dates, d'ISIN renseigné, etc …
    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)

  7. #107
    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 : Ok donc au moins la fenêtre d'IE s'ouvre...
    avec quel fichier tu as testé ? Celui du post 96 et/ou 97 ?

    Ci-joint une tentative de gérer les SendKeys via le module de classe :
    création au sein du module de classe d'une Sub SendKeys comportant 2 arguments :
    - la combinaison des touches envoyées
    - une temporisation optionnelle

    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
    Sub SendKeys(Keys, Optional Temporisation As Long = 0)
    Dim s, i As Long, SC As String, Fichier As String, F%
     
    Application.Wait (Now + TimeValue("0:00:01"))
    Fichier = ThisWorkbook.Path & "\touche_TAB_ENTER.vbs"
    s = Split(Keys, ",")
     
    SC = "Set wshShell = CreateObject(""WScript.Shell"")" & vbCrLf
    For i = LBound(s) To UBound(s)
       SC = SC & "WScript.Sleep " & Temporisation & vbCrLf
       SC = SC & "wshShell.SendKeys """ & s(i) & """" & vbCrLf
    Next i
     
    SC = SC & "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
    SC = SC & "objFSO.DeleteFile (""" & Fichier & """)"
     
    F% = FreeFile
    Open Fichier For Output As #F
    Print #F, SC
    Close #F
    SC = """" & Fichier & """"
     
    CreateObject("WScript.Shell").Run SC
     
    End Sub
    Cela permet d'avoir cette procédure à disposition dans l'autocomplétion lorsque l'on utilise l'objet clsIE.

    On l'utilise ensuite dans le module classique où l'on renseigne la combinaison souhaitée et le temps de temporisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oIE.SendKeys "{tab},{enter}", 300
    (je remarque d'ailleurs que j'économise un Tab et je ne sais pas pourquoi mais bon à voir de votre côté...).

    La procédure n'est pour l'instant pas assez intuitive à mon goût avec l'utilisation des boucles Do...Loop dans la procédure Test mais cela permet néanmoins de voir de quelle manière rendre la partie SendKeys plus généralisable dans la perspective d'un module exportable comme le souhaite Patrick.

    A+
    Fichiers attachés Fichiers attachés

  8. #108
    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é le fichier du post #107 sur un ordinateur Windows7+IE9+Excel 2007 et sur un autre Windows10+IE11+Excel 2010 64 bits et cela fonctionne dans les 2 cas.
    Par contre sur le 2ème ordinateur la procédure est bien plus lente (j'ai l'impression que la page est chargée bien plus lentement) et le bandeau de téléchargement apparaît au bout de 7-8 sec contre 1-2 sec sur le 1er ordinateur.
    Donc si la fenêtre de IE apparait en plein écran ne pas fermer la fenêtre de IE au bout de quelques secondes mais laisser la procédure fonctionner au moins 10-15 sec avant de conclure que cela ne fonctionne pas.
    Au besoin, mettre un point d'arrêt à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oIE.SendKeys "{tab},{enter}", 300
    pour voir si la procédure va jusque-là et si le moment où la procédure atteint cette ligne correspond avec l'apparition du bandeau de téléchargement.

    Dans la déclaration des API pour le 64 bits remplacer la fonction existante par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As LongPtr
    A+

  9. #109
    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
    j'ai pas de soucis avec l'ouverture de IE chez moi
    l'api showwindow est inutile a moins de vouloir IE en plein écran ( j'en vois pas l'utilité)

    non le point crucial c'est l'apparition du bandeau

    chez moi toute les versions successives fonctionne

    pour le webbrowser dansl le userform le appactivate du vbs dans la boucle fait son boulot y a pas de soucis

    dans les dernières versions avec classe les évènements sont toujours a behind (avant) même le downloadcomplete le soucis réside la

    d'où mes vielles versions avec l'usine a gaz par les apis
    c'est un sujet que l'on a vu pas mal de fois hein Marc !!!

    ce soir resto je m'occupe de retrouver ce code dans mes archive en rentrant j'en ai tellement et en multiples versions

    mais c'est dommage j'aime bien le vbs moi ca libère un peu l'application Excel
    on va trouver j'en suis sur
    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

  10. #110
    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, je pensais que tu parlais de la fenêtre (bandeau) de téléchargement.
    Oui, IE s'ouvre mais c'est tout, aucune action déclenchée !
    Idem avec le classeur du post #107 sur IE9 & Seven, j'ai attendu plus d'une minute …
    Pas pu tester sur l'autre ordinateur.

    Je vais attendre si une de vos versions fonctionne de vôtre côté à tous les deux …
    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)

  11. #111
    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
    l'api showwindow est inutile a moins de vouloir IE en plein écran ( j'en vois pas l'utilité)
    si cela permet d'afficher la fenêtre d'IE alors qu'elle ne s'affiche pas sans elle est utile...
    sinon l'intérêt du dernier fichier réside dans la fonction SendKeys (en phase expérimentale) placée dans le module de classe et qui doit permettre d'avoir la possibilité d'envoyer si nécessaire une combinaison de touche différente en fonction de la situation, ce qui est impératif sur tu veux produire une classe exportable.
    A+

  12. #112
    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
    et oui le soucis c'est que je comprends pas l'utilité de showwindow chez moi ie s'affiche et en premier plan
    peut être que chez david ie n'est pas au premier plan ,au quel cas réorganiser les macros de façon a que Excel ne reprenne pas le focus j'ai déjà vu ca

    le problème c'est que chez moi les version double vbs font du 100%et même le webbrowser dans l'userform
    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

  13. #113
    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 a tester !!!
    re

    quand le bandeau doit arriver il arrive avec une autre fenetre invisible dont la caption est :

    "Afficher les téléchargements - Internet Explorer"

    le bandeau arrive simultanémentapres quand on clique sur enregistrer la fenêtre invisible apparait quand on clique dans le bandeau sur "afficher les téléchargement"

    il est donc raisonnable de penser que:
    si le handle de cette fenêtre est trouvé alors le bandeau aussi a quelque millième de secondes près

    parti de cette constatation avec findwindow on a le handle de cette fenêtre et donc le point de départ pour sendkeys
    parti de la on peut faire comme cela
    j'en ai fait une fonction séparer pour la réutiliser ailleurs


    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
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public hwnd As Long
    Sub test5()
        Dim odoc As Object, URL As String, date1, date2
        date1 = "26/05/2015"
        date2 = "26/05/2016"
     
        URL = "http://www.abcbourse.com/download/historiques.aspx"
        Set IE = CreateObject("internetexplorer.application")
        IE.Visible = True
            IE.Navigate URL
        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 = date1    'la variable entre () => afficher la page et faire afficher la source rechercher la variable
        odoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = date2
        '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
     
        WaitBandeau URL, "Cotations" & Format(date1, "yyyymmdd") & ".csv"
    End Sub
    voila le wait bandeau
    c'est tout bête
    on pourrait même intégré le findwindow pour IE 8 la fenêtre que tu gère avec le appactivate dans ton vbs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub WaitBandeau(URL, sname As String)
        hwnd = 0
        hwnd_fils = 0
        Do
            DoEvents
            i = i + 1
            hwnd = FindWindow(vbNullString, "Afficher les téléchargements - Internet Explorer")
            Debug.Print hwnd
            If hwnd = 0 Then Sleep 100
              Loop While hwnd = 0 Or i = 1000
        callvbs URL, sname
    End Sub
    sub de creation vbs autodestructible
    le vbs gere le moment ou arrive le classeur pour pouvoir fermer IE
    ainsi on utilise pas le déactivate du classeur pour fermer IE

    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
    47
    Sub callvbs(u, fichierXL)
        Dim fichier As String, SC As String, F%
        fichier = ThisWorkbook.Path & "\touche_TAB_ENTER.vbs"
     
        SC = "Set wshShell = CreateObject(""WScript.Shell"")" & vbCrLf
        SC = SC & "WScript.Sleep 200" & vbCrLf
        SC = SC & "wshShell.SendKeys ""{tab}""" & vbCrLf
        SC = SC & "WScript.Sleep 300" & vbCrLf
        SC = SC & "wshShell.SendKeys ""{enter}""" & vbCrLf
        SC = SC & "WScript.Sleep 300" & vbCrLf
     
         ' gestion de la presence du classeur ouvert 
        SC = SC & "Set objExcel = GetObject(, ""Excel.Application"")" & vbCrLf
        SC = SC & "With objExcel" & vbCrLf
        SC = SC & ".Visible = True" & vbCrLf
        SC = SC & "Do" & vbCrLf
        SC = SC & "i = i + 1" & vbCrLf
        SC = SC & "For Each wb In .Workbooks" & vbCrLf
        SC = SC & "If wb.Name = """ & fichierXL & """ Then ok = True:  Exit For" & vbCrLf
        SC = SC & "Next" & vbCrLf
        SC = SC & "Loop Until ok = True Or i = 10000" & vbCrLf
        SC = SC & "End With" & vbCrLf
        '
        SC = SC & "WScript.Sleep 300" & vbCrLf
        SC = SC & "ms=""ouverture fichier reussi!!""" & vbCrLf
     
         ' control de la fermeture de IE lancer par vba dans le vbs 
        SC = SC & " Set objShell = CreateObject(""shell.application"")" & vbCrLf
        SC = SC & "For Each obj In objShell.Windows" & vbCrLf
        SC = SC & "if obj.LocationURL =""" & u & """ then obj.quit" & vbCrLf
        SC = SC & "Next" & vbCrLf
        ' gestion en cas d'erreur un message t'en averti 
        SC = SC & "If i = 10000 Then" & vbCrLf
        SC = SC & "ms = ""erreur de telechargement """ & vbCrLf
        SC = SC & "End If" & vbCrLf
        SC = SC & "MsgBox ms" & vbCrLf
        'autodestruction du vbs 
        SC = SC & "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
        SC = SC & "objFSO.DeleteFile (""" & fichier & """)"
        F% = FreeFile
        Open fichier For Output As #F
        Print #F, SC
        Close #F
    dem:
        SC = """" & fichier & """"
        CreateObject("WScript.Shell").Run SC
    End Sub
    testez
    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

  14. #114
    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
    Ce qui me pose question c'est surtout que Marc dise que chez lui rien ne se passe, que les champs de la page (dates, isin, etc.) ne sont même pas renseignés ! Parce que que là ce n'est même pas un problème d'envoi des sendkeys au moment où le bandeau apparaît...sinon Patrick le plus simple est de joindre un fichier test pour être sûr de tester ta dernière proposition sur la bonne configuration de fichier.
    A+

  15. #115
    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
    Bonjour davido
    oui c'est vrai moi aussi ca me le fait quand je fait trop de tentative rapprochées

    ca me met que les date puis plus rien mais en fait non par curiosité j'ai laisser et au bout de 4 minute le reste c'est fait comme ca le doit
    je crois que comme dis marc c'est caractéristique a ce site vu qu'il vend une apis a 75 euros je pense qu'il y a des pointeur de garde

    après pour ma dernière proposition c'est comme tel dans un fichier vierge

    edit
    j'en ai fait une sans classe et sans vbs ca fonctionne aussi
    reste a do:looper sur le fichier dans le temporaire j'ai pas trouver comment faire il y a un exemple de chamin en commentaire
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Public hwnd As Long
    Sub test5()
        Dim odoc As Object, URL As String, date1, date2
        date1 = "26/05/2015"
        date2 = "26/05/2016"
        URL = "http://www.abcbourse.com/download/historiques.aspx"
        Set IE = CreateObject("internetexplorer.application")
        IE.Visible = True
        'oNav.navigate "<a href="http://google.fr" target="_blank">http://google.fr</a>"
        IE.Navigate URL
        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 = date1    'la variable entre () => afficher la page et faire afficher la source rechercher la variable
        odoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = date2
        '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
        waitbandeau2 IE, URL, "Cotations" & Format(date1, "yyyymmdd") & ".csv", True
    End Sub
    Sub waitbandeau2(IE, URL, sname As String, Optional reg As Boolean = False)
        hwnd = 0
        Do
            DoEvents
            i = i + 1
            'hwnd = FindWindow(vbNullString, "File Download")
            hwnd = FindWindow(vbNullString, "Afficher les téléchargements - Internet Explorer")
            Debug.Print hwnd
            'If hwnd = 0 Then Sleep 10
        Loop While hwnd = 0 Or i = 100
        Sleep 100
        'ShowWindow hwnd, 3
        Set wshShell = CreateObject("WScript.Shell")
        Sleep 400
        wshShell.SendKeys "{tab}"
        If reg = True Then
            Sleep 100
            wshShell.SendKeys "{tab}"
        End If
        Sleep 300
        wshShell.SendKeys "{enter}"
        'path du classeur temporaire
        'C:\Users\polux\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\HYSAHQCV
        ' path du classeur télechargé
        '"C:\Users\" & environ("UserName") & " \Downloads\" & sname"
     
        If reg = True Then
           Sleep 300
           Do
                F = F + 1
                DoEvents
                fermetureIE = Dir("C:\Users\" & Environ("UserName") & " \Downloads\" & sname) = ""
            Loop Until fermetureIE = True Or F = 10000
        End If
        If fermetureIE = True Then IE.Quit
    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

  16. #116
    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 et Patrick,
    j'ai fait un fichier test pour suivre le suivi de la procédure et l’enchaînement des différents événements gérés par l'objet IE.
    Ce serait bien que vous me disiez ce qui ce passe chez vous à partir du moment où la procédure passe dans l'événement IE_DocumentComplete et que le ReadyState est = 4 jusqu'au moment ou la Sub SendKeys est activée, suivie de l'activation de l'événement IE_DownloadBegin devant (je pense) correspondre au téléchargement du fichier Excel.

    Chez moi par exemple j'obtient ça (les remarques après le "=>" ont été rajouté pour ce message et correspondent à ce que je pense qu'il se passe) :
    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
    ------------
    IE_DocumentComplete - ReadyState : 4 => la page IE est complètement téléchargée
    ------------
     
    Sub AbcBourse : remplissage des champs
    IE_SetPhishingFilterStatus : 2
    IE_StatusTextChange : 
    IE_DownloadBegin => début de chargement de la page correspondant aux champs renseignés
    IE_ProgressChange : 10000 - 10000
    IE_ProgressChange : 10000 - 10000
    IE_StatusTextChange : http://www.abcbourse.com/
    IE_CommandStateChange : -1
    IE_TitleChange : Téléchargement des cotations pour => nouveau titre
    IE_ProgressChange : -1 - 10000
    IE_StatusTextChange : 
    IE_DownloadComplete => la page est complètement téléchargée : le bandeau apparaît à ce moment
    Sub SendKeys : envoi des touches du clavier
    IE_DownloadBegin =>téléchargement du fichier Excel
    IE_CommandStateChange : -1
    ...
    J'aimerais savoir ce que vous obtenez de votre côté...

    A+
    Fichiers attachés Fichiers attachés

  17. #117
    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
    Patrick,
    j'ai testé ta proposition du message #115 : déjà il manque les API, ensuite chez moi le nom utilisé dans FindWindow n'est pas
    "Afficher les téléchargements - Internet Explorer" mais "Afficher les téléchargements - Windows Internet Explorer" (Windows7+IE9).
    Une fois les modifications faites cela fonctionne mais :
    - si le nom de la fenêtre change ça va être difficile de généraliser la procédure dans le cadre d'une classe utilisable dans d'autres circonstances
    - avant d'envisager cette procédure voir s'il n'y a pas possibilité de se débrouiller avec la gestion judicieuse des événements de IE.
    A+

  18. #118
    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
    si tu a raison pour ta caption on teste les deux

    teste cela dans un fichier vierge
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public hwnd As Long
    Sub test5()
        Dim odoc As Object, URL As String, date1, date2
        date1 = "26/05/2015"
        date2 = "26/05/2016"
        URL = "http://www.abcbourse.com/download/historiques.aspx"
        Set IE = CreateObject("internetexplorer.application")
        IE.Visible = True
          IE.Navigate URL
        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 = date1    'la variable entre () => afficher la page et faire afficher la source rechercher la variable
        odoc.getElementsByName("ctl00$BodyABC$strDateFin")(0).Value = date2
        '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
        waitbandeau2 IE, URL, "Cotations" & Format(date1, "yyyymmdd") & ".csv", True
    End Sub
    Sub waitbandeau2(IE, URL, sname As String, Optional reg As Boolean = False)
        hwnd = 0
        Do
            DoEvents
            i = i + 1
            'hwnd = FindWindow(vbNullString, "File Download")
            hwnd = FindWindow(vbNullString, "Afficher les téléchargements - Internet Explorer")
     
            hwndIE9 = FindWindow(vbNullString, "Afficher les téléchargements - Windows Internet Explorer")
            res = hwnd + hwndIE9
            Debug.Print hwnd
            'If hwnd = 0 Then Sleep 10
        Loop While res = 0 Or i = 1000
        Sleep 100
        'ShowWindow hwnd, 3
        Set wshShell = CreateObject("WScript.Shell")
        Sleep 400
        wshShell.SendKeys "{tab}"
        If reg = True Then
            Sleep 100
            wshShell.SendKeys "{tab}"
        End If
        Sleep 300
        wshShell.SendKeys "{enter}"
        'path du classeur temporaire
        'C:\Users\polux\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\HYSAHQCV
        ' path du classeur télechargé
        '"C:\Users\" & environ("UserName") & " \Downloads\" & sname"
        If reg = True Then
            Sleep 300
            Do
                F = F + 1
                DoEvents
                fermetureIE = Dir("C:\Users\" & Environ("UserName") & " \Downloads\" & sname) = ""
            Loop Until fermetureIE = True Or F = 10000
        End If
        If fermetureIE = True Then IE.Quit
    End Sub
    Sub test()
        sname = "Cotations20150620.csv"
        MsgBox Dir("C:\Users\" & Environ("UserName") & " \Downloads\" & sname) = ""
    End Sub
     
    Sub WaitBandeau(URL, sname As String)
        hwnd = 0
        Do
            DoEvents
            i = i + 1
     
            'on teste les deux (ie09 et supérieur 
            hwnd = FindWindow(vbNullString, "Afficher les téléchargements - Internet Explorer")
            Debug.Print hwnd
            'If hwnd = 0 Then Sleep 10
        Loop While hwnd = 0 Or i = 100
        callvbs URL, sname
    End Sub
    Sub callvbs(u, fichierXL)
        Dim fichier As String, SC As String, F%
        fichier = ThisWorkbook.Path & "\touche_TAB_ENTER.vbs"
        SC = "Set wshShell = CreateObject(""WScript.Shell"")" & vbCrLf
        SC = SC & "WScript.Sleep 200" & vbCrLf
        SC = SC & "wshShell.SendKeys ""{tab}""" & vbCrLf
        SC = SC & "WScript.Sleep 300" & vbCrLf
        SC = SC & "wshShell.SendKeys ""{enter}""" & vbCrLf
        SC = SC & "WScript.Sleep 10" & vbCrLf
        SC = SC & "Set objExcel = GetObject(, ""Excel.Application"")" & vbCrLf
        SC = SC & "With objExcel" & vbCrLf
        SC = SC & ".Visible = True" & vbCrLf
        SC = SC & "Do" & vbCrLf
        SC = SC & "i = i + 1" & vbCrLf
        SC = SC & "For Each wb In .Workbooks" & vbCrLf
        SC = SC & "If wb.Name = """ & fichierXL & """ Then ok = True: i=0: Exit For" & vbCrLf
        SC = SC & "Next" & vbCrLf
        SC = SC & "Loop Until ok = True Or i = 10000" & vbCrLf
        SC = SC & "End With" & vbCrLf
        '
        SC = SC & "WScript.Sleep 50" & vbCrLf
        SC = SC & "ms=""ouverture fichier reussi!!""" & vbCrLf
        ' control de la fermeture de IE lancer par vba
        SC = SC & " Set objShell = CreateObject(""shell.application"")" & vbCrLf
        SC = SC & "For Each obj In objShell.Windows" & vbCrLf
        SC = SC & "if obj.LocationURL =""" & u & """ then obj.quit" & vbCrLf
        SC = SC & "Next" & vbCrLf
        SC = SC & "If i = 10000 Then" & vbCrLf
        SC = SC & "ms = ""erreur de telechargement """ & vbCrLf
        SC = SC & "End If" & vbCrLf
        SC = SC & "MsgBox ms" & vbCrLf
        SC = SC & "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf
        SC = SC & "objFSO.DeleteFile (""" & fichier & """)"
        F% = FreeFile
        Open fichier For Output As #F
        Print #F, SC
        Close #F
    dem:
        SC = """" & fichier & """"
        CreateObject("WScript.Shell").Run SC
    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

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



    De mon côté c'est toujours le même souci, le readyState restant bloqué à 3 …
    Si je lance mon code, aucun souci.
    C'est particulier à ce site, j'en ai déjà vu un autre mais c'est vraiment exceptionnel.
    D'anciens codes pilotant IE et attendant le readyState à 4 et le Busy à False continuent de tourner sans souci …

    David, avec ton classeur joint du post #116, cela boucle sans fin dans la procédure IE_avec_evenement
    sur le Loop Until oIE.InfoForm = True, certainement du même ordre du readyState ne passant jamais à 4 …
    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)

  20. #120
    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 quand tu lances la macro et que tu récupères les Debug.Print dans la fenêtre d'exécution lorsqu'elle se termine ou que tu l'arrêtes est ce que tu as cette ligne parmi la liste des infos récupérées ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ------------
    IE_DocumentComplete - ReadyState : 4
    ------------

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