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

Contribuez Discussion :

Automatiser l'ouverture d'un fichier compatible Excel depuis le Web (téléchargement)


Sujet :

Contribuez

  1. #181
    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
    Citation Envoyé par itwoo Voir le message
    comprendre notamment les Function FindWindowExA&
    La documentation des fonctions des bibliothèques de Windows se trouve sur MSDN
    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. #182
    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
    Marc une fois n'est pas coutume je te propose une autre alternative

    reprenons le principe des sendkeys


    je te propose donc de regarder cette version utilisant l'api keyb_event pour taper les touche

    pourquoi je te la propose

    pour 2 raisons

    le soucis avec sendkeys c'est que cela peut taper n'importee ou !!! si la fenêtre n'est pas bien activée

    la 2d raison et la un peu plus importante
    tu dis que le sleep 100 après détection du bandeau est obligatoire et que sans doute il se passe quelque chose dans IE qui fait que le bouton n'est pas dispo ( phénomène visible sur Firefox)

    et bien visiblement l'api capte plus vite car chez moi je peut presque supprimer le sleep ( tu n'a qu'a faire des essais)

    pourquoi?
    et bien dans les ligne de frappe de touche le 2d argument concerne la fenêtre active (chose que l'on ne métrise pas avec sendkey)
    voila le code complet a tester comme tel

    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
    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Dim IE As Object, TTVE As Long, mode%, T!
    Sub Demo2keyapi()
        Const ELT = "ctl00_BodyABC_Button1"
        Dim Wb As Workbook, mess As String
        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
            .Navigate "http://www.abcbourse.com/download/historiques.aspx"
            'Visible = True    'facultatif!!!!!!!
            While .ReadyState < 3
                mess = "IE n'etait pas ready !!!"
                If Timer - T > 9 Then GoTo Fin
            Wend
            While Not IsObject(.Document.all(ELT))
                mess = "l'object " & ELT & " n'a pas été trouvé "
                If Timer - T > 9 Then GoTo Fin
            Wend
            On Error GoTo Fin
            With .Document.all
                mess = "les elements n'ont pas pu etre mis a jours"
                .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
            '        .Visible = True
            mess = "relax ca va trop vite!!"
            Bandeau 1
            'ou si on est dans un object anonyme "bandeau .document.parent"
            'bandeau .document.parentWindow.Object
        End With
        Exit Sub
    Fin:
     
        MsgBox mess, vbCritical
     
        IE.Quit
    End Sub
    Sub Bandeau(Optional opt% = 1)
        Dim r As RECT, HIEFRAME As Long, i As Long, hwndIEedge As Long
        IE.Visible = True
        mode = opt
        HIEFRAME = IE.hwnd    'FindWindow("IEFrame", vbNullString)
            IE.Visible = True:
        Do    'recherche du handle bandeau
            DoEvents: i = i + 1
            hwndIEedge = FindWindowEx(HIEFRAME, 0&, "Frame Notification Bar", vbNullString)     'recherche du handle de la fenetre de telechargement IE edge
        Loop While hwndIEedge = 0 Or i = 20000
        ShowWindow hwndIEedge, 5 ' on active le badeau et le met au premier plan
        Sleep 1000 ' le sleep obligatoire chez moi sleep 100 suffit !!!!
     
        'principe:
        ' action sur la touche  ,  code ascii de la touche  ,   0=la fenetre active  ,   le sens: 0=appuyé ou  &h2=lacher  ,   0 tout le temps)
        ' l'avantage de cette methode par raport a sendkeys c'est que l'on est sur de taper sur la bonne fenetre avec le 2d argument(0=fenetre active)
     
        keybd_event 9, 0, 0, 0
        keybd_event 9, 0, &H2, 0
     
        If opt = 2 Then
            keybd_event 9, 0, 0, 0
            keybd_event 9, 0, &H2, 0
        End If
        keybd_event 13, 0, 0, 0
        keybd_event 13, 0, &H2, 0
        Application.OnTime Now + 0.00001, "IeQUIT"
    End Sub
    Sub IeQUIT()
    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

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


    Je n'ai plus de souci depuis un bail avec SendKeys sous IE9 comme avec IE11 !
    Ce qui est gênant est juste de synchroniser VBA et le navigateur …

    Le Sleep 100 n'est pas obligatoire ayant déjà indiqué que cela fonctionnait pourtant sans de mon côté
    et ce sur plusieurs PC, mais il peut arriver que d'autres en aient besoin …

    J'ai aussi rencontré des soucis avec keyb_event ! Comme là dans ton code tapant dans la fenêtre active …

    Sinon ton code ne passe pas à la compilation, tu as activé quoi comme référence ?
    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. #184
    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
    aucune autre références que celle activée d'office pour un fichier
    attention je suis en 32 bits si 64 adapter les api bien évidemment
    et avec sendkey ou ui le sleep est carrément indispensable avec IE 11 sinon crash a tout les coup
    avant que tu soupçonne mon Windows je t'annonce que j'ai formaté et réinstallé Windows au propre

    puré plus de 3 heure a tous réinstaller w + programmes + app portable + et...
    bref je suis a neuf

    j'en ai même profité pour nettoyer mon disque et y faire une réparation de secteur j'avais des doutes ( non fondé visiblement)
    Nom : demo2.gif
Affichages : 314
Taille : 735,0 Ko
    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

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




    Dans ta procédure Bandeau, ligne n°50, où est donc défini RECT ?‼ (Provoquant l'erreur de compilation …)

    Donc soit tu n'as pas publié l'intégralité du code, soit tu as une référence particulière activée …
    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. #186
    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
    mille excuse des variables que j'ai pas viré
    code au proppre
    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
     
    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Dim IE As Object, T!
    Sub Demo2keyapi()
        Const ELT = "ctl00_BodyABC_Button1"
        Dim Wb As Workbook, mess As String
        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
            .Navigate "<a href="http://www.abcbourse.com/download/historiques.aspx" target="_blank">http://www.abcbourse.com/download/historiques.aspx</a>"
            'Visible = True    'facultatif!!!!!!!
            While .ReadyState < 3
                mess = "IE n'etait pas ready !!!"
                If Timer - T > 9 Then GoTo Fin
            Wend
            While Not IsObject(.Document.all(ELT))
                mess = "l'object " & ELT & " n'a pas été trouvé "
                If Timer - T > 9 Then GoTo Fin
            Wend
            On Error GoTo Fin
            With .Document.all
                mess = "les elements n'ont pas pu etre mis a jours"
                .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
            '        .Visible = True
            mess = "relax ca va trop vite!!"
            Bandeau
            'ou si on est dans un object anonyme "bandeau .document.parent"
            'bandeau .document.parentWindow.Object
        End With
        Exit Sub
    Fin:
     
        MsgBox mess, vbCritical
     
        IE.Quit
    End Sub
    Sub Bandeau(Optional opt% = 1)
        Dim HIEFRAME As Long, i As Long, hwndIEedge As Long
        IE.Visible = True
     
        HIEFRAME = IE.hwnd    'FindWindow("IEFrame", vbNullString)
     
        Do    'recherche du handle bandeau
            DoEvents: i = i + 1
            hwndIEedge = FindWindowEx(HIEFRAME, 0&, "Frame Notification Bar", vbNullString)     'recherche du handle de la fenetre de telechargement IE edge
        Loop While hwndIEedge = 0 Or i = 20000
        ShowWindow hwndIEedge, 5 ' on active le badeau et le met au premier plan
        Sleep 1000 ' le sleep obligatoire chez moi sleep 100 suffit !!!!
     
        'principe:
        ' action sur la touche  ,  code ascii de la touche  ,   0=la fenetre active  ,   le sens: 0=appuyé ou  &h2=lacher  ,   0 tout le temps)
        ' l'avantage de cette methode par raport a sendkeys c'est que l'on est sur de taper sur la bonne fenetre avec le 2d argument(0=fenetre active)
     
        keybd_event 9, 0, 0, 0
        keybd_event 9, 0, &H2, 0
     
        If opt = 2 Then
            keybd_event 9, 0, 0, 0
            keybd_event 9, 0, &H2, 0
        End If
        keybd_event 13, 0, 0, 0
        keybd_event 13, 0, &H2, 0
        Application.OnTime Now + 0.00001, "IeQUIT"
    End Sub
    Sub IeQUIT()
    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

  7. #187
    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
    186
    ah!!... ben la j'en ai découvert une belle dis moi!!!!!!

    je vais te demander de remplacer la fonction bandeau du post #186 par celle ci : comme tel sans modification

    puis après que tues testé débloque la ligne 11 (teste sur le timer-T>9) et bloque la 12 avant le "or"

    allez maintenant explique moi pourquoi avec le test en fin de boucle a 1 soit non seulement plus rapide mais je n'ai plus besoins du sleep
    alors que en testant a 9 a l'intérieur de la boucle qui est plus long sans le sleep je suis bredouille
    Ah ben je l'attends cette explication !!!!!!!!!

    c'est hallucinant!!! j'ai l'impression que non seulement certaine fonctions comme sleep et wait sont bloquantes mais aussi que certaines fonctions comme ici le timer selon son mode d'utilisation ne donne vraiment pas le même résultat voir même l'opposé

    et la c'est gros comme une maison !!!!!

    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
     
    Sub Bandeau(Optional opt% = 1)
        Dim HIEFRAME As Long, i As Long, hwndIEedge As Long, t2
        IE.Visible = True
     
        HIEFRAME = IE.hwnd    'FindWindow("IEFrame", vbNullString)
         T = Timer
        Do    'recherche du handle bandeau
            DoEvents:
            hwndIEedge = FindWindowEx(HIEFRAME, 0&, "Frame Notification Bar", vbNullString)     'recherche du handle de la fenetre de telechargement IE edge
        'If Timer - T > 9 Then Exit Do
        Loop While hwndIEedge = 0 Or Timer - T < 1
        Debug.Print Timer - T
        ShowWindow hwndIEedge, 5 ' on active le badeau et le met au premier plan
        'Sleep 1000 ' le sleep obligatoire chez moi sleep 100 suffit !!!!
     
        'principe:
        ' action sur la touche  ,  code ascii de la touche  ,   0=la fenetre active  ,   le sens: 0=appuyé ou  &h2=lacher  ,   0 tout le temps)
        ' l'avantage de cette methode par raport a sendkeys c'est que l'on est sur de taper sur la bonne fenetre avec le 2d argument(0=fenetre active)
     
        keybd_event 9, 0, 0, 0
        keybd_event 9, 0, &H2, 0
     
        If opt = 2 Then
            keybd_event 9, 0, 0, 0
            keybd_event 9, 0, &H2, 0
        End If
        keybd_event 13, 0, 0, 0
        keybd_event 13, 0, &H2, 0
        Application.OnTime Now + 0.00001, "IeQUIT"
    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

  8. #188
    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
    • Code du post #186 :

    une fois l'erreur de compilation corrigée encore une fois à cause du Navigate (‼),
    sur deux configurations (Seven & IE9 et Windows 8.1 & IE11) échec lors du premier lancement !
    Les lancements suivants, pas de souci …

    • Quant à la modification du post #187, l'explication est pourtant simple : juste une erreur de logique !
    Déjà, seule la fonction Wait peut poser un souci comparativement à Sleep à durée équivalente,
    par exemple 0,8 seconde pour l'attente avant de confirmer le téléchargement,
    il faut parfois augmenter la pause de Wait exagérément par rapport à la synchronisation effective avec IE.
    Je n'ai constaté un rare souci seulement avec … DoEvents !

    Revenons à la logique : ta ligne n°11 dans ta procédure modifiée occasionne une sortie de la boucle
    avant l'apparition du bandeau de téléchargement et continue quand même la procédure !

    Si tu compares avec mes codes, ce type de ligne au sein d'une boucle d'attente sert juste à éviter
    une histoire sans fin de boucle infinie (site indisponible ou ramant trop par exemple)
    afin d'arrêter la procédure au bout d'un TimeOut et non pas la continuer ! …
    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)

  9. #189
    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 Marc
    ok si tu veux selon la logique mais je te dis que j'ai testé avec des debug .print

    sans la ligne 11 le timer-T en fin de boucle est inferieur a 1

    alors dis moi pourquoi en mettant un delay de 9 c'est plus long et je suis bredouille

    alors non désolé c'est pas logique

    met des debug.print tu verra

    j'ai refait les test 10 fois avec le même phénomène en résultat

    d'ailleurs met une marge de delay ,a la place de 9 met 100 pour être sur et laisse le test en fin de boucle

    puis un 2d test en bloquant le"or"
    regarde bien les temps !!!!

    en général chez moi c'est 1.xxxxxxxx

    alors pourquoi en mettant 9 je plante elle est ou la logique la dedans

    d'ailleurs pour preuve j'ai repris mon model avec la souris qui lui exige le sleep 1000

    et je lui est appliqué ce test en fin de loop pareillement et je te le donne dans le mille

    plus besoins du sleep!!!
    au pire avec l'un ou l'autre mettre 2 a la place de 1

    la seule explication logique que j'ai glané sur la toile c'est que en quelque sorte le "or" se transforme en "and" ce qui explique que 1(0.7 seconde )+ le handle a 0 donc on est bon

    d'ailleurs aussi j'ai mis 5 en fin de boucle pour tester et effectivement l'attente dure plus longtemps ce qui appuie la raison que je viens d'évoquer en rouge

    en effet

    loop while handle=0 or timer-t< 5
    se comporte comme loop while handle=0 and timer-t< 5

    je vais tester avec "xor" pour bien vérifier cette théorie


    EDIT:
    bon ben je confirme test a l'appuie c'est bien cela le "or" est considéré comme "and"

    si je remplace "or" par "xor" ca plante a tout les coup

    donc
    Loop While hwndIEedge = 0 Or Timer - T < 2 est égale a Loop While hwndIEedge = 0 and Timer - T < 2
    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. #190
    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

    Je n'ai donc pas été assez clair : de mon côté avec les modifications du post #187
    le téléchargement ne se déclenche pas et ce sur les deux configurations
    et déjà même avec le #187 avant de le modifier !
    Donc de mon côté tes codes ne se synchronisent pas avec IE …

    Seul le code du post #186 est passé à partir du deuxième essai !

    Et je ne vois pas comment un And peut se transformer en Or ?‼

    Tu as trouvé un code qui passe dans ta configuration (Windows, IE, perf processeur et connexion net)
    - rien que toi en RTC et moi en câble ou sur un Intranet THD ! -
    mais n'oublie pas que d'une configuration à une autre l'important est la synchronisation …

    C'est pour cela je conclus souvent lors d'un pilotage d'IE : « Et vive les requêtes ‼ »
    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. #191
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    Marc, merci pour ton post 181 et le lien...pour le moment j'essaie de comprendre cela (mais je n'ai pas beaucoup de temps disponible pour étudier cela actuellement mais ca va venir)
    Pour ne pas te retarder dans tes publications ne m'attends pas et si tu es d'accord je te poserai les questions au fur et à mesure

    Idem pour Pat et Davido

    Ce que vous faites c'est vraiment génial en tout cas

    Bonne journée

  12. #192
    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,

    concernant le pilotage de Firefox avec UI Automation, je m'en sors avec EuroNext comme pour Abcbourse …

    Je pensais auparavant mal utiliser une méthode de cette bibliothèque pour modifier du texte par exemple
    mais en fait après avoir effectué des recherches, deux sources différentes confirment que parfois
    ce n'est pas possible via UI Automation et dans ce cas il faut en passer par SendKeys par exemple,
    retour à la case départ !

    Afin de simplifier la procédure principale pilotant Firefox, je suis reparti d'une page blanche
    et j'ai tout inclus au fur et à mesure des besoins dans une fonction avec un mode Debug
    devenant peu à peu une grosse Bertha d'un peu plus de cent lignes de code !

    Après cette refonte, je dois de nouveau procéder aux tests sur une configuration différente.
    Pour l'instant je trouve l'intérêt se trouvant juste si l'utilisateur utilise par défaut Firefox
    et si ce dernier est déjà ouvert, sinon cela a l'air de pencher en faveur d'IE (côté efficacité / fiabilité)
    mais je dois encore mesurer tant sous IE9 comme avec IE11 comparativement à Firefox
    sachant que le cache Windows joue énormément …

    Firefox aurait plus d'intérêt avec un traitement rapide comme Abcbourse qu'avec un plus lent comme Euronext.
    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)

  13. #193
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    Lecture et étude en cours...les API commencent à rentrer tout doucement

    Pour l'arborescence serait il possible de savoir où Davido au post #50 a pu afficher/trouver les informations sur son ordinateur sur les fenêtres avec les détails:

    Handle 0A30097A IEFrame "Please specify the download format
    Caption
    Class
    Style

  14. #194
    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 itwoo

    window inspector ou autre

    sinon j'ai un module prêt a l'emploi pour lister les fenêtres avec leur handle classe et caption
    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

  15. #195
    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 il y a quelques utilitaires gratuits : Microsoft Spy++, Winspector Spy, Window Detective, …
    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)

  16. #196
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    Ok ok faut que je regarde ca!!! c'est un peu comme quant tu te balades en montagne quand tu arrives vers un sommet tu découvres qu'il y en a un autre derrière

    Bonne journée

    PS un petit hors sujet que j'effacerai d'ici aprés: si vous savez m'aider la dessus ca m'intéresse (en plus comme ca j'ai plus de temps pour ici)
    http://www.developpez.net/forums/d16...ient-tendance/

  17. #197
    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
    perso je me sert de ca pour voir les données (classe,caption,handle) de mes fenêtres

    près a l'emploi la liste est dans le debug
    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
    ' Déclaration des API utilisées
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
    Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
    ' Variable temporaire utilisée uniquement par la fonction GetWindowsList
    ' pour stocker les fenêtres.
    Public stGetWindowsList As String
    'Téléchargement des cotations pour - Internet Explorer
    'Afficher les téléchargements - Internet Explorer
    Sub test11()
      'GetWindowsList
       For i = 0 To UBound(GetWindowsList)
            Debug.Print GetWindowsList(i)
        Next
    End Sub
    ' Exemple d'utilisation :
    ' Dim tabFenetre
    ' tabFenetre = GetWindowsList
    Public Function GetWindowsList()
    ' Cette fonction retourne sous forme de tableau l'ensemble
    ' des titres des fenêtres de premier niveau ouvertes sous windows.
        Dim lgRep As Long
        stGetWindowsList = vbNullString
        ' Appel de l'API et envoi du pointeur vers notre fonction de rappel
        lgRep = EnumWindows(AddressOf EnumWindowsProc, 0)
        ' Découpage de la chaîne pour retourner un tableau
        GetWindowsList = Split(stGetWindowsList, vbCrLf)
    End Function
    ' Déclaration de la fonction de rappel
    Public Function EnumWindowsProc(ByVal lgHwnd As Long, ByVal lgParam As Long) As Long
        Dim stTmp As String, lgTmp As Long, lgRet As Long
        stTmp = Space$(120)
        Dim stTmp2 As String * 255
        lgTmp = 119
        lgTmp2 = 255
     
        ' On récupère le titre de la fenêtre à partir du handle
        lgRet = GetWindowText(lgHwnd, stTmp, lgTmp)
        cl = GetClassName(lgHwnd, stTmp2, lgTmp2)
        stTmp = " handle  : " & lgHwnd & "---caption  :  " & Replace(stTmp, Chr$(0), vbNullString)
        stTmp2 = Replace(stTmp2, Chr$(0), vbNullString)
        ' Stockage du résultat dans la chaine temporaire (ajout au texte existant).
        ' On pourrait imaginer construire une chaîne plus complexe en ajoutant également le handle
        ' de la fenêtre, ce qui permettrait des manipulations externes (comme une fermeture par exemple).
        If (Trim$(stTmp) <> vbNullString) Then stGetWindowsList = stGetWindowsList & Trim(stTmp) & "--   classe  : " & Trim(stTmp2) & vbCrLf
        ' Retourne 1 systématiquement
        EnumWindowsProc = 1
    End Function
    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. #198
    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

    Correction de ta procédure test11 pour plus de rapidité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test11()
        Debug.Print Join(GetWindowsList, vbLf)
    End Sub
    Au premier plan dans IE9 sous Seven j'ai le bandeau de confirmation de téléchargement d'Euronext :
    il n'apparait pas dans la liste du debug dans la fenêtre Exécution ni la fenêtre principale "Please specify …" (Edit : voir le post #207 !)
    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. #199
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut findwindow
    Oui d'accord, super, pour le moment ca avance...c'est cool, ok je regarde tout ca

    installé window inspector et à ce porpos:

    Sur le bandeau de tête juste une petite question avec le findow pour détecter ce bandeau il est possible soit d'utiliser son ClassName soit son WindowName soit les deux c'est bien ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    son Classname "IEFrame" marche bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hWnDEuronext = FindWindow("IEFrame", vbNullString)
    par contre son WindowName "Please specify the download format | Euronext" ne marche pas...c'est bien ca son WindowName c'est le texte?
    hWnDEuronext = FindWindow(vbNullString, "Please specify the download format | Euronext")
    ou
    nom= "*Please specify the download format | Euronext*"
    hWnDEuronext = FindWindow(vbNullString, nom)
    hWnDEuronext = FindWindow("IEFrame", "Please specify the download format | Euronext")

    bonne journée

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

    Salut itwoo !

    De toute manière pour la fenêtre principale d'Internet Explorer la fonction FindWindow est inutile
    car le handle d'IE est déjà dans sa propriété HWND ! Exemple ligne de code n°6 du post #187 …

    Quant au nom de la fenêtre, il est incomplet car voici ce que me retournent mes utilitaires :

    Please specify the download format | Euronext - Windows Internet Explorer
    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)

Discussions similaires

  1. Forcer l'ouverture d'un fichier avec Excel
    Par Cda01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2011, 15h47
  2. [XL-2003] Ouverture d'un fichier par excel en 3 exemplaires
    Par basto dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2009, 17h05
  3. ouverture d'un fichier avec excel sous vs.net 2003
    Par lesultan2007 dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/07/2009, 15h46
  4. Telecharger un fichier excel depuis le web via PERL
    Par ptimos93800 dans le forum Web
    Réponses: 3
    Dernier message: 19/03/2009, 18h38
  5. [vbexcel]automatiser l'ouverture d'un fichier
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2005, 17h33

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