Macro incomplète?

accro.a.lordi Messages postés 17 Statut Membre -  
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai essayé la macro PageWeb voir http://www.excelabo.net/trucs/login-et-pass

sub PageWeb()
Dim IE As Object
Set IE = CreateObject("internetexplorer.application")
IE.Navigate ("https://www.brandbucket.com/names/zaza?source=ext")
IE.Visible = True: IE.Top = 0: IE.Left = 0
IE.Width = GetSystemMetrics32(0)
IE.Height = GetSystemMetrics32(1)
Application.Wait Now + 5 / 3600 / 24
SendKeys ("loginZaza")
SendKeys "{TAB}"
SendKeys ("passwordzaza~")
Application.Wait Now + 5 / 3600 / 24
Set IE = Nothing
end sub

Mais quand je l'exécute, le système surligne GetSystemMetrics32 et donne ce message d'erreur:

Erreur de compilation:

Sub ou Function non définie

Donc, ma question est: est-ce la macro PageWeb est complète?

MERCI
A voir également:

4 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

Non, il faut que tu déclares la fonction.
Regarde sur l'exemple suivant, même site.

eric
0
accro.a.lordi Messages postés 17 Statut Membre
 
Bonjour eriiic,

J'ai essayé la macro du deuxième exemple:

Declare Function GetSystemMetrics32 Lib "user32" _
Alias "GetSystemMetrics" (ByVal nIndex As Long) As Long

Sub Site_avec_Login_et_Password()
Dim ie As Object
Set ie = CreateObject("internetexplorer.application")
With ie
.Navigate ("https://www.brandbucket.com/names/zaza?source=ext")
.Visible = True
.Top = 0
.Left = 0

'Obtention en nombre de points de la largeur d'écran
'les deux commandes suivantes nécessitent la déclaration de la
'function GetSystemMetrics32 dans le haut du module

.Width = GetSystemMetrics32(SM_CXSCREEN)
.Height = GetSystemMetrics32(SM_CYSCREEN)

'attendre la fin du chargement, c'est à dire lorsqu'il sera indiqué
'le mot Terminé à gauche au bas de la page Internet

Do Until .ReadyState = 4
DoEvents
Loop

'Pour l'utilisation de la propriété getElementsByName,
'vous devez connaître le nom du control ActiveX,
'vous trouverez ce nom dans la Source de la page Internet

'login
Set DOCelement = .getElementsByName("login").Item
DOCelement.Value = "zaza

'password
Set DOCelement = .getElementsByName("pass").Item
DOCelement.Value = "xxZAZAxx"

End With
End Sub

Le site s'ouvre, mais après j'ai ce problème:

Erreur d'éxécution '438':

Propriété ou méthode non gérée par cet object

Puis quand je clique sur Débogage, il surligne
Set DOCelement = .getElementsByName("login").Item

J'ai bien sûr essayé en changeant le nom du site… mais j'ai toujours la même erreur.

Je débute dans l'apprentissage des macros (je lis actuellement le livre "VBA pour Office POUR LES NULS 4ème édition"). Cette macro m'intéresse énormément, car cela fait un mois que je cherche comment réaliser ceci:

"Sous Excel 2003, j'utilise l'importation de données Web pour mettre à jour régulièrement et automatiquement des bases de données avec la fonction suivante: Menu données, données externes, nouvelle requête sur le Web.

Cette méthode fonctionne parfaitement tant qu'il n'y a pas de nom d'utilisateur et de mot de passe à utiliser sur le site en question. Cependant, quand il y a un nom d'utilisateur et un mot de passe à utiliser quand j'effectue l'actualisation automatique, le système prend les données de la page d'accueil du site et non des pages voulues.

Même en ayant régler dans Internet Explorer pour qu'il retienne le mot de passe, cela ne fonctionne pas.

Quelqu'un a-t-il une solution pour arriver à réaliser ce projet? Toute proposition sera la bienvenue même si c'est avec un autre logiciel (OpenOffice.org Calc...) ou avec de la programmation (VBA…).

Je vous remercie pour vos conseils."


Et apparemment cette macro répondait à ma demande.

As-tu une solution?

MERCI
0
accro.a.lordi Messages postés 17 Statut Membre
 
Bonjour,

Je relance le sujet, désolé, mais j'aimerais vraiment trouver une solution.

MERCI
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonsoir,

J'ai testé ta dernière macro sur un site et 2-3 trucs ne marchaient pas non plus.
- le Do Until .ReadyState = 4
que j'ai mis en commentaire et remplacé par une tempo de 5s.
- les Set DOCelement ...
Que j'ai mis en commentaire et remplacé par une émulation clavier.
Il suffit de reproduire toutes les actions faites au clavier (souris interdite) pour te connecter.
Ici : 17 fois fleche bas, TAB, ident, TAB, pw, enter

Sub Site_avec_Login_et_Password()
    Dim ie As Object
    Set ie = CreateObject("internetexplorer.application")
    With ie
        .Navigate ("https://lobby.ogame.gameforge.com/fr_FR/")
        .Visible = True
        .Top = 0
        .Left = 0

        'Obtention en nombre de points de la largeur d'écran
        'les deux commandes suivantes nécessitent la déclaration de la
        'function GetSystemMetrics32 dans le haut du module

        .Width = GetSystemMetrics32(SM_CXSCREEN)
        .Height = GetSystemMetrics32(SM_CYSCREEN)
        'attendre la fin du chargement, c'est à dire lorsqu'il sera indiqué
        'le mot Terminé à gauche au bas de la page Internet

'                Do Until .ReadyState = 4
'                    DoEvents
'                Loop
        Application.Wait (Now + TimeValue("0:00:05"))
        'Pour l'utilisation de la propriété getElementsByName,
        'vous devez connaître le nom du control ActiveX,
        'vous trouverez ce nom dans la Source de la page Internet
        For i = 1 To 17
            SendKeys "{DOWN}", True
        Next i
        SendKeys "{TAB}", True
        SendKeys "login", True
        SendKeys "{TAB}", True
        SendKeys "pass", True
        SendKeys "{ENTER}"

        '        'login
        '        Set DOCelement = .getElementsByName("login").Item
        '        DOCelement.Value = "bla"
        '
        '        'password
        '        Set DOCelement = .getElementsByName("pass").Item
        '        DOCelement.Value = "blabla02"
        '
        '
    End With
End Sub


Peut-être pas orthodoxe mais si ça peut te dépanner...

eric
0