Désélection dans ListBox.

Désélection dans ListBox. - VB/VBA/VBS - Programmation

Marsh Posté le 12-11-2007 à 18:18:18    

Principe : J’ai créé = une ListBox « LbOpsBancaires » comprenant plusieurs colonnes que je charge sans difficulté à partir d’une base de données dont le volume évolue. Mon concept : Par la procédure LbOpsBancaires _Change(), après avoir activé le choix Multi sélection, chaque fois que je clique sur une ligne de la ListeBox, j’envoie automatiquement les euros dans une deuxième ListBoxCalcul qui fait office de calculette et cumule tous les montants à chaque sélection d’une ligne.
Prenons le cas d’une ligne quelconque de LbOpsBancaires  où, après sélection, le montant de +25 euros qui lui correspond est transféré dans la ListBoxCaclul (aucun problème tout fonctionne !).  
En revanche, si je désélectionne ma ligne contenant les +25 euros, pour annuler mon premier transfert de +25 euros, il faut donc que la nouvelle valeur transférée dans la ListBoxCalcul soit de -25 euros. Dans mon cas, en déselectionnant, ma valeur rentre avec les autres entrées dans ListBoxCalcul mais avec la valeur +25 euros.  
Comment faire donc pour qu’en déselectionnant une ligne le signe du montant à transférer dans la calculette soit obligatoirement l’inverse. Exemple : Une ligne sélectionnée contenant dans la colonne 4 +25.00 doit devenir -25.00 en la désélectionnant. Inversement, une ligne désélectionnée contenant dans la colonne 4 +25.00 doit devenir -25.00 avant l’exportation vers ListBoxCalcul.
Merci de m’éclairer sur le code relatif à la prise en compte de la désélection.
 
L’extrait de mon code est la suivant :
 
Private Sub LbOpsBancaires_Change()
    If ObLbMultiSel Then
           For i = 0 To LbOpsBancaires.ListCount - 1
                 If LbOpsBancaires.Selected(i) Then
             
  MsgBox (LbOpsBancaires.Column(4, LbOpsBancaires.ListIndex))  
  '4 correspond au champ "Montant" de la ListBox  LbOpsBancaires.
 
                     **** Pour mémoire mon code de transfert dans ListBoxCalcul qui  
                     **** fonctionne parfaitement.                        
             
            End If
         
           Next i        
     
    End If
 
End Sub

Reply

Marsh Posté le 12-11-2007 à 18:18:18   

Reply

Marsh Posté le 12-11-2007 à 18:32:46    

Si j'ai bien suivi, après une brève lecture
Tu pourrais faire ton cumul sur l'évènement click de ta listbox
Et dedans, si la case est sélectionnée, tu ajoutes la valeur à une variable de cumul, si elle ne l'est pas, tu ajoutes à ta variable de cumul la valeur*-1
 
C'est bien ça que tu veux ?

Reply

Marsh Posté le 19-11-2007 à 19:02:57    

Merci pour la réponse. Oui et non.
 
Ok sur le principe. C'est exactement ce que je fais avec la procédure ....... _ Change. Donc que j'opte pour _Change ou _Click le résultat sera identique.
 
 
Ce qu'il me faut savoir surtout, c'est le code Vba que je dois écrire pour faire reconnaître à l'ordi que j'ai désélectionné ma ligne dans ma ListBox, avec une adresse ListBox.ListIndex qui est évidemment relative. Prenons un exemple plus simple - après je transposerai sans difficulté avec ma ListBox + complexe.
 
 
Soit une ListBox1 contenant les données d'une seule colonne. Seules trois valeurs sont contenues dans ListBox1 : soit dans l'ordre : 100, 200 et 300. Je sélectionne dans la ListBox les valeurs 200 et 300 qui apparaîssent logiqement en couleur dans ma ListBox1. Je m'assure que ces montants sont bien reconnus ce qui est le cas.
 
 
L'extrait de code simplifié ci-dessous fonctionne parfaitement :
 
 
Proc TestSélection_Change()
 
With ListBox1.ListIndex
 
For i = 0 to ListBox1.Count – 1
 
If .Selected(i) = True Then
 
Msgbox « Le montant » & ListBox1.Value & « a été sélectionné ! »
 
End if
 
Next i
 
Fin proc
 
 
Mais, et c'est là le + important pour moi, quel code complémentaire dois-je passer pour que l'ordi sache que je viens de déselectionner la valeur 200 par exemple (dont la ligne doit être impérativement considérée comme étant une adresse relative) ? En effet, dans ma ListBox1 normale, la liste évolue régulièrement et je suis amené à déselectionner n'importe quelle ligne.
 
 
Par avance merci beaucoup de votre aide.


Message édité par alain_mc le 19-11-2007 à 19:03:26
Reply

Sujets relatifs:

Leave a Replay

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