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 :

Liste déroulante cachée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut Liste déroulante cachée
    Bonjour,

    J'ai le même problème qu'haribo91 dans cette contribution. J'arrive à insérer les valeurs dans les listes déroulantes. Cependant, il y a une troisième liste qui apparaisse une fois que celle d'avant est remplie. Même s'il ne s'agit pas d'un bouton, j'ai essaye le commande ".click" mais rien ne change.

    As-tu trouvé la solution ?

    Merci de ton retour,

    P.S. le site avec lequel je travaille est : http://habitat-developpement.tm.p15....t=aide_habitat

    Shaekin

    Citation Envoyé par haribo91 Voir le message
    Bonjour,

    D'abord un grand bravo pour cet excellent tuto .

    Pour ma part j'ai une question sur les listes déroulantes. Tu a montré comment sélectionner un item dedans ou comment récupérer tous les choix de cette liste, mais sur certains site lorsque l'on sélectionne un item et bien la page change en fonction de celui-ci.

    Or avec la méthode de sélection que tu as décrite, rien ne se passe. Enfin le bon item est sélectionné dans la liste, mais la page ne change pas pour autant, et il n'y a pas de bouton "OK" pour valider mon choix sur la page..

    Peux-tu m'aider sur ce point ?


    Merci.

    Haribo.

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Pour la partie 64 bits, je n'ai pas d'avis étant donné que je n'ai pas le problème.

    Shaekin : Si j'ai bien compris ton problème, lorsque tu renseignes les deux premières listes déroulantes, la troisième qui apparait en temps normal lors d'une saisie manuelle, n'apparait pas lors d'une saisie via un code VBA. C'est normal, si tu regardes le code HTML des deux premières listes déroulantes, tu as quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <select onchange="test(this)" name="code_beneficiaire" id="code_beneficiaire">
    .....
                </select>
    On peut voir que la liste déroulante exécute la fonction test() à chaque changement de son contenu, hors lors d'une saisie via un code VBA, le composant ne considère pas cela comme un changement... il faut donc provoquer l'événement OnChange de la liste déroulante (c'est le plus simple) ou appeler la procédure Test (plus compliqué je pense, puisqu'il faut passer l'objet liste déroulante en paramètre à la fonction test()).

    Regarde du coté de fireevent()
    ça devrait donner un truc comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListeDeroulante.fireEvent("onchange")
    ListeDeroulante étant la variable qui pointe vers la liste déroulante dont tu viens de changer le contenu.

    J'espère que mes explications sont claires

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut Liste déroulante cachée
    Bonjour,

    Tout d'abord merci Qwazerty. D'une part pour ton super tutoriel et d'une autre part pour ta réponse. Cependant, je n'arrive toujours pas à récupérer les informations de la troisième liste déroulante.

    Effectivement, j'ai trouvé le "onchange", seulement sur la deuxième liste déroulante (chose qui semble normal car c'est après remplir cette liste que la troisième apparaît). Merci donc pour fireevent() que je ne connaissais pas!!

    Une fois la troisème liste est visible, je pensais que je pourrais faire comme sur les autres pour récupérer les options et inclure une valeur (inputelement). J'ai créé le même code (pour tout dire, copier/coller de ton tutoriel) mais il y a des erreurs que je n'arrive pas à comprendre. J'ai regardé un peu plus en profondeur sur le code html de cette liste et je me demande si c'est le "block" qui interdit au code de fonctionner :

    <div id="objet" style="display: block;">

    J'ai essayé avec getElementsbyId et getElementsByName mais je n'arrive pas à pointer la liste. D'après ce que j'ai compris, c'est toujours "nothing".

    Le but étant d'avoir tous les choix possible afin de par la suite automatiser la sortie de la base de données sur Excel. Comme je ne sais pas si j'arrive bien à m'expliquer, tu trouveras ci-joint mon classeur avec la macro en cours.

    Je te remercie d'avance de ton aide ! Par ailleurs, si tu connais un tutorieTest avec erreurs.xlsml/lien ou un livre sur ça, je suis fortement intéressé. J'ai appris grâce à toi qu'on pouvait agir via Excel sur un site web. Je connais donc presque rien et je suis un peu perdu avec tous ce genre de commandes.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut Liste déroulante cachée
    Bonjour,

    Quazerty, j'ai besoin de ton aide, je suis toujours bloqué car je n'arrive pas à inclure des valeurs dans la liste déroulante cachée.

    J'ai essayé avec tous les options de ton tutoriel :

    getElementsbyId : il s'agit d'un objet div donc pas d'Id
    getElementsbyName : "objet_aide" mais il ne retrouve rien

    J'ai même inclus un espion pour chercher l'Item correspondant (au début je ne savais pas comment le faire). J'ai cru trouver mon bonheur avec l'item 201, mais quand j'execute le code, j'ai toujours une erreur.


    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
     
    'Objet Aide
    'Cet objet est caché avant la sélection du bénéficiaire. Il faut donc choisir avant les deux premières valeurs afin de faire apparaître la troisième liste
     
    'Choisir le département
     
    Set htmlSelectElem1 = IEDoc.all("departement")
     
    'Exemple : Département 1
    htmlSelectElem1.Value = "01"
     
     
    'Ecrire le beneficiaire
     
    'On pointe notre Zone de texte
       Set htmlInputElem2 = IEDoc.all("code_beneficiaire")
       htmlInputElem2.Value = "occupant"
       htmlInputElem2.FireEvent ("onchange")
    'On attend la fin de la recherche
    WaitIE IE
     
     
    'Choisir l'objet de l'aide
     
    Set htmlElementStandard = IEDoc.body.all(201)
     
    'Erreur car le code ne trouve rien
     
    htmlElementStandard.Value = "choix1"

    Je te remercie d'avance. je pense avoir laissé le fichier Excel dans mon dernier post. Cependant, je suis incapable de le trouver. N'hésites pas à me dire si tu ne le trouves pas.

    Shaekin

  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
    onjour
    en effet je viens de tester sur l'exemple d url que tu avais donné et la list3 semble etre innacessible en mode vba

    c'est en effet assez récurent sur les pages web aujourd'hui il colle la protection onwindowsbygoogleapps ce qui implique que les manipulation ne peuvent se faire qu'avec la souris sur la page web et donc on window

    sur certains cite n'ayant besoins que de récupérer du texte je la supprime mais la si je fait ca la page plante
    resultat des courses WALOUHH!!!!!!!!

    j'ai bien essayé par le parent (div id="object")mais ca pase pas non plus

    c'est assez ragent!!! surtout que j'arrive a récupérer le code innerhtml de la liste

    voila encore un defit pour moi

    voila le responsable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script type="text/javascript">
       var _gaq = _gaq || [];
       _gaq.push(['_setAccount', 'UA-27882341-1']);
       _gaq.push(['_trackPageview']);
       (function() {
         var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
         ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
         var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
       })();
     </script>
    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
    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 un exemple qui fonctionne
    re
    voila prends celui la
    j'ai bloqué la derniere ligne du code elle sert a cliquer sur le bouton debloque si tu veux cliquer
    je l'ai bloqué pour que tu vois bien que les items des 3 listes sont bien changés
    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
    sub test()
    Dim ie As Object, url As String, liste1 As Object, liste2 As Object, parentliste3 As Object, lescript, code As String
    url = "http://habitat-developpement.tm.p15.siteinternet.com/particuliers/index.cfm?cont=aide_habitat"
    Set ie = CreateObject("internetexplorer.application")
    ie.navigate url
    ie.Visible = True
    Do: DoEvents: Loop While ie.readystate <> 4 Or ie.busy
    '*****************************************************************************************
    'on casse la protection en coupant les script du code html
    code = ie.document.body.innerhtml
    lescript = Split(code, "<script")
    code = Replace(code, Split(lescript(2), "/script>")(0), "")
    ie.document.body.innerhtml = code 'on réimplante le code html dans le body du document
    '*****************************************************************************************
    Set liste1 = ie.document.all("departement")
    Set liste2 = ie.document.all("code_beneficiaire")
    'maintenant on va selectionner mon departement (83) par son index
    liste1.selectedIndex = 84
    'je suis proprio  donc le 2 item de la liste2  (locataire) donc l'index 2 puisque le 1 er c'est l'entete
    liste2.selectedIndex = 2: liste2.onchange
        Application.Wait (Now + TimeValue("0:00:02"))
    Set parentliste3 = ie.document.getelementbyid("objet")
     parentliste3.Children(0).selectedIndex = 2
    'debloque cette ligne pour cliquer sur le bouton
    ie.document.getelementbyid("monform").submit
    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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    Bonjour,

    Tout d'abord, merci beaucoup patricktoulon !!

    Comment as-tu appris cette technique ? Je cherche des bouquins ou autres qui puissent m'aider à devenir autonome. Car encore une fois, j'arrive à faire des choses, mais pas tout.

    J'ai presque fini les macros pour extraire la base de données. Grâce à vous logiquement. Je compte poster le fichier une fois fini, car je pense qu'il peut être utile pour d'autres personnes (sujet liste déroulantes cachées : comment les faire apparaître, sujet bloqué sur VBA : comment le contourner, etc.)

    Cependant, j'ai encore un dernier soucis. J'arrive à ouvrir une par une les différents "aides du département". J'arrive bien à copier les informations qui sont dans les cadres. Cependant, je n'arrive pas à copier l'innertext (le nom de l'aide - cadre vert).

    Nom : Image1.png
Affichages : 1731
Taille : 29,8 Ko
    Nom : Image2.png
Affichages : 1719
Taille : 33,9 Ko
    C'est -à-dire, chaque cadre a un nom (logique) décrit comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <div class="titre_aide" id_titreaide_1="">>
    Aide à la rénovation énergétique des logements anciens
    Il n'a pas d'id (c'est vide). Il y a juste la class. J'ai cherché sur internet voir si la commande getElementsByClass existe (getElementsByClassname). Apparemment il y a des problèmes avec IE8 pour utiliser cette fonctionalité. J'ai continué à regarder, et il y a des gens qui ont créé des fonctions. Cependant, je n'arrive pas à les faire fonctionner.

    Est-ce que quelqu'un a eu le même soucis ? Comment peut-on faire pour trouver des objets qui n'ont pas d'id ?

    D'avance merci !!

    Shaekin

Discussions similaires

  1. [C#][debutant] Liste déroulante 2 colonnes cachées
    Par vavou dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/08/2006, 20h42
  2. Champ caché dans liste déroulante
    Par Dobyan08 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/08/2006, 19h18
  3. liste déroulante cachée
    Par 18Marie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/06/2006, 21h09
  4. Liste déroulante avec identifiant "caché"
    Par critok dans le forum Composants
    Réponses: 9
    Dernier message: 05/12/2005, 23h04
  5. Réponses: 1
    Dernier message: 28/09/2005, 19h10

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