IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur connexion page web avec VB


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Par défaut Erreur connexion page web avec VB
    Bonjour,

    Je cherche à récupérer des données d'une page Web dans Excel. La premiére chose est bien sur de se connecter au site.

    J'ai récupéré un bout de code permettant de saisir aussi le login et l'identifiant. Le navigateur s'ouvre bien avec la page et la connexion au site se passe bien.

    Par contre j'ai une erreur à la fin

    Erreur d'exécution '91:
    Variable objet ou variable de bloc with non définie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    sub connexion()
     
        Dim ie As InternetExplorer
        Dim IEdoc As Object
        Dim DOCelement As Object
     
        Set ie = New InternetExplorer
        ie.Visible = True
        ie.Navigate ("http://www.xxxxx.org")
     
        ' attente de fin de chargement
        Do Until ie.ReadyState = 4
            DoEvents
        Loop
     
        Set IEdoc = ie.Document
     
        'login
         Set DOCelement = IEdoc.getElementsByName("vb_login_username").Item
         DOCelement.Value = "login"
     
        'password
         Set DOCelement = IEdoc.getElementsByName("vb_login_password").Item
         DOCelement.Value = "password"
     
        'connexion
         Set DOCelement = IEdoc.Forms(0)
         DOCelement.submit
     
     
    End Sub
    Est ce que quelqu'un peut me dire ou est l'erreur ?

    Ensuite il faut que je choisisse une des menus dans la page comment je dois faire ??

    D'avance merci

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Sur qu'elle ligne l'erreur ...? est tu sur de ton code html et des deux id : vb_login...

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Par défaut
    En fait l'erreur n'est pas sur une ligne particulière. quand je lance ma macro ça ouvre bien là page en mettant mon login password et ça se connecte. Mais ensuite si je reclique sur mon doc Excel j'ai le message d'erreur.

    C'est surement qu'a la fin il faut que je redéfinisse qq chose pour revenir à la feuille Workbook("classeur").activate ne doit pas être bon.

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Par défaut
    J'ai trouvé un code qui est sensé faire ce que je cherche j'ai essayé de l'adapter en me rajoutant des commentaires de tous les côtés mais j'ai toujours le même message d'erreur.

    j'ai vérifié dans le code HTML il s'agit d'un formulaire post et les champs sont nommés user et pass ( j'avais fait une erreur au début mais ça change rien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    input type="text" name="user" id="user"
    input type="password" name="pass" id="pass"
    Est ce que c'est un pb de définition de référence ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Option Explicit
     
    Type AuthFormDef
      ' Adresse à atteindre
      URL As String
     
      ' Action du formulaire d'identification
      FormAction As String
     
      ' Nom du champ qui demande le nom d'utilisateur
      UserField As String
     
      ' Nom du champ qui demande le mot de passe
      PasswordField As String
     
      ' Valeur du champ Utilisateur
      UserValue As String
     
      ' Valeur du champ Mot de passe
      PasswordValue As String
    End Type
     
     
    Function ConnexionIE(afd As AuthFormDef)
     
      Dim ie As Object
      Dim doc As MSHTML.HTMLDocument
      Dim frm As MSHTML.HTMLFormElement
      Dim blnFormOK As Boolean
     
      ' Démarrer et afficher Internet Explorer
      On Error GoTo ConnexionIEErr
      Set ie = CreateObject("InternetExplorer.Application")
      ie.Visible = True
     
      ' Naviguer vers la page et attendre qu'elle soit chargée
      ie.navigate afd.URL
      While ie.Busy
        DoEvents
      Wend
     
      ' Identifier le formulaire demandé
      blnFormOK = False
      For Each frm In doc.forms
            If frm.Action = afd.FormAction Then blnFormOK = True
     
     
            ' Trouver et renseigner les champs Identifiant/Mot de passe
            ' du formulaire
            Dim obj As Object
            For Each obj In frm.elements
                If obj.Name = afd.UserField Then obj.Value = afd.UserValue
     
                If obj.Name = afd.PasswordField Then obj.Value = afd.PasswordValue
     
            Next
     
            ' Forcer l'envoi du formulaire
            frm.submit
            ConnexionIE = True
     
      Next
     
      ' Valeur de retour
      ConnexionIE = blnFormOK
      Exit Function
     
    ConnexionIEErr:
      MsgBox "Erreur : " & Err.Number & vbCrLf _
        & Err.Description, vbExclamation
      ConnexionIE = False
      Exit Function
     
    End Function
     
    Sub TestConnexionIE()
     
      Dim afd As AuthFormDef
     
      ' Paramètres de la connexion
      With afd
        .URL = "http://teamhb.org"
        .FormAction = "http://teamhb.org/index.php"
        .UserField = "user"
        .PasswordField = "pass"
        .UserValue = "xxxx"
        .PasswordValue = "xxxx"
      End With
     
      ' Lancer la connexion
      If ConnexionIE(afd) Then
        MsgBox "Connexion établie !", vbInformation
      Else
        MsgBox "Echec de la connexion", vbExclamation
      End If
    End Sub
    Je suis à l'agonie

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Ton 1er code est, à mon sens, plus en adéquation avec "ce qu'il est préférable de faire", je te conseil donc de persévérer avec celui-ci plutôt qu'avec l'autre.

    Essai de libérer les objet une fois devenu inutile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    sub connexion()
     
        Dim ie As InternetExplorer
        Dim IEdoc As Object
        Dim DOCelement As Object
     
        Set ie = New InternetExplorer
        ie.Visible = True
        ie.Navigate ("http://www.xxxxx.org")
     
        '[...]
     
        'connexion
         Set DOCelement = IEdoc.Forms(0)
         DOCelement.submit
     
        'On libère les objets
        Set ie = nothing 'La fermeture de la page internet sera laissée à la charge de l'utilisateur
        Set IEDoc = Nothing
        Set DOCelement = Nothing
    End Sub
    Autre chose a vérifier, le fait que tu es cette erreur au retour sur la feuille Excel, n'aurais tu pas du code sur le Activate du Classeur?

    Lorsque tu reviens sur ton Classeur, Internet Explorer est toujours lancé ou tu as fermé la fenêtre?


    [Edit]
    Ha mais attend, à aucun moment tu ne dis que tu arrives a te logger? Tu dis juste que la connection au site se passe bien. Donc si tu n'arrives pas a te logger essai comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DOCelement = IEdoc.getElementsByName("user").Item(0)
    getElementsByName te renvoie un tableau d'éléments, il faut donc préciser celui sur lequel tu veux travailler.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 154
    Par défaut
    Salut,

    Quand je dis que la connexion au site se passe bien je voulais dire j'arrive à m'identifier.

    Avec tes conseils je suis reparti d'un classeur tout neuf et j'ai libéré les objets. Maintenant plus d'erreur .

    Maintenant que je suis logué je dois aller à une page précise le mieux c'est de garder mon élément ie déjà créé et d'utiliser le code suivant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ie.Navigate ("http://www.page.suivante.php")
    L'identification dure aussi un petit bout de temps entre mon submit et la page acceuil j'ai reproduit la même attente qu'au début c'est propre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Do Until ie.ReadyState = 4
            DoEvents
    Loop
    Ou il vaut mieux que je fasse un wait ?

    Désolé je débute et j'ai besoin de conseille de "propreté de code" pour partir du bon pied

Discussions similaires

  1. Connexion pages ASP avec server SQL 2005
    Par charabia dans le forum ASP
    Réponses: 10
    Dernier message: 10/02/2006, 14h02
  2. Réponses: 2
    Dernier message: 19/12/2005, 13h15
  3. Ouvrir une page Web avec le navigateur
    Par BB85_TIGRIS dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 17/12/2005, 09h45
  4. Son dans une page Web avec Firefox
    Par diod dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 02/12/2005, 17h49
  5. Réponses: 15
    Dernier message: 15/11/2005, 17h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo