begin process at 2008 08 22 03:37:12
1 229 771 membres
42 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONNECTION INTERNET VIA VBA


Information sur la source

Catégorie :VBA Classé sous : internet, connectionie, lien, formulaire Niveau : Débutant Date de création : 30/12/2005 Vu : 13 316

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

Description

Ce code permettra de se connecter à Internet Explorer et d'y naviguer ... récupérer des données ou y envoyer des données.
Attention je n'ai pa insérer toutes les fonctions, et il est nécessaire de connaitre la stucture du HTML afin de pouvoir optimiser votre code.

Attention, ceci est ma première source, alors je vous demanderais d'être critique. Merci à tous ceux qui la lirons.

Source

  • 'Il est nécessaire de référencer IE dans votre programme dans le VBA
  • 'outils - références - référencer les outils ... sinon ca marche pas ....
  • 'Code à insérer dans un module
  • Public Etat As String
  • Public IE As New InternetExplorer '****** Internet Explorer
  • Public LibelleLien As String '****** Libelle du lien IE
  • Sub ConnectionIE()
  • 'définition de IE en tant que nouvel Objet
  • 'rend IE visible
  • IE.Visible = True
  • 'IE navique vers le site demandé
  • IE.Navigate2 "http://www.VotreSite.fr/"
  • 'Fonction Timer ... regardé plus bas ... la fonction est décrite
  • If Timer = False Then GoTo Error_Timer
  • 'défini la variable de la page web.
  • Dim htmlDoc As HTMLDocument
  • Set htmlDoc = IE.document
  • While htmlDoc.Title <> "Nom de la page Web"
  • Wend
  • 'la variable htmlDoc peut prendre les attributs suivants :
  • IETxt = htmlDoc.documentElement.innerText 'récupère le texte de la page HTML
  • IESource = htmlDoc.documentElement.innerHTML 'récupère le code source de la page HTML
  • IETitre = htmlDoc.Title 'récupère le Titre du document HTML
  • IENom = htmlDoc.Name 'récupère le Nom "Microsoft Internet Explorer"
  • '**************** Défini le un controle de la page **************************
  • Dim IECtrl As HTMLFormElement
  • Set IECtrl = htmlDoc.forms(0).'Nom du controle
  • 'Insert une valeur dans un controle dans la page en cours
  • IECtrl.Value = "La Valeur Que je veux y mettre"
  • 'récupère une valeur d'un controle de la page en cours et le met dans une cellule
  • Selection = IECtrl.Value
  • '**************** Défini l'envoi de la page ne cours (simulation de la touche entrer *************************
  • Dim IESubmit As HTMLFormElement
  • Set IESubmit = htmlDoc.forms(0)
  • IESubmit.submit
  • If Timer = False Then GoTo Error_Timer
  • '**************** Ckiquer sur un lien IE************************
  • If CliquerLien("libellé du lien sur IE", "Nom de la page suivante") = False Then Exit Sub
  • '**************** Arret Programme correctement ************************
  • IE_Fin:
  • Application.Visible = True
  • MsgBox "Arrêt du programme", vbInformation, "Fin"
  • '**************** Arret Programme Error Timer ************************
  • Error_Timer:
  • IE.Quit
  • Set IE = Nothing
  • End Sub
  • '**********************************************************************************
  • '**************************** FONCTION TIMER DE IE ************************
  • '**********************************************************************************
  • Function Timer() As Boolean
  • On Error GoTo Error_IE_Timer
  • While IE.readyState <> READYSTATE_COMPLETE
  • Wend
  • While IE.Busy
  • Wend
  • Timer = True
  • Exit Function
  • Error_IE_Timer:
  • Timer = False
  • MsgBox "Arrêt de Internet Explorer dû à une erreur interne de l'application", vbInformation, "Erreur Application Internet Explorer"
  • End Function
  • '**********************************************************************************
  • '**************************** FONCTION Cliquer sur lien IE ************************
  • '**********************************************************************************
  • Public Function CliquerLien(LibelleLien As String, Optional NomPageSuivante As String) As Boolean
  • On Error GoTo ErrLien 'si erreur av ç la gestion de l'erreur
  • Dim ObjLien As HTMLLinkElement (défini les liens de la page en Objet
  • For Each ObjLien In IE.document.Links 'pour chaque lien de la page active
  • If ObjLien.innerText = LibelleLien Then 'si le text du lien = au Libellé visible sur la page alors
  • TextePage = IE.document.documentElement.innerText
  • ObjLien.Click 'clique sur le lien
  • If Timer = False Then GoTo ErrTimer 'gestion du time sur IE
  • If NomPageSuivante <> "" Then 'si le nom de la page a été renseigné dnas la fonction alors
  • While IE.document.Title <> NomPageSuivante 'attends jusqua ce que la page change (2e gestion du passage de la page qui peuit etre tres utile)
  • Wend
  • Else
  • While IE.document.documentElement.innerText <> TextePage
  • Wend
  • End If
  • CliquerLien = True: Exit Function 'tout c'est bien passer alors la fonction CliquerLien prend la TRUE
  • Exit For
  • End If
  • Next ObjLien
  • 'Sinon prend la valur FALSE
  • CliquerLien = False
  • 'Permet de demander à l'utilisateur s'il désire terminé l'action manuellement dans le cas ou cela n'a pas fonctionné
  • Message = "Une erreur est surevenue sur le lien : " & LibelleLien & "."
  • Message = Message & vbCrLf & "Oui : Je souhaite terminer l'action manuellement ?"
  • Message = Message & vbCrLf & "Non : Je souhaite terminer le programme ?"
  • If MsgBox(Message, vbQuestion + vbYesNo, "Erreur sur le lien : < " & LibelleLien & " >") = vbYes Then
  • TextePage = IE.document.documentElement.innerText
  • While TextePage = IE.document.documentElement.innerText
  • Wend
  • If Timer = False Then GoTo ErrTimer
  • CliquerLien = True: Exit Function
  • End If
  • ErrLien:
  • CliquerLien = False: Exit Function
  • ErrTimer:
  • IE.Quit
  • Set IE = Nothing: Exit Function
  • End Function
  • '**********************************************************************************
  • '********************** Fonction RECUPERER TEXTE sur IE par Valeur Texte **********
  • '**********************************************************************************
  • Public Function RécupérerTexte(TexteARechercher As String, TexteARécupérer As String) As String
  • Dim MaPosition As Variant
  • Dim TextePage As String
  • On Error GoTo ErrRécupérerTexte
  • TextePage = IE.document.documentElement.innerText 'récuper le texte entier de la page IE (faite un test avec msgbox TextePage)
  • MaPosition = InStr(1, TextePage, TexteARechercher)
  • RécupérerTexte = Mid(TextePage, MaPosition + Len(TexteARechercher), Len(TexteARécupérer))
  • Exit Function
  • ErrRécupérerTexte:
  • SearchTexte = False
  • End Function
'Il est nécessaire de référencer IE dans votre programme dans le VBA
'outils - références - référencer les outils ... sinon ca marche pas ....


'Code à insérer dans un module

Public Etat As String
Public IE As New InternetExplorer                  '****** Internet Explorer
Public LibelleLien As String                        '****** Libelle du lien IE



Sub ConnectionIE()

'définition de IE en tant que nouvel Objet
'rend IE visible
IE.Visible = True
'IE navique vers le site demandé
IE.Navigate2 "http://www.VotreSite.fr/"

'Fonction Timer ... regardé plus bas ... la fonction est décrite
If Timer = False Then GoTo Error_Timer

'défini la variable de la page web.
Dim htmlDoc As HTMLDocument
Set htmlDoc = IE.document
While htmlDoc.Title <> "Nom de la page Web"
Wend

'la variable htmlDoc peut prendre les attributs suivants :
IETxt = htmlDoc.documentElement.innerText         'récupère le texte de la page HTML
IESource = htmlDoc.documentElement.innerHTML      'récupère le code source de la page HTML
IETitre = htmlDoc.Title                           'récupère le Titre du document HTML
IENom = htmlDoc.Name                              'récupère le Nom "Microsoft Internet Explorer"


'**************** Défini le un controle de la page **************************
Dim IECtrl As HTMLFormElement
Set IECtrl = htmlDoc.forms(0).'Nom du controle
'Insert une valeur dans un controle dans la page en cours
IECtrl.Value = "La Valeur Que je veux y mettre"

'récupère une valeur d'un controle de la page en cours et le met dans une cellule
Selection = IECtrl.Value 

'**************** Défini l'envoi de la page ne cours (simulation de la touche entrer *************************
Dim IESubmit As HTMLFormElement
Set IESubmit = htmlDoc.forms(0)
IESubmit.submit
If Timer = False Then GoTo Error_Timer

'**************** Ckiquer sur un lien IE************************
If CliquerLien("libellé du lien sur IE", "Nom de la page suivante") = False Then Exit Sub


'**************** Arret Programme correctement ************************
IE_Fin:
Application.Visible = True
MsgBox "Arrêt du programme", vbInformation, "Fin"

'**************** Arret Programme Error Timer ************************
Error_Timer:
IE.Quit
Set IE = Nothing
End Sub


'**********************************************************************************
'****************************      FONCTION TIMER DE IE    ************************
'**********************************************************************************
Function Timer() As Boolean
On Error GoTo Error_IE_Timer
While IE.readyState <> READYSTATE_COMPLETE
Wend
While IE.Busy
Wend
Timer = True
Exit Function
Error_IE_Timer:
Timer = False
MsgBox "Arrêt de Internet Explorer dû à une erreur interne de l'application", vbInformation, "Erreur Application Internet Explorer"
End Function

'**********************************************************************************
'**************************** FONCTION Cliquer sur lien IE ************************
'**********************************************************************************
Public Function CliquerLien(LibelleLien As String, Optional NomPageSuivante As String) As Boolean
On Error GoTo ErrLien 'si erreur av ç la gestion de l'erreur
Dim ObjLien As HTMLLinkElement (défini les liens de la page en Objet
For Each ObjLien In IE.document.Links 'pour chaque lien de la page active
    If ObjLien.innerText = LibelleLien Then 'si le text du lien = au Libellé visible sur la page alors
        TextePage = IE.document.documentElement.innerText 
        ObjLien.Click 'clique sur le lien
        If Timer = False Then GoTo ErrTimer 'gestion du time sur IE
        If NomPageSuivante <> "" Then 'si le nom de la page a été renseigné dnas la fonction alors
            While IE.document.Title <> NomPageSuivante 'attends jusqua ce que la page change (2e gestion du passage de la page qui peuit etre tres utile)
            Wend
        Else
            While IE.document.documentElement.innerText <> TextePage
            Wend
        End If
        CliquerLien = True: Exit Function 'tout c'est bien passer alors la fonction CliquerLien prend la TRUE
        Exit For
    End If
Next ObjLien


'Sinon prend la valur FALSE
CliquerLien = False
'Permet de demander à l'utilisateur s'il désire terminé l'action manuellement dans le cas ou cela n'a pas fonctionné
Message = "Une erreur est surevenue sur le lien : " & LibelleLien & "."
Message = Message & vbCrLf & "Oui : Je souhaite terminer l'action manuellement ?"
Message = Message & vbCrLf & "Non : Je souhaite terminer le programme ?"
If MsgBox(Message, vbQuestion + vbYesNo, "Erreur sur le lien : < " & LibelleLien & " >") = vbYes Then
    TextePage = IE.document.documentElement.innerText
    While TextePage = IE.document.documentElement.innerText
    Wend
    If Timer = False Then GoTo ErrTimer
    CliquerLien = True: Exit Function
End If

ErrLien:
CliquerLien = False: Exit Function

ErrTimer:

IE.Quit
Set IE = Nothing: Exit Function
    
End Function


'**********************************************************************************
'********************** Fonction RECUPERER TEXTE sur IE par Valeur Texte **********
'**********************************************************************************
Public Function RécupérerTexte(TexteARechercher As String, TexteARécupérer As String) As String
Dim MaPosition As Variant
Dim TextePage As String

On Error GoTo ErrRécupérerTexte

TextePage = IE.document.documentElement.innerText 'récuper le texte entier de la page IE (faite un test avec msgbox TextePage)
MaPosition = InStr(1, TextePage, TexteARechercher)
RécupérerTexte = Mid(TextePage, MaPosition + Len(TexteARechercher), Len(TexteARécupérer))
Exit Function



ErrRécupérerTexte:
    SearchTexte = False
End Function

Conclusion


Vous pouvez définir toute vos fonctions sur IE, mais il n'y a pas de fonction natives.
Vous devrez surement modifier vos fonctions par rapport à la page HTML.

Les bugs ... il peut y en avoir ...
Le plus important est de connaitre le nom de chaque champs dans votre page.

En espérant que cela pourra vous aider ...

ChaPaTa
  • signaler à un administrateur
    Commentaire de MANEL le 08/01/2006 16:37:07

    J'ai été dans Projets - Références , mais je n'ai pas su quels outils il faut
    réferencer pour que le projet fonctionne .
    Peux-tu m'indiquer les éléments à referenecr ?
    Dans la description , tu dis que tu n'as pas inséré toutes les fonctions .
    Peux-tu également indiquer où trouver la liste de toutes les fonctions pour
    ce type de développement (connexion à Internet Explorer) .
    Sinon , le programme est bien documenté et il peut servir au moins comme
    initiation pour des personnes qui débutent comme moi .
    Merci donc de bien vouloir répondre et de donner des précisions .
    A+
    Manel

  • signaler à un administrateur
    Commentaire de chapata le 09/01/2006 09:18:14

    Salut Manel.

    Alors la liste des outils que j'ai référencé chez moi est la suivante :
    OUTILS - REFERENCES VBA Porject :
      - microsoft HTML object library
      - microsoft internet controls
      - microsoft forms object library

    ce sont les 3 outils référencés afin de faire fonctionner ce prog.

    Pour ce qui est des fonctions, je les ai écrites moi-même ... il n'y a pas de librairie ou de bibilothèque de fonctions (je me sui mal exprimé peut etre  ... lol ... c'est plus facile en code)

    Je voulais dore par là, que j'avais mis en ligne les fonctions les plus utilisées pour moi ... et celles qui fonctionnent le mieux. car j'en ai concue d'autres qui sont paramétrées uniquement dans mon prog ... alors l'adapter à tous les prog seraient plus difficiles ...


    Sinon merci pour ton commentaire ... c'est le premier ...

    A bientot ChaPaTa

  • signaler à un administrateur
    Commentaire de marmotine le 20/03/2006 17:24:11

    Merci pour ce code, j'avais un petit problème avec internet explorer à savoir attendre qu'une page soit totalement ouverte pour pouvoir y travailler et échanger avec elle.
    Ta fonction TIMER m'a donc beaucoup aider merci

  • signaler à un administrateur
    Commentaire de nicofunky le 28/06/2006 13:05:29

    Salut
    J'essaye de développer en vba une application qui à partir d'excel navigue automatiquement sur le web pour aller récupérer des fichiers (téléchargement). Si vous pouviez m'aider, je cherche quelques infos :
    comment peut-on faire pour remplir automatiquement les champs d'une page web? (par exemple identifiant et mot de passe) et pour sélectionner des données dans des listes déroulantes d'une page?
    Merci par avance pour toutes vos explications!

  • signaler à un administrateur
    Commentaire de chapata le 29/06/2006 09:18:18

    Salut,

    il faut que tu sache que chaque élément d'une page IE porte un nom (si le développeur à bien fait son taff) sinon c'est un élément indexé.

    Trouve le nom de ton champs : login et password et avec la premiere fonction que j'ai défini, tu fais :

    Dim IECtrl As HTMLFormElement
    Set IECtrl = htmlDoc.forms(0).'Nom de l'élément

    'Insert une valeur dans un controle dans la page en cours
    IECtrl.Value = "La Valeur Que je veux y mettre"

    Chapata

    Ah oui, pour voir le code HTML : affichage --> source (sur la page IE)

  • signaler à un administrateur
    Commentaire de nicofunky le 29/06/2006 11:05:02

    Bonjour,
    Merci pour tes réponses. Grâce à elles j'ai réussi à avancer et à mieux comprendre le système pour traiter les pages html. Et j'ai maintenant des problèmes bien plus sérieux!
    QUand je fais "submit" pour un forms, ça ne marche pas (je remplis mot de passe et login, puis je fais login.submit, où login est mon HTMLFormsElement : mais aucune réaction...)
    Aussi, quand je clique sur un lien pour telecharger, je n'arrive pas à faire cliquer automatiquement sur le bouton enregistrer de la boite de dialogue...
    Enfin bref... C'est que le début de la galère!
    Merci encore pour tes infos!

  • signaler à un administrateur
    Commentaire de lepineju le 30/08/2006 16:34:43

    bonjour ton code m'a beaucoup servi et je t'en remercie.

    tu parles de code html, pour ma part les éléments sont tous indéxés,

    comment puis je faire pour trouver l'élément que je souhaite implémenter

    merci d'avance

  • signaler à un administrateur
    Commentaire de slevtec007 le 10/10/2006 01:43:00

    Bonjour....

    J'ai un bug avec cette série de commande:
    '**********************************************************************************
    '**************************** FONCTION TIMER DE IE ************************
    '**********************************************************************************
    Function Timer() As Boolean
    On Error GoTo Error_IE_Timer
    While IE.readyState <> READYSTATE_COMPLETE
    Wend
    While IE.Busy
    Wend
    Timer = True
    Exit Function
    Error_IE_Timer:
    Timer = False
    MsgBox "Arrêt de Internet Explorer dû à une erreur interne de l'application", vbInformation, "Erreur Application Internet Explorer"
    End Function
      

    Je vais voir des IP et l'URL www.enova.ca ne se ferme jamais...Je veux dire que si vous regardez dans IE en haut à droite, le drapeau va toujours bouger.....Donc la page est toujours considéré BUSY....

    Comment pourrais-je dire au programme que même si il est toujours BUSY je veux continuer sans erreur, car la page est ouverte sans problème mais elle reste BUSY....Il y a d'autre pages comme celle-la alors y aurait-t'il un moyen....

    Merci infiniement...

    SLEVTEC

  • signaler à un administrateur
    Commentaire de chapata le 10/10/2006 09:16:32

    Hello,
    je n'est pas vraiment de soltion si ce n'est de faire en argument de fonction
    Timer(Optional NamePage as string)as Boolean

    et de référencer tes pages qui bug ...
    et de faire sauter le Busy du style ...
    If isNull(NamePage)=false then
       While IE.Busy
       Wend
    end if

    Cela fait bcp de tps que je ne pratique plus ce code ...

    En espérant que cela t'aide.

    ChaPaT'

  • signaler à un administrateur
    Commentaire de Alexg31 le 01/02/2007 11:22:12

    Bonjour,
    Merci pour ce programme, formateur et utile.
    Dans mon VBA, je n'arrive pas à référencer Microsoft Form Object library je ne trouve pas cet objet dans la liste !...
    alors que j'ai bien trouvé:
    - microsoft HTML object library
    - microsoft internet controls
    Je suis en VBA 6.3, peut être que cet objet peut être remplacé par une autre ???
    Merci de ton aide

  • signaler à un administrateur
    Commentaire de pit-bull le 10/04/2007 16:40:40

    Bonjour,
    Merci pour ce code clair et précis.
    J'ai cependant un problème avec la ligne :
    "TextePage = IE.Document.documentElement.innerText"
    En effet, dès que j'arrive à cette ligne, cela fait planter Internet Explorer.
    Est-ce que cela est dû au fait que la page est très grosse ?
    Avez-vous une solution ? car j'ai vraiment besoin de récupérer dans tous les cas les données de la page Web (grosse ou pas).
    Merci.

  • signaler à un administrateur
    Commentaire de EMSIEN le 28/09/2007 17:50:58

    Je voulais savoir comment on pourrait accéder à une page contenant une zone d'authentification , voici le code que j'ai mis après quelques recherches mais la page me demande à chaque fois de m'authentifier:

        Dim ie As New InternetExplorer
        Dim htmlDoc As HTMLDocument
        
        ie.Navigate "http://www.site.com/pageAuthen, , , , "Authorization: Basic  XXXXX" & Chr$(13) & Chr$(10)
      
        'Attendre que IE finit de charger la page
        While ie.Busy
        Wend
        
        Set htmlDoc = ie.Document
        ieSource = htmlDoc.documentElement.innerHTML
        ie.Visible = True
    ....

    Le XXX est mon couple login et pass sous ce format:   Username:Password  mais ça ne marche pas.

    Si quelqu'un a une solution je suis preneur.

    Bon WE.

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS