Importer plusieurs tableaux web

Pour toutes vos questions à propos d'Excel ...

Importer plusieurs tableaux web

Messagepar sam20lionel » 12 Nov 2009, 19:07

Bonjour,

J'ai à nouveau besoin de votre aide. En effet, je recherche à importer plusieurs tableaux d'un site sur excel 2007. Pour le moment j'arrive à importer un par un les tableaux, et je suis actuellement en train de créer plusieurs long macros pour tout importer.

Cependant, j'aurai voulu savoir s'il était possible d'importer plusieurs tableaux de différentes pages web en un coup (ou un peu +), à l'aide d'un macro ou autre. Le site contient environ 1600 pages de tableaux et les tableaux ont une cinquantaine de ligne et 5 colonnes. De plus je souhaiterai également savoir s'il était possible de présenter les données de l'importation de manière verticale, càd que chaque tableau va en dessous de l'autre automatiquement.

Merci d'avance pour votre aide.
Dernière édition par sam20lionel le 10 Mai 2010, 21:25, édité 3 fois.
sam20lionel
Utilisateur occasionnel
 
Messages: 10
Inscription: 13 Août 2009, 16:31
Version Excel: 2007 FR

Messagepar Usb512 » 12 Nov 2009, 23:54

Salut le forum

Il faudrait voir la structure du site Web, l'emplacement des tableaux à récupérer.

Ensuite on pourra voir pour te batir une macro qui te feras l'importation dans Excel.

A te relire
Mytå
.Image.
Avatar de l’utilisateur
Usb512
Membre fidèle
 
Messages: 266
Inscription: 15 Juin 2009, 01:06
Localisation: Québec
Version Excel: 2007 FR

Messagepar sam20lionel » 14 Nov 2009, 13:04

Bonjour,

Voici le site ICI. C'est donc la 1ere page. Et sa dernière page ICI.

Merci.
sam20lionel
Utilisateur occasionnel
 
Messages: 10
Inscription: 13 Août 2009, 16:31
Version Excel: 2007 FR

Messagepar vba-new » 14 Nov 2009, 16:23

Bonjour à tous,

Essaie avec ce code (fait avec l'enregistreur de macro puis modifié) :
Code: Tout sélectionner
Sub rapatrie()
Dim i As Long
Dim finTableau As Long
Dim numFeuille As Byte
    Application.ScreenUpdating = False
    numFeuille = 1
    For i = 150 To 83100 Step 50
        finTableau = Range("A65536").End(xlUp).Row
        If finTableau + 50 < 65536 Then
            With ActiveSheet.QueryTables.Add(Connection:= _
                                             "URL;http://www.slayersonline.net/communaute/player.php?offset=" & i, _
                                             Destination:=Range("A" & finTableau))
                .Name = "player.php?offset=" & i
                '.RowNumbers = False
               '.FillAdjacentFormulas = False
               '.PreserveFormatting = True
               '.RefreshOnFileOpen = False
               '.BackgroundQuery = True
               .RefreshStyle = xlOverwriteCells
                '.SavePassword = False
               '.SaveData = True
               '.AdjustColumnWidth = True
               '.RefreshPeriod = 0
               .WebSelectionType = xlSpecifiedTables
                .WebFormatting = xlWebFormattingNone
                .WebTables = "2"
                '.WebPreFormattedTextToColumns = True
               '.WebConsecutiveDelimitersAsOne = True
               '.WebSingleBlockTextImport = false
               '.WebDisableDateRecognition = False
               '.WebDisableRedirections = False
               .Refresh BackgroundQuery:=False
            End With
        Else
            numFeuille = numFeuille + 1
            Sheets(numFeuille).Activate
        End If
    Next i
    For numFeuille = 1 To Sheets.Count
        With Sheets(numFeuille)
            For i = .Cells(65536, 1).End(xlUp).Row To 1 Step -1
                If .Cells(i, 1) = "#" Then .Rows(i).Delete
            Next i
        End With
    Next numFeuille
End Sub
 

Fais attention c'est très long vu qu'il y a plus de 1600 pages!

J'ai fait en sorte que si on dépasse le nombre max de lignes d'une feuille on passe à la feuille suivante.
J'ai également mis un bout de code qui supprime les entêtes de colonnes.
Lance la macro à partir d'un classeur vierge, c'est plus sûr.

Ce code doit être optimisable par de plus aguerris que moi :D
vba-new
vba-new
Membre impliqué
 
Messages: 2586
Inscription: 13 Mai 2009, 10:27
Version Excel: 2010 FR

Messagepar sam20lionel » 14 Nov 2009, 18:26

Enfin le chargement est fini. :P

C'est presque parfait, merci. Le petit soucis est que, la 1ere page et la 2e page ne sont pas prises en compte. Le classement commence donc à partir de la troisième page (soit 151).

Auriez vous une solution pour y remédier?

Et, si je veux utiliser cette macro, dans un second temps, en la modifiant, avec d'autres tableaux du même site, quels sont les parties dans le code à modifier? (Juste l'url et "For i"?) Les tableaux sont les mêmes mais les chiffres sont différents.

Merci.
sam20lionel
Utilisateur occasionnel
 
Messages: 10
Inscription: 13 Août 2009, 16:31
Version Excel: 2007 FR

Messagepar vba-new » 14 Nov 2009, 18:38

Ah effectivement!

Pour commencer de la 1ere page, t'as juste à remplacer :
Code: Tout sélectionner
For i = 150 To 83100 Step 50
par
Code: Tout sélectionner
For i = 0 To 83100 Step 50


Pour utiliser le tableau avec d'autres sites ça dépend de l'URL.

S'il y a une partie de l'URL qui est fixe et une partie qui s'incrémente (comme dans le premier cas) alors oui tu dois changer l'URL et le for i.

Enlève également le
Code: Tout sélectionner
.Name = "player.php?offset=" & i
qui n'a pas l'air de servir.

Quant à la partie :
Code: Tout sélectionner
For numFeuille = 1 To Sheets.Count
        With Sheets(numFeuille)
            For i = .Cells(65536, 1).End(xlUp).Row To 1 Step -1
                If .Cells(i, 1) = "#" Then .Rows(i).Delete
            Next i
        End With
    Next numFeuille

elle permet de supprimer les entêtes (efface les lignes contenant "#").
vba-new
vba-new
Membre impliqué
 
Messages: 2586
Inscription: 13 Mai 2009, 10:27
Version Excel: 2010 FR

Messagepar sam20lionel » 14 Nov 2009, 23:14

Tout est parfait !

Merci de votre aide. :)
sam20lionel
Utilisateur occasionnel
 
Messages: 10
Inscription: 13 Août 2009, 16:31
Version Excel: 2007 FR

Re: Importer plusieurs tableaux web

Messagepar sam20lionel » 10 Mai 2010, 21:28

Bonjour,

Cette macro a longtemps marché et pourtant depuis quelques mois il rencontre quelques difficultés. Seuls 2 ou 3 pages du site en question sont prises en compte. Voici le code en fonction d'une autre page, plus rapide à charger, qui auparavant marchait bien.

Code: Tout sélectionner

Sub rapatrie()
Dim i As Long
Dim finTableau As Long
Dim numFeuille As Byte
    Application.ScreenUpdating = False
    numFeuille = 1
    For i = 0 To 1850 Step 50
        finTableau = Range("A65536").End(xlUp).Row
        If finTableau + 50 < 65536 Then
            With ActiveSheet.QueryTables.Add(Connection:= _
                                             "URL;http://www.slayersonline.net/communaute/listeguildegold.php?offset=" & i, _
                                             Destination:=Range("A" & finTableau))
                '.RowNumbers = False
               '.FillAdjacentFormulas = False
               '.PreserveFormatting = True
               '.RefreshOnFileOpen = False
               '.BackgroundQuery = True
               .RefreshStyle = xlOverwriteCells
                '.SavePassword = False
               '.SaveData = True
               '.AdjustColumnWidth = True
               '.RefreshPeriod = 0
               .WebSelectionType = xlSpecifiedTables
                .WebFormatting = xlWebFormattingNone
                .WebTables = "2"
                '.WebPreFormattedTextToColumns = True
               '.WebConsecutiveDelimitersAsOne = True
               '.WebSingleBlockTextImport = false
               '.WebDisableDateRecognition = False
               '.WebDisableRedirections = False
               .Refresh BackgroundQuery:= False
            End With
        Else
            numFeuille = numFeuille + 1
            Sheets(numFeuille).Activate
        End If
    Next i
    For numFeuille = 1 To Sheets.Count
        With Sheets(numFeuille)
            For i = .Cells(65536, 1).End(xlUp).Row To 1 Step -1
                If .Cells(i, 1) = "#" Then .Rows(i).Delete
            Next i
        End With
    Next numFeuille
End Sub
 


D'après excel 2007, le problème viendrait de ce code:

Code: Tout sélectionner
.Refresh BackgroundQuery:= False


Pourtant celui marchait il y a quelques mois!

Auriez vous une solution?

Merci d'avance!
sam20lionel
Utilisateur occasionnel
 
Messages: 10
Inscription: 13 Août 2009, 16:31
Version Excel: 2007 FR

Re: Importer plusieurs tableaux web

Messagepar vba-new » 11 Mai 2010, 22:36

Bonsoir sam20lionel, forum,

Je viens de faire un certain nombre de tests mais j'ai bien peur de ne pas savoir d'où pourrait provenir l'erreur ! Espérons que quelqu'un aura plus de succès ! :?
vba-new
vba-new
Membre impliqué
 
Messages: 2586
Inscription: 13 Mai 2009, 10:27
Version Excel: 2010 FR

Re: Importer plusieurs tableaux web

Messagepar sam20lionel » 13 Mai 2010, 12:31

Bonjour,

Merci d'avoir essayé. C'est quand même bizarre, cela marchait il y a quelques mois, et le site en question n'a subi aucune modification.
sam20lionel
Utilisateur occasionnel
 
Messages: 10
Inscription: 13 Août 2009, 16:31
Version Excel: 2007 FR

Suivante

Retourner vers Excel - VBA

 


  • Sujets similaires
    Réponses
    Vus
    Dernier message

Utilisateurs en ligne

Utilisateurs parcourant ce forum: Bing [Bot], doum_75, prasikall32, rico95 et 37 invités