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

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Remplissage zone de texte/Appui bouton d'un site web via VBA
    Bonjour,
    Je souhaite simplement avec une macro VBA appuyer et/ou remplir une zone de texte d'un site web mais je n'arrive pas.
    Voici mon code pour remplir un zone de texte :
    Sub PremierIE()

    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
    'Déclaration des variables
       Dim IE As Object
       Dim IEdoc As Object
       Dim DOCelement As Object
     
        'Affichage de la fenêtre IE
       IE.Visible = True
     
        'Initialisation des variables
       Set IE = CreateObject("InternetExplorer.Application")
     
         'Chargement de la page web
    IE.navigate ("http://neo.inetpsa.com/index.do")
     
    Application.Wait Now + TimeValue("0:00:01")
     
        ' attente de fin de chargement
       Do Until IE.readyState = 4
            DoEvents
        Loop
     
        'On pointe le membre Document
       Set IEdoc = IE.document
     
        'Tempo de 2 secondes
       Application.Wait Now + TimeValue("0:00:03")
     
       'login
    Set DOCelement = IEdoc.getElementsByName("codeTransaction").Item
        DOCelement.Value = "abcd"
     
        'On libère la variable IE
       Set IE = Nothing
     
       End Sub

    et le code HTML de la zone de texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input name="codeTransaction" class="INPUT_text_Actif INPUT_text" id="codeTransaction" style="text-transform: uppercase;" type="text">
    Il n'y a rien de difficile, je fais exactement comme pleins d'exemple sur internet mais ça ne fonctionne pas avec moi, parreil avec les boutons. J'obtiens toujours un message d'erreur au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set DOCelement = IEdoc.getElementsByName("codeTransaction").Item
        DOCelement.Value = "abcd"
    PS : La page web est une page de donnée contenue dans le serveur intranet de mon entreprise, cela influe-t-il ?

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Solution
    Merci de vos réponses (lol) finalement j'ai moi même trouvé une solution, qui est d'abandonner cette idée et passer par un autre chemin puisqu'elle est infaisable malgré tout ce que j'ai pu essayer (pour une raison inconnue). J'ai utilisé l'instruction sendkeys qui envoie une ou plusieurs séquences de touches vers la fenêtre active comme si elles avaient été tapées au clavier

    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
     
    Option Explicit
    Sub PremierIE()
     
        'Déclaration des variables
       Dim IE As New InternetExplorer
       Dim IEDoc As Object
     
        'Affichage de la fenêtre IE
       IE.Visible = True
     
         'Chargement de la page web
       IE.navigate ("http://neo.inetpsa.com/index.do")
     
     
        ' attente de fin de chargement
       While IE.readyState <> 4 Or IE.Busy
            DoEvents
       Wend
     
       'On pointe le membre Document
       Set IEDoc = IE.document
     
     
       'On écrit "NEOQ1" sur la barre de recherche puis bouton entrée
        SendKeys "NEOQ1", True
        SendKeys "{ENTER}"
     
       'attente fin de chargement
       While IE.readyState <> 4 Or IE.Busy
            DoEvents
       Wend
       'tempo 5s
       Application.Wait (Now + TimeValue("00:00:05"))
     
        'Bouton tab pour déplacer le focus
        SendKeys "{TAB}", True
        SendKeys "{TAB}", True
        SendKeys "{TAB}", True
        SendKeys "ARMATURE D34", True
        SendKeys "{TAB}", True
        SendKeys "{TAB}", True
        SendKeys "{TAB}", True
        SendKeys "{TAB}", True
        SendKeys "{TAB}", True
        SendKeys "14/02/2021 05:25", True
        SendKeys "{TAB}", True
        SendKeys "15/02/2021 05:25", True
     
       'On libère la variable IE
       Set IE = Nothing
     
       End Sub
    C'est une méthode un peu bourrin, mais bien plus facile à mettre en œuvre et plus fiable, vous ne verrez pas de message d'erreur incompréhensible qui apparais à chaque ligne de code

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

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

    Informations forums :
    Inscription : avril 2002
    Messages : 3 622
    Points : 8 086
    Points
    8 086
    Par défaut
    Salut

    J'obtiens toujours un message d'erreur
    Quel est-il?

    Il est probable (mais pas certain sans le message d'erreur) que la variable "DOCelement" soit Nothing au moment où tu souhaites modifier sa valeur.
    Il faut vérifier avec un espion.

    Essaie de remplacer getElementsByName par getElementById. Il vaut mieux favoriser le pointage par Id quand c'est possible, car plus fiable. Un nom peut-être utilisé par plusieurs éléments d'une même page, d'où le "s" à getElementSbyName qui retourne un tableau d'éléments. Au contraire un Id est unique sur la page, tu es donc sûr de tomber le le bon élément.

    ++
    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

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour Qwazerty et merci de ta réponse,

    J'obtiens "Objet requis" comme message d'erreur ou sinon "Variable Objet ou bloc with non définie" toujours pour cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DOCelement = IEdoc.getElementById("codeTransaction")
    Comme tu peux le voir j'ai également testé avec getElementById mais rien n'y fais.
    Sur ma variable IEDoc j'ai bien quelque chose, mais c'est plutôt pour DOCelement que j'ai nothing

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

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

    Informations forums :
    Inscription : avril 2002
    Messages : 3 622
    Points : 8 086
    Points
    8 086
    Par défaut
    Salut

    Le message d'erreur t'indique que la variable n'est pas définie, elle est donc "Nothing".

    sur la ligne que tu indique il ne peut s'agir que de deux choses
    Soit IeDoc n'est pas défini (mais tu as dis qu'il n'était pas à nothing)

    Soit "codeTransaction" n'est pas trouvé. Ce que tu décris dans ta dernière phrase colle avec ça.
    Cela peut arriver si la page contient des sous formulaires, c'est abordé dans le tuto IE il me semble et des solutions sont proposées dans les commentaires du post dédié au tutoriel.

    Pas facile d'aider sans pouvoir accéder au site et les sites intranet (de ma petite expérience) posent souvent problème.

    ++
    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

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Malheureusement je n'ai trouvé aucun sujet traitant un cas similaire au mien que ce soit dans ton tuto ou dans les commentaires, peux-tu m'éclaircir ?

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 982
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 982
    Points : 5 015
    Points
    5 015
    Par défaut
    hello,
    quelques petites questions concernant ton problème :

    1 - Pourquoi as-tu mis une temporisation de 2 secondes ? La saisie du login n'apparaît pas tout de suite ? Et si tu augmentes cette temporisation ?
    2 - Est-ce que la saisie du login apparaît dans la page chargée ou dans une fenêtre popup ?

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

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

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

    Informations forums :
    Inscription : avril 2002
    Messages : 3 622
    Points : 8 086
    Points
    8 086
    Par défaut
    Citation Envoyé par ssamet Voir le message
    Salut,

    Malheureusement je n'ai trouvé aucun sujet traitant un cas similaire au mien que ce soit dans ton tuto ou dans les commentaires, peux-tu m'éclaircir ?
    Salut

    Voici des post qui pourraient te guider vers une solution

    Ici



    Peut-être ça


    Si tu es sûr que la variable IeDoc n'est pas à nothing, il faut que tu arrives à trouver pourquoi il n'est pas possible de pointer l'élément "codeTransaction".

    Essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DOCelement = IEdoc.getElementsByName("codeTransaction").Item(0)
    En ajoutant (0) pour préciser l'item

    Si tu places un espion sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IEdoc.getElementsByName("codeTransaction")
    est ce que VBA te propose un tableau?

    Regarde si tu as des iframe dans le code source de ta page. C'est souvent un problème rencontré sur les pages intranets.

    Espionne le contenu du iedoc pour regarder si l'élément que tu recherches est bien dedans. Ça ne veut pas dire qu'il sera accessible via VBA s'il y est mais s'il n'y est pas...c'est sûr que tu ne pourras pas le pointer dans une variable.
    Je sais que c'est assez fastidieux de rechercher dans le contenu de cette façon mais des fois faut mettre les mains dans le cambouis.

    Tu peux aussi tenter de faire une recherche via ClasseName, il ne doit pas y avoir beaucoup d'élément de ce type sur ta page je présume.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class="INPUT_text_Actif INPUT_text"
    ++
    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. [AC-2003] Problème remplissage zone de texte
    Par chrtophe dans le forum IHM
    Réponses: 4
    Dernier message: 22/03/2013, 08h31
  2. [AC-2010] zone de texte et bouton grisés
    Par scoobydoos dans le forum IHM
    Réponses: 2
    Dernier message: 20/10/2010, 11h16
  3. [JButton] Régler la "Zone de texte" du bouton
    Par knaps dans le forum Composants
    Réponses: 1
    Dernier message: 24/06/2010, 16h05
  4. Vraifaux + remplissage zone de texte
    Par trago dans le forum IHM
    Réponses: 7
    Dernier message: 27/08/2009, 11h46
  5. Zones de textes/Etiquettes/Boutons auto-extensibles
    Par Arkham46 dans le forum Contribuez
    Réponses: 1
    Dernier message: 31/05/2006, 11h31

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