QUELLES SÉLECTIONS DANS LISTBOX ?

QUELLES SÉLECTIONS DANS LISTBOX ? - VB/VBA/VBS - Programmation

Marsh Posté le 25-02-2014 à 21:00:13    

Bonsoir.
 
Soit une ListBox à sélections multiples, comportant plusieurs colonnes, qui se charge à l’apparition de mon UserForm.
Quand je sélectionne n’importe quelles lignes, je veux que le numéro de chacune d’entre elles, qui est présent dans la première colonne soit mémorisé.
 
Si par exemple je sélectionne trois lignes dont les numéros correspondent respectivement à 2, 10 et 24, mon message de contrôle apparaît bien trois fois. Dans le cas présent, j'ai sélectionné la ligne n° 24 en dernier. Le message suivant apparaît donc trois fois : « La ligne 24 est sélectionnée ! ». Or, au lieu de repérer la dernière ligne cliquée, je veux, pour que je puisse exporter les bonnes lignes, que chaque message m'affiche :
 
« La ligne 2 a été sélectionnée ! ».
« La ligne 10 a été sélectionnée ! ».
« La ligne 24 a été sélectionnée ! ».
 
Par conséquent, dans le code ci-dessous, que dois-je modifier ?  Merci d’avance de votre aide !
 
___________________
 
Private Sub BtonSelEnCours_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 
Dim TotalLignes As Integer
Dim i As Integer
 
    TotalLignes = UserForm1.LbCf.ListCount - 1
     
    Debug.Print "Nombre de lignes dans LbCf = " & TotalLignes
     
        With LbCf
         
            For i = 0 To TotalLignes
             
                If .Selected(i) Then
                     
                    NumLigneSelectionnée = LbCf.Column(0, LbCf.ListIndex)
                     
                    MsgBox "La ligne " & NumLigneSelectionnée & " est sélectionnée !", vbInformation
                     
                    .Selected(i) = False
                                 
                End If
                 
            Next i
         
        End With
 
End Sub

Reply

Marsh Posté le 25-02-2014 à 21:00:13   

Reply

Marsh Posté le 27-02-2014 à 16:12:00    

Salut,
 
Je pense à stocker les valeurs sélectionnées dans une variable de type "String".
 
A la place de:

Code :
  1. MsgBox "La ligne " & NumLigneSelectionnée & " est sélectionnée !", vbInformation


On aurait:

Code :
  1. Dim Result As String
  2. Result = Result + "La ligne " & NumLigneSelectionnée & " est sélectionnée !" & VbLf


Puis à la fin du code:

Code :
  1. MsgBox Result


A tester!

Reply

Marsh Posté le 27-02-2014 à 20:04:34    

Merci mmarle pour ta réponse mais cela ne fonctionne pas. Les trois données apparaissent à présent dans le même message, chaque fois que je clique sur Ok dans le message, mais toujours avec le numéro de ligne correspondant à ma dernière sélection de ligne. Ainsi, pour reprendre mon exemple, cela me renvoie dans le même message :
 
« La ligne 24 a été sélectionnée ! ».  
puis avoir cliqué sur Ok : « La ligne 24 a été sélectionnée ! ».  
puis avoir cliqué sur Ok : « La ligne 24 a été sélectionnée ! ».

Reply

Marsh Posté le 28-02-2014 à 08:46:13    

Salut,
 
Effectivement avec les valeurs ça fonctionne, par contre avec les index pas du tout!  
On obtient toujours l'index le plus grand quelque soient les items sélectionnés. Il faut oublier ListIndex!
 
Avec ce code ça fonctionne:

Code :
  1. For i = 0 To ListBox1.ListCount - 1
  2.     If ListBox1.Selected(i) = True Then
  3.         MsgBox "La ligne " & i + 1 & " est sélectionnée!"
  4.     End If
  5. Next i

A tester!

Reply

Marsh Posté le 28-02-2014 à 22:37:25    

Bsr mmarle et merci.
Je suis d'accord avec toi mais cela ne solutionne pas mon problème. En effet, je travaille avec une base de données importante et j'ai des extractions différentes en fonction de mes requêtes. Donc, mon numéro de ligne ne correspond pas à une suite logique (1,2,3,...,100,101,etc...) mais à une valeur numérique contenue dans la 1ère colonne de ma ListBox. Mon chargement ListBox peut par exemple afficher : 161, 1152, 920, 1623, 750, dans ma 1ère colonne si ma requête me retourne une extraction avec 5 lignes.
Par conséquent, l'extrait de code suivant :
 
NumLigneSelectionnée = LbCf.Column(0, LbCf.ListIndex)  
 
fonctionnant parfaitement pour mémoriser la valeur de ma 1ère colonne, de la ligne sélectionnée, il faut que je trouve le moyen pour ne soit pas systématiquement mémorisée la valeur 1ère colonne de la dernière ligne que je sélectionne.
 
Il doit y forcément y avoir un moyen qui fonctionne, soit en passant pas ListIndex, voire par une autre combine.
 
Merci encore, ainsi qu'à ceux qui peuvent m'aider !

Reply

Marsh Posté le 01-03-2014 à 07:04:23    

Récapitulation:
 
1 - Boucler sur chaque ligne.
2 - Vérifier si la ligne est sélectionnée ou pas.
3 - Si sélectionnée alors extraction de la donnée stockée en colonne 1.
4 - Affichage du résultat.
Et ce pour une multi sélection!

Code :
  1. For i = 0 To ListBox1.ListCount - 1
  2.      If ListBox1.Selected(i) = True Then
  3.         MsgBox "La ligne " & ListBox1.List(i, 0) & " est sélectionnée!"
  4.      End If
  5. Next i


Avec ListBox1.List(Lignes,Colonnes).
 
A tester!
 

Reply

Marsh Posté le 01-03-2014 à 09:45:56    

Bjr Mmarle.
Super, tu es un génie !  Cela fonctionne à présent à 100 %, quelle que soit mon extraction ou la diversité des numéros de la 1ère colonne. Pourquoi n'y avais-je pas pensé ? On en apprend tous les jours...
Merci encore !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed