Macro Importation Données plusieurs pages web

Bonjour,

Je voudrais récupérer des données de plusieurs pages web d'un même site afin de mettre à jour mes données dont certaines ont été perdues.

Pour se faire on m'avait créé (il y a bien longtemps) une macro qui fonctionnait bien pour récupérer les données d'un autre site.

Je ne devrais avoir qu'à changer l'adresse mais elle ne fonctionne pas, probablement dû à un détail qui m'échappe. Merci par avance à ceux qui savent de bien vouloir corriger ma macro ci-dessous qui pose problème à la ligne Set Fich =Workbooks.open

En l'occurence les pages à copier sont les grilles de 2004 de 1 à 29 avec une configuration d'adresse comme suit :

http://www.pronosoft.com/fr/lotofoot/historiques/loto-foot-7/2004-grille-1/
http://www.pronosoft.com/fr/lotofoot/historiques/loto-foot-7/2004-grille-2/ et ainsi de suite jusqu'à 29

Ma macro est la suivante :

Sub Macro1 ()
'
' Macro1 Macro
'
For num = 1 To 29 
Application.DisplayAlerts = False 
Set fich = Workbooks.Open("http://www.pronosoft.com/fr/lotofoot/historiques/loto-foot-7/2004-grille-=" & num) 
Application.DisplayAlerts = True
Set ongl = ThisWorkbook.Sheets.Add 
ongl.Name = "onglet" & num 
fich.Sheets(1).Cells.Copy
Workbooks(ThisWorkbook.Name).Activate
    ongl.Select
    Application.DisplayAlerts = False 
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    fich.Close (False)
    Application.DisplayAlerts = True
Next num 
End Sub

Bonjour,

Les URL ont changé !! il faut trouver les nouvelles URL ....

capture d ecran 62

Je pense qu'il manque / dans ton programme

Change la ligne suivante et essaie :

Set fich = Workbooks.Open("http://www.pronosoft.com/fr/lotofoot/historiques/loto-foot-7/2004-grille-=" & num & "/") 

Bonjour,

Ben non, lol. Je viens de cliquer sur les 2 liens donnés dans mon message et ils fonctionnent tous les deux

Dans le message OUI, mais pas dans le code VBA (c'est comme cela que je m'en suis rendu compte !).

Dans le code VBA il manque le / final

Et enlève le =

Change la ligne

Set fich = Workbooks.Open("http://www.pronosoft.com/fr/lotofoot/historiques/loto-foot-7/2004-grille-" & num & "/")

Un fois cette correction faite :

Set fich = Workbooks.Open("http://www.pronosoft.com/fr/lotofoot/historiques/loto-foot-7/2004-grille-" & num & "/")

, je ne comprends pas ton code !!

Quelles infos veux-tu récupérer ? un tableau ?

Yeeeeeeeeeeeeeeeepppppppppppppppppppp, Bravo, ça fonctionne. J'avais pas fait gaffe au slash.

Mais bon en fait la macro me récupère tout sauf les résultats, ce dont j'ai besoin, lol.

En fait j'ai besoin de récupérer la date, et les résultats "1", "N" ou "2" corespondants aux résultats 1 à 7 de la grille.

Un truc qui donnerait comme résultat quelque chose qui ressemblerait à celà :

Avec un élément par cellule et où 74 et 6 sont les gains.

08/01/2005 1 2 2 1 1 1 N 74 6

Mais je crois que ça devient trop compliqué pour moi

A moins que tu ais une macro plus simple et plus efficace... !!!

En tous les cas un grand merci

Essaie ces 2 fichiers ...

Maintenant, pour bien répondre à ton besoin, il faudrait triturer davantage les données reçues.

Slt Steelson,

Effectivement il va falloir triturer les fichiers pour arriver au résultat final souhaité mais ce que tu as fait est déjà extraordinaire pour pour moi et mes capacités proches de zéro en la matière.

En fichier joint (Feuille1) la base de données que je souhaite créer avec les données récupérées.

Mais j'ai bien conscience que récupérer les données sur plusieurs pages web pour les envoyer chacune dans une cellule particulière d'une base de données générale ne doit pas être chose simple d'autant que certaines données font partie d'un tableau et qu'il s'agit de transformer une croix, selon son emplacement (1, N, 2) en une valeur à placer dans une cellule particulière.

Mais si on doit se contenter des 2 fichiers d'extraction que tu m'as fourni en l'état et qu'il faut réunir les données et les classer alors il me semble qu'il est possible d'envisager une suite de macros traitant les données étape par étape.

Tout d'abord, ce serait cool que tu puisses me donner la démarche pour étendre la colonne A pour pouvoir la faire passer de Onglet1 à Onglet29 à Onglet1 à Onglet91 ou Onglet1 à OngletX car si je souhaite poursuivre ma recherche année par année cela me permettra de gagner du temps plutôt que de les taper à la main. Pour info, l'année 2005 comporte 91 grilles et pour l'année 2017 on en est à la grille... 202... J'ai compris par ailleurs qu'il suffisait de copier/coller la première cellule de la colonne B dans les cellules suivante pour que les données correspondantes au chiffre de l'onglet soit récupérées sur le Web. J'ai compris aussi qu'avant de copier/coller cette cellule il suffit de modifier l'année de l'adresse url pour que la récupération de données porte sur une autre année.

Sur les deux fichiers que tu m'as envoyé j'ai fait les constats suivants :

* Le fichier "Rapports" ne comporte pas de date mais les éléments à récupérés se trouvent à chaque fois dans la même cellule.

* La cellule comportant la date est peu exploitable car la fonction de tri prend en compte la première lettre du JOUR et non la date elle-même.

Sous réserve que la démarche proposée soit techniquement possible la procédure étape par étape serait la suivante :

1/- Récupérer les données du web du fichier "Classement" avec la macro qui va avec

2/- Transformer dans chaque onglet créé les cellules fusionnées comportant la date en une seule cellule avec une date au format traditionnel dans la cellule A3.

Résultat attendu : mon fichier feuille2

3/- Reporter dans les cellules F,G,H,I,J,K,L de la ligne 3 la valeur correspondante au placement de la croix dans le tableau (1,N,2)

Résultat attendu : mon fichier feuille3

4/- Supprimer toutes les lignes différentes de la ligne 3 (comportant les données) et des colonnes B,C,D & E.

Résultat attendu : mon fichier feuille4

5/- Ouvrir le fichier "Rapports" et récupérer les données Web via la macro.

Remarque importante : Le numéro des onglets créés dans les deux fichiers macro correspondent à la même date. En effet, l'Onglet1 du fichier "Rapports" qui n'a pas de date correspond à l'Onglet1 du fichier "Classement".

6/- Copier tous les onglets du Fichier "Rapports" dans le fichier "Classement".

Conséquences : Tous les onglets du fichier "Rapports" vont être renommés Onglet1 (2), Onglet2 (2)...

7/- Créer et appliquer une macro faisant les choses suivantes dans le même fichier :

a - Ouvre l'onglet1 (2), copie les cellules C2 et C3

b - Ouvre l'Onglet1, copie la cellule C2 de l'Onglet1 (2) dans la cellule I1 de l'Onglet1 et la cellule C3 de l'Onglet1 (2) dans la cellule J1 de l'Onglet1 et ainsi de suite... Résultat attendu dans mon Fichier1 Feuille5.

c - Supprimer tous les OngletsX (Y) dont les cellules intéressantes ont été copiées.

8/- Créer un Onglet "Base"

9/- Ouvrir chaque onglet et copier sa ligne 1 dans l'Onglet "Base", les lignes 1 de chaque Onglet venant les uns à la suite des autres dans l'Onglet "Base".

10/- Supprimer tous les Onglets pour ne conserver que l'Onglet "Base". résultat Attendu Mon Fichier Feuille1.

Voici donc. Je ne sais pas si cela est réalisable mais si c'était le cas, ce serait vraiment le top pour moi. Il y a peut-être aussi des procédures plus courtes, je ne sais pas. A toi de voir.

Bien Cordialement.

Th.

D'après ton code je pensais que tu voulais un onglet par résultat

ongl.Name = "onglet" & num

Mon propos a été de prendre un outil assez "standard" pour moi (que j'ai dans ma "caisse à outils" excel) pour extraire les données.

Éventuellement je peux mettre un seul fichier avec dans chaque onglet les 2 tableaux.

Si tu as écrit la procédure, je te laisse faire ... ou brièvement, dis moi ce que tu souhaites en une phrase (pas en 1 page) et avec un exemple sur 1 onglet (là tu m'en mets 5).

Oupsssss, dsl, c'est parce que j'arrivais pas à extraire en une seule fois.

En une seule phrase cela donnerait :

Récupère tous les résultats des tirages du Loto foot 7 pour l'année XXXX avec les rapports à 7 et 6 résultats et range les dans un seul onglet avec pour chaque tirage :

  • En colonne A, la date
  • En colonne B, le résultat 1 de la grille sous forme 1,N,2 correspondant,
  • En colonne C, le résultat 2 de la grille sous forme 1,N,2 correspondant,
  • En colonne D, le résultat 3 de la grille sous forme 1,N,2 correspondant,
  • En colonne E, le résultat 4 de la grille sous forme 1,N,2 correspondant,
  • En colonne F, le résultat 5 de la grille sous forme 1,N,2 correspondant,
  • En colonne G, le résultat 6 de la grille sous forme 1,N,2 correspondant,
  • En colonne H, le résultat 7 de la grille sous forme 1,N,2 correspondant,
  • En colonne I, le rapport pour 7 résultats,
  • En colonne J, le rapport pour 8 résultats

OK super, compris, je reprends ... résultat cet apm je pense !

A tester

Sub Maj()
Dim resultats, indicateur, gains

On Error Resume Next
For num = [C1] To [E1]
    DoEvents
    URL = Replace([A1], "XXX", num)
    On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", URL, False
        .Send
        If .Status = 200 Then

            avant = "<th colspan=""4"">"
            apres = "</th>"
            ladate = Split(Split(.responseText, avant)(1), apres)(0)
            Cells(2 + num, 1).Value = ladate

            sep1 = "<td class=""result"">"
            resultats = Split(.responseText, sep1)

            For i = 1 To UBound(resultats) ' le 0 est avant le séparateur, donc ne pas tenir compte !

                sep2 = "_check"
                indicateur = Split(resultats(i), sep2)
                Cells(2 + num, i + 1).Value = Mid(indicateur(0), Len(indicateur(0)), 1)

            Next

            avant = "</td><td class=""right"">"
            apres = "&nbsp;&euro;</td>"
            gains = Split(.responseText, avant)

            For i = 1 To UBound(gains)

                Cells(2 + num, UBound(resultats) + i + 1).Value = Split(gains(i), apres)(0)

            Next

        End If
    End With
Next
End Sub
27loto-foot.xlsm (17.52 Ko)

Application 2017

45loto-foot-2017.xlsm (29.48 Ko)

Version avec dates correctes décodées

Parfaitement Géniallllllllllllllllllllllllllllllllllllllllllllllllllllllllll et quelle rapidité...

Je pensais mettre pas moins de 6 mois pour aboutir à cette étape.

Je suis en fait sur un projet perso où je fais valoir ma formation en stats et proba qui devrait aboutir sur quelque chose de concret sous peu, à ce rythme... Me manque la maîtrise du VBA avec lequel je bidouille quelques trucs simples et pas suffisants.

Du coup si je peux te solliciter pour deux macros supplémentaires ce serait super cool.

La première consiste à modifier les dates pour retrouver un format traditionnel susceptible de tris.

Voir mon fichier joint, Feuille1.

Pas de relais à faire avec la macro précédente.

La seconde consiste à calculer par ligne le nombre de "1", de "N" et de "2" pour reporter la somme de chacun dans la colonne suivante. Voir mon fichier joint, Feuille2.

Pas de relais à faire ici non plus avec le travail précédent.

Mille mercis et encore bravo pour les compétences qui sont les tiennes en la matière.

Bon dimanche.

Th.

fouggy a écrit :

La première consiste à modifier les dates pour retrouver un format traditionnel susceptible de tris.

Voir mon fichier joint, Feuille1.

Fait, voir post précédent (fichier que tu n'as pas chargé. Version avec dates correctes.

fouggy a écrit :

La seconde consiste à calculer par ligne le nombre de "1", de "N" et de "2" pour reporter la somme de chacun dans la colonne suivante. Voir mon fichier joint, Feuille2.

OK mais pas besoin de macro.

Je vais passer en "tableau" avec les formules qui s'incrémenteront automatiquement.

Ensuite pour les stats, tu fais un TCD

On peut aussi interroger à la file toutes les années (j'étais en train de regarder)

Yo, avait pas vu pour les dates et c'est donc Ok.

En revanche pour la 2me macro il faudrait que je puisse l'appliquer à la colonne A où j'a aussi l'ensemble de toutes les combinaisons possibles que j'ai déjà créé dans un fichier et qui sont au nombre de 2187.

[quote="fouggy, dans le fichier excel,"]ATTENTION : Quelque soit l'année, les mois de Février, Août et Décembre comportent un bug orthographique comme ici en Décembre[/quote]

Ben oui, si au moins le site internet avait codé en utf-8, bande d'incompétents !


fouggy a écrit :

En revanche pour la 2me macro il faudrait que je puisse l'appliquer à la colonne A où j'a aussi l'ensemble de toutes les combinaisons possibles que j'ai déjà créé dans un fichier et qui sont au nombre de 2187.

La formule simple est :

=NB.SI($A3:$G3;I$1)
20fouggy-feuil2.xlsx (10.22 Ko)

Un peu "à ma façon" sans macro complémentaire ...

Avec un TCD

Je me suis aperçu que les valeurs de gains étaient du texte ... correction ci-jointe :

@fouggy :

si la répons te convient, alors ...

Rechercher des sujets similaires à "macro importation donnees pages web"