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 :

Passage item ListBox1 à ListBox2


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut Passage item ListBox1 à ListBox2
    Bonjour à tous,

    j'ai quelques soucis à envoyer la valeur des items contenus dans une Listbox vers une autre Listbox. En d'autres termes, j'ai deux listes : ListBox1 et ListBox2 ainsi que deux boutons. Le premier à pour but de copier la valeur de l'item sélectionné de la ListBox1 vers la ListBox2, le second bouton supprime un item de la ListBox2.

    Malheureusement, je ne parviens pas à pointer sur la valeur de l'item, je reste coincé sur son index.

    Voici mon 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
    22
    23
    24
    Private Sub CommandButton1_Click()
     
        ListBox2.AddItem (ListBox1.Index)
        ListBox2.AddItem rep, ListBox2.ListIndex
     
    End Sub
     
    Private Sub CommandButton2_Click()
     
        ListBox2.RemoveItem (ListBox2.ListIndex)
     
    End Sub
     
    Private Sub ListBox1_Click()
     
        ListBox1.Clear
        ListBox1.AddItem "valeur1"
        ListBox1.AddItem "valeur2"
     
    End Sub
     
    Private Sub ListBox2_Click()
     
    End Sub
    Ca va peut être vous parraître super simple, mais perso je nage...
    Merci pour votre aide.
    Je vous joint mon fichier excel au cas où
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu peux essayer comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click() 'Ajouter
        If ListBox1.ListIndex > -1 Then ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)
    End Sub
    Private Sub CommandButton2_Click() 'Supprimer
        If ListBox2.ListIndex > -1 Then ListBox2.RemoveItem (ListBox2.ListIndex)
    End Sub
    Private Sub Worksheet_Activate()
        ListBox1.Clear
        ListBox1.AddItem "Valeur1"
        ListBox1.AddItem "Valeur2"
    End Sub
    Cordialement.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    SUPERRRRR !!!!

    C'est exactement ce que je voulais... maintenant je vais essayer d'ajouter des petites fonctions pour améliorer tout çà.

    Merci beaucoup gFZT82

    Un petit doute...

    Je souhaite à l'ouverture de mon document excel initialiser la ListBox1 avec mes valeurs. Du coup j'ai créé une routine comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_Open()
     
        ' Initialisation de la ListBox1
        ListBox1.Clear
        ListBox1.AddItem "Vol aller"
        ListBox1.AddItem "Vol intermédiaire"
        ListBox1.AddItem "Vol retour"
        ListBox1.AddItem "Escale avec arrêt"
        ListBox1.AddItem "Escale sans arrêt"
     
    End Sub
    Le problème est qu'à l'ouverture du fichier, un message d'erreur que l'objet ListBox1 n'est pas défini. Du coup, je me pose la question suivante :

    Au moment de l'ouverture du fichier, la fonction s'initialise avant la création des objets "graphiques" (boutons, ListBox...)?
    Si non, pourquoi ne voit-il pas ma ListBox?

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour,
    il faut indiquer dans quelle feuille se trouve les contrôles.
    essai ceci :
    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 Workbook_Open()
     
    With Sheets("Feuil1")
        'Creation de ma liste d'items
        malist = Array("Vol aller", "Vol intermédiaire", "Vol retour", "Escale avec arrêt", "Escale sans arrêt")
     
         ' Initialisation de la ListBox1
        .ListBox1.Clear
        .ListBox1.List = malist
     
    End With
     
    End Sub
    Remarque que j'ai aussi utilisé un tableau Array pour regrouper tes items dans une variable pour ensuite utiliser la propriété "List" de la combo pour la remplir.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une autre solution pour déplacer les éléments d'une listbox vers l'autre, avec un glisser/déposer. A tester (les listbox se nomment ListBox1 et ListBox2 dans le code, à adapter) :
    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
     
    Private Sub ListBox1_MouseMove( _
                ByVal Button As Integer, _
                ByVal Shift As Integer, _
                ByVal X As Single, _
                ByVal Y As Single)
     
        Dim Obj As DataObject
        Dim Action As Integer
     
        If Me.ListBox1 = "" Then Exit Sub
     
        If Button = 1 Then
     
            Set Obj = New DataObject
     
            With ListBox1
     
                Obj.SetText .Column(0, .ListIndex) _
                & "*" & .Column(1, .ListIndex)
     
            End With
     
            Action = Obj.StartDrag
     
        End If
     
        Set Obj = Nothing
     
    End Sub
     
    Private Sub ListBox2_BeforeDragOver( _
                ByVal Cancel As MSForms.ReturnBoolean, _
                ByVal Data As MSForms.DataObject, _
                ByVal X As Single, _
                ByVal Y As Single, _
                ByVal DragState As MSForms.fmDragState, _
                ByVal Effect As MSForms.ReturnEffect, _
                ByVal Shift As Integer)
     
        Cancel = True
     
        Effect = 2
     
    End Sub
     
    Private Sub ListBox2_BeforeDropOrPaste( _
                ByVal Cancel As MSForms.ReturnBoolean, _
                ByVal Action As MSForms.fmAction, _
                ByVal Data As MSForms.DataObject, _
                ByVal X As Single, _
                ByVal Y As Single, _
                ByVal Effect As MSForms.ReturnEffect, _
                ByVal Shift As Integer)
     
        Dim Pos As Integer
     
        Cancel = True
        Effect = 2
        Pos = InStr(Data.GetText, "*")
     
        With ListBox1
     
            .RemoveItem .ListIndex
     
        End With
     
        With ListBox2
     
            .AddItem Left(Data.GetText, Pos - 1)
            .Column(1, .ListCount - 1) = Right(Data.GetText, Pos - 1)
     
        End With
     
    End Sub
    Hervé.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Merci à tous pour vos conseils.

    Theze, ta solution m'intéresse aussi, je vais tenter de la mettre en place



    Ta fonction glisser-déposer est intéressante mais je je serai plus intéressé par un copier-deposer car je souhaite que les items de ma ListBox1 restent présents...

    Je vais tenter de m'en inspirer

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

Discussions similaires

  1. Copié une ligne de listBox1 à listBox2
    Par info.pascal dans le forum Débuter
    Réponses: 4
    Dernier message: 15/12/2010, 23h57
  2. [XL-2007] Un ListBox2 qui dépend du choix de l'autre ListBox1
    Par chikitin dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/06/2010, 15h43
  3. comment ajouter items d'un lisbox1 vres listbox2 sans doublon
    Par salim2020 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/09/2009, 23h42
  4. Click sur listbox1.items[1]
    Par NapsterVB dans le forum Delphi
    Réponses: 1
    Dernier message: 29/12/2006, 12h15
  5. Réponses: 15
    Dernier message: 19/05/2006, 15h55

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