Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3156 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Enregistrer une page web en TXT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Enregistrer une page web en TXT

n°1537632
pit-bull
Posté le 03-04-2007 à 10:17:44  profilanswer
 

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.

mood
Publicité
Posté le 03-04-2007 à 10:17:44  profilanswer
 

n°1537712
aprilthe5i​th
Posté le 03-04-2007 à 11:33:44  profilanswer
 

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.

n°1537727
pit-bull
Posté le 03-04-2007 à 11:45:33  profilanswer
 

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.

n°1537746
pit-bull
Posté le 03-04-2007 à 12:01:48  profilanswer
 

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.

n°1537780
aprilthe5i​th
Posté le 03-04-2007 à 13:13:08  profilanswer
 

Je dois aller déjeuner, je te trouve qqchose en rentrant...

n°1537862
aprilthe5i​th
Posté le 03-04-2007 à 15:06:58  profilanswer
 

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.

n°1537878
aprilthe5i​th
Posté le 03-04-2007 à 15:16:43  profilanswer
 
n°1537998
pit-bull
Posté le 03-04-2007 à 17:14:17  profilanswer
 

aprilthe5ith a écrit :

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.


 
--> Je te remercie, je teste ça.

n°1538033
pit-bull
Posté le 03-04-2007 à 17:50:45  profilanswer
 

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 ;-)

n°1538052
aprilthe5i​th
Posté le 03-04-2007 à 18:07:10  profilanswer
 

Mais va effectivement voir sur le lien que je t'a envoyé, le code est bcp plus pro.

mood
Publicité
Posté le 03-04-2007 à 18:07:10  profilanswer
 

n°1540803
pit-bull
Posté le 10-04-2007 à 15:20:14  profilanswer
 

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

n°1540919
pit-bull
Posté le 10-04-2007 à 17:18:16  profilanswer
 

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.

n°1541089
AprilThe5t​h
Posté le 11-04-2007 à 01:23:28  profilanswer
 

je regarde ca des demain, promis

n°1541094
AprilThe5t​h
Posté le 11-04-2007 à 02:28:31  profilanswer
 

... Pour la dll, il me semble que c'est, dans outils/références : Microsoft Internet Controls

n°1541123
kiki29
Posté le 11-04-2007 à 09:09:28  profilanswer
 

Sous forme de Script VBS ( plus rapide )


sData = GetXml("http://support.microsoft.com/kb/183644/fr" )
sData = HtmlToText(sData)
WriteFile "C:\Transfert\Web2Txt\web.txt", sData
 
Function HtmlToText(sHtml)
    With CreateObject("htmlfile" )
        .Write sHtml
        HtmlToText = .body.innertext
    End With
End Function
 
Function GetXml(sURL)
Dim Xml
    Set Xml = CreateObject("Microsoft.XMLHTTP" )
    Xml.Open "GET", sURL
    Xml.send
    Do: wscript.sleep 10: Loop While Xml.ReadyState <> 4
    GetXml = Xml.responseText
End Function
 
Sub WriteFile(FilePath, sData)
    With CreateObject("Scripting.FileSystemObject" ).OpenTextFile(FilePath, 2, True)
        .Write sData: .Close
    End With
End Sub

n°1541222
aprilthe5i​th
Posté le 11-04-2007 à 11:58:27  profilanswer
 

Ca a l'avantage d'être court !
Si ca fonctionne... parfait, bravo.

n°1541942
pit-bull
Posté le 12-04-2007 à 13:05:40  profilanswer
 

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.

n°1541959
pit-bull
Posté le 12-04-2007 à 13:55:21  profilanswer
 

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.

n°1541990
jpcheck
Pioupiou
Posté le 12-04-2007 à 14:29:41  profilanswer
 

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 :)

n°1542126
pit-bull
Posté le 12-04-2007 à 16:51:20  profilanswer
 

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.

n°1542131
jpcheck
Pioupiou
Posté le 12-04-2007 à 16:54:39  profilanswer
 

deja tu peux diminuer ton wscript.sleep à 5 ;)

n°1542169
pit-bull
Posté le 12-04-2007 à 17:44:19  profilanswer
 

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.

n°1542186
jpcheck
Pioupiou
Posté le 12-04-2007 à 18:01:22  profilanswer
 

pit-bull a écrit :

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.


je ne comprends pas comment on peut avoir un fichier txt de 8Mo, tu copies des pages web avec du code de cochon ?  :sweat:

n°1542345
AprilThe5t​h
Posté le 13-04-2007 à 02:13:12  profilanswer
 

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.

n°1542405
pit-bull
Posté le 13-04-2007 à 10:08:24  profilanswer
 

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 !

n°1542418
pit-bull
Posté le 13-04-2007 à 10:26:11  profilanswer
 

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 ?

n°1542450
jpcheck
Pioupiou
Posté le 13-04-2007 à 11:02:36  profilanswer
 

pit-bull a écrit :

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 ?


regarde avec des debug.print si ton texte est sans accent des le debut ou dans la derniere étape ...

n°1542561
pit-bull
Posté le 13-04-2007 à 12:21:35  profilanswer
 

dès le début, j'ai un carré et quand il écrit dans le fichier texte, il ne met rien.

n°1543224
pit-bull
Posté le 16-04-2007 à 10:51:35  profilanswer
 

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.

n°1555162
pit-bull
Posté le 04-05-2007 à 09:35:16  profilanswer
 

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.

n°1555219
pit-bull
Posté le 04-05-2007 à 11:05:51  profilanswer
 

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...
 
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.


 
"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.

n°1555445
aprilthe5i​th
Posté le 04-05-2007 à 15:59:24  profilanswer
 

Je le vois ce WE, je te tiens aucourant.
... J'avais carrément oublié, tu fais bien de me le rappeler.

n°1563979
aprilthe5i​th
Posté le 23-05-2007 à 14:13:43  profilanswer
 

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...

n°1868266
azer250
Posté le 01-04-2009 à 13:27:47  profilanswer
 

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)
' 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  


 
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()
    Dim MaDate As Date
      MaDate = Now
    Do While Abs(DateDiff("s", MaDate, Now)) < 1
        DoEvents
    Loop
End Sub


 
 
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 :


For i = 1 To 20 Step 2
exapp.Cells.Hyperlinks(i).Follow True
   Attendre  
  SendKeys ("^{f}" )
  Attendre
  SendKeys ("{ENTER}" )
  Attendre
  SendKeys ("{ESC}" )
  Attendre
  SendKeys ("^a" ), True
  Attendre
  SendKeys ("^c" ), True
  Selection.Paste
Next


 
 
L'un d'entre vous a t'il une idée à mon problème??
 
Merci d'avance


Message édité par azer250 le 01-04-2009 à 13:40:46
n°1869851
azer250
Posté le 06-04-2009 à 00:26:52  profilanswer
 

Personne a une idée?

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Enregistrer une page web en TXT

 

Sujets relatifs
Rechargement page admin après suppressioninserer un calendrier modifiable sur page web
affichage page impossibleVBA - Enregistrer en tant qu'image (xls / ppt)
Gestion du drag&drop de fichier sur une page internet?Internet explorer ne peut ouvrir la page
Champ Newsletter sur ma page d'accueil???comment faire un lien dynamique (suivant et précédent) (+1 ou -1 page)
récupérer une variable d'une autre page phpenregistrer une table dans un fichier texte
Plus de sujets relatifs à : Enregistrer une page web en TXT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR