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. #161
    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
    Bonjour Patrick,
    testé sur deux ordinateurs différents : aucun résultat ramené.
    A priori j'ai l'impression que la combinaison de SendKeys et la temporisation ne semblent pas appropriées.
    A+

  2. #162
    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 bon!!!!????
    Nom : demo1.gif
Affichages : 558
Taille : 637,3 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

  3. #163
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Points : 9
    Points
    9
    Par défaut changement le nom
    comment peut on faire pour modifier le nom du fichier a enregistrer dans la fenêtre de IE juste avant le dernier keybd_event VK_RETURN.
    je ne trouve pas l'instruction qui permet de le faire.

    merci

  4. #164
    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
    quelle version tu utilise ? parce que l'on en a fait pas mal
    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. #165
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    la 1ere version

    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
    Option Explicit
    #If Win64 Then
      Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
      Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
      Declare PtrSafe 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 PtrSafe Function WaitMessage Lib "user32" () As Long
    #Else
      Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      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)
      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 WaitMessage Lib "user32" () As Long
    #End If
     
     
    Const VK_TAB As Long = &H9
    Const KEYEVENTF_KEYUP As Long = &H2
    Const VK_RETURN As Long = &HD
    Const VK_DOWN As Long = &H28
     
     
    Public Sub CreerNavigateur()
    Dim oNav As SHDocVw.InternetExplorer
    Dim oDoc As MSHTML.HTMLDocument
    Set oNav = New SHDocVw.InternetExplorer
    oNav.Visible = True
    'oNav.navigate "http://google.fr"
    oNav.Navigate "http://www.abcbourse.com/download/historiques.aspx"
    ' Attente avec timeout de 10 s
    'If WaitIE(oNav, 10) Then
    'If WaitIE(oNav) Then
    '   ' 10 s écoulées et page non chargée
    '   MsgBox "Time out!"
    'Else
     
     
    Do Until oNav.ReadyState = READYSTATE_COMPLETE
      DoEvents
    Loop
     
     
    ' Page chargée, on continue
    Set oDoc = oNav.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
     
     
    ' Clic sur bouton telecharger
    oDoc.getElementsByName("ctl00$BodyABC$Button1")(0).Click
    'End If
     
     
     
    '---------------- Partie ajoutée -----------------------------
    '----- Attendre l'apparition du bandeau de téléchargement (car le délai d'attente peut être variable en fonction du site) pour la valider ---
    Dim hIEFrame As Long, hWnDbandeau As Long
     
     
    hIEFrame = FindWindow("IEFrame", vbNullString)
     
     
    'on patiente le temps que le bandeau apparaisse
    Do
      WaitMessage
      hWnDbandeau = FindWindowEx(hIEFrame, 0&, "Frame Notification Bar", vbNullString)
      DoEvents
    Loop While hWnDbandeau = 0
     
     
    Sleep 500
     
     
    'raccourcis clavier pour ouvrir la boîte de dialogue Enregistrer sous
    keybd_event VK_TAB, 0, 0, 0&
    keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    keybd_event VK_TAB, 0, 0, 0&
    keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    keybd_event VK_DOWN, 0, 0, 0&
    keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    keybd_event VK_DOWN, 0, 0, 0&
    keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    keybd_event VK_RETURN, 0, 0, 0&
    keybd_event VK_RETURN, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    End Sub

  6. #166
    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
    Tiens...revoilà pulco41 !
    Les essais avec WebBrowser, Module de classe, etc c'est surtout pour tester les différentes possibilités mais si tu veux quelque chose de fiable on te le dit depuis le début : quand c'est possible passer par une requête.
    Tu as un fichier qui utilise une requête au post #60.
    Teste-le et tu verras.
    A+

  7. #167
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    j'avais deja vu la requete sur le post 60 qui fonctionne tres bien. C'est trop compliqué pour moi vu mon niveau. Je souhaite poursuivre mon developpement par une macro que je pourrai deboguer seul.

    1-Pouvez vous m'indiquer comment remplir le nom du champs dans IE avant d'enregistrer le fichier, comme demandé precedemment.

    2- Comment trouver le code pour la creation d'une telle requete ?

    merci d'avance

  8. #168
    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
    trop de pulco tue le pulco !

    pour la requête il n'y a rien de compliqué tu prend le code en entier et tu l'applique c'est tout
    pour un autre ISIN ou date tu change juste ces valeurs le reste ne change pas je te l'ai déjà dis

    maintenant si tu veux avec ie et les api tu peut simplement renommer le fichier dans les téléchargements
    un imputbox te demande le nom du fichier comme tu veux qu'il soit
    si tu veux le déplacer avec un autre nom il faudra peut être utiliser les boites dialog fichier a la place de l'input

    regarde la sub rename comme c'est simple

    exemple:
    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
    Option Explicit
    #If Win64 Then
      Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
      Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
      Declare PtrSafe 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 PtrSafe Function WaitMessage Lib "user32" () As Long
    #Else
      Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
      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)
      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 WaitMessage Lib "user32" () As Long
    #End If
     
     
    Const VK_TAB As Long = &H9
    Const KEYEVENTF_KEYUP As Long = &H2
    Const VK_RETURN As Long = &HD
    Const VK_DOWN As Long = &H28
     
     
    Public Sub CreerNavigateur()
    Dim onav As SHDocVw.InternetExplorer
    Dim oDoc As MSHTML.HTMLDocument
    Dim date1, date2, oldname As String
    date1 = "26/05/2015"
    date2 = "26/05/2016"
    Set onav = New SHDocVw.InternetExplorer
    onav.Visible = True
    onav.Navigate "http://www.abcbourse.com/download/historiques.aspx"
    ' Attente avec timeout de 10 s
    'If WaitIE(oNav, 10) Then
    'If WaitIE(oNav) Then
    '   ' 10 s écoulées et page non chargée
    '   MsgBox "Time out!"
    'Else
     
     
    Do Until onav.ReadyState = 3 'READYSTATE_COMPLETE
      DoEvents
    Loop
     
     
    ' Page chargée, on continue
    Set oDoc = onav.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
     
     
    ' Clic sur bouton telecharger
    oDoc.getElementsByName("ctl00$BodyABC$Button1")(0).Click
    'End If
     
     
     
    '---------------- Partie ajoutée -----------------------------
    '----- Attendre l'apparition du bandeau de téléchargement (car le délai d'attente peut être variable en fonction du site) pour la valider ---
    Dim hIEFrame As Long, hWnDbandeau As Long
     
     
    hIEFrame = FindWindow("IEFrame", vbNullString)
     
     
    'on patiente le temps que le bandeau apparaisse
    Do
      WaitMessage
      hWnDbandeau = FindWindowEx(hIEFrame, 0&, "Frame Notification Bar", vbNullString)
      DoEvents
    Loop While hWnDbandeau = 0
     
     
    Sleep 500
     
     
    'raccourcis clavier pour ouvrir la boîte de dialogue Enregistrer sous
    keybd_event VK_TAB, 0, 0, 0&
    keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    keybd_event VK_TAB, 0, 0, 0&
    keybd_event VK_TAB, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    'keybd_event VK_DOWN, 0, 0, 0&
    'keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0&
    'Sleep 100
    'keybd_event VK_DOWN, 0, 0, 0&
    'keybd_event VK_DOWN, 0&, KEYEVENTF_KEYUP, 0&
    'Sleep 100
    keybd_event VK_RETURN, 0, 0, 0&
    keybd_event VK_RETURN, 0&, KEYEVENTF_KEYUP, 0&
    Sleep 100
    oldname = "Cotations" & Format(date1, "yyyymmdd") & ".txt"
    rename oldname, onav
    End Sub
    Sub rename(d, onav)
    Dim newname As Variant, chemin As String, ext As String, i As Long
    chemin = "C:\Users\" & Environ("UserName") & "\Downloads\"
    ext = Right(d, 4)
    Do
    DoEvents
    i = i + 1
    If Dir(chemin & d) <> "" Then Exit Do
    Loop Until i = 100000
    onav.Quit
    newname = Application.InputBox(prompt:="Modifier le nom du fichier sans extention", Type:=2)
    Application.Wait (Now + TimeValue("0:00:02"))
    Name chemin & d As chemin & newname & ext
    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

  9. #169
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    merci; C'est ce que je fais deja de renommer une fois le fichier telecharger.

    Y a t il moyen de le faire directement dans la fenetre de lIE juste avant de faire Telecharger sous ?

    comment peut on apprendre à realiser de telle requete ?

  10. #170
    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 moyen pour IE et c'est simple : il suffit de réitérer ce qui est manuellement effectué !
    Choix de la bonne option puis entrer le nom (voir le chemin complet) du fichier …

    • Quant à la requête si mon lien indiqué au début de cette discussion avait été lu ‼
    Dans le post de la troisième étape il y a un lien vers la discussion d'origine montrant l'outil d'inspection d'IE
    (en fait peut importe le navigateur). Sans compter les tutoriels du Web …

    _________________________________________________________________________________________________________
    L'avenir n'appartient pas qu'à ceux se levant tôt mais surtout à ceux se donnant la peine de lire …
    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. #171
    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
    • Oui il y a moyen pour IE et c'est simple : il suffit de réitérer ce qui est manuellement effectué !
    Choix de la bonne option puis entrer le nom (voir le chemin complet) du fichier …
    tu veux dire entrer le nom avec senkeys???
    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. #172
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Je sais comment effectuer manuellement l'operation. J'ai simplement pas le code vba qui indique le champ a renseigner malgré toutes mes recherches

  13. #173
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loir et Cher (Centre)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Salut patricktoulon,

    Peux tu nous expliquer comment fonctionne ton fichier que tu as posté en #60 ?

    As tu des sources ?

    Afin de pouvoir comprendre comment cela fonctionne afin de pouvoir se dépanner seul le cas échéant.

    Merci ;-)

  14. #174
    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 Patrick !

    Citation Envoyé par patricktoulon Voir le message
    tu veux dire entrer le nom avec senkeys???
    Ne rigole pas, j'ai quelques codes procédant ainsi depuis longtemps !
    Peut-être même un sur ce forum, sinon sur un autre …
    Tout est dans l'observation, la temporisation …
    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)

  15. #175
    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 oui !! je te crois moi aussi j'en ai des vieux codes comme ca
    mais l'homme de Cro-Magnon n'a pas été la dernière évolution de l'homme tu sais !....


    tu imagine un nom avec des caractères particulier et des nombres

    perso!!
    a utiliser la solutions des apis comme il le fait j'utiliserait les api findwindowex pour trouver le handle du textbox de la fenêtre
    peut être avec enumchild aussi

    d'autant plus que je trouve cela completement absurde d'essayer de manipuler encore une fenêtre même si la trajectoire "download" devrait être changée alors qu'il suffi de :

    1 déterminer le nouveau nom en début de macro dans une variable
    2 un do/loop sur dir et nom du fichier téléchargé
    3 soit name oldnom as newnom
    soit la fonction move
    enfin pour moi ce serait plus propre qui a faire un input ou un getfolder pour avoir un dossier particulier
    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. #176
    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
    Salut patricktoulon,

    Peux tu nous expliquer comment fonctionne ton fichier que tu as posté en #60 ?

    As tu des sources ?

    Afin de pouvoir comprendre comment cela fonctionne afin de pouvoir se dépanner seul le cas échéant.

    Merci ;-)
    patricktoulon a proposé différents fichiers mais pas celui du post #60...ceci dit il peut t'expliquer la procédure à suivre.

    Pour construire une requête il te faut commencer par comprendre :
    - comment utiliser l'objet XMLHttpRequest : voir ici
    - comment utiliser l'outil de développement de ton navigateur : concernant IE 11 voir ici pour l'outil et pour l'analyse du trafic réseau.
    Si tu utilises un autre navigateur le principe est le même (fais une recherche sur le Web).

    L'onglet "Réseau" de l'outil de développement va te permettre de récupérer les entêtes, la méthode (Get ou Post) et éventuellement le corps de message utilisés par la requête pour l'affichage de la page Web.
    Tu pourras ensuite les utiliser dans la construction de ta requête via l'objet XMLHttpRequest.

    Une fois ces informations générales comprises pose des questions précises sur ce qui te manque pour pouvoir construire ta requête.

    A+

  17. #177
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loir et Cher (Centre)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 69
    Points : 41
    Points
    41
    Par défaut
    Merci Davido84,

    Je vais lire tous ça ;-)

  18. #178
    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
    bonne lecture !!

    pour ma part comme beaucoup d'autre participants sur ce sujet et dieu sait combien de fois il a été déterré

    il y aura toujours a étudier au cas par cas

    ca fait quand même 3 ans que marc et moi traitons souvent ce problème et même aujourd'hui on a pas encore une fonction véritablement universel

    il semblerait tout de même que pour IE on ai enfin quelque chose d'assez compatible avec all version (Window/IE) pour la gestions d'attente du bandeau de téléchargement

    la voici

    dans la fonction les deux variables sont injectées vierges

    pour le8
    si hwndIE8 c'est 3 touche tab puis entrer' enregistrement
    sinon c'est 2 touche tab puis entrer 'enregistrement
    1 tab en moins pour ouvrir
    davido le show window je le met a 9 ca active le bandeau lui même et l'affiche a sa taille et propriété initial


    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
     
    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)
    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
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
     
    Function WaitDownloadWindowIE(hwndIE8, hwndIEedge) As Boolean
        Dim HieFrame As Long, res As Long
        res = 0
        HieFrame = FindWindow("IEFrame", vbNullString)
        Do
            DoEvents
            i = i + 1
            hwndIE8 = FindWindow(vbNullString, "Téléchargement de fichiers")    'recherche du handle de la fenetre de telechargement IE 8 et celle avec le webbrowser
            hwndIEedge = FindWindowEx(HieFrame, 0&, "Frame Notification Bar", vbNullString)    'recherche du handle de la fenetre de telechargement IE edge
            res = hwndIEedge + hwndIE8
        Loop While res = 0 Or i = 10000
        ShowWindow hwndIEedge, 9
        If res = 0 And i = 1000 Then
            WaitDownloadWindowIE = False
        ElseIf res <> 0 Then WaitDownloadWindowIE = True
        End If
    End Function
    pas de rupture chez moi c'est du 200%
    que ce soit avec IE et PLUS ou un Web browser dans un userform

    pour être plus précis pour l'argument de showwindow

    Constante Valeur Définition
    SW_HIDE 0 Cache la fenêtre et en active une autre.
    SW_MAXIMIZE 3 Agrandit la fenêtre.
    SW_MINIMIZE 6 Réduit la fenêtre et active la prochaine (dans l'ordre des tâches windows).
    SW_RESTORE 9 Active et affiche la fenêtre à sa taille et position initiales.
    SW_SHOW 5 Active et affiche la fenêtre.
    SW_SHOWMAXIMIZED 3 Active et agrandit la fenêtre.
    SW_SHOWMINIMIZED 2 Active et réduit la fenêtre.
    SW_SHOWNA 8 Identique à SW_SHOW sauf que la fenêtre n'est pas activée.


    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. #179
    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
    salut marc
    test ca et ensuite met IE .visible =false
    et relance le
    j'ai bloqué la touche enter pour que tu puisse voir
    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
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    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
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Private Declare Function SWL Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
    Function WaitDownloadWindowIE(reg, IE)
        Dim HieFrame As Long, res As Long, hwndIE8, hwndIEedge, sttr2
        sttr2 = Space$(120)
        Dim sttr As String * 255
        res = 0
        HieFrame = FindWindow("IEFrame", vbNullString)
        Do
            DoEvents
            i = i + 1
            hwndIE8 = FindWindow(vbNullString, "Téléchargement de fichiers")    'recherche du handle de la fenetre de telechargement IE 8 et celle avec le webbrowser
            hwndIEedge = FindWindowEx(HieFrame, 0&, "Frame Notification Bar", vbNullString)     'recherche du handle de la fenetre de telechargement IE edge
            res = hwndIEedge + hwndIE8
        Loop While res = 0 Or i = 10000
        'transformer le bandeau en fenetre windows avec tout ses attributs
        If IE.Visible = False Then
            SWL hwndIEedge, -16, &H94CF0080    ' on ajoute tout les attribut (bouton(min,max),elasticité)
            ShowWindow hwndIEedge, 3: ShowWindow hwndIEedge, 9    'il faut deplacer de 1 mili pour que l'effet des attributs  soit efectué alors on l'agrandi et remet a l'initiale
            SetWindowPos hwndIEedge, 1, 100, 100, 800, 150, 0    ' on possitionne la fenetre
            SetParent hwndIEedge, GetDesktopWindow    ' on change le parent pour le desktop
            ' resultat la fenetre est maintenant completement formée (attributs) et en dehors de la fenetre IE
            'ce qui peut nous permettre de tourner avec IE non visible
            'SetForegroundWindow hwndIEedge
            ShowWindow hwndIEedge, 9
        End If
        If res = 0 And i = 1000 Then
            WaitDownloadWindowIE = False
        ElseIf res <> 0 Then
            BringWindowToTop hwndIEedge: ShowWindow hwndIEedge, 9
            Sleep 200
            Set wshShell = CreateObject("WScript.Shell")
            With wshShell
                Sleep 100: .SendKeys "{tab}"    ' un tab pour selectionner "ouvrir"(ie9 et W.xP.sp3  et plus )
                If IE.Visible = False Then Sleep 100: .SendKeys "{tab}"    ' le premier tab donnant juste le focus a la fenetre on en ajoute 1
                If hwndIE8 <> 0 Then: .SendKeys "{tab}"   'il y a un TAB de plus pour la fenetre de telechargement IE 8
                If reg = True Then: Sleep 100: .SendKeys "{tab}"   ' on ajoute un TAB pour le mode telecharger
                'Sleep 500: .SendKeys "{enter}"    ' on valide
            End With
        End If
        'Sleep 1000: IE.Quit
    End Function
     
    Sub test6()
        tim = Time
        Dim odoc As Object, URL As String, date1, date2, reg As Boolean, fName As String
        Dim hwndIEedge As Long, hwndIE8 As Long
        date1 = "26/05/2015"
        date2 = "26/05/2016"
        reg = True
        fName = "Cotations" & Format(date1, "yyyymmdd") & ".csv"
        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 < 3  'Or ie.busy
        Do: Loop Until IE.Document.ReadyState = "complete"
        ' 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
        WaitDownloadWindowIE False, IE
        '*****************************************************************
        Exit Sub
        ' on fait une boucle d'attente du fichier dans le dossier des télechargments pour pouvoir fermer IE
        If reg = True Then
            Sleep 300
            Do
                F = F + 1
                DoEvents
                fermetureIE8 = Dir("C:\Users\" & Environ("UserName") & " \Documents\" & fName) = ""    ' pour Ie 8 ou webbroser
                fermetureIE = Dir("C:\Users\" & Environ("UserName") & " \Downloads\" & fName) = ""    ' pour ie edge
            Loop Until fermetureIE = True Or fermetureIE8 = True Or F = 100000
            'Sleep 100
            If fermetureIE = True Then IE.Quit    ' on ferme ie quand le fichier est repéré dans le dossier
            Set IE = Nothing    ' on vide  la variable IE
            response = MsgBox(" ouvrir le Dossier des téléchargement ", vbYesNo, "Ouverture du fichier")    ' proposition d'ouverture du dossier des telechargements
            If response = vbYes Then Shell Environ("WINDIR") & "\explorer.exe " & "C:\Users\" & Environ("UserName") & "\Downloads", vbNormalFocus
        Else
            Sleep 10000
            If Not IE Is Nothing Then IE.Quit     ' si reg = false  on pause le temps de laisser le fichier s'ouvrir et on ferme IE
        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. #180
    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

    1er essai : rien ne se passe dans la page, au bout de 30 secondes je ferme IE, message d'erreur sur la boucle
    Do: Loop Until IE.Document.ReadyState = "complete" … Là j'aurais placé un DoEvents.

    2ème essai (sans rien modifier) : tout se passe bien jusqu'au bandeau mais jamais le bouton Ouvrir est cliqué …
    Mais côté VBE le code a terminé son exécution …

    Dans le doute, je ferme Excel, nettoie les fichiers temporaires puis copie ton code dans un nouveau classeur :
    soit il ne se passe rien, soit la procédure s'arrête sur l'affichage du bandeau, passant à travers la fonction …

    Je testerais sur une deuxième configuration - mon code fonctionnant toujours avec cette page - mais il faudrait d'abord mieux
    tenter de t'accorder avec David car vous êtes certainement plus proche du côté de vos configurations.

    Sinon pour un autre besoin avec un site au demeurant plutôt "space", le WebBrowser fonctionne bien
    mais certes sans avoir le besoin de simuler des touches …
    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. [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