Problème import tableau depuis web
Bonsoir, j'ai beaucoup avancer grâce au magnifique tuto d'internet et je parviens presque à faire ce que je souhaite avec le vba. Seul un problème subsiste c'est que lorsque j'importe un tableau de données dans excel et bien au bout d'un moment tout fout le camp. Je m'explique :
La macro ouvre une page web / se connecte ouvre une autre page de résultat de donnée / j'importe ces données. Des fois c'est nickel dès fois les résultats se décale. je relance la macro ça se décale encore plus.
On dirait qu'il y a un problème dans mes variables. Au bout d'un moment elles deviennent folles.
Pour la m^me Macro lancées 2 fois d esuite je n'ai pas le m^me résultat qui apparait. OUF
Pouvez vous me secourir, je dors sur ce trucs depuis des jours. Merci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| 'Option Explicit
Sub Educaplay()
Dim MyHTML_Element As IHTMLElement
Dim MyHTML_Element2 As IHTMLElement
Dim MyURL As String
'Dim ele As Object
Dim htmlselectelElement As HTMLGenericElement
'Dim Nb As Integer
Dim MyBrowser As InternetExplorer
Dim HTMLDoc As HTMLDocument
Dim ie As SHDocVw.InternetExplorer
Dim Nombre_colone As Integer
Dim Nombre_Ligne As Integer
Dim Nombre_R As Integer 'Nb de résultats
Dim k As Integer 'chiffre pour remplir le tableau
Dim Valeur As Date
Dim i As Integer
Dim j As Integer
On Error GoTo Err_Clear
MyURL = "https://fr.educaplay.com/login/"
Set MyBrowser = New InternetExplorer
MyBrowser.Silent = True
MyBrowser.Navigate MyURL
MyBrowser.Visible = True
Do
Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE
Set HTMLDoc = MyBrowser.Document
HTMLDoc.all.user.Value = "*************" 'Enter your email id here
HTMLDoc.all.pass.Value = "********" 'Enter your password here
For Each MyHTML_Element In HTMLDoc.getElementsByTagName("button")
If MyHTML_ID.Type = "loginNormal" Then MyHTML_Element.Click: Exit For
Next
Err_Clear:
If Err <> 0 Then
Err.Clear
Resume Next
End If
'start a new browser instance
Set objIE = New InternetExplorer
'make browser visible
objIE.Visible = True
objIE.Navigate "https://fr.educaplay.com/fr/miEducaplay.php?action=resultadosGrupo"
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
'Sélection de la ligne correspondant à 1TCB 2017-2018
Set IEDoc = objIE.Document
'oDoc.getElementsByName("idGrupoBusqueda")(0).Value = "149524" '1TCB 2017-2018
IEDoc.parentWindow.execScript "POST", "javascript"
IEDoc.getElementsByName("idGrupoBusqueda")(0).Value = "292868" 'TCB 2018 -2021 ==============CHANGEMENT CODE GROUPE EDUCAPLAY
IEDoc.forms(1).submit
Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
'Worksheets(Feuil1).Range("A:ZZ").ClearContents
'Valeur = 0
' Valeur = Timer 'temporisation pour le rafraichissement de la page
' Do While Timer < Valeur + 7
' DoEvents
' Loop
'
Set HTML = objIE.Document '========!!!!!!!!!!!LIGNE OBLIGATOIRE POUR LIRE TABLEAU!!!!!!!!!!=============
'======================Boucle pour mise à jour page======================
' j = 2
' i = 2
' k = 0
'recherche le nombre de ligne elève
Nombre_Ligne = HTML.getElementsByTagName("thead")(1).Children.Length
'boucle pour ecrire nom des élèves dans ligne colonne 1 tableau
For j = 2 To (Nombre_Ligne + 2)
'emplacement ecriture nom eleve
Worksheets("FEuil1").Cells(j, 1) = HTML.getElementsByTagName("thead")(1).Children(j - 2).innerText
'MsgBox Nombre_Ligne
Next j
'recherche le nombre de colonne machine
Nombre_colone = HTML.getElementsByTagName("tr")(0).Children.Length
'MsgBox Nombre_colone
'boucle pour ecrire nom des machines dans colonne tableau
For i = 2 To (Nombre_colone + 2)
'emplacement ecriture nom machine
'Worksheets("FEuil1").Cells(1, i) = HTML.getElementsByTagName("th")(i - 2).innerText
Worksheets("FEuil1").Cells(1, i) = HTML.getElementsByTagName("tr")(0).Children(i - 2).innerText
Next i
For j = 2 To Nombre_Ligne + 1
For i = 2 To (Nombre_colone + 1)
'Nombre_R = HTML.getElementsByTagName("td").Length
'To Nombre_R
'remplissage avec résultat
Worksheets("FEuil1").Cells(j, i) = HTML.getElementsByTagName("td")(k).innerText
k = k + 1
Next i
Next j
'Set MyObject = Nothing
objIE.Close
'Set objIE = Nothing
'Set objIE.Document = Nothing
End Sub |
PS :je suis débutant
Suggestion réalisé et fonctionne en partie
Merci Zenpbb pour ton aide j'ai fait ce que tu m'as dit et cela a supprimé les erreurs de départ.
Mais j'ai toujours un problème sur ma boucle de récupération des notes qui s'arrête en cours d’exécution avec une erreur 424 objet requis. Je n'obtiens simplement les 5 premières lignes de résultat. Ça bloque à
Code:
Worksheets("FEuil1").Cells(m, l) = HTML.getElementsByTagName("table")(0).Children(2).Children(m - 2).Children(l - 2).innerText
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| '======================Boucle pour mise à jour page======================
Dim Nombre_colone As Integer
Dim Nombre_Ligne As Integer
Dim Nombre_R As Integer 'Nb de résultats
Dim k As Integer 'chiffre pour remplir le tableau
Dim Valeur As Date
Dim I As Integer
Dim j As Integer
Dim l As Integer
Dim m As Integer
Worksheets("Feuil1").Cells.Select
Selection.Delete Shift:=xlUp
'======================IMPORT NOTE EDUCAPLAY CLASSE 1======================
'recherche le nombre de ligne elève
Nombre_Ligne = HTML.getElementsByTagName("thead")(1).Children.Length
'boucle pour ecrire nom des élèves dans ligne colonne 1 tableau
For j = 2 To (Nombre_Ligne + 1)
'NN = HTML.getElementsByTagName("thead")(1).Children(9).innerText
'emplacement ecriture nom eleve
'NN = Worksheets("FEuil1").Cells(j, 1)
Worksheets("FEuil1").Cells(j, 1) = HTML.getElementsByTagName("thead")(1).Children(j - 2).innerText
'MsgBox NN
Next j
'recherche le nombre de colonne machine
Nombre_colone = HTML.getElementsByTagName("tr")(0).Children.Length
'MsgBox Nombre_colone
'boucle pour ecrire nom des machines dans colonne tableau
For I = 2 To (Nombre_colone + 1)
'emplacement ecriture nom machine
'Worksheets("FEuil1").Cells(1, i) = HTML.getElementsByTagName("th")(i - 2).innerText
Worksheets("FEuil1").Cells(1, I) = HTML.getElementsByTagName("tr")(0).Children(I - 2).innerText
'note eleve
'Worksheets("FEuil1").Cells(j, I) = HTML.getElementsByTagName("table")(0).Children(2).Children(j - 2).Children(I - 2).innerText
'Worksheets("FEuil1").Cells(j, I) = NN
Next I
Application.Wait (Now + TimeValue("0:00:01"))
Nombre_Ligne1 = HTML.getElementsByTagName("table")(0).Children(2).Children().Length
Nombre_colone1 = HTML.getElementsByTagName("table")(0).Children(2).Children(0).Children().Length
For m = 2 To Nombre_Ligne1 + 1
For l = 2 To Nombre_colone1 + 1
'remplissage avec résultat
Worksheets("FEuil1").Cells(m, l) = HTML.getElementsByTagName("table")(0).Children(2).Children(m - 2).Children(l - 2).innerText
'k = k + 1
Next l
Next m |
Efectué la décomposition mais....
Bonjour,
merci pour ton aide j'ai décomposé mon code avec ton code, mais j'ai une erreur d’exécution de 13 incompatibilité de type????
En faite mon code fonctionne super bien sur mon PC fixe et lorsque je l'essai sur mon pc portable il va me chercher d'autre valeur caché sur la page et plante la macro. je ne comprends pas la différence de fiabilité.
Le code prend la bonne table pour le comptage mais pas la même pour le inner text (sur mon portable)
Problème soit de navigateur net, soit de page web foireuse, soit de code approximatif qui ne précise pas assé correctement la table à extraire. Je ne sais plus quoi faire pour fiabiliser la chose.
Je suis à 2 doigts de toucher le Graal.
Merci encore