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 :

Autocomplétion d'un champ sur IE


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    ingénieur finance
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Autocomplétion d'un champ sur IE
    Bonjour à tous !

    J'ai suivi le tuto de Qwazerty "Interaction avec Internet Explorer via VBA Excel" (http://qwazerty.developpez.com/tutor...-et-vba-excel/).
    J'ai déjà pu faire tellement de chose grâce à ce tuto, c'est un tuto incroyable !

    Aujourd'hui je tombe sur une difficulté sur une page intranet qui a un champ qui s'autocomplète :
    Chaque personne a un identifiant et je ne connais que cette identifiant.
    Manuellement je rentre l'identifiant dans le champ, par exemple : 365202
    Et la cellule s'autocomplète et, à la place de l'identifiant, apparait le nom de la personne : Frédéric Martin

    Le champ est codé ainsi :

    Code html : 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
       <input name="target_manager_id_text" tabindex="0" title="" 
       class="ppm_field formFieldNoWidth autosuggest-svl-input x-form-field x-form-text" 
       id="d426071e315" 
       aria-required="true" 
       style="padding-top: 1px; padding-bottom: 1px; border-right-color: currentColor; border-right-width: 0px; border-right-style: none;" 
       onkeydown="return handleEnter(event, 'filter', 'page')" 
       onclick="if(event.stopPropagation) event.stopPropagation(); event.cancelBubble=true;" 
       onfocus="javascript:clarity.uitk.ext.browse.BrowseFieldExt.autoSuggestInit(this,event);" 
       type="text" 
       size="25" 
       maxlength="2147483647" 
       alt="" 
       value="" 
       auto_init="false" 
       auto_webcontext="/niku" 
       auto_formname="page" 
       auto_minlength="1" 
       auto_delay="500" 
       auto_setupfunction="lookupAutosuggest" auto_paramvalues="attributeCode=target_manager_id:objectCode=project:odf_pk=:partitionCode=NIKU.ROOT:viewType=properties:param_inv_id=:" 
       auto_lookuptype="BROWSE_PROJMGR" 
       auto_attrcode="target_manager_id" 
       auto_id="d426071e315">


    Je peux affecter ce champ sans problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Set CP = IEDoc.all("target_manager_id_text")         'Chef de projet   
       CP.Value = "365202"
    Mais l'identifiant reste là, l'autocomplétion n'a pas lieu.

    J'imagine qu'il faut que j'essaye de simuler la saisie au clavier avec des SendKeys. Mais je n'y parviens pas.

    J'ai essayé plein de syntaxes, en vrac :

    CP.Focus
    DoEvents
    CP.Click
    DoEvents
    SendKeys "3"
    DoEvents
    CP.SendKeys "3"
    DoEvents

    Au mieux, j'obtiens une saisie dans mon fichier Excel au lieu de la page web.

    Savez vous comment faire le focus sur le champ et lui envoyer des frappes de clavier ?


    Sinon j'ai aussi essyaer d'exécuter le javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       JavaCode = "javascript:clarity.uitk.ext.browse.BrowseFieldExt.autoSuggestInit(this,event);"
       IEDoc.parentWindow.execScript JavaCode, "JavaScript"
    Mais cela plante. Je pense que c'est bien au dessus de mon niveau de vouloir executer le javascript. Mais si vous voyez quelque chose de simple dans cette direction je suis preneur.

    Merci par avance !

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    et avec   CP.onclick   ?

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Candidat au Club
    Homme Profil pro
    ingénieur finance
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour,

    et avec   CP.onclick   ?

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

    Merci pour la suggestion. Je viens d'essayer et j'obtiens le message "Erreur Automation"

  4. #4
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour,

    Cette erreur ne serait-elle pas due au fait que la page n'est pas encore totalement chargée lorsque le code s'exécute ?
    Avez-vous essayé d'ajouter, avant la ligne qui cause l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While oNav.readyState <> READYSTATE_COMPLETE Or oNav.Busy = True
        DoEvents
    Wend
    ... avec oNav l'objet navigateur utilisé.

  5. #5
    Candidat au Club
    Homme Profil pro
    ingénieur finance
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Bonjour,

    Cette erreur ne serait-elle pas due au fait que la page n'est pas encore totalement chargée lorsque le code s'exécute ?
    Avez-vous essayé d'ajouter, avant la ligne qui cause l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While oNav.readyState <> READYSTATE_COMPLETE Or oNav.Busy = True
        DoEvents
    Wend
    ... avec oNav l'objet navigateur utilisé.
    Hello Ben,

    Merci pour la suggestion.
    Avant d'arriver à ce champ, j'accède à plein d'autre sur la page, sans problème.
    En plus, avant d'accéder au premier champ je fais un WaitIE IE et un WaitDoc IEDoc (issu du tuto mentionné)
    auquel j'ai rajouté une fonction WaitObj (conseillé également dans le forum lié au tuto il me semble) qui fait une boucle tant que l'objet n'est pas disponible :
    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
    '===================='
    ' WaitObj
    '===================='
    Sub WaitObj(name As String, _
                  IE As InternetExplorer, _
               IEDoc As HTMLDocument, _
      ByRef MyObject As Object, _
             Feuille As Worksheet)
     
       WaitIE IE
       WaitDoc IEDoc
       x = 0
       Do
          Sleep 1000
          Set MyObject = IEDoc.all(name)
          x = x + 1
          Feuille.Range("m_wait_timer").Value = x
       Loop While MyObject Is Nothing And x <> 30
       If x = 30 Then
        MsgBox "WaitObj : Erreur de chargement de la page : on a attendu 30s sans succès (" & name & ")"
       End If
     
    End Sub

  6. #6
    Candidat au Club
    Homme Profil pro
    ingénieur finance
    Inscrit en
    Octobre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur finance

    Informations forums :
    Inscription : Octobre 2017
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Personne n'a rencontré ce genre de champs qui s'autocomplètent ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Si la page est accessible, pourriez-vous en donner l'adresse ?
    La façon dont la page est codée pourrait avoir un impact sur le mode de résolution, en tout cas si on passe par un execScript.

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Je regarderais de ce coté là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    onfocus="javascript:clarity.uitk.ext.browse.BrowseFieldExt.autoSuggestInit(this,event);"
    onkeydown="return handleEnter(event, 'filter', 'page')"
    Si je comprends le fonctionnement je dirais
    Le Onfocus, Initialise l’auto-complétion, probablement en mettant des variables à 0 et en pointant sur le champs sur lequel on vient de cliquer
    Puis en cours de frappe (onkeydown), on exécute un code qui produit l’auto-complétion dans le champs mémorisé lors du Focus

    Le mieux serait en effet d'avoir accès à ta page, si rien n'est confidentiel, afin de regarder le contenu du code et voir s'il n'est pas possible de contourner le problème autrement.
    Quand je dis contourner, c'est que je me demande la chose suivante. Si ta page est un formulaire de saisi, une fois les informations saisies, il va transmettre tout ça au serveur, hors je doute que dans la base de donnée soit stocké le nom des gens en claire, il sera surement plutôt utilisé le numéro d'identification.
    Si cette intuition est bonne, tu doit avoir un champs où un paramètre d'un champs qui conserve ce numéro d'identification en vu de la création de la requête serveur. Il te faudrait donc trouver où est stocké ce numéro une fois ton champs de saisie implémenté avec le nom des gens en claire par le code de la page.

    J'espère ne pas t'avoir embrouillé :p

    Bonne journée
    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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/12/2014, 15h39
  2. Autocomplétion d'un champs texte sous ACCESS VBA 2003
    Par Developpeur23 dans le forum IHM
    Réponses: 2
    Dernier message: 19/03/2009, 10h07
  3. [VBA] récupérer un champ sur un Recordset
    Par dalmasma dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/07/2007, 14h58
  4. Réponses: 2
    Dernier message: 08/06/2007, 18h00
  5. [VBA-E]Demande de précision sur les menus
    Par geffdenimes dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/06/2003, 10h46

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