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 & Internet Explorer - Alimentation page web


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet décisionnel
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut VBA & Internet Explorer - Alimentation page web
    Bonjour à tous,

    Je souhaite alimenter une page web à partir d'Excel et lancer une recherche. Pour cela j'ai travaillé à partir de l'excellent tuto de qwazerty => https://qwazerty.developpez.com/tuto...-et-vba-excel/ (bravo à lui d'ailleurs !)

    J'ai réussi à alimenter tous mes champs sauf la zone commune qui pose problème. La page attend une correspondance et quant on saisie soit la commune soit commune + département ça ne fonctionne pas (message d'erreur lors de la recherche "champ commune non valide"). Il faut forcément commencer à saisir et sélectionner la commune dans la liste (il complétera alors avec le code département). J'ai testé de mettre avec et sans le code département mais idem. Voyez vous une solution pour forcer la zone ?

    Je vous joins le fichier, il est nécessaire d'activer les références Microsoft internet controls et Microsoft Html Object Library.
    Le code est dans le module 2 : Sub RechercheVBAExcel

    La page web concernée est celle-ci : https://www.service-public.fr/partic...ormulaires/ISE et la zone html est la suivante :
    <input name="searchedCommune" class="form-control code_input ui-autocomplete-input search-input" id="ise-commune" aria-required="true" aria-describedby="alert-block-commune messageise-commune" spellcheck="false" required="required" type="search" maxlength="60" value="" autocomplete="off" data-enableautocompletev2="true">
    Pour info, quand cela fonctionnera le but sera de capter le résultat de la recherche et de relancer une recherche sur une autre commune.

    Un grand merci pour votre aide

    Julien
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 432
    Par défaut
    Bonjour,

    Une solution, utilisant des SendKeys (ce qu'il faut normalement éviter) qui simule la recherche de la commune et sa sélection dans la liste des communes. Les Wait ne sont peut-être pas tous nécessaires: à tester.
    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
    Sub RechercheVBAExcel()
    'Déclaration des variables
    Dim IE As New InternetExplorer
    Dim IEDoc As HTMLDocument
    Dim InputZoneTexte1 As HTMLInputElement
    Dim InputZoneTexte2 As HTMLInputElement
    Dim InputZoneTexte3 As HTMLInputElement
    Dim InputZoneTexte4 As HTMLInputElement
    Dim InputZoneTexte5 As HTMLInputElement
    Dim InputDept As HTMLInputElement
    Dim InputCommune As HTMLInputElement
    Dim InputZoneBool1 As HTMLInputElement
    Dim InputZoneBool2 As HTMLInputElement
    Dim InputBouton1 As HTMLInputElement
     
    V_Dept = "69"
    V_Commune = "Fontaines-sur-Saône"
    V_Nom = "TOTO"
    V_Prenom = "Julien"
    V_Jour = "19"
    V_Mois = "12"
    V_Annee = "1977"
    V_sexe = "m"
     
       'Chargement d'une page Web Google
       IE.navigate "https://www.service-public.fr/particuliers/vosdroits/services-en-ligne-et-formulaires/ISE"
       '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
     
    'Nom
    Set InputZoneTexte1 = IEDoc.all("ise-name")
        InputZoneTexte1.Value = V_Nom
    'Prénom
    Set InputZoneTexte2 = IEDoc.all("ise-first-name-1")
        InputZoneTexte2.Value = V_Prenom
    'Jour naissance
    Set InputZoneTexte3 = IEDoc.all("ise-birth-day")
        InputZoneTexte3.Value = V_Jour
    'Mois naissance
    Set InputZoneTexte4 = IEDoc.all("ise-birth-month")
        InputZoneTexte4.Value = V_Mois
    'Année naissance
    Set InputZoneTexte5 = IEDoc.all("ise-birth-year")
        InputZoneTexte5.Value = V_Annee
    'Sexe
    Set InputZoneBool1 = IEDoc.all("ise-sex-m")
        If V_sexe = "m" Then InputZoneBool1.Click
    Set InputZoneBool2 = IEDoc.all("ise-sex-f")
        If V_sexe = "f" Then InputZoneBool2.Click
     
    'Département
    Set InputDept = IEDoc.all("ise-departement")
        InputDept.Value = V_Dept
    'Commune
    Set InputCommune = IEDoc.all("ise-commune")
        InputCommune.Value = V_Commune
        '--- simule sélection dans la liste
        InputCommune.Select
        SendKeys "^{END}"   '--- va en fin de texte
        Application.Wait (Now() + TimeValue("00:00:01"))
        SendKeys " "        '--- ajoute un espace et attend résultat
        Application.Wait (Now() + TimeValue("00:00:01"))
        SendKeys "{TAB}"    '--- entre dans la liste
        Application.Wait (Now() + TimeValue("00:00:01"))
        SendKeys "{ENTER}"  '--- valide le 1er résultat de la liste
     
    'On pointe notre bouton
    Set InputBouton1 = IEDoc.all("submit-button")
    InputBouton1.Click
     
       'On attend la fin de la recherche
       WaitIE IE
     
       'On libère les variables
       Set IE = Nothing
       Set IEDoc = Nothing
    End Sub
    Bonne continuation.

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet décisionnel
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut C'est good !
    Merci Eric, cela fonctionne !

    Au départ je lançais le pas à pas et ça ne marchait pas, je me suis fait une petite frayeur !

    Je vais donc pouvoir passer à la suite, merci bien

  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
    re

    @ericdng on a eu a peu pres la meme idée

    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
    Sub testPat()
        With CreateObject("internetexplorer.application")
            .Visible = True
            .navigate "https://www.service-public.fr/particuliers/vosdroits/services-en-ligne-et-formulaires/ISE"
            Do: DoEvents: Loop While .readyState <> 4
            'inputoption france        id =ise_france
            'inputoption  a l'etranger id =ise_world
            'input departement         id =ise-departement
            'input commune             id=ise-commune
            'input  nom                id=ise-name
            'input prenom              id=ise-first-name-1
            'inputoption feminin       id=ise-sex-f
            'inputoption masculin      id=ise-sex-m
            'input jour anniversaire   id=ise-birth-day
            'input mois anniversaire   id=ise-birth-month
            'input année aniversaire   id=ise-birth-year
            'bouton verifier           id=submit-button
            .document.getElementById("ise_france").Click
            .document.getElementById("ise-departement").Value = 83
            'Application.Wait (Now + TimeSerial(0, 0, 3))
            .document.getElementById("ise-commune").Focus::
            Set wsh = CreateObject("wscript.shell")
     
            wsh.SendKeys ("toulon")    ' la commune ici
            'la commune n'est pas valider tant que tu n'a pas choisi une des option en dessous qui s'affichent
            'alors on cherche le div converti en listbox
            For Each elem In .document.all
                If elem.getAttribute("role") = "listbox" Then    'si il y a des enfant  il y a donc des propositions de commune
                    If elem.Children.Length > 0 Then
                        wsh.SendKeys ("{DOWN}")    ' on descends avec la simul de la touche fleche bas  ca selectionne le premier
                        wsh.SendKeys ("{ENTER}")    ' on simule la touche enter pour choisir la  first proposition
                    End If
                End If
            Next
            ' maintenant a ce niveau la commune est valide
            ' ca l'inconveniant que si la first proposition ne correspond pas a ce que tu voulais ecrire et bien tu es chocolat
            ' on continue le remplissage du formulaire
            .document.getElementById("ise-name").Value = "mikeydonaldetmoi"    ' le nom ici
            .document.getElementById("ise-first-name-1").Value = "Patrick"    'le prenom ici
            .document.getElementById("ise-sex-m").Click
            .document.getElementById("ise-birth-day").Value = "01"
            .document.getElementById("ise-birth-month").Value = "02"
            .document.getElementById("ise-birth-year").Value = "1966"
            .document.getElementById("submit-button").Click
     
        End With
    End Sub
    cela dit le fait de choisir la proposition 1 sur la base du len(commune-1) n'est pas forcement juste car la first proposition n'est peu etre pas la bonne
    d'autant plus que il y a une limite de temps pour l'action du choix
    donc le pas a pas niet de niet
    par contre Attention aux senkeys de l'application qui tapent pas toujours dans la fentre IE utiliser le wscript.shell
    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
    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 voila ma proposition pour faire sauter ces wait que vous utilisez et qui ne seront pas a 100% fiable pour peux qui est du bouchon sur le site ou même dans votre réseau

    le principe et de cible cette pseudo listbox qui est créée quand on tape dans l'input de commune
    on teste dans un do/loop qui écrit lettre par lettre la commune si il y a au moins un item et qu'il soit diffèrent de "aucun résultat"

    parti de la tout vos wait sont inutiles

    c'est une sub argumentée lancée par une autre sub pour qu'elle puisse resservir pour différentes recherches
    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
    Sub testx()
        testPat "bidule", "toto", "toulon", "04/03/1970", "var", 0, "m"
    End Sub
     
    Sub testPat(nom As String, prenom As String, commune As String, birth As Date, Departement As String, Optional pays As Variant = 0, Optional sexe As String = "m")
        Dim liste As Object, WsH
        Set WsH = CreateObject("wscript.shell")
        With CreateObject("internetexplorer.application")
            .Visible = True
            .navigate "https://www.service-public.fr/particuliers/vosdroits/services-en-ligne-et-formulaires/ISE"
            Do: DoEvents: Loop While .readyState <> 4
            pays = IIf(pays = 0, "ise_france", "ise_world"): sexe = "ise-sex-" & sexe    ' on deternine le quel id va etre cliqué pour le pays et le sexe
            '-----------------------------------------------------------------------------------------------------------------------
            For Each elem In .document.all: Set liste = IIf(elem.getAttribute("role") = "listbox", elem, liste): Next    'recherche de l'element pseudo listbox par son attribut"role"
            'c est cet element qui contiendra la liste de choix de communes
            '-----------------------------------------------------------------------------------------------------------------------
            .document.getElementById("ise-commune").Focus:
            Do:
                i = i + 1
                WsH.SendKeys (Mid(commune & "   ", i, 1))    ' la commune ici tapée lettre par lettre
                If Not liste.innerHTML Like "résultat" And liste.Children.Length >= 1 Then Exit Do 'a chaque fois on control si il n'y a pas "aucun resultat"  et si il y a au moins 1 item dans la liste  si oui c'est le seul alors le bon
            Loop
            WsH.SendKeys ("{DOWN}{ENTER}")    ' on descends avec la simul de la touche fleche bas  ca selectionne le premier
            .document.getElementById(pays).Click
            .document.getElementById("ise-departement").Value = Departement
            .document.getElementById("ise-name").Value = nom    ' le nom ici
            .document.getElementById("ise-first-name-1").Value = prenom    'le prenom ici
            .document.getElementById(sexe).Click
            .document.getElementById("ise-birth-day").Value = Format(Day(birth), "#00")
            .document.getElementById("ise-birth-month").Value = Format(Month(birth), "#00")
            .document.getElementById("ise-birth-year").Value = Format(Year(birth), "#0000")
            .document.getElementById("submit-button").Click
        End With
    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

  6. #6
    Membre habitué
    Homme Profil pro
    Chef de projet décisionnel
    Inscrit en
    Avril 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 10
    Par défaut
    Merci Patrick, je teste ça en fin de journée et je te fais un retour

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/03/2014, 10h00
  2. mon ordinateur est connecté a internet mais les pages web ne s'affichent pas
    Par saadi-amina dans le forum Dépannage et Assistance
    Réponses: 2
    Dernier message: 03/07/2008, 15h58
  3. VBA et Internet explorer
    Par sechanbask dans le forum Général VBA
    Réponses: 6
    Dernier message: 27/05/2008, 12h24
  4. [VBA-E] Internet Explorer dans Excel ?
    Par iButton dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/01/2007, 19h13

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