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 :

Selection plusieurs lignes dans une listbox et les glisser dans une seconde listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut Selection plusieurs lignes dans une listbox et les glisser dans une seconde listbox
    Bonjour
    Je veux creer une Listbox1dont les rowsource seraient bien defini (exemple A1:D5).
    Je voudrais offrir la possiblité de sélectionner plusieurs lignes de cette Listbox1 et les "transférer" dans une Listbox2 en les validant par un bouton.
    Comment procéder ?????????

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un exemple d'une procédure qui transfère les lignes d'un ListBox vers un autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub MoveListBox(FromListBox As MSForms.ListBox, ToListBox As MSForms.ListBox)
     Dim c As Integer
     With FromListBox
      ToListBox.AddItem .List(.ListIndex, 0)
      For c = 1 To .ColumnCount: ToListBox.List(ToListBox.ListCount - 1, c) = .List(.ListIndex, c): Next
      .RemoveItem (.ListIndex)
     End With
    End Sub
    Les procédures événementielles qui l'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      MoveListBox Me.ListBox1, Me.ListBox2
    End Sub
    Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      MoveListBox Me.ListBox2, Me.ListBox1
    End Sub
    Dans cet exemple, le ListBox1 est le seul qui a des données au chargement du UserForm et il y a plus d'une colonne dans les ListBox.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut
    bonjour
    j'ai testé les codes (que je n'ai pas compris) et ca fonctonne pas.

    erreur de compilation dans .removeitem.
    Peux tu me renvoyer une feuille .xls avec les procédures et fonction associés et qui fonctionne. Ce sera plus simple et cela me permettra de voir si je me suis bien fait comprendre dans ma demande.
    merci !!

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le code que j'ai publié ne fonctionnait pas avec la propriété RowSource mais avec la méthode AddItem ce qui explique sans doute que le programme n'a pas fonctionné.
    La procédure MoveListBox ne fonctionne pas non plus avec la multi-sélection. Je suis en train de l'adapter et la publierai dès que mes tests seront terminés avec un classeur l'accompagnant.
    Le but était de montrer un exemple.
    Voici le code complet. Le UserForm a deux ListBox (1 & 2). Un double Clic sur une ligne sélectionnée fait passer cette ligne dans l'autre ListBox

    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
    Option Explicit
    Dim rng As Range, sht As Worksheet
    Private Sub UserForm_Initialize()
      InitData
      InitListBox
    End Sub
    Private Sub InitData()
      Set sht = ThisWorkbook.Worksheets("db")
      Set rng = sht.Range("A1").CurrentRegion
    End Sub
    Private Sub InitListBox()
      Dim r As Long, c As Integer, ColWidth As String
      ColWidth = "0;50;50;50"
      With ListBox1
      .ColumnCount = rng.Columns.Count
      .ColumnWidths = ColWidth
        For r = 2 To rng.Rows.Count ' Maximum 9
         'If rng.Cells(r, 5) = "F" And rng.Cells(r, 6) = "C" Then
           .AddItem r
           For c = 1 To rng.Columns.Count: .List(.ListCount - 1, c) = sht.Cells(r, c): Next
         'End If
        Next r
      End With
      With ListBox2
      .ColumnCount = rng.Columns.Count
      .ColumnWidths = ColWidth
      End With
    End Sub
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      MoveListBox Me.ListBox1, Me.ListBox2
    End Sub
    Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
      MoveListBox Me.ListBox2, Me.ListBox1
    End Sub
    Sub MoveListBox(FromListBox As MSForms.ListBox, ToListBox As MSForms.ListBox)
     Dim c As Integer
     With FromListBox
      ToListBox.AddItem .List(.ListIndex, 0)
      For c = 1 To .ColumnCount: ToListBox.List(ToListBox.ListCount - 1, c) = .List(.ListIndex, c): Next
      .RemoveItem (.ListIndex)
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre expérimenté
    Homme Profil pro
    Pompier de service
    Inscrit en
    Février 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Pompier de service

    Informations forums :
    Inscription : Février 2014
    Messages : 146
    Par défaut
    Il me semblait bien avoir déjà vu une solution ailleurs...

    Va faire un tour PAR ICI, je pense que tu trouveras ton bonheur...

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

Discussions similaires

  1. Récupérer les valeurs d'une listview et les mettre dans des textbox
    Par ph_anrys dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2018, 13h03
  2. Réponses: 12
    Dernier message: 04/01/2015, 19h47
  3. Réponses: 4
    Dernier message: 27/07/2009, 12h15
  4. Réponses: 4
    Dernier message: 22/05/2007, 14h42
  5. Réponses: 12
    Dernier message: 18/06/2006, 19h42

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