Enregistrer une page web en TXT - VB/VBA/VBS - Programmation
Marsh Posté le 03-04-2007 à 11:33:44
Bonjour,
Tu peux adapter ca à un fichier texte (à la place de wb.worksheets(1) :
Public Sub runIEAndCopyPaste()
Dim dRetVal As Double
Dim wb As Workbook
dRetVal = Shell("C:\Program Files\Internet Explorer\IEXPLORE.EXE http://www.google.fr/search?q=hello+world", vbNormalFocus)
wait 2
SendKeys "^a^c", True
'wait 1
SendKeys "%{F4}", True
Set wb = Workbooks.Add
wb.Worksheets(1).Paste
End Sub
Private Sub wait(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub
Alors c'est pas du beau code, je sais, à améliorer, c'est juste une piste, mais ca semble fonctionner.
Marsh Posté le 03-04-2007 à 11:45:33
Je te remercie.
"Tu peux adapter ca à un fichier texte (à la place de wb.worksheets(1)" --> c'est mon problème j'arrive à enregistrer une page web sous word ou sous excel mais je ne trouve pas comment l'enregistrer directement dans un fichier texte.
Le code suivant passe par une feuille Excel puis enregistrement dans un .txt
Set fich = Workbooks.Open("http://groups.google.fr/groups/search?hl=fr&lr=lang_fr&q=VBA+copier+feuille+en+txt" )
ActiveWorkbook.SaveAs Filename:="e:\text.txt", FileFormat:=xlText, CreateBackup:=False
fich.Close
Or si la page Web est très grande tout ne passe pas dans excel et je perd des données, c'est pour cela que je souhaite enregistrer directement en Texte.
As-tu une idée ?
Merci.
Marsh Posté le 03-04-2007 à 12:01:48
Pour un document word, il faut créer un objet (application word), mais pour un fichier texte qu'elle est le nom de cette classe ?
ex pour word : Set MyWord = CreateObject(Class:="Word.Document" )
s'il y avait une possibilité de passer par cette méthode je pense que mon problème serait résolu.
Est-ce que quelqu'un connait la classe associée à un fichier texte ? (je ne trouve pas sur le net).
Merci.
Marsh Posté le 03-04-2007 à 13:13:08
Je dois aller déjeuner, je te trouve qqchose en rentrant...
Marsh Posté le 03-04-2007 à 15:06:58
Ce code fonctionne :
Option Explicit
Private Sub wait(Secondes As Integer)
' Cette procédure temporise pendant le nombre
' de secondes qu'on lui transmet en argument
Dim Début As Long, Fin As Long
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
End Sub
Public Sub runIEAndCopyPaste()
Dim dRetVal As Double
Dim ObjTextStream As Object, FSO As Object
Dim MyDataObj As DataObject
Dim str As String
Set MyDataObj = New DataObject
dRetVal = Shell("C:\Program Files\Internet Explorer\IEXPLORE.EXE http://support.microsoft.com/kb/183644/fr", vbNormalFocus)
wait 5
SendKeys "^a^c", True
SendKeys "%{F4}", True
MyDataObj.GetFromClipboard
str = MyDataObj.GetText(1)
Set FSO = CreateObject("Scripting.FileSystemObject" )
Set ObjTextStream = FSO.OpenTextFile("C:\Medialand\Text.txt", 2, True)
ObjTextStream.Write str
ObjTextStream.Close
End Sub
On doit évidemment pouvoir trouver bcp mieux.
d'autant que l'entier qu'on applique à wait peut être insuffisant si la page tarde à se charger.
Il existe une fonction qui atend le chargement des pages Internet... je cherche ca.
Marsh Posté le 03-04-2007 à 15:16:43
Plus d'infos :
http://www.vbfrance.com/codes/CONN [...] 35329.aspx
Marsh Posté le 03-04-2007 à 17:14:17
aprilthe5ith a écrit : Ce code fonctionne : |
--> Je te remercie, je teste ça.
Marsh Posté le 03-04-2007 à 17:50:45
Merci, cela fonctionne très bien.
Petite précision (au cas où) : il faut activer Microsoft forms 2.0 Object Library, dans Outils/Références ;-)
Marsh Posté le 03-04-2007 à 18:07:10
Mais va effectivement voir sur le lien que je t'a envoyé, le code est bcp plus pro.
Marsh Posté le 10-04-2007 à 15:20:14
Merci c'est ce que je suis entrain de voir, mais il faut référencer IE en chargeant la bibliothèque associée, mais je ne la trouve pas dans la liste de références déjà chargée.
Peux tu me donner le chemin de la DLL à charger (je ne la trouve pas ) ? Merci
Marsh Posté le 10-04-2007 à 17:18:16
J'ai un problème avec la récupération des données d'une page très grosse.
Que ce soit avec ta solution ou bien celle CHAPATA (lien donné) lors de la récupération des données cela plante et quelques fois très rares cela met plus de 20 minutes pour récupérer les données d'une page, or j'ai ~200 pages à récupérer et cela tous les jours !
As-tu une solution ? (sachant que de changer de matériel et de réseau cela n'est pas possible :-(
Merci.
Marsh Posté le 11-04-2007 à 02:28:31
... Pour la dll, il me semble que c'est, dans outils/références : Microsoft Internet Controls
Marsh Posté le 11-04-2007 à 09:09:28
Sous forme de Script VBS ( plus rapide )
|
Marsh Posté le 11-04-2007 à 11:58:27
Ca a l'avantage d'être court !
Si ca fonctionne... parfait, bravo.
Marsh Posté le 12-04-2007 à 13:05:40
Je te remercie,
je ne connaissais pas, je regarde celà plus dans le détail afin de boucler sur mes différentes pages.
J'ai encore deux questions :
1. à partir d'access (l'application principale est une base access), peut-on lui dire exécute le script HTMLtoTXT.vbs ?
2. peut-on prendre des valeurs se situant dans un fichier texte
exemple, j'aimerai pouvoir faire :
sData = GetXml("http://montest_" & Var1 & "." & Var2 & ".html" )
avec Var1 et Var2 des variables dont les valeurs se trouvent dans un fichier texte ?
Encore merci.
Marsh Posté le 12-04-2007 à 13:55:21
J'ai réfléchis un peu ... ^^
et avec tout ce que vous m'avez expliqué
pour ma question 2, j'ai fait :
Dim fso, f, var1
Set fso = CreateObject("Scripting.FileSystemObject" )
Set f = fso.OpenTextFile("E:\var1.txt", 1)
var1 = f.Read(2)
et cela fonctionne bien !
par contre pour la question 1 ? je ne connais pas la commande pour lancer un script via Access.
Marsh Posté le 12-04-2007 à 14:29:41
pit-bull a écrit : 1. à partir d'access (l'application principale est une base access), peut-on lui dire exécute le script HTMLtoTXT.vbs ? |
en lancant une ligne de commande Shell
Marsh Posté le 12-04-2007 à 16:51:20
Merci.
Tout fonctionne, mais par contre cela met toujours entre 10 et 20 min.
Pour info, une fois enregistrer en .txt la taille du fichier est de 8Mo, donc la page web est très conséquente. Avez-vous une solution ? Car là je suis entrain de me demander si l'automatisation de ces pages web est vraiment possible ... (manuellement c'est beaucoup plus rapide, mais très contraignant !)
Merci.
Marsh Posté le 12-04-2007 à 17:44:19
Merci, cela met maintenant 6 minutes pour copier une page.
GRRRR ...
c'est mieux, mais non validable ;-(
vois tu comment je peux faire avec des pages aussi grosses ?
Je te remercie.
Marsh Posté le 12-04-2007 à 18:01:22
pit-bull a écrit : Merci, cela met maintenant 6 minutes pour copier une page. |
je ne comprends pas comment on peut avoir un fichier txt de 8Mo, tu copies des pages web avec du code de cochon ?
Marsh Posté le 13-04-2007 à 02:13:12
8 meg... c'est dingue... en même temps un xls de seulement 5 onglets bien remplis de chiffres peut facile faire 3 meg...
Par ailleurs pour le tmps d'execution, il existe des méthodes hyper rapides qui scrutent Internet sans l'afficher (un de mes potes fait ca sur des sites pro de finance)... je vois avec lui et j'essaie de te répondre... c'est une sujet qui m'interesse.
Eventually, tu peux nous montrer ton code, histoire qu'on comprenne, le Jp et moi.
Marsh Posté le 13-04-2007 à 10:08:24
Merci pour votre implication.
Par contre j'ai un petit soucis que je viens de voir tout de suite.
Si je fais manuellement via l'explorateur enregistrer sous en .txt mon fichier fait plus d'1Mo en plus par rapport à celui qui est automatisé (donc 9).
Quand je regarde le corps du fichier automatisé toutes les lettres sans accents sont effacés donc c'est un peu génant. Savez-vous d'où cela peut venir ?
En ce qui concerne le code j'ai adapté celui de kiki29 à mes fichiers. J'ai rien inventé de nouveau.
et en ce qui concerne le code access, ce n'est pas ça qui bloque, c'est vraiment le script qui tourne longtemps.
Je ne peux pas vous donner d'exemple de pages Web dont je veux récupérer le contenu en .txt car c'est Inter-entreprise.
Mais ce type de page web sont énormes croyez moi !
Marsh Posté le 13-04-2007 à 10:26:11
erreur de ma part ... c'est avec accent
--> Quand je regarde le corps du fichier automatisé toutes les lettres AVEC accents sont effacées donc c'est un peu génant. Savez-vous d'où cela peut venir ?
Marsh Posté le 13-04-2007 à 11:02:36
pit-bull a écrit : erreur de ma part ... c'est avec accent |
regarde avec des debug.print si ton texte est sans accent des le debut ou dans la derniere étape ...
Marsh Posté le 13-04-2007 à 12:21:35
dès le début, j'ai un carré et quand il écrit dans le fichier texte, il ne met rien.
Marsh Posté le 16-04-2007 à 10:51:35
Je n'arrive toujours pas à gérer les lettres avec accents, je ne vois pas d'où cela peut venir.
La conversion est toujours aussi lente ...
je désespère !
Sous Access je lance le script comme ceci :
Shell """C:\WINNT\system32\WScript.exe"" ""E:\HTML_TXT.vbs""", vbMaximizedFocus
et j'aimerais que tant que le script n'est pas fini (~6 minutes), la suite du code Access n'est pas exécuté.
En effet, actuellement le script est lancé et la suite du code Access est lancé aussi, or il fait référence au fichier .txt créé dans le script vbs donc il ne le trouve pas et rien ne se passe.
Savez vous comment attendre que le script soit terminé ?
Je vous remercie pour votre aide sur ces trois éléments.
Marsh Posté le 04-05-2007 à 09:35:16
je reviens vers vous concernant ce problème. Est-ce que quelqu'un a une idée pour automatiser cet enregistrement en txt ?
Merci d'avance, je séche vraiment.
Marsh Posté le 04-05-2007 à 11:05:51
AprilThe5th a écrit : 8 meg... c'est dingue... en même temps un xls de seulement 5 onglets bien remplis de chiffres peut facile faire 3 meg... |
"il existe des méthodes hyper rapides qui scrutent Internet sans l'afficher " --> as-tu eu des nouvelles vers ton ami ?
Je n'ai pas trouvé de solution à mon problème de lenteur.
Je te remercie.
Marsh Posté le 04-05-2007 à 15:59:24
Je le vois ce WE, je te tiens aucourant.
... J'avais carrément oublié, tu fais bien de me le rappeler.
Marsh Posté le 23-05-2007 à 14:13:43
Je suis de retour.
Donc... je ne comprends pas : la méthode donnée par kiki29 fonctionne super bien, super rapidement et sans ouvrir IE...
Si les fichiers générés sont trop importants, c'est parece que le volume de données est également important... et je ne vois pas ce qu'on pourrait y faire...
Marsh Posté le 01-04-2009 à 13:27:47
Salut à tous,
J'ai un petit soucis :
J'ai besoin d'une fonction "wait" pour une macro.
J'ai utilisé celle de "aprilthe5ith" avec le timer, mais la fonction bug parfois (aléatoirement)
Citation : Private Sub wait(Secondes As Integer) |
J'ai cherché sur pas mal de forum, j'ai trouvé la fonction "Sleep" qui marche très bien, mais malheureusement ce n'est pas du tout ce que je veux.
Enfin, j'ai trouvé cette fonction, mais idem que pour le timer la fonction ne s'exécute pas tous le temps.(la encore ça semble aléatoire). Ce qui fait que les touches du clavier n'ont pas le temps de s'activer normalement...
Citation : Private Sub Attendre() |
Dans ma macro, j'appel la fonction de nombreuses fois d'affiler et pour un laps de temps très court. (Le problème viens peut être de la)
Voici ma un morceau de ma macro
Citation : |
L'un d'entre vous a t'il une idée à mon problème??
Merci d'avance
Marsh Posté le 03-04-2007 à 10:17:44
Bonjour,
Je cherche à automatiser sous Excel ou Access l'enregistrement d'une page Internet en .txt.
Est-ce que quelqu'un connait un code qui permet de faire cela sans être obligé de le faire à la main via le navigateur Internet "Enregistrer Sous en fichier Texte".
Merci.