[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 = NothingSi 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 witheric
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.NameAjouter 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...
Bonjour,
je reviens vers vous car je suis toujours bloqué....