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 :

VBA - Problème clic bouton sur page HTML


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2016
    Messages : 3
    Par défaut VBA - Problème clic bouton sur page HTML
    Bonjour à tous,

    Avec cette macro, Je voudrais (Si cela est possible bien-sûr !):

    1) Que le code me connecte à mon compte Yahoo!mail.
    2) Que le code accède à mes mails (Clic bouton "Mail").
    3) Que le code ouvre un nouveau mail (Clic bouton "Ecrire").
    4) Que le code ajoute du texte pré-défini dans le corps du nouveau mail.
    5) Que le code ajoute 1 pièce jointe au nouveau mail.

    Le code ci-dessous s'arrête sur la ligne rouge.
    Le mot de passe (Password) ne s'affiche pas dans l'élément textbox de la page web 2...

    Petite explication du login chez Yahoo!:

    Page web 1:
    a) On rentre sont UserName.
    b) On clique sur le bouton "Suivant".

    Page web 2:
    a) On rentre son Password.
    b) On clique sur le bouton "Se connecter".

    On dirais qu'au changement de page, "IEObjectElement" ne fonctionne plus...

    Du coup, n'y aurait-il pas un souci avec "Set IEDoc = IE.Document" qui ne se réactualiserai pas en basculant sur la deuxième page web ???

    Une piste peut-être ???

    Un petit coup de main s'il vous plait, je suis perdu !!!

    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
    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
    eclare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
    
    Global Const SW_MAXIMIZE = 3
    Global Const SW_SHOWMINIMIZED = 2
    Global Const SW_SHOWNORMAL = 1
    
    Sub LoginYahooMail()
        '
       ' LoginYahooMail Macro
       '
       '
        Dim IE As New InternetExplorer
        Dim IEDoc As HTMLDocument
        Dim IEObjectElement As HTMLObjectElement
        
        Dim URL As String
        Dim UNElementID As String
        Dim PWElementID As String
        Dim SIElementID As String
        Dim BoutonMailElementID As String
        Dim BoutonEcrireElementID As String
        Dim UserName As String
        Dim Password As String
            
        Dim mMessage As Object
        Dim mConfig As Object
        Dim mChps
    
                         
        URL = "https://login.yahoo.com"
        
        UNElementID = "login-username"
        
        PWElementID = "login-passwd"
        
        SIElementID = "login-signin"
    
        BoutonMailElementID= "mega-bottombar-mail"
        
        BoutonEcrireElementID = "paneshell"
        
        UserName = "nom d'utilisateur @yahoo.fr"
        
        Password = "mot de passe"
        
        
        Set IE = CreateObject("InternetExplorer.Application")
        IE.Visible = True
        apiShowWindow IE.hWnd, SW_MAXIMIZE
        
        'Navigue jusqu'à l'URL.
       IE.Navigate URL
        
        'Attend que la page web soit totalement chargée.
       Do Until IE.readyState = 4 'READYSTATE_COMPLETE in early binding
           DoEvents
        Loop
        
        'Créer le document de l'URL.
       Set IEDoc = IE.Document
        
        'Recherche le UserName TextBox en utilisan l'élement ID.
       Set IEObjectElement = IEDoc.getElementByid(UNElementID)
            IEObjectElement.Value = UserName
            Set IEObjectElement = Nothing
        
        'Clique sur le Bouton "Suivant" en utilisan l'élement ID.
       Set IEObjectElement = IEDoc.getElementByid(SIElementID)
            IEObjectElement.Click
      
        'Attend que la page web soit totalement chargée.
        Do Until IE.readyState = 4 'READYSTATE_COMPLETE in early binding
            DoEvents
        Loop
    
        Application.Wait (Now + TimeValue("0:00:03")) 'Retarde de 03 secondes l'exécution de la suite du code...
       
        'Créer le document de l'URL.
       Set IEDoc = IE.Document
         
        'Recherche le Password TextBox en utilisan l'élement ID.
       Set IEObjectElement = IEDoc.getElementByid(PWElementID)
            IEObjectElement.Value = Password
            Set IEObjectElement = Nothing
        
        'Clique sur le Bouton "Se connecter" en utilisan l'élement ID.
       Set IEObjectElement = IEDoc.getElementByid(SIElementID)
            IEObjectElement.Click
        
        'Clique sur le bouton "Mail" en utilisan l'élement ID.
       Set IEObjectElement = IEDoc.getElementByid(BoutonMailElementID)
            IEObjectElement.Click
        
        'Clique sur le bouton "Ecrire" en utilisan l'élement ID.
       Set IEObjectElement = IEDoc.getElementByid(BoutonEcrireElementID)
            IEObjectElement.Click
        
        Set mMessage = CreateObject("CDO.Message")
        With mMessage
            Set .Configuration = mConfig
                .From = "xxxxx.xxxxx@yahoo.fr"
                .To = Range("R33").Value
                .Cc = ""
                .Subject = ""
                .TextBody = "Bonjour " & Range("I8").Value & "," & vbCrLf _
                            & vbLf _
                            & vbLf _
                            & vbLf _
                            & "Cordialement." & vbCrLf _
                            & vbLf _
                            & vbLf _
                            & "Mr xxxxx xxxxx" _
                            & vbLf _
                            & vbLf _
                            & vbLf
                            .AddAttachment "C:\Users\xxxxx xxxxx\Documents\Conditions Commerciales.pdf"
        End With
    
        'Vide les variables object.
        Set IEObjectElement = Nothing
        Set IEDoc = Nothing
        Set IE = Nothing
    
        Set mMessage = Nothing
        Set mConfig = Nothing
        Set mChps = Nothing
    
    End Sub

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Par défaut
    J'ai utilisé votre code exact.

    dans mes references j'ai activé "html object library", j ai aussi internet controls mais je pense qu'il ne sert pas.

    par f5, ça plante au moment de rensegner le code secret, ieobjectelement vaut nothing.


    par f8, ça marche.

    j'ai plutôt expérimenté jusqu'à présent le contraire f5 fonctionne et f8 non : f8, on revient dans l'application du programme et du coup les objets actifs changent par rapport au f5.
    Dans le sens, F8 fonctionne et pas F5, je n'ai pas d'idée à priori de ce qui ne va pas. Probablement une histoire de selection d'objet. En effet, j'ai l'impression que IE reste sur la première page et ne trouve du coup pas la zone de saisie du mot de passe. J'ai essayé de mettre à jour ie par un getobjet, ça n'a rien changé.

    dans les prorpiétés de iedoc (ie.document) il y a un elementactive, qui semble rester sur sur le login. Je n'ai pas vraiment cherché dans les proriétés item si on trouve le mot de passe.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    quand cela ne fonctionne pas en exécution normale mais bien en mode pas à pas (debug via F8)
    alors c'est un souci de synchronisation, juste un manque d'observation du fonctionnement de la page Web …

    Si en cours de procédure il y a un nouveau chargement alors il faut de nouveau inclure une boucle d'attente
    sur la page (IE.Document) comme indiqué dans le tutoriel.

    ___________________________________________________________________________________________________________
    Je suis Paris, Mogadicio, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Par défaut
    Pour ce que j ai constaté de son code, même 10mn après (la fenêtre demandant le mot de passe à bien fini d être affichée depuis 9'59"), le code ne peut pas etre relancè.

Discussions similaires

  1. Effectuer un clique sur un bouton sur page HTML
    Par Yullll dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/04/2016, 12h42
  2. Changement texte au clic sur page Html sans recharger la page.
    Par vanessatonton dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/01/2012, 05h24
  3. problème de caratère sur page html coréen et japonais
    Par ARY21 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 31/10/2009, 17h43
  4. renseigner mot de passe sur page html en vba
    Par Brice_68 dans le forum VBA Access
    Réponses: 15
    Dernier message: 07/03/2008, 16h37
  5. Réponses: 1
    Dernier message: 17/01/2006, 10h47

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