begin process at 2013 06 20 04:21:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Correction bug dans mon code


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Correction bug dans mon code

mardi 24 juillet 2012 à 19:44:46 | Correction bug dans mon code

stepaustral

Bonjour à toutes et à tous,
Voilà j'ai un fichier excel dont j'ai une erreur 1004 qui se produit quand une certaine page n'a pas été trouvée et donc arrête l'importation des pages demandées. Je voudrais corriger ça en rajoutant un bout de code pour qu'il retente le téléchargement de cette page sans tout planter.
J'explique le fonctionnement de mon fichier j'ai dans un premier temps une feuille Accueil ou j'ai une cellule en D11 pour entrer une date (sauf date d'aujourd'hui)car il importe des résultats PMU donc toujours entrer une date autre que celle du jour sinon cela ne fonctionne pas. Ensuite j'ai deux boutons sur cette même feuille le premier pour importer tous les résultats de chaque réunion du jour demandé et le 2ème pour importer les courses choisi en colonne H de la feuille "Import" qui se créer automatiquement.
Voici le nom du premier module nommé "Import"


Code Visual Basic :
Option Explicit
Public LaDate As String
Public Ws As Worksheet
'Public Pas As Double
Public NbTablo As Integer


Sub ImportPagePrincipale()
Dim I As Integer

  If IsDate(Range("D11")) Then
    Application.ScreenUpdating = False
    LaDate = Format(Range("D11"), "dd/mm/yyyy")
    
    Application.DisplayAlerts = False
    For I = Sheets.Count To 2 Step -1
      Sheets(I).Delete
    Next I
    Application.DisplayAlerts = True
    
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = "Import"
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = "ImportReunions"
    
    Set Ws = Sheets("Import")
    
    ImportPage Ws.Name, "http://www.paris-turf.com/pid1-paris-turf-la-base-numero-1-du-turf.-tierce-quarte-quinte-pmu-pmh.html?date=" & LaDate
    Nettoyage
    Ws.Select
    
  End If
End Sub

Sub ImportTableaux()
Dim I As Integer

  Application.ScreenUpdating = False
  LaDate = Format(Range("D11"), "dd/mm/yyyy")
  UserForm1.Show 0
  Set Ws = Sheets("Import")

  NbTablo = Application.CountIf(Ws.Columns("H"), "x")
  If NbTablo > 0 Then
    LesReunions
    For I = 4 To Sheets.Count
      With Sheets(I).Cells
        .WrapText = False
        .EntireColumn.AutoFit
      End With
    Next I
    UserForm1.Height = 165
  End If
  Application.DisplayAlerts = False
  Sheets("Import").Delete
  Sheets("ImportReunions").Delete
  Application.DisplayAlerts = True
    
End Sub

Sub ImportPage(Feuille As String, Lien As String)
  
  UserForm1.Caption = Lien
  UserForm1.Repaint

  Shell "RunDll32.exe InetCpl.Cpl, ClearMyTracksByProcess 8"
  Sheets(Feuille).Cells.Clear
  
  With Sheets(Feuille).QueryTables.Add(Connection:= _
              "URL;" & Lien, Destination:=Sheets(Feuille).Range("A1"))
    .Name = "2012"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlEntirePage
    .WebFormatting = xlWebFormattingAll
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=False
  End With
End Sub



dans ce premier module le 1er bouton est affecté a la macro "ImportPagePrincipale" et le 2ème boutons affecté a la macro "ImportTableaux"

Ensuite j'ai un 2ème module nommé "Nettoie"

Code Visual Basic :
Option Explicit

Sub Nettoyage()
Dim Cel As Range
Dim Depart As String
Dim LgDep As Long
Dim LgFin As Long
Dim Lgder As Long
Dim Ligne As Long

  Application.ScreenUpdating = False
  
  With Ws
    ' On supprime les lignes jusqu'à la 1ère occurence de la date
    Ligne = 1
    Do While InStr(1, .Range("A" & Ligne), LaDate) = 0
      .Rows(Ligne).Delete
    Loop
    
    Lgder = .Range("A" & Rows.Count).End(xlUp).Row
    
    ' On cherche la ligne qui est juste après le dernier tableau
    ' Et on efface de cette ligne jusqu'à la fin de la page
    Set Cel = .Columns("A").Find(what:="La base numéro 1 du Turf", LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      .Rows(Cel.Row & ":" & Lgder).ClearContents
    Else
      MsgBox "Impossible de trouver le marqueur : La base numéro 1 du Turf"
      End
    End If
    
    ' Entre chaque titre des réunions et le tableau on efface les lignes
    Set Cel = .Columns("A").Find(what:=LaDate, LookIn:=xlValues, lookat:=xlPart)
    If Not Cel Is Nothing Then
      Depart = Cel.Address
      Do
        .Rows(Cel.Row + 1 & ":" & Cel.Row + 9).ClearContents
        Set Cel = .Columns("A").FindNext(Cel)
      Loop While Not Cel Is Nothing And Depart <> Cel.Address
    End If
    
    ' On efface toutes les lignes avec "fermer"
    Set Cel = .Columns("A").Find(what:="fermer", LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      Depart = Cel.Address
      Do
        .Rows(Cel.Row).ClearContents
        Set Cel = .Columns("A").FindNext(Cel)
      Loop While Not Cel Is Nothing
    End If
    
    ' On supprime toutes les lignes vierges
    On Error Resume Next
    .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    On Error GoTo 0
    
    Lgder = .Range("A" & Rows.Count).End(xlUp).Row
  End With

End Sub



Et un 3ème module nommé "Reunions"

Code Visual Basic :
Option Explicit

Sub LesReunions()
Dim Feuille As String
Dim J As Long
Dim Lgder As Long
Dim WsImp As Worksheet
Dim Cel As Range
Dim Progression As Double
Dim Pas As Double

  Set WsImp = Sheets("ImportReunions")
  
  Lgder = Ws.Range("A" & Rows.Count).End(xlUp).Row
  Pas = (UserForm1.Label5.Width - 4) / NbTablo
  
  For J = 1 To Lgder
    'If J = 10 Then Exit Sub
    If InStr(1, Ws.Range("A" & J), LaDate) > 0 Then
      Feuille = Left(Ws.Range("A" & J), InStr(1, Ws.Range("A" & J), " -") - 1)
    Else
      If Ws.Range("B" & J).Hyperlinks.Count = 1 And Ws.Range("H" & J) = "X" Then
        Progression = Progression + Round((100 / NbTablo), 2)
        UserForm1.Label2.Caption = Val(UserForm1.Label2.Caption) + 1
        UserForm1.Label3.Caption = Progression & "%"
        UserForm1.Label4.Width = Val(UserForm1.Label2.Caption) * Pas
        UserForm1.Caption = Ws.Range("B" & J).Hyperlinks(1).Address
        UserForm1.Repaint
        
        ImportPage "ImportReunions", Ws.Range("B" & J).Hyperlinks(1).Address
        'Stop
        With WsImp
          Set Cel = .Columns("A").Find(what:="Origines", LookIn:=xlValues, lookat:=xlWhole)
          If Not Cel Is Nothing Then
            .Rows(Cel.Row & ":" & Rows.Count).Delete
          Else
            MsgBox "Impossible de trouver le marqueur : Origines"
            End
          End If
          
          Set Cel = .Columns("A").Find(what:="1er", LookIn:=xlValues, lookat:=xlWhole)
          If Not Cel Is Nothing Then
            .Rows("1:" & Cel.Row - 2).Delete
          Else
            MsgBox "Impossible de trouver le marqueur : 1er"
            End
          End If
          
          On Error Resume Next
          .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
          On Error GoTo 0
          
          Lgder = .Range("A" & Rows.Count).End(xlUp).Row
          
          If FeuilleExiste(Feuille) = False Then
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = Feuille
          End If
          
          With .Range("A1:N" & Lgder)
            .Borders.Weight = xlThin
            .Copy Destination:=Sheets(Feuille).Range("A" & Rows.Count).End(xlUp).Offset(2, 0)
          End With
        End With
      End If
    End If
    
  Next J
  
End Sub


Function FeuilleExiste(Nom As String) As Boolean
  On Error Resume Next
  FeuilleExiste = Sheets(Nom).Name <> ""
  On Error GoTo 0
End Function



J'ai aussi ajouter un user form avec 5 label qui sert en faite de progresse barre et affiche le % de téléchargement + le nombre de courses importées. Il n'y a pas de code dedans juste la commande unload pour le bouton et fermer cette fenêtre.

Voilà j'aimerais vôtre aide surtout pour améliorer le code au niveau d'un echec de téléchargement d'une page.


Je précise aussi que l'erreur se produit en erreur 1004 avec le message impossible d'importer la page demandée en insistant cela fonctionne mais bon pas tout le temps et l'erreur arrive dans le module "Import" à la ligne

J'oubliais aussi au premier clik du 1er bouton deux feuilles se créer "Import" et "ImportReunions" dans la feuille "Import" il faut double cliquer dans la colonne H pour sélectionner les courses que l'on souhaite.
mercredi 25 juillet 2012 à 21:33:34 | Re : Correction bug dans mon code

MPi

Pourrais-tu expliquer où survient cette erreur ?

Si la feuille n'a pas eu le temps d'être créée, mais le sera éventuellement sous peu, tu pourrais toujours mettre une boucle ou un "Timer" pour attendre sa création. Je ne comprends pas vraiment le fonctionnement de ton programme...

Autrement, tu peux aussi passer outre en gérant l'erreur.


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
mercredi 25 juillet 2012 à 22:19:38 | Re : Correction bug dans mon code

stepaustral

Bonsoir,
L'erreur se produit quand le téléchargement des pages a commencés il peut importer 10 courses sans planter et parfois dès la première en faite comme si il ne trouvais pas la page comme un mauvais chargement de page internet.
mercredi 25 juillet 2012 à 23:06:37 | Re : Correction bug dans mon code

MPi

J'utilise un peu la même méthode pour importer des tables d'un site Internet, et ça fonctionne bien tant que les pages ne changent pas. Quelquefois, ils modifient l'ordre des tables et ça ne fonctionne plus jusqu'à ce que je change mon code...

Par contre, je n'utilise pas ceci
Shell "RunDll32.exe InetCpl.Cpl, ClearMyTracksByProcess 8"
À quoi sert ce bout de code ?

Et où exactement, tu reçois cette erreur ? Sur quelle ligne ?


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
mercredi 25 juillet 2012 à 23:24:46 | Re : Correction bug dans mon code

stepaustral

Le bout de code sert a vider le cache de IE pour le dossier temps ça évite qu'il soit trop remplis .
Et l'erreur je la reçois sur le module Import ici
Code Visual Basic :
.Refresh BackgroundQuery:=False
mercredi 25 juillet 2012 à 23:55:50 | Re : Correction bug dans mon code

stepaustral

Dans le module import j'ai aussi fais une modif au lieu de mettre la date sous cette forme dd/mm/yyyy au deux endroit je l'ai mis ainsi yyyy/mm/dd.
jeudi 26 juillet 2012 à 03:04:37 | Re : Correction bug dans mon code

MPi

Je pense qu'avant d'appeler Nettoyage tu devrais donner le focus à la feuille Import
Sheets("Import").Activate

Puis dans Nettoyage, il faut que tu mettes une sortie à ta boucle While
Do While InStr(1, .Range("A" & Ligne), LaDate) = 0
.Rows(Ligne).Delete
Loop
Avec ça, tu vas tourner en rond... Rien ne dit à la boucle d'arrêter...

C'est du moins ce que j'ai pu voir...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
jeudi 26 juillet 2012 à 04:21:19 | Re : Correction bug dans mon code

stepaustral

Merci MPI par contre si tu peux me dire ou je dois mettre tous ça !!! On m'a bcp aidé pour faire ce code celui qui me l'a fais m'a dis qu'on pouvais surement l'améliorer le seul truc qui est long c'est le chargement des pages j'aimerais bien le booster un peu mais bon dans un rêve MDRRR. Par contre ça ne change pas pour l'échec d'un chargement de page ou alors c'est IE qui est surement pas le mieux d&#8217;ailleurs je sais pas s'il peut utiliser un autre navigateur pour faire ces importation vu que c'est microsoft!!!
jeudi 26 juillet 2012 à 11:47:22 | Re : Correction bug dans mon code

MPi


Si j'essaie de me connecter directement sur le site en question, à partir d'Excel, en utilisant la date du 24 disons, ça me donne des erreurs de scripts...
URL: http://www.paris-turf.com/pid1-paris-turf-la-base-numero-1-du-turf.-tierce-quarte-quinte-pmu-pmh.html?date=24/07/2012

Alors, c'est possible que le site ne soit pas écrit dans un langage 100% compatible avec l'engin d'Excel...(?)

Quelle est la partie que tu veux retracer sur cette page ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
jeudi 26 juillet 2012 à 13:36:11 | Re : Correction bug dans mon code

stepaustral

Bonjour,

L'adresse du site serais plus sur ce format là
http://www.paris-turf.com/pid1-paris-turf-la-base-numero-1-du-turf.-tierce-quarte-quinte-pmu-pmh.html?date=2012-07-24

C'est pour ça que j'ai changé le format de la date en yyyy/mm/dd dans le code car sur certaine page ça me provoquais un mauvais chargement pas complet.

Et ensuite je garde en faite que les tableaux avec leur prix et arrivées et le nom de la ville qui sert a créer le nom des feuilles. Certaine réunion sont en double donc le prend R1 R2 et R3 parfois R4 si c'est une nocturne et ensuite je passe a toute les courses PMH en bas.

1 2 3 4

Cette discussion est classée dans : end, range, cel, sheets, if


Répondre à ce message

Sujets en rapport avec ce message

[Déplacé .Net --> VBA] simplification d'une macro [ par chris09300 ] Bonsoir J'ai une macro, dont une partie me parais fastidieuse, je mets une partie du code en dessus. Je souhaterais simplifier cette derniere. si la [Déplacé VB6 --> VBA] Blocage execution code [ par inkballs ] Bonjour, Le code suivant, me permet de tester les feuilles afin de savoir si toutes les cellules sont bien remplies.Mais à partir de la feuille3,impos Erreur lors du lancement d'une UserForm importé [ par lilmonie ] Bonjour, j'ai exporté une UserForm1 vers un autre classeur. Cette UserForm1 donne accès à un autre UserForm2. Cependant, lors ke j'effectue mon doubl Problème de modifications. [ par FenderJassBass ] Hello, J'espère être dans le bon salon, si ce n'est pas le cas, je m'en excuse. Voici mon souci : J'ai un fichier avec un USF et je souhaite via un Discretion [ par DjVen ] voici mon code : Dim gaga As Integer If Range("F9").Value = "" Or Range("F12").Value = "" Then MsgBox "Remplir les champs", vbExclamat ERREUR SUR LIGNE DE CODE [ par inkballs ] Bonsoir, J'ai un code qui me sert sous excel 2000,et qui produit une erreur du fait que j'ai voulu ajouter un test sur la feuille2. Le fait d'imbriqu Problème compilation macro sous excel 2007 [ par Jay29 ] Bonjour a tous, Je vous explique j'ai crée une macro sous excel 2007 cependant lorsque je l'exécute j'ai une erreur sur la dernière ligne de mon code. TRANSFERT DE VALEURS D'UN CLASSEUR A UN AUTRE SITUE DANS REPERTOIRE DIFFERENT LE TOUT PLACE SUR UN SERVEUR [ par JEANLOUIS77330 ] Bonjour à tous, Utilisateur d'excel je me heurte à un problème qu'à priori je ne pourrai solutionner qu'avec de l'aide extérieur. Je cherche à résou Macro excel éxécution automatique d'une macro si changement de valeur [ par 6xela ] Bonjour, Je souhaite supprimer toute les lignes d'une feuille Excel donc la cellule de la colonne D est égale à 0. J'ai donc fait ce code : Private


Nos sponsors


Sondage...

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,059 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales