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 :

Simulation d'une case à cocher sur une page web avec vba


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
    sans emploi
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut Simulation d'une case à cocher sur une page web avec vba
    Bonjour,
    Le problème est de simuler le choix d’une case sur une page web avec visual bassic.
    L’exercice vient du site http://qwazerty.developpez.com/tutor...-et-vba-excel/
    Section IV-L-1 intitulé : Trajet direct.

    Nom : sncf.png
Affichages : 647
Taille : 78,7 Ko

    Code source de la page web,

    Nom : codesoucedelapageweb.png
Affichages : 607
Taille : 72,9 Ko

    Programme vba
    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
    Sub caseacocher()
     
    'Déclaration des variables
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim CaseDirect As HTMLInputElement
     
    'Chargement d'une page Web Google
    IE.navigate "http://www.voyages-sncf.com/billet-train"
     
    'Affichage de la fenêtre IE
    IE.Visible = True
     
    'On attend le chargement complet de la page
    WaitIE IE
     
    'On pointe le membre Document
    Set IEDoc = IE.document
     
    'On pointe la case à cocher
    Set CaseDirect = IEDoc.all("DIRECT_TRAVEL_CHECK")
     
    'On simule un clic sur la case à cocher
        CaseDirect.Click
     
       'On attend la fin de la recherche
       WaitIE IE
     
       'On libère les variables
       Set IE = Nothing
       Set IEDoc = Nothing
    End Sub
     
     
    Sub WaitIE(IE As InternetExplorer)
       'On boucle tant que la page n'est pas totalement chargée
       Do Until IE.readyState = READYSTATE_COMPLETE
          DoEvents
       Loop
    End Sub
    Le but, on va sur le site de la sncf, on ouvre la page web, et on simule la case à cocher de « trajet direct ». Cet exercice fonctionne très bien, mais quand je le transpose à ce que je veux faire (vir ci-dessous) ça ne fonctionne plus d’où mon étonnement ! Le code erreur est

    “run-time error ‘91’ : Object variable or with block not set.”

    Le programme consiste à choisir cac40 (cocher la case cac40)

    Nom : pagecac40.png
Affichages : 728
Taille : 117,1 Ko

    Programme vba
    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
    Sub RechercheVBAExcel()
     
    'Déclaration des variables
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim CaseDirect As HTMLInputElement
     
       'Chargement d'une page Web Google
       IE.navigate "http://www.abcbourse.com/download/historiques.aspx"
     
       'Affichage de la fenêtre IE
       IE.Visible = True
     
       'On attend le chargement complet de la page
       WaitIE IE
     
       'On pointe le membre Document
       Set IEDoc = IE.document
     
        'On pointe la case à cocher
        Set CaseDirect = IEDoc.all("ct100_BodyABC_xcac40p")
     
       'On simule un clic sur la case à cocher
       CaseDirect.Click
     
       'On attend la fin de la recherche
       WaitIE IE
     
       'On libère les variables
       Set IE = Nothing
       Set IEDoc = Nothing
    End Sub
     
     
    Sub WaitIE(IE As InternetExplorer)
       'On boucle tant que la page n'est pas totalement chargée
       Do Until IE.readyState = READYSTATE_COMPLETE
          DoEvents
       Loop
    End Sub
    c'est le même programme, alors pourquoi cette erreur
    “run-time error ‘91’ : Object variable or with block not set.”
    Merci de votre aide

  2. #2
    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 !




    Exemples pour abcbourse dans cette discussion et dans cette contribution !

    Un code ne peut pas directement fonctionner d'un site à un autre, il y a toujours de l'adaptation à effectuer surtout en pilotant IE
    alors qu'une requête directe est plus efficace ! (Voir la première page de la contribution et plus haut dans la discussion …)

    Maintenant sans savoir quelle ligne de code déclenche l'erreur, difficile de répondre !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  3. #3
    Futur Membre du Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut
    Bonjour Marc-L,

    Je te remercie d'avoir pris le temps pour me répondre.

    je vais regarder les liens que tu m'a mis (et les comprendre)

    pour mon cas j'ai mis un point arrêt à "Set IE = Nothing" pour voir ce qui se passe.

    le problème se situe au niveau de CaseDirect.Click (en jaune sur VBA)

    je pense qu'il n'y a rien dans CaseDirect (Nothing), ou que l’accès

    CaseDirect = IEDoc.all("ct100_BodyABC_xcac40p") n'est pas exprimé correctement.

    j'ai vérifié plusieurs fois, l'accès me semble correcte.

    Merci encore.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour

    déjà le ready state complete tu oublie avec ABC bourse il vient jamais (merci les kooki dynamique)
    il nous faut donc comme tu l'a (je l'espère) vu dans le lien de la discutions que marc t a donnée utiliser le ready state 3 (interactive)

    en suite comme on peut pas attendre le ready state complet on est obligé de gérer l'attente autrement

    peut être comme marc le fait
    un do loop sur la véracité de la présence d'un object
    en l'occurrence ici ton checkbox

    et même avec ca avec se site on est sur de rien
    la preuve j'ai fait le test l'object est toujours nothing après pres de 20 seconde qui suivent le ready 3

    bien que l'exercice est intéressant je te suggère d'aller chercher ton Cac 40 ailleurs( sur un autre site ) y en a foison
    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
     
    Sub RechercheVBAExcel()
    'Déclaration des variables
        Dim IE As Object
        Dim IEDoc As Object
        Dim CaseDirect As Object
        Set IE = CreateObject("internetexplorer.application")
        'Affichage de la fenêtre IE
        IE.Visible = True
        'Chargement d'une page Web Google
        IE.navigate "http://www.abcbourse.com/download/historiques.aspx"
        'On attend le chargement complet de la page
        Do: DoEvents: Loop Until IE.readyState = 3
     
        'On pointe le membre Document
        Set IEDoc = IE.Document
        t = Timer
        While Not IsObject(IEDoc.getelementbyid("ct100_BodyABC_xcac40p"))
            If Timer - t > 20 Then GoTo fin
        Wend
        'On pointe la case à cocher
        'By name "ctl00$BodyABC$xcac40p"
        Set CaseDirect = IEDoc.getelementbyid("ct100_BodyABC_xcac40p")
    MsgBox IsObject(CaseDirect) ' ce message n'apparait jamais donc on a sauter  jusqu'a fin
        'On simule un clic sur la case à cocher
        CaseDirect.Click
        'On attend la fin de la recherche
     
        'On libère les variables
        Set IE = Nothing
        Set IEDoc = Nothing
    Exit Sub
    fin:
     MsgBox "désolé"
       'IE.Quit
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    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

    Effectivement ton code ne peut fonctionner Patrick ‼
    Et tiens je ne suis plus le seul à être embêté avec ce site …


    Nicos148, Patrick,
    je ne comprends pas : vous avez déjà la solution sur un plateau
    rien qu'en reprenant ma procédure Demo7 ou encore DemoIE dans mes liens
    que ce soit en déclaration anticipée (early binding comme Nicos148)
    ou en déclaration tardive (late binding comme Patrick),
    les deux fonctionnant sans souci de mon côté avec IE9 comme avec IE11 !

    Au passage Nicos148, il n'y a pas de mise à jour de cette page pour un click sur cette case à cocher …

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    et bien c'est pas nouveau que abcbourse n'a pas de ready 4
    et de ce fait ta méthode isobject entre dans la danse forcement il faut bien une gestion d'attente cohérente

    en tout cas j'ai tout testé pas de checkbox coché
    la seul chose que je n'ai pas testé c'est des sleep qui tue
    mais sil faut un sleep long comme une autoroute pour moi c'est rédhibitoire
    je n'ai pas fait l'inspection réseau pour voir si on pouvait avec une requête
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Switch/Case - boucle sur une case ou sur l'ensemble
    Par nevoa dans le forum Langage
    Réponses: 3
    Dernier message: 24/06/2014, 15h45
  2. [MySQL] Enregistrer une case à cocher sur MySQL
    Par dadou9101 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/10/2008, 09h35
  3. Etat avec une case à cocher sur une requête difficile
    Par marcoO dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 10/01/2007, 14h21
  4. Réponses: 4
    Dernier message: 23/01/2006, 11h28

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