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

VB 6 et antérieur Discussion :

[VB6] Recuperer un index d'une listbox1 et l'utilisé dans une listbox2


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Par défaut [VB6] Recuperer un index d'une listbox1 et l'utilisé dans une listbox2
    J’utilise le programme suivant, en faite je saisi un nombre dans un textbox puis je validé avec command1_click, j'aimerai que la valeur num se place dans une listebox2 en face du texte que j'ai selectionné sur une listbox1 (avant la saisi), c'est un peut un tableau avec 2 colonnes (listbox1 et listbox2)


    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
     
    'Saisi du nombre de rebus par défaut
    Private Sub Command1_Click()
    Dim a() As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    List2.Clear
    b = Int(Text1.text)
    c = List1.ListIndex
    ReDim Preserve a(c)
    a(c) = b
    d = 0
    Do While (d < c)
    List2.a (a(d))
    d = d + 1
    Loop
    List2.AddItem Text1
     
    End Sub
    Le problème, c’est que si je sélectionne la 4e ligne dans la list1 par exemple, j’affiche bien le nom saisi dans la ligne correspondante de la list2, mais toute les lignes pressentes avant sont rempli par des 0
    Si je refais une saisi en sélectionnant la ligne 7 de la list1 par exemple, j’affiche bien le nombre saisi dans la 7e ligne de la list2, mais toute les valeurs précédentes sont remplacer par 0 aussi

    En faite, je pense que c’est l’instruction « «List2.AddItem (a(d)) » qui pose problème, car j’ai l’impression qu’avec cette ligne, je remplace toute les valeurs a chaque nouvelle saisi, car j'utilise additem

    Il existe peut etre une fonction qui permet de sauté une ligne dans une listbox (sans y insérer des valeurs, si oui, comment l’utiliser ?

    Je ne possède pas l’aide dans le logiciel, il est écris : « la collection MSDN n’existe pas, Veuillez réinstaller MSDN », le problème, c’est que MSDN n’est pas présent sur le cd que je possède

    Merci beaucoup pour votre aide,

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Par défaut
    En relisant le message, je me rend compte que j'ai oublier le plus important, *boujour

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par bvi67
    En relisant le message, je me rend compte que j'ai oublier le plus important, *boujour
    oui tu as aussi oublié les balises de codes ( bon je l'ai fait pour toi...), maintenant manque à tagger le titre [VB6],[VBA-E]...?

  4. #4
    Membre émérite
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Par défaut
    Alors crée une nouvelle form , ajoute 2 listes et un controle texte et regarde ce que nous fait ce code... peu etre cela t'inspirera t il

    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
     
    Private Sub Form_Load()
    List1.AddItem "AAA"
    List1.AddItem "BBB"
    List1.AddItem "CCC"
    List2.AddItem "AAA"
    List2.AddItem "AAA"
    List2.AddItem "AAA"
    End Sub
     
    Private Sub List1_Click()
        Text1.Text = List2.List(List1.ListIndex)
        List2.Selected(List1.ListIndex) = True
    End Sub
     
    Private Sub Text1_Change()
        List2.List(List1.ListIndex) = Text1.Text
        List2.Selected(List1.ListIndex) = True
    End Sub

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Tu as aussi un probléme de "portée" de vairables et gestion de tableaux...je sais pas exactement ce que tu ve faire avec ton tableau a()... mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Command1_Click()
    Dim a() As Integer ' ==> Ici tu initialise le tableau il est vide ...
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    List2.Clear
    b = Int(Text1.text)
    c = List1.ListIndex
    ReDim Preserve a(c) '==> ici tu redimensionne le tableau  en fonction de 
    'la position actuelle dans list1. (le tableau à maintenant une taille c .. et
    'est rempli de 0 , valeur initiale d'un entier en vb..)
    a(c) = b  '==> ici tu affecte le contenu de b en a(c).. ? valeur de Text1

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Par défaut
    ben c'est du rapide ca, j'essai ca des demain, :-)

    bbil, excuse moi pour la mise en page ..j'y penserai la prochaine fois,
    Vesta, j'oublirai pas de mettre resolu quand ca fonctionnera sur mon ecran,

    merci pour votre aide et la rapidité de vos reponses,

  7. #7
    Membre émérite
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Par défaut
    De rien j'attend des nouvelles demain :p

    Merci pour le résolu :p qui sera la demain je l'espere

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Quand tu reviens, mets un tag dans ton titre comme l'a demandé bbil...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Par défaut
    Bonjour

    Vesta Le code que tu me propose ne fonctionne pas entièrement, j’ai des erreurs pendant l’exécution.

    J’ai effectuer des modifications sur le code

    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
     
    'Saisi du nombre de rebuts par defaut
    Private Sub Command1_Click()
    Dim a() As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    e = List1.ListCount
    ReDim Preserve a(e)
    List2.Clear
    b = Text1.text
    c = List1.ListIndex
    a(c) = b
    d = 0
    Do While (d < c)
    List2.AddItem a(d)
    d = d + 1
    Loop
    List2.AddItem Text1
     
    End Sub

    J’ai bien compris que la ligne ‘redim preserve a(e)’ met la valeur 0 dans toute les lignes du tableau, c’est pas ce que je veux, mais comment faire pour dimensionné un tableau dans ce cas ?

    Pour 'a(c) = b ', je veux bien affecter la valeur de text1 dans le tableau a a l'emplacement c qui représente le n° de ligne selectionné dans list1

    A part les 0 (dans list2) dans les lignes avant celle sélectionné dans list1, a chaque nouveau click sur command1, toute les valeurs précédentes (les 0 et la valeur de text1 précédente) sont effacé, normal, car j’utilise ‘list2clear ‘, mais si je supprime la ligne, les valeurs suivantes se place a la suite, dans les 2 cas, c’est pas ce que je veux faire,

    Ce que je souhaite, c’est cliqué sur une ligne de list1 et d’y ajouté une valeur saisi dans text1, puis cliqué sur une autre ligne de list1 et ajouté une 2e valeur dans list2 (a l’emplacement qui correspond, la même ligne de list1)

    Toute les lignes doivent être rempli avant de valider le tableau, un 0 sur une ligne non saisi pourrai faire croire que la ligne a déjà été saisi, or ce n’est pas le cas, toute les lignes doivent être saisi manuellement via text1,

    Merci pour votre aide

  10. #10
    Membre émérite
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Par défaut
    arf tien prend le je l'ai joint
    Fichiers attachés Fichiers attachés

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Par défaut
    en faite la ligne 'a(c) = b ' ne sert a rien, je l'ai supprimé du code,

    merci VESTA, je vais l'essayer

  12. #12
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par bvi67
    J’ai bien compris que la ligne ‘redim preserve a(e)’ met la valeur 0 dans toute les lignes du tableau, c’est pas ce que je veux, mais
    non elle ne met pas 0 dans toutes les lignes du tableau, mais seulement dans les nouvelles "lignes" cependant le tableau étant vide au départ... toutes les "lignes" sont nouvelles...., pour conserver les valeurs d'un tableau entre 2 appels de fonctions .. il faut le déclarer en static...

  13. #13
    Membre expérimenté Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Par défaut
    Bonjour,
    je ne sais pas si j'ai bien saisis ton problème (Ex: je ne comprend pas pourquoi tu veux utiliser un tableau).
    Le code ci joint utilise deux listes dont la deuxieme est initialisé à vide ("") du meme nombre d'item que la premiere
    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
    Option Explicit
     
    Private Sub btQuitter_Click()
       Me.Visible = False
       End
    End Sub
     
    Private Sub Command1_Click()
       Dim i As Integer
       For i = 1 To 5
          List1.AddItem Format(i, "0000")
          List2.AddItem ""
       Next i
     
    End Sub
     
    Private Sub List1_Click()
        'On retire l'item      
       List2.RemoveItem List1.ListIndex
       List2.AddItem List1.Text, List1.ListIndex
     
    End Sub
    Quand je clique sur une valeur de list1 elle se met en face dans list2 (plus exactement au meme index)

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Par défaut
    Bonjour,

    Le programme que m’as proposer Vesta contient ce que je veux faire dans le principe, sélectionner une ligne dans list1 et la sélectionner automatiquement dans list2, je suis parti sur quelque chose de trop compliqué au départ.

    Cependant, je voudrai intégrer quelques détails supplémentaire,

    Passage a la ligne suivante dans list1, quand je valide, je voudrai passé directement a la ligne suivante dans list1, avec si possible le curseur qui reste dans le champ de sais de text1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    j = List1.ListCount
     
    If i < j Then
    i = i + 1
    List1.ListIndex = List1.ListIndex + 1
    End If
     
    If i = j Then
    List1.ListIndex = 0
    End If
     
    End Sub
    Voila le programme que j'ai réaliser, cela fonctionne mais j’ai un “bip” après chaque validation et le programme beug après validation de la dernière ligne, j’ai le message, « valeur de propriété incorrecte » a la ligne ‘List1.ListIndex = List1.ListIndex + 1

    Comment faire pour éviter le « bip » et supprimer l’erreur a la fin de la dernière ligne ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Form_Load()
     
    'Compteur pour affichage selon nbre de ligne dans list1
    For C = 1 To 20
    List1.AddItem ""
    List2.AddItem ""
    Next C
    Ici, je souhaiterai faite une boucle pour “ajouter” les ligne que je peux sélectionné dans list1 en fonction du nombre a afficher (importé d'access etdifférents a chaque fois)
    J’ai utiliser list1.listCount, mais j’ai des erreurs, je aussi vu que une boucle de ce style fonctionne seulement pour des valeurs fixe (1 et 20 par exmeple), je n’ai pas d’autre solution que celle ci, elle fonctionne mais bon

    Voilà, ce qu je veux faire je pense et pas bien compliqué, mais je n’ai pas assez de connaissance et d’expérience en vb (et dans les autre langage de prog info) pour résoudre ces problème, je suis pris par le temps et mes recherches ne apporte pas ce que je souhaite,
    Je posterai l’intégralité du programme concernant list1, list2 et text1 quand je l’aurai fini,

    Merci pour vos reponse,

  15. #15
    Membre expérimenté Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Par défaut
    j'avais mal (pas??) lu ton post (oui, je sais, one again!), mon précédent message est un poil totalement hors sujet

    Ci joint le code qui passe à la ligne suivante (ou à la premiere ligne si derniere ligne en cours) et redonne le focus au textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Command1_Click()
       List2.List(List1.ListIndex) = Text1.Text
       List2.Selected(List1.ListIndex) = True
       'On passe à la ligne suivante sur List1
       List1.ListIndex = IIf(List1.ListIndex = List1.ListCount - 1, 0, List1.ListIndex + 1)
       'On se repositionne sur le textbox
       Text1.SetFocus
    End Sub
    Par contre, le bip après chaque validation ??????

    Citation Envoyé par bvi67
    une boucle de ce style fonctionne seulement pour des valeurs fixe
    Oui le for next est utilisé quand tu connais le debut et la fin avant de rentrer dans la boucle et que tu veux parcourir tous les éléments.
    Si ton parcours fait des sauts (avants ou arrieres (mais ça c'est très chaud!!)) ou que la condition de fin varie pendant l'execution de code dans la boucle, c'est plutot le do... loop qu'il faut utiliser (dont le for next est dérivé).
    Un conseil: reflechis bien aux différents cas, une boucle infinie est vite arrivée (ce cas est nettement plus improbable avec le for...next). Par exemple: plutot mettre un >= ou <= qu'un = sur la condition de sortie.

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 18
    Par défaut
    Mecri beaucoup Adhoc, le code sur le passage a la ligne suivante fonctionne parfaitement,

    Merci pour votre aide,

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

Discussions similaires

  1. Réponses: 40
    Dernier message: 21/06/2007, 18h58
  2. Réponses: 22
    Dernier message: 12/06/2007, 00h24
  3. Réponses: 1
    Dernier message: 16/05/2007, 13h51
  4. [MySQL] récupérer dans une boucle chaque information MySQL dans une variable différente
    Par gtenthorey dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2007, 23h34
  5. Réponses: 2
    Dernier message: 20/06/2006, 09h22

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