Actualisation de donnée (web) avec changement d'URL

Bonjour,

Je viens à vous car j'ai une question en rapport avec Excel. En effet, j'ai besoin d'utiliser des données externes pour des calculs financiers. Toutefois, j'ai plusieurs centaines de données à actualiser chaque jour, le faire manuellement me prend énormément de temps, alors je me demandais s'il y avait la possibilité d'automatiser tout ça (après recherches, je n'ai rien trouvé).

Le hic est que l'URL que j'utilise change du jour au lendemain (j'utilise des résultats year-to-date, 30 jours, 365 jours, etc... et donc l'url change). Ainsi, lorsque j'accède à la source (Avancé), je met en "parties d'URL" ma variable, et en "seconde partie", la suite de l'URL qui change chaque jour. Et je répète ce procédé pour chacune de mes variables.

Est-il possible de changer toutes mes variables en même temps, sachant que ma seconde partie est la même pour toutes mes variables ?

Cordialement,

Guillaumekos

Je pense qu'il est tout à fait possible ... si tu pouvais donner un exemple des URL quotidiennes utilisées d'une part et des données recueillies, ce serait plus facile à voir concrètement.

Notamment si cette seconde partie d'URL qui change chaque jour est issue d'une première interrogation web, on peut tout à fait faire une double interrogation en recueillant au passage de la première les éléments manquants. Un exemple a déjà été traité dans ce sens sur ce forum (il faudrait que je remette la main dessus).

Bonjour,

Premièrement, sache que je ne suis pas très expérimenté, donc je te remercie beaucoup de ton aide !

Voici un lien "type" : https://coinmarketcap.com/currencies/iota/historical-data/?start=20180223&end=20180301

Avec :

1ère partie : https://coinmarketcap.com/currencies/iota/historical-data/

2ème partie : ?start=20180223&end=20180301

Une proposition

120coinmarketcap.xlsm (23.29 Ko)

version un poil remaniée

167coinmarketcap.xlsm (23.64 Ko)

Re!

Premièrement, merci beaucoup (encore) ! J'ai pu un peu toucher au .xls, modifier les dates et l'URL choisi, donc j'ai tout bien compris jusque là.

Seulement, je rencontre un doute lorsqu'il s'agit de changer la première partie de l'URL (celle qui ne comprend pas les dates). Si on suit mon exemple, je dois changer le "/iota/" en "/.../" (sur une centaine de lignes). Etant donné que tu as mis l'URL en "commun", comment faire pour en mettre plusieurs?

Par ailleurs, j'aurai encore besoin de toi lorsqu'il s'agira d'extraire des tableaux en partant des liens interrogés.

Je viens de réussir !

Je peux désormais importer les données via l'URL générée (en fonction de la date choisie). Pour aller un peu plus loin dans mon tableau, est-il possible de nommer automatiquement les feuilles en fonction de l'URL?

Par exemple : "https://coinmarketcap.com/currencies/iota/historical-data/?start=20180101&end=20180301" donnerait une feuille intitulée "IOTA" ; en prenant en compte que dans ma feuille "interrogations" j'ai une colone dans laquelle il y a simplement écrit "IOTA".

Dans mon exemple, c'est la colonne C qui donne le nom de l'onglet

Parfait, tout fonctionne désormais.

Je rencontre d'autres problèmes maintenant, je cherche à récupérer des données d'autres feuilles portant un nom, et j'aimerais que cette récupération de donnée s'effectue même lorsque le nom de la feuille change.

Par exemple : j'ai 5 feuilles qui représentent un "top 5 d'actifs", et comme ce top 5 peut varier, le nom des feuilles changera. Maintenant, dans une 6ème feuille, j'effectue des calculs qui prennent des valeurs tirées des 5 premières feuilles, seulement je ne peux pas utiliser le nom des feuilles car il a vocation à changer quotidiennement.

J'imagine qu'il doit y avoir une ID par feuille, et donc que je puisse récupérer des valeurs en fonction de ces ID?

...dans une 6ème feuille, j'effectue des calculs qui prennent des valeurs tirées des 5 premières feuilles, seulement je ne peux pas utiliser le nom des feuilles car il a vocation à changer quotidiennement.

J'imagine qu'il doit y avoir une ID par feuille, et donc que je puisse récupérer des valeurs en fonction de ces ID?

il faut utiliser la fonction INDIRECT

53indirect.xlsx (10.00 Ko)

Tout fonctionne, merci beaucoup l'ami !

Merci beaucoup, cela fonctionne !

Désormais, je me pose la question de savoir comment faire pour que l'actualisation des données ("Interroger les sites") ne supprime pas toutes les feuilles Excel. En effet, je souhaite qu'il en garde quelques-unes.

Je sais que les lignes à modifier sont contenues dans :

For Each ws In ActiveWorkbook.Worksheets
    With ws
        If .Name <> "Interrogation" Then ws.Delete
    End With
Next

Peut-être que rajouter des "Or" conviendrait?

For Each ws In ActiveWorkbook.Worksheets
    With ws
        If .Name <> "Interrogation" 
        Or .Name <> "Nom1"
        Or .Name <> "Nom2"
        ...
        Then ws.Delete
    End With
Next

Merci

plus simple dans ce cas ...

évite de gérer les noms d'onglet !

46boursier-v2.xlsm (23.71 Ko)

j'y pense ...

ajoute ceci

ActiveSheet.Name = Format(Now, "dd mmm yy hh\hnn")

dans

            If i > [debut].Row Then
                txt = [avant] & Split(Split(.responseText, [avant])(1), [apres])(0) & [apres]
                Sheets("boursier").Select
                Range("A1").End(xlDown).Offset(1, 0).Select
                obj.SetText txt
                obj.PutInClipboard
                ActiveSheet.Paste
                ActiveSheet.Name = Format(Now, "dd mmm yy hh\hnn")
            End If

j'y pense ...

ajoute ceci

ActiveSheet.Name = Format(Now, "dd mmm yy hh\hnn")

dans

            If i > [debut].Row Then
                txt = [avant] & Split(Split(.responseText, [avant])(1), [apres])(0) & [apres]
                Sheets("boursier").Select
                Range("A1").End(xlDown).Offset(1, 0).Select
                obj.SetText txt
                obj.PutInClipboard
                ActiveSheet.Paste
                ActiveSheet.Name = Format(Now, "dd mmm yy hh\hnn")
            End If

J'ai mal dû m'exprimer, vraiment navré !

En fait, désormais cela ne supprime aucune des feuilles, alors qu'avant elles étaient toutes supprimées. Ma requête serait de garder certaines feuilles uniquement (étant donné que ma génération d'URL dépend de ces dernières et que je les utilise pour des calculs).

Peut-être que l'explication de ce que je souhaite faire t'aidera : je génère 100 feuilles (à partir de la première macro que tu m'as faite), et à partir de ces dernières, je fais mes opérations. Le truc est que ce top 100 change constamment (surtout les 20 dernières valeurs), je souhaiterais ainsi garder quelques feuilles à partir desquelles j'importe le top 100 (à jour), et à partir de ces dernières la feuille générant les URL s'actualise.

Tout fonctionne déjà très bien, seulement je suis contraint à re-créer mes feuilles de calculs à chaque fois...

Quels sont les noms de feuille à conserver et ceux à supprimer ?

Les calculs sont-ils bien fait dans un autre classeur ?

Quels sont les noms de feuille à conserver et ceux à supprimer ?

Les calculs sont-ils bien fait dans un autre classeur ?

Il y a "Calculs", "CMC", "Interrogation", "Rentabilité" qui sont les feuilles à garder.

Celles à supprimer sont les 100 générées en fonction des capitaux, donc impossible de te les citer étant donné que leur nom varie d'un moment à l'autre...

Tous les calculs sont faits dans les feuilles "CMC", "Rentabilité" et "Calculs", pas dans "Interrogation" étant donné que c'est la feuille pour l'importation des données.

Tous les calculs sont faits dans les feuilles "CMC", "Rentabilité" et "Calculs", pas dans "Interrogation" étant donné que c'est la feuille pour l'importation des données.

les calculs s'appuient je suppose sur les feuilles générées par la macro ?

mais dans ce cas, l'annulation des feuilles va générer des #REF! dans le calcul ... (sauf à utiliser INDIRECT et connaître à l'avance les noms des onglets)

donc là je suis un peu perdu

Supposons que j'utilise trois feuilles "à garder" : "Interrogation", "CMC" et "Calculs".

1ère étape : importer le top 100 actuel dans CMC (via l'URL

).

2ème étape : une fois ceci fait, ma feuille Interrogation s'actualise automatiquement (comme tu m'as appris) ; ainsi, je clique sur le bouton pour générer les 100 feuilles en partant du top 100.

3ème étape : les 100 feuilles sont désormais générées, je n'ai plus qu'à faire mes calculs ; ces derniers se font automatiquement grâce à la fonction INDIRECT d'Excel (en partant des "noms de feuilles" créés par la feuille "CMC".

Tu l'auras compris, au final tout se fait automatiquement sauf : importer les données (1ère étape) et faire un clic (2ème étape). Les calculs ne constituent pas un problème.

Pour faire synthétique, il faudrait un VBA "supprimer toutes les feuilles sauf "Interrogation", "CMC", "Calculs".

Pour faire synthétique, il faudrait un VBA "supprimer toutes les feuilles sauf "Interrogation", "CMC", "Calculs".

A savoir que j'ai déjà cherché sur plusieurs forums (même anglais) et que les VBA ne semblent pas fonctionner.

Rechercher des sujets similaires à "actualisation donnee web changement url"