Problème Listbox en VBA

Problème Listbox en VBA - VB/VBA/VBS - Programmation

Marsh Posté le 04-03-2005 à 13:40:18    

Bonjour tout le monde,
 
voila j'ai un problème qui va surement vous paraitre simple (a moi aussi surement une fois que j'aurai la solution  :D ) bref voila g deux listbox une avec des données importés d'une feuille excel et une autre vide, je voudrais réussir a passer les elements selectionnés d'une liste vers l'autre en testant si il n'y sont pas deja, pouvoir passer toute la liste, et egalement supprimer les elements de la deuxieme liste d'un coup ou un par un, je bloque car additem et removeitem ne marche apparemment pas en vba (je débute en vba g deja fait un truc de ce genre en vb mais le je vois pas)
 
merci d'avance pour vos réponses...

Reply

Marsh Posté le 04-03-2005 à 13:40:18   

Reply

Marsh Posté le 04-03-2005 à 17:37:42    

Acton par un clic qui ajoute l'item à la seconde liste s'il n'y est pas déjà :

Code :
  1. Private Sub L1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  2. Dim a As Long
  3. a = 0
  4. For i = 0 To L2.ListCount - 1
  5.     If L2.List(i) = L1.List(L1.ListIndex) Then a = 1
  6. Next i
  7. If a Then L2.AddItem L1.List(L1.ListIndex)
  8. End Sub


 
Bouton de suppression d'un item de la liste (l'objet doit être sélectionné):

Code :
  1. Private Sub C_one_Click()
  2. If L2.ListIndex < 0 Then Exit Sub 'Aucun item de sélectionné -> fin du traitement
  3. L2.RemoveItem (L2.ListIndex)
  4. End Sub


 
Bouton d'effacement de la liste:

Code :
  1. Private Sub C_all_Click()
  2. L2.Clear
  3. End Sub


Message édité par knakes le 04-03-2005 à 17:39:52
Reply

Marsh Posté le 07-03-2005 à 09:09:05    

knakes a écrit :

Acton par un clic qui ajoute l'item à la seconde liste s'il n'y est pas déjà :

Code :
  1. Private Sub L1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  2. Dim a As Long
  3. a = 0
  4. For i = 0 To L2.ListCount - 1
  5.     If L2.List(i) = L1.List(L1.ListIndex) Then a = 1
  6. Next i
  7. If a Then L2.AddItem L1.List(L1.ListIndex)
  8. End Sub


 
Bouton de suppression d'un item de la liste (l'objet doit être sélectionné):

Code :
  1. Private Sub C_one_Click()
  2. If L2.ListIndex < 0 Then Exit Sub 'Aucun item de sélectionné -> fin du traitement
  3. L2.RemoveItem (L2.ListIndex)
  4. End Sub


 
Bouton d'effacement de la liste:

Code :
  1. Private Sub C_all_Click()
  2. L2.Clear
  3. End Sub



 
 
 
merci bcp je vais tester ça tout de suite...

Reply

Marsh Posté le 07-03-2005 à 09:22:21    

G entré le code que tu m'a filé (merci encore d'ailleurs) et g ce msg d'erreur à l'éxecution :
 
L'expression Sur clic entrée comme paramètre de la propriété de type événement est à l'origine d'une erreur. Type défini par l'utilisateur non défini.
 
*Le résultat de l'expression n'est pas le nom d'une macro, le nom d'une fonction définie par l'utilisateur ou [Event Procedure].
 
*Une erreur a peut-être été commise lors de l'évaluation d'une fonction, d'un événement ou d'une macro.
 
je me demande a quoi sert le "ByVal Cancel As MSForms.ReturnBoolean" apparemment l'erreur viendrait de là...
 

Reply

Marsh Posté le 07-03-2005 à 09:43:44    

g supprimé le byval...
 
et quand j'éxecute ca me lance le débogueur plus le msg d'erreur :
 
Erreur de compilation :
 
Membre de méthode ou de données introuvable
 
et il me surligne L2.List(i)   :??:  
 
 

Reply

Marsh Posté le 07-03-2005 à 11:21:07    

Chose qui est tout a fait normal. Je m'excuse :
"L1" et "L2" sont les noms de mes Listbox. (c'est pour cela qu'il fait des erreurs).
"C_one" et "C_all" sont des boutons de commandes qui suppriment respectivement la ligne sélectionnée ("C_one" ) et vident la Listbox nomée "L2" ("C_all" ). Voilà l'explication.
Soit tu renomme ta première listbox en L1, la seconde en L2 et tes boutons en C_one et C_all et tout est ok, soit tu copie et colle le code dans l'évènement de tes boutons. Voilà.
Si problème(s) je suis encore là.


Message édité par knakes le 07-03-2005 à 11:22:42
Reply

Marsh Posté le 07-03-2005 à 11:25:01    

knakes a écrit :

Chose qui est tout a fait normal. Je m'excuse :
"L1" et "L2" sont les noms de mes Listbox. (c'est pour cela qu'il fait des erreurs).
"C_one" et "C_all" sont des boutons de commandes qui suppriment respectivement la ligne sélectionnée ("C_one" ) et vident la Listbox nomée "L2" ("C_all" ). Voilà l'explication.
Soit tu renomme ta première listbox en L1, la seconde en L2 et tes boutons en C_one et C_all et tout est ok, soit tu copie et colle le code dans l'évènement de tes boutons. Voilà.
Si problème(s) je suis encore là.


 
g renommé mes listbox ou plutot non g remplacéL1 et L2 par le nom de mes listbox g laissé L2 ds le msg pour que ça soit compréhensible!!!  lol
 
g bien copié collé le code dans les boutons mais g toujours l'erreur

Reply

Marsh Posté le 07-03-2005 à 11:26:23    

Et c'est sur que AddItem et RemoveItem marche sous VBA ???
 
g l'impression que le propriété .list ne marche pas non plus c bizarre!!!

Reply

Marsh Posté le 07-03-2005 à 11:38:15    

En fait j'ai fait une petite erreur dans le code. J'ai mis

Code :
  1. Dim a as Long

alors que " a " n'est pas une valeur long ...
Voilà le nouveau code

Code :
  1. Private Sub L1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  2.      Dim a As Boolean
  3.      a = False
  4.      For i = 0 To L2.ListCount - 1
  5.          If L2.List(i) = L1.List(L1.ListIndex) Then a = True
  6.      Next i
  7.      If Not a Then L2.AddItem L1.List(L1.ListIndex)
  8.      End Sub

Et encore désolé.
 
Et oui la propriété Additem "texte" ajoute bien une valeur à la liste er RemoveItem Index Supprime la ligne Index.


Message édité par knakes le 07-03-2005 à 11:38:27
Reply

Marsh Posté le 07-03-2005 à 11:46:11    

G toujours les mêmes erreurs avec a en booléen g  
 
L'expression Sur clic entrée comme paramètre de la propriété de type événement est à l'origine d'une erreur. Type défini par l'utilisateur non défini.
 
*Le résultat de l'expression n'est pas le nom d'une macro, le nom d'une fonction définie par l'utilisateur ou [Event Procedure].
 
*Une erreur a peut-être été commise lors de l'évaluation d'une fonction, d'un événement ou d'une macro.

 
et si j'enleve l'entete de la fonction g  
 
Erreur de compilation :
 
Membre de méthode ou de données introuvable
 
et il me surligne L2.List(i)

 
merci bcp de ton aide  

Reply

Marsh Posté le 07-03-2005 à 11:46:11   

Reply

Marsh Posté le 09-03-2005 à 09:02:46    

up svp aidez-moi...  :(    lol

Reply

Marsh Posté le 11-03-2005 à 13:58:12    


en farfouillant un peu sur le net g trouvé qqch mais g encore un tit pb
 
quand je passe toute la liste 1 ds la liste 2 ca marche idem quand je reinitialise la liste 1 (avec dc vidage de la liste 2 )
 
mais quand j'ajoute les éléments 1 par 1 de la liste 1 vers la liste 2 ça m'insère bien le bon éléments mais ça me supprime plusieurs éléments de la liste  1 voici mon code
 
Liste 1 >> Liste 2

Code :
  1. Private Sub Commande104_Click()
  2. Dim items As String
  3.     Dim deb As Integer
  4.    
  5.     If Me.lstMarchedispo.RowSource <> vide Then 'on ne fait l ajout que lorsqu il y a des elements a ajouter
  6.         If Me.lstMarcheSelectionne.RowSource = "" Then
  7.             deb = 0 'si la liste de droite était vide, on ecrit les entetes de colonnes
  8.         Else
  9.             deb = 1
  10.         End If
  11.        
  12.         For i = deb To Me.lstMarchedispo.ListCount - 1
  13.        
  14.             items = items & Me.lstMarchedispo.Column(1, i) & ";"
  15.        
  16.        
  17.         Next
  18.    
  19.     Me.lstMarcheSelectionne.RowSource = Me.lstMarcheSelectionne.RowSource & items
  20.     Me.lstMarchedispo.RowSource = vide 'on vide la premiere liste
  21. End If
  22. End Sub


 
Liste 2 >> Liste 1 (reinitialisation des listes)

Code :
  1. Private Sub Commande105_Click()
  2. 'cette procedure remet les listes a leur etats initials
  3.     Me.lstMarchedispo.RowSourceType = "Table/Query"
  4.     Me.lstMarchedispo.RowSource = "SELECT [tblMarche].[Nummarche], [tblMarche].[Nommarche] FROM tblMarche; "
  5.     liste_transfo
  6.     Me.lstMarcheSelectionne.RowSource = ""
  7. End Sub


 
Liste 1 > Liste 2 (transfert d'un seul éléments à la fois)

Code :
  1. Private Sub btnSelect_Click()
  2.     Dim items As String
  3.     Dim i As Long
  4.     Dim j As Integer
  5.     Dim cpt As Integer
  6.     Dim cpt2 As Integer
  7.     Dim tab_index(50) As Long
  8.     cpt = 0
  9.    
  10.     If Me.lstMarchedispo.RowSource <> vide Then
  11.         If Me.lstMarchedispo.ItemsSelected.Count <> vide Then
  12.             For i = 0 To Me.lstMarchedispo.ListCount - 1
  13.            
  14.                 If Me.lstMarchedispo.Selected(i) = True Then
  15.                     items = items & Me.lstMarchedispo.Column(1, i) & ";"
  16.                
  17.                     tab_index(cpt) = i
  18.                    cpt = cpt + 1
  19.                End If
  20.                
  21.             Next
  22.             Me.lstMarcheSelectionne.RowSource = Me.lstMarcheSelectionne.RowSource & items
  23.             j = 0
  24.        
  25.        
  26.             While tab_index(j) <> 0
  27.            
  28.                 suppr_elem tab_index(j), Me.lstMarchedispo
  29.            
  30.                 cpt2 = 0
  31.            
  32.  
  33.                 While tab_index(cpt2) <> 0
  34.                     tab_index(cpt2) = tab_index(cpt2) - 1
  35.                     cpt2 = cpt2 + 1
  36.                 Wend
  37.                 j = j + 1
  38.             Wend
  39.         End If
  40.     End If
  41. End Sub


 

Code :
  1. Private Function suppr_elem(ind_elem As Long, l As ListBox)
  2.  
  3.     Dim i As Long
  4.     Dim cpt As Integer
  5.     Dim ro_so2 As String
  6.    
  7.    
  8.     For i = 0 To l.ListCount - 1
  9.         If i <> ind_elem Then
  10.             ro_so2 = ro_so2 & l.Column(1, i) & ";"
  11.         End If
  12.     Next
  13.     l.RowSource = ro_so2
  14. End Function


 

Code :
  1. Private Function liste_transfo()
  2.    
  3.     Dim str As String
  4.     For i = 0 To Me.lstMarchedispo.ListCount - 1
  5.         str = str & Me.lstMarchedispo.Column(0, i) & ";" & Me.lstMarchedispo.Column(1, i) & ";"
  6.     Next
  7.     Me.lstMarchedispo.RowSourceType = "Value List"
  8.     Me.lstMarchedispo.RowSource = str
  9.    
  10. End Function


 
j'espère avoir été clair dans mes explications, en esperant que qqun puisse m'aider...
 
merci d'avance

Reply

Marsh Posté le 14-03-2005 à 11:15:14    

Personne??? bon jvais etre obligé de me pendre alors!!  lol
 
jretourne le pb ds tous les sens mais bon jtrouve pas et vu que je sui pa doué en vba...

Reply

Marsh Posté le 15-03-2005 à 14:51:15    

salut je viens de lire ton post et je pense que tu peux m'aider:
je t'explique je vien de créer un formulaire de recherche multicritere et j'affiche dans une listbox le resultat de cette requete... tout fonctionne..
maintenant ce que je cherche a faire c'est imprimer le contenu de cette listbox avec tous les champs renseignés.... si tu veux avoir une idée plus precise va ici: http://cafeine.developpez.com/access/recherche/  
je voudrait imprimer le contenu de lstresults... merci et desolé de rajouter une question plutot que de repondre a la tienne...

Reply

Marsh Posté le 16-03-2005 à 13:07:30    

c'est bonb oubliez cette demande j'ai fais autrement merci qd meme

Reply

Sujets relatifs:

Leave a Replay

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