Télécharger un fichier .txt

Bonjour à tous,

Le contexte:

Un site internet met à disposition des cotations à l'adresse suivante:

La page consiste à présenter un fichier .txt qui contient un historique de cotations.

Le problème:

Je souhaite automatiser le téléchargement/enregistrement de cette page à partir d'une macro ecxel.

Je souhaiterai enregistrer automatiquement la page dans un fichier .txt, à un emplacement précis, et remplacer la version précédente du dit fichier.

Question:

Est-il possible de programmer une telle opération, et si oui comment?

D'avance merci pour vos réponses.

Cordialement

Bonjour pdm,

Ce tuto de lermite pourrait t'intéresser : https://forum.excel-pratique.com/cours-astuces/connections-sur-un-site-web-en-temps-reel-t34514.html

Regarde si tu y trouves ton compte ?

Bonjour

Exemple de chargement de ta feuille

Cordialement

180cotations.zip (8.07 Ko)

Bonjour Amadéus,

Merci pour ton aide, tu est allé beaucoup plus loin que je le souhaitais.

En fait ce que je souhaite pour le moment c'est simplement d'enregistrer, à un emplacement précis, au format .txt, le dernier fichier disponible sur le site en écrasant la version précédente.

Pensu-tu que c'est possible?

D'avance merci.

Cordialement

Amadéus a écrit :

Bonjour

Exemple de chargement de ta feuille

Cordialement

Bonjour

Avant de revenir sur le Forum, je m'étais attaché à fusionner ce sujet avec ton post précédent et j'étais arrivé au résultat suivant que je t'envoie pensant qu'il pourrait t'être utile.

Avant de le tester, lis l'encart dans la Feuille "Explications".

Cordialement

62cotations.zip (10.65 Ko)

Bonsoir

Cette macro charge dans la feuille active en colonne A,B,C à partir de la Cellule A1

Pour une autre adresse modifier en conséquence

Sub galopin()
Columns("A:C").Clear
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;http://www.stoxx.com/download/historical_data/h_sxxp.txt", Destination _
        :=Range("$A$1"))
        .TextFileSemicolonDelimiter = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

A+

Bonjour Galopin01

Ton Code est nettement plus clean et court que celui que j'avais adapté. Différence entre un Pro en VBA et un formuliste qui essaie de répondre aux sujets laissés sans réponse.

Je vais le mettre de côté.

Cordialement

Edit: Un peu moins rapide à l'éxécution

Bonsoir,

Merci pour ta collaboration, c'est ce que je cherchais .

J'ai une dernière requête, comment convertir de manière "propre" la permière colonne au format "Date".

D'avance merci

galopin01 a écrit :

Bonsoir

Cette macro charge dans la feuille active en colonne A,B,C à partir de la Cellule A1

Pour une autre adresse modifier en conséquence

Sub galopin()
Columns("A:C").Clear
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;http://www.stoxx.com/download/historical_data/h_sxxp.txt", Destination _
        :=Range("$A$1"))
        .TextFileSemicolonDelimiter = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

A+

Bonjour

pdm, je viens de poster 2 nouveaux fichiers

1 sur ce post, juste avant celui de Galopin01

1 sur ton autre post (avec la macro de Galopin01)

Sur ces 2 fichiers, un second Code répond à l'autre sujet.

Peux-tu regarder?

Cordialement

Bonsoir Amadeus,

Merci infiniement pour ta collaboration, c'est encore mieux que je le pensais.

La macro de Galopin01 fonctionne parfaitement est ton idée de suprimer les enregistrements antérieurs à la date de la dernière mise à jour est bien meilleure que ce que je proposais.

Je bute cependant sur le format de la colonne A qui présente des dates avec des "." alors que mon format date est avec des "/". Comment corriger de problème de format?

Amadéus a écrit :

Bonjour

pdm, je viens de poster 2 nouveaux fichiers

1 sur ce post, juste avant celui de Galopin01

1 sur ton autre post (avec la macro de Galopin01)

Sur ces 2 fichiers, un second Code répond à l'autre sujet.

Peux-tu regarder?

Cordialement

Bonsoir à tous,

Une solution en rajoutant ce bout de code à la fin de ta procédure :

Range("A:A").Replace ".", "/"

bonsoir,

Juste une ligne à rajouter :

Sub galopin()
Columns("A:C").Clear
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;http://www.stoxx.com/download/historical_data/h_sxxp.txt", Destination _
        :=Range("$A$1"))
        .TextFileSemicolonDelimiter = True
        .Refresh BackgroundQuery:=False
    End With
Columns("A:A").Replace ".", "/", xlPart
End Sub

A+

Bonsoir Galopin01

Ton aide m'est vraiment précieuse. La macro est maintenant la suivante

Sub charge_tableau()

Columns("A:C").Clear

With ActiveSheet.QueryTables.Add(Connection:= _

"TEXT;

", Destination _

:=Range("$A$1"))

.TextFileSemicolonDelimiter = True

.TextFileDecimalSeparator = "."

.Refresh BackgroundQuery:=False

End With

Columns("A:A").Replace ".", "/", xlPart

Call Période_suivante

End Sub

Sub Période_suivante()

Dim Val As Variant

Range("A1") = "Dernière donnée précédente en L1"

Val = Application.WorksheetFunction.Match(Range("L1"), Range("A:A"), 0)

Range("A2", Range("A2").Offset(Val - 3, 0)).Select

Selection.EntireRow.Delete

Range("A1").End(xlDown).Offset(-1, 0).Select

Selection.Copy

Range("L1").Select

ActiveSheet.Paste

Range("A1").Select

End Sub

Après avoir remplacer les "." en "/" dans la colonne A ainsi qu'en L1 la ligne suivante :

Val = Application.WorksheetFunction.Match(Range("L1"), Range("A:A"), 0)

est en erreur d'exécution '1004': Impossible de lire la propriété Match de la classe WorksheetFunction.

Aurrais-tu une idée?

D'avance merci

galopin01 a écrit :

bonsoir,

Juste une ligne à rajouter :

Sub galopin()
Columns("A:C").Clear
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;http://www.stoxx.com/download/historical_data/h_sxxp.txt", Destination _
        :=Range("$A$1"))
        .TextFileSemicolonDelimiter = True
        .Refresh BackgroundQuery:=False
    End With
Columns("A:A").Replace ".", "/", xlPart
End Sub

A+

Bonsoir,

je ne sais pas. Chez moi ça ne plante pas...

A+

Bonjour Galopin01,

Je pense avoir trouvé l'origine du problème.

Lorsque l'on importe le fichier par VBA le format de date par défaut est mm.dd.yyyy et non dd.mm.yyy comme dans le fichier importé.

Ainsi lorque l'on remplace les "." par des "/" le format de date par défaut n'est plus reconnu pour les valeurs dont les 2 premiers chiffres sont supérieur à 12. Par défaut il considère alors ces valeur au format Text. C'est pourquoi la fonction Match ne fonctionne plus, c'est par ce qu'elle ne trouve pas de correspondance.

J'ai aussi noté que lorsque l'on ne remplace pas les "." par des "/" par la macro, mais dans le classeur manuellement alors le format date se corrige de lui même et se positionne correctement sur dd/mm/yyyy. Je pense que c'est donc bien un problème de format de date.

Ma question est donc:

Lors de l'importation du fichier, peut-on spécifier un format de date du type dd.mm.yyyy pour la colonne A?

Ou bien peut-on directement télécharger et enregistrer le fichier dans son format d'origine .txt à un emplacement spécifié, car ensuite l'importation est les tratitements se font correctement.

D'avance merci pour ta contribution.

Cordialement

galopin01 a écrit :

Bonsoir,

je ne sais pas. Chez moi ça ne plante pas...

A+

Bonjour,

On peut certainement importer le fichier à l'emplacement d'origine, mais il faudrait le connaître...

Sinon pour importer directement au format date, tu peux modifier la macro de la manière suivante :

Sub galopin()
Columns("A:C").Clear
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;http://www.stoxx.com/download/historical_data/h_sxxp.txt", Destination _
        :=Range("$A$1"))
      .TextFileSemicolonDelimiter = True
      .TextFileColumnDataTypes = Array(4, 1, 1, 1)
      .Refresh BackgroundQuery:=False
    End With
End Sub

Bon dimanche.

A+

Bonjour Galopin01

C'est exactement ce qu'il fallait, tout fonctionne correctement maintenant.

Merci infiniement pour ton aide, grace à toi et a Amadéus je vais pouvoir avancer rapidement.

Bon dimanche et à bientôt

Cordialement

galopin01 a écrit :

Bonjour,

On peut certainement importer le fichier à l'emplacement d'origine, mais il faudrait le connaître...

Sinon pour importer directement au format date, tu peux modifier la macro de la manière suivante :

Sub galopin()
Columns("A:C").Clear
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;http://www.stoxx.com/download/historical_data/h_sxxp.txt", Destination _
        :=Range("$A$1"))
      .TextFileSemicolonDelimiter = True
      .TextFileColumnDataTypes = Array(4, 1, 1, 1)
      .Refresh BackgroundQuery:=False
    End With
End Sub

Bon dimanche.

A+

Rechercher des sujets similaires à "telecharger fichier txt"