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

VBScript Discussion :

VBSCRIPT/HTA: Dropdown listes avec autoselection dans la liste 2 en fonction de la selection dans la liste 1


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut VBSCRIPT/HTA: Dropdown listes avec autoselection dans la liste 2 en fonction de la selection dans la liste 1
    Chères et chers Développeurs,

    A partir d'un csv j'ai construis deux dropdown listes en vbscript/hta. Chaque liste provient d'une colonne du csv. Ce que je souhaite c'est que lorsque je sélectionne une valeur dans la dropdown liste 1 ça autoselecte la valeur correspondante (car sur la même ligne dans le csv) dans la dropdown liste 2. Je ne souhaite pas que la liste 2 affiche uniquement le résultat sélectionné (avec début ou fin de la liste effacé) mais bien la liste ENTIÈRE avec le résultat sélectionné dedans.
    Par exemple dans le cas ci dessous si je sélectionne "TOTO Bibi" dans la liste 1 ca m'autoselectionne Projet n°24 dans la liste 2. Et si je ne suis pas d'accord avec cette autoselection j'ai toujours le choix de choisir un des autres Projets de la liste.
    Je pensais que ça allait être simple mais je n'y arrive pas du tout.

    J'ai pour l'instant le script .hta qui créer les deux dropdownlists:

    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
    <html>
    <head>
    <title>Local Users</title>
     
    <HTA:APPLICATION 
         ID="objHTAHelpomatic"
         APPLICATIONNAME="LocalUsers"
         SCROLL="yes"
         SINGLEINSTANCE="yes"
         WINDOWSTATE="normal"
    >
    </head>
     
    <SCRIPT Language="VBScript">
    'Get the current path
    sCurPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
     
        Sub Window_Onload
     
    Set Userlist = CreateObject("Scripting.FileSystemObject")
    Set Userlistf = Userlist.OpenTextFile(sCurPath & "\List.csv", 1)
    Dim arrUsers ()
    ReDim arrUsers(7, 0)
    Do While Not Userlistf.AtEndOfStream
    'les lignes sont splitées par "," en colonne (arrTemp)
    arrTemp = Split(Userlistf.ReadLine, ",")
    i = 0
    'Compte seulement les deux premières colonnes (Nom Prenom)
    boolUserFind = False
    If arrTemp(1) = arrUsers(0, i) Then boolUserFind = True
    If arrTemp(2) = arrUsers(1, i) Then boolUserFind = True 
    Do While boolUserFind = False AND i < Ubound(arrUsers, 2)
    i = i + 1
    If arrTemp(1) = arrUsers(0, i) Then boolUserFind = True
    If arrTemp(2) = arrUsers(1, i) Then boolUserFind = True 
    Loop
     
    Redim Preserve arrUsers (7, Ubound(arrUsers, 2) + 1)
    arrUsers(0, Ubound(arrUsers, 2) - 1) = arrTemp(1)
    arrUsers(1, Ubound(arrUsers, 2) - 1) = arrTemp(2)
    arrUsers(6, Ubound(arrUsers, 2) - 1) = arrTemp(6)
    Loop
     
    Redim Preserve arrUsers (7, Ubound(arrUsers, 2) - 1)
     
    'Pour chaque ligne récupère 1ère, 2ème et 7ème colonne
    strTemp = ""
    For i = 0 To Ubound(arrUsers, 2)
    strTemp = arrUsers(0, i) & " " & arrUsers(1, i) & vbcrlf 
    strTemp2 = arrUsers(6, i) & vbcrlf 
     
    'Créer les deux dropdownlists
                Set objOption = Document.createElement("OPTION")
                objOption.Text = strTemp
                objOption.Value = strTemp
                LocalUsers.Add(objOption)
     
    			Set objOption2 = Document.createElement("OPTION")
    			objOption2.Text = strTemp2
                objOption2.Value = strTemp2
    			Projects.Add(objOption2)
    Next
       End Sub
     
    </SCRIPT>
     
    <body>
        <select name="LocalUsers">
        </select>
    	    <select name="Projects">
        </select>
    </body>
    </html>

    Et voici le contenu du fichier list.csv pour tester le script hta

    ,TOTO,Bibi,,,,Projet n° 24,,,,,,,,,,
    ,TATA,Bebe,,,,Projet n° 32,,,,,,,,,,
    ,TITI,Bobo,,,,Projet n° 03,,,,,,,,,,
    ,TUTU,Bubu,,,,Projet n° 11,,,,,,,,,,


    Merci grandement pour votre aide!

    Grundraisin

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Si quelqu'un a le courage! Please

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    [1] D'abord vous mettez la déclaration dim arrUsers() dehors de la window_onload pour qu'elle acquiert une portée globale.
    Code vbscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <SCRIPT Language="VBScript">
    dim arrUsers()
    'etc etc...
     
    Sub Window_Onload
    Set Userlist = CreateObject("Scripting.FileSystemObject")
    Set Userlistf = Userlist.OpenTextFile(sCurPath & "\List.csv", 1)
    'Dim arrUsers ()    'commented out
     
    'etc etc...
     
    End Sub

    [2] Puis, vous ajoutez un onchange handler, nommé doThing par exemple, sur l'objet HTMLSelectElement LocalUsers:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        <select name="LocalUsers" onchange="doThing(me.selectedIndex)">
        </select>

    [3] Puis, vous écrivez une fonction ou sub comme ça mininmaliste dans la section script.
    Code vbscript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function doThing(v)
        set csel=document.getElementsByName("Projects")
        if csel.length<>0 then
            if strcomp(csel(0).tagName, "select", 1)=0 then
                csel(0).selectedIndex=v
            end if
        end if
        set csel=nothing
    end function

    et voilà !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup tsuji! Ca marche mais.....
    Si je place mes Dim arrUsers () avec mes For et mes Next en dehors de ma Sub Window_Onload, mes dropdownlists ne contiennent que la dernière ligne de mon fichier.
    Mais si je les laisse dans la Sub alors ça marche:

    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
    82
    <html>
    <head>
    <title>Local Users</title>
     
    <HTA:APPLICATION 
         ID="objHTAHelpomatic"
         APPLICATIONNAME="LocalUsers"
         SCROLL="yes"
         SINGLEINSTANCE="yes"
         WINDOWSTATE="normal"
    >
    </head>
     
    <SCRIPT Language="VBScript">
    'Get the current path
    sCurPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
     
        Sub Window_Onload
      Set Userlist = CreateObject("Scripting.FileSystemObject")
    Set Userlistf = Userlist.OpenTextFile(sCurPath & "\List.csv", 1)
    Dim arrUsers ()
    ReDim arrUsers(7, 0)
    Do While Not Userlistf.AtEndOfStream
    'les lignes sont splitées par "," en colonne (arrTemp)
    arrTemp = Split(Userlistf.ReadLine, ",")
    i = 0
    'Compte seulement les deux premières colonnes (Nom Prenom)
    boolUserFind = False
    If arrTemp(1) = arrUsers(0, i) Then boolUserFind = True
    If arrTemp(2) = arrUsers(1, i) Then boolUserFind = True 
    Do While boolUserFind = False AND i < Ubound(arrUsers, 2)
    i = i + 1
    If arrTemp(1) = arrUsers(0, i) Then boolUserFind = True
    If arrTemp(2) = arrUsers(1, i) Then boolUserFind = True 
    Loop
     
    Redim Preserve arrUsers (7, Ubound(arrUsers, 2) + 1)
    arrUsers(0, Ubound(arrUsers, 2) - 1) = arrTemp(1)
    arrUsers(1, Ubound(arrUsers, 2) - 1) = arrTemp(2)
    arrUsers(6, Ubound(arrUsers, 2) - 1) = arrTemp(6)
    Loop
     
    Redim Preserve arrUsers (7, Ubound(arrUsers, 2) - 1)
     
    'Pour chaque ligne récupère 1ère, 2ème et 7ème colonne
    strTemp = ""
    For i = 0 To Ubound(arrUsers, 2)
    strTemp = arrUsers(0, i) & " " & arrUsers(1, i) & vbcrlf 
    strTemp2 = arrUsers(6, i) & vbcrlf 
     
    'Créer les deux dropdownlists
                Set objOption = Document.createElement("OPTION")
                objOption.Text = strTemp
                objOption.Value = strTemp
                LocalUsers.Add(objOption)
     
    			Set objOption2 = Document.createElement("OPTION")
    			objOption2.Text = strTemp2
                objOption2.Value = strTemp2
    			Projects.Add(objOption2)
     Next
       End Sub
     
     function doThing(v)
        set csel=document.getElementsByName("Projects")
        if csel.length<>0 then
            if strcomp(csel(0).tagName, "select", 1)=0 then
                csel(0).selectedIndex=v
            end if
        end if
        set csel=nothing
    end function
     
    </SCRIPT>
     
    <body>
        <select name="LocalUsers" onchange="doThing(me.selectedIndex)">
        </select>
    	    <select name="Projects">
        </select>
    </body>
    </html>
    Donc:

    et merci merci merci encore!

  5. #5
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Au départ j'avais pensé que les data dans arrUsers puissent s'en servir dans la recheche la valeur de select secondaire ou ailleurs, et puis finalement, j'avais pris un chemin encore plus simple d'en profiter du caratère spécial de la construction via csv etc... Donc, la section [1] devient d'aucune importance et on peut s'en passer.

    Sur l'erreur que vous mentionnez, c'est simplement probablement un malentendu : je ne veux pas dire de mettre tout lié au arrUsers dehors la window_onload, juste la déclaration, une seule ligne. Je ne pense pas ça résulte d'erreur quelconque.

    Merci de votre attention.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/01/2016, 16h21
  2. Réponses: 0
    Dernier message: 18/03/2013, 12h05
  3. Réponses: 12
    Dernier message: 12/03/2007, 16h58
  4. pb dans la stl::list avec size
    Par DEVfan dans le forum SL & STL
    Réponses: 6
    Dernier message: 10/01/2007, 18h35
  5. Ajout dans une liste avec un bouton
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 07/12/2005, 08h27

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