[2007] VBA - Manipulation fichier temporaire au nom variable

Bonjour à tous !

Voilà j'ai un petit soucis et j'ai pas toruvé de solution sur internet fonctionnant pour ma macro.

Pour résumer, j'ai une macro qui va sur un site internet et après avoir renseigné des informations, télécharge un classeur excel en xls.

Seulement comme j'ai besoin de ce fichier que pour quelques infos et qu'il m'est impossible de le sauvegarder, je me contente de l'ouvrir tout simplement.

Là se pose le problème, bien que le nom fichier reste le même, il apparait un chiffre entre le nom et l'extension dù à sa nature temporaire.

13_Yarns_P330_Extrusion_Summary.xls devient alors 13_Yarns_P330_Extrusion_Summary(1).xls ou en tout cas 13_Yarns_P330_Extrusion_Summary(n).xls

J'aimerais le faire interargir avec la macor suivante :

Dim wbk As Workbook

Set wbk = Workbooks("13_Yarns_P330_Extrusion_Summary.xls")
    With wbk.Worksheets("13_Yarns_P330_Extrusion_Summary")

'là je transfert les donnés qui m'interesse de ce classeur temporaire à une feuille du classeur de ma macro

wbk.Close savechanges:=False
Set wbk = Nothing

Si quelqu'un à une idée !

Bonne journée

Bonjour Arthi

Il faut intégré ton "Set Wbk = " dans ta procédure d'ouverture du classeur sur internet

A+

Merci BrunoM45,

Je vois ce que tu veux dire mais j'ai du mal à comprendre comment l'integrer :

Sub IExp()

Application.ScreenUpdating = False

'Déclaration des variables
Dim IE As Object
Dim IEDoc As HTMLDocument
Dim InputZoneTexte1 As HTMLInputElement
Dim InputafficherBouton As HTMLInputElement
Dim CaseDirect As HTMLInputElement
Dim Generic As HTMLGenericElement
Dim iCollection As IHTMLElementCollection
Dim InputrechercheBouton As HTMLInputElement
Dim InputsaveBouton As HTMLInputElement
Dim htmlSelectElem As HTMLSelectElement
Dim htmlGeneric As HTMLGenericElement

   'Initialisation des variables
   Set IE = CreateObject("InternetExplorer.Application")

   'Suite du code

    'Chargement d'une page web Google
   IE.Navigate "site internet consulté"

   'Affichage de la fenêtre IE
   IE.Visible = False

      'On attend le chargement complet de la page
   Call wait

'On pointe le membre Document
   Set IEDoc = IE.document

   'On pointe notre Zone de texte 1
   Set InputZoneTexte1 = IEDoc.all("ReportViewerControl$ctl04$ctl03$txtValue")

With ThisWorkbook.Sheets("Temp")

   'On définit le texte que l'on souhaite placer à l'intérieur
   InputZoneTexte1.Value = .Range("A16").Value

   'On pointe notre Zone de texte 2
   Set InputZoneTexte1 = IEDoc.all("ReportViewerControl$ctl04$ctl05$txtValue")

   'On définit le texte que l'on souhaite placer à l'intérieur
   InputZoneTexte1.Value = .Range("A17").Value

   If .Range("A18").Value = "3F001" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl01")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F002" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl02")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F003" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl03")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F004" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl04")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F005" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl05")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F006" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl06")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F007" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl07")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F008" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl08")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F009" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl09")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F010" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl10")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F011" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl11")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

      If .Range("A18").Value = "3F012" Then

'On pointe la case à cocher
   Set CaseDirect = IEDoc.all("ReportViewerControl_ctl04_ctl07_divDropDown_ctl12")

   'On simule un clic sur la case à cocher
   CaseDirect.Click

   End If

   'On attend la fin de la recherche
 Call wait

    End With

'On pointe notre bouton
Set InputrechercheBouton = IEDoc.all("ReportViewerControl$ctl04$ctl00")

'On simule un clic
InputrechercheBouton.Click

'On attend la fin de la recherche
Call wait

Dim myWnd As HTMLWindowProxy

Set myWnd = IE.document.parentWindow

Call myWnd.execScript("$find('ReportViewerControl').exportReport('EXCEL');")

On Error Resume Next

        IE.Navigate baseLine
       Do Until IE.readyState = 4
           DoEvents
       Loop
       hwnd = 0
       hwnd_fils = 0
       Do
           hwnd = FindWindow(vbNullString, "File Download")
            If hwnd = 0 Then
               Call wait2
            Else
                hwnd_button = FindWindowEx(hwnd, 0, "Button", "&Open")
           End If
Loop While hwnd_button = 0
        hwnd_button_hexa = Hex(hwnd_button)
        hwnd_hexa = Hex(hwnd)

       SetActiveWindow hwnd
       SendMessage hwnd_button, BM_CLICK, ByVal CLng(0), ByVal CLng(0)
IE.Quit
IEfermerOuErreur:
    Set IE = Nothing
    Application.DisplayAlerts = False

  

Bonjour,

Et qcq chose comme ça ne fonctionne pas ?

Dim wbk As Workbook
' si ouverture réussie et terminée
Set wbk = activeWorkbook
    With wbk
    'là je transfert les donnés qui m'interesse de ce classeur temporaire à une feuille du classeur de ma macro
   .Close savechanges:=False
end with

eric

Merci Eriiic, le problème c'est que le "activeworkbook" est le classeur avec ma macro et non l'autre que je viens d'ouvrir...

Ah, bizarre mais pourquoi pas.

Il est bien dans la même session au moins ?

La proposition de BrunoM45 serait plus propre mais vu que je ne connais rien aux IE...., une autre proposition en attendant mieux :

Dim wbk As Workbook
For Each wbk In Workbooks
    If Left(wbk.Name, 31) = "13_Yarns_P330_Extrusion_Summary" Then Exit For
Next wbk
Debug.Print wbk.Name

Ajouter un booléen de succès à tester si tu n'est pas sûr à 100% de l'ouverture du fichier.

eric

Justement j'ai un doute sur le fait qu'il soit dans la même sessions, quand je fais un msgbox application.workbooks.count, il me met 1...

Bonjour le fil, salut eriiic

Pour ouvrir ton fichier, tu te sers uniquement de l'API IE et du handle de la fenêtre de l'explorateur

Tu lances le téléchargement du fichier généré et vas ensuite le chercher dans les fichiers téléchargés

hwnd = FindWindow(vbNullString, "File Download")

Mais tu te sers toujours du handle pour ouvrir le fichier

hwnd_button = FindWindowEx(Hwnd, 0, "Button", "&Open")

ce qui revient en fait à cliquer sur un lien hypertexte

Donc le fichier Excel ouvert se trouve effectivement dans une autre session d'Excel

Ce qu'il faut que tu fasses, c'est q'une fois téléchargé, tu ouvres ton fichier via Excel

La question : Est-ce que le nom est toujours le même ou pas ?

A+

Le nom peut changer même si il conserve en générale des mots d'un fichier à un autre.

Par contre mon code ne marche plus maintenant c'est étrange, tout marche bien jusqu'à la boite de dialogue de téléchargement.

Il y a un écho terrible chez toi, tu devrais meubler un peu plus la pièce...

Je sais ...

Bonjour,

je reviens vers vous car je suis toujours bloqué....

Rechercher des sujets similaires à "2007 vba manipulation fichier temporaire nom variable"