[VBA] Controle d'Internet Explorer (IE) avec Excel

Controle d'Internet Explorer (IE) avec Excel [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 13-08-2008 à 10:04:02    

Bonjour,
 
Je poste ce message car malgré mes nombreuses recherches sur le net je tourne en rond depuis plusieurs mois (bon d'accord je l'avoue je ne fais pas que ca dans la vie donc ca prend plus de temps). J'ai vu des super réponses sur ce forum de JihemAir notamment donc j'espère trouver des gens compétents sur la manipulation des fenetres.
 
Mon problème :
Je cherche à télécharger un fichier qui est sur mon intranet via Excel. Je prends donc le controle d'IE pour être identifié sur le reseau et je lance le téléchargement sans problème. C'est ensuite que ca se corse. La fameuse fenetre "File Download" s'ouvre et me demande si je veux ouvrir (Open) ou enregistrer (Save) le fichier.... et je n'arrive pas à prendre la main dessus pour lui dire d'ouvrir le fichier.
J'ai essayé les Postmessage, Sendmessage et sendkeys.... bizarrement rien ne fonctionne donc j'ai plutôt l'impression que je pointe sur la mauvaise fenetre... bref je suis perdu  :pt1cable:  
 
Mon problème est aussi que je n'ai aucune doc sur les parametres possibles de Postmessage et Sendmessage donc je navique à l'aveuglette. Je n'ai rien trouvé sur le net qui puisse me dire les valeurs possibles de wMsg, wParam et lParam ainsi que leur significations.
 
Merci aux âmes charitables qui voudront bien m'aider.
Bleu34


Message édité par bleu34 le 13-08-2008 à 11:00:09
Reply

Marsh Posté le 13-08-2008 à 10:04:02   

Reply

Marsh Posté le 21-08-2008 à 18:28:34    

Allez je m'auto-réponds pour en faire profiter tout le monde. Je vous livre ma macro tel quel. Ca servira surement à quelqu'un.
Je vous rappele mon environnement : windows 2000, Excel 2000, le tout en anglais.
et mon problème : récupérer un fichier sur intranet via une macro Excel, cliquer sur tout les boutons pour réussir à le sauvegarder.
 

Code :
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  2.     (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  3. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
  4.     (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  5. Private Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
  6. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
  7.     (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  8. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  9.     (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  10. Public hwnd As Long
  11. Private Const WM_KEYDOWN = &H100
  12. Private Const WM_CHAR = &H102
  13. Private Const VK_RETURN = &HD
  14. Private Const BM_CLICK = &HF5
  15. Sub LaunchDownload()
  16.     On Error Resume Next
  17.     Set ie = CreateObject("InternetExplorer.Application" )
  18.    
  19.     acceuil = "http://intranet"
  20.     baseline = "http://intranet/monfichier.csv"
  21.        
  22.     fichier_baseline = "c:\baseline.csv"
  23.    
  24.     If Dir(fichier_baseline) <> "" Then Kill fichier_baseline
  25.    
  26.     'connection à la page d'acceuil intranet pour éviter les problèmes de login/password
  27.     ie.Navigate acceuil
  28.     'ie.Visible = True
  29.     Do Until ie.ReadyState = 4 'Loop unitl ie page is fully loaded
  30.         DoEvents
  31.     Loop
  32.    
  33.     If ie.document.Title = "Mettre le Header de votre page, c'est juste pour un test" Then
  34.    
  35.         ie.Navigate baseline
  36.         Do Until ie.ReadyState = 4
  37.             DoEvents
  38.         Loop
  39.         hwnd = 0
  40.         hwnd_fils = 0
  41.         Do
  42.             hwnd = FindWindow(vbNullString, "File Download" )
  43.             If hwnd = 0 Then
  44.                 PauseTimer (1)
  45.             Else
  46.                 hwnd_button = FindWindowEx(hwnd, 0, "Button", "&Save" )
  47.             End If
  48.         Loop While hwnd_button = 0
  49.         hwnd_button_hexa = Hex(hwnd_button)
  50.         hwnd_hexa = Hex(hwnd)
  51.        
  52.         SetActiveWindow hwnd
  53.         SendMessage hwnd_button, BM_CLICK, ByVal CLng(0), ByVal CLng(0)
  54.        
  55.         Do
  56.             hwnd_fils = FindWindow(vbNullString, "Save As" )
  57.             If hwnd_fils = 0 Then
  58.                 PauseTimer (1)
  59.             Else
  60.                 hwnd_button = FindWindowEx(hwnd_fils, 0, "Button", "&Save" )
  61.                 hwnd_level1 = FindWindowEx(hwnd_fils, 0, "ComboBoxEx32", "" )
  62.                 hwnd_level2 = FindWindowEx(hwnd_level1, 0, "ComboBox", "" )
  63.                 hwnd_level3 = FindWindowEx(hwnd_level2, 0, "Edit", "" )
  64.             End If
  65.         Loop While hwnd_button = 0
  66.         hwnd_fils_hexa = Hex(hwnd_fils)
  67.         hwnd_text_hexa = Hex(hwnd_text)
  68.         hwnd_level3_hexa = Hex(hwnd_level3)
  69.        
  70.         For num = 1 To Len(fichier_baseline)
  71.             PostMessage hwnd_level3, WM_CHAR, Asc(Mid(fichier_baseline, num, 1)), 0
  72.         Next
  73.         PostMessage hwnd_fils, WM_KEYDOWN, VK_RETURN, 0 'enter
  74.         Do
  75.             If Dir(fichier) = "" Then
  76.                 PauseTimer (1)
  77.             End If
  78.         Loop While Dir(fichier) = ""
  79.     Else
  80.         MsgBox "Please ensure that you have Internet Explorer opened" & Chr(13) & _
  81.                "and that you are already connected to Intranet." & Chr(13) & _
  82.                "Note : having multiple IE windows could lead to problems"
  83.     End If
  84.    
  85.     ie.Quit
  86.     Set ie = Nothing
  87. End Sub
  88. 'celle du dessous je l'ai trouvé sur le net... je ne sais plus où, en tout cas merci à celui qui l'a écrite
  89. Sub PauseTimer(ByVal nSecond As Single)
  90. Dim t0 As Single
  91.      'temps de référence
  92.      t0 = Timer
  93.      'boucle d'attente
  94.      Do While Timer - t0 < nSecond
  95.            Dim dummy As Integer
  96.            dummy = DoEvents()
  97.            'si on dépasse minuit,il faut
  98.            'retrancher un jour
  99.            If Timer < t0 Then
  100.                t0 = t0 - 24 * 60 * 60
  101.            End If
  102.      Loop
  103. End Sub


Message édité par bleu34 le 22-08-2008 à 09:40:46
Reply

Marsh Posté le 21-02-2009 à 18:33:40    

Bonjour,
 
Merci d'avoir mis ta réponse, j'ai exactement le même problème que toi !
Cependant, il y a une petite différence pour moi car Windows et Excel sont en Français pour moi et la fentre "File Download" n'a surement pas le même nom...
Ainsi je reste dans la boucle suivante :
 
Do
            hwnd = FindWindow(vbNullString, "File Download" )
            If hwnd = 0 Then
                PauseTimer (1)
            Else
                hwnd_button = FindWindowEx(hwnd, 0, "Button", "&Save" )
            End If
        Loop While hwnd_button = 0
 
En fait je ne trouve pas le nom de la fenetre en français...
J'ai essayé "Téléchargement de fichiers" (le titre de ma fenetre) mais ça ne fonctionne pas et pas moyen de mettre la main sur le nom de ma fenetre...
Quelqu'un pourrait m'indiquer des pistes pour trouver ce nom ?
 
Par avance merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed