Accueil > > > UTILISER LES LISTES AVEC VBA ET ACCESS
UTILISER LES LISTES AVEC VBA ET ACCESS
Information sur la source
Description
c'est un truc que j'ai eu du mal à faire :
vous avez deux listes l'une pleine et l'autre vide .
l'idée c'est de permettre a l'utilisateur de faire basculer des element d'une liste a l'autre grace a des boutons du genre ">", "<", "<<", ">>"
le probleme c'est qu'avec VBA et Access il n'y avait pas de additem ni de removeitem pour les listes ! (vous commencez a voir le probleme ?)
donc je l'ai fait, c'est bourrin mais ça marche !
si y'en a qui veulent l'ameliorer pas de pb !
soyez indulgents merci !
ah oui au fait c'est les procedures sub qui tournent derriere que je vous montre
donc si vous voulez tester faudra vous faire un formulaire access vous meme ! (dsl)
Source
- Private Sub ajout_sel_Click()
- Dim items As String
- Dim i As Long
- Dim j As Integer
- Dim cpt As Integer
- Dim cpt2 As Integer
- Dim tab_index(50) As Long
- cpt = 0
-
- If Me.liste_disp.RowSource <> vide Then 'si la liste des indicateurs disponibles n'est pas vide
- If Me.liste_disp.ItemsSelected.Count <> vide Then 'si l utilisateur a pensé a selectionner des indicateurs
- If Me.liste_sel.RowSource = "" Then
- 'on ajoute les en-tetes de colonnes si elle ne sont pas déjà là
- Me.liste_sel.RowSource = Me.liste_disp.Column(0, 0) & ";" & Me.liste_disp.Column(1, 0) & ";"
- End If
- For i = 0 To Me.liste_disp.ListCount - 1
-
- If Me.liste_disp.Selected(i) = True Then
- items = items & Me.liste_disp.Column(0, i) & ";" & Me.liste_disp.Column(1, i) & ";"
-
- 'on stocke la valeur de l index dans un tableau
- tab_index(cpt) = i
- cpt = cpt + 1
- End If
-
- Next
- Me.liste_sel.RowSource = Me.liste_sel.RowSource & items 'on ajoute les lignes selectionnées aux precedentes
- j = 0
-
-
- While tab_index(j) <> 0
-
- 'cette boucle sert à supprimmer les elements selectionnés dans la premiere liste
- suppr_elem tab_index(j), Me.liste_disp
-
- cpt2 = 0
-
- 'probleme : une fois un element supprimmé d une liste, l index des autres elements est decalé
- 'il faut donc décrementer les index contenus dans le tableau
- While tab_index(cpt2) <> 0
- tab_index(cpt2) = tab_index(cpt2) - 1
- cpt2 = cpt2 + 1
- Wend
- j = j + 1
- Wend
- End If
- End If
-
- End Sub
- Private Function suppr_elem(ind_elem As Long, l As ListBox)
-
- 'fonction utilisée pour la suppression d un element dans une liste donnée
- Dim i As Long
- Dim cpt As Integer
- Dim ro_so2 As String
-
- 'en fait on reecrit le rowsource (contenu) de la liste en ommettant l element choisi
- For i = 0 To l.ListCount - 1
- If i <> ind_elem Then
- ro_so2 = ro_so2 & l.Column(0, i) & ";" & l.Column(1, i) & ";"
- End If
- Next
- l.RowSource = ro_so2
- End Function
-
-
-
-
- Private Sub ajout_tous_Click()
- Dim items As String
- Dim deb As Integer
-
- If Me.liste_disp.RowSource <> vide Then 'on ne fait l ajout que lorsqu il y a des elements a ajouter
- If Me.liste_sel.RowSource = "" Then
- deb = 0 'si la liste de droite était vide, on ecrit les entetes de colonnes
- Else
- deb = 1
- End If
-
- For i = deb To Me.liste_disp.ListCount - 1
-
- items = items & Me.liste_disp.Column(0, i) & ";" & Me.liste_disp.Column(1, i) & ";"
-
-
-
- Next
-
- Me.liste_sel.RowSource = Me.liste_sel.RowSource & items
- Me.liste_disp.RowSource = vide 'on vide la premiere liste
- End If
- End Sub
-
-
-
- Private Sub Form_Load()
-
- 'A chaque chargement du formulaire, les listes sont remises a zero
-
- 'la liste de gauche est rempli au moyan d une requete
- Me.liste_disp.RowSourceType = "Table/Query"
- Me.liste_disp.RowSource = "sel_indi"
- Me.liste_sel.RowSource = "" 'tandis que la liste de droite est vidée
-
- Me.liste_disp.Requery
- liste_transfo 'puis la liste de gauche est transformée en liste de valeur
- Me.liste_sel.Requery
- End Sub
- Private Function liste_transfo()
-
- 'cette fonction permet de transformer la nature de la liste de gauche
- 'au lieu d etre lie a une requete, elle devient une liste de valeur,
- 'ce qui la rend plus facile a manipuler
-
- Dim str As String
- For i = 0 To Me.liste_disp.ListCount - 1
- str = str & Me.liste_disp.Column(0, i) & ";" & Me.liste_disp.Column(1, i) & ";"
- Next
- Me.liste_disp.RowSourceType = "Value List"
- Me.liste_disp.RowSource = str
-
- End Function
-
-
- Private Sub suppr_sel_Click()
-
- 'cette procedure fonctionne avec le meme principe que la procedure ajout_sel_click()
- 'la seule difference est qu elle sert a deplacer les elements de droite a gauche au lieu de gauche a droite
- Dim items As String
- Dim i As Long
- Dim j As Integer
- Dim cpt As Integer
- Dim cpt2 As Integer
- cpt = 0
- Dim tab_index(50) As Long
-
- If Me.liste_sel.RowSource <> vide Then
- If Me.liste_sel.ItemsSelected.Count <> vide Then
- If Me.liste_disp.RowSource = "" Then
- Me.liste_disp.RowSource = Me.liste_sel.Column(0, 0) & ";" & Me.liste_sel.Column(1, 0) & ";"
- End If
- For i = 0 To Me.liste_sel.ListCount - 1
- If Me.liste_sel.Selected(i) = True Then
- items = items & Me.liste_sel.Column(0, i) & ";" & Me.liste_sel.Column(1, i) & ";"
- tab_index(cpt) = i
- cpt = cpt + 1
- End If
-
-
-
-
-
- Next
- Me.liste_disp.RowSource = Me.liste_disp.RowSource & items
- j = 0
-
-
- While tab_index(j) <> 0
-
- suppr_elem tab_index(j), Me.liste_sel
-
- cpt2 = 0
- While tab_index(cpt2) <> 0
- tab_index(cpt2) = tab_index(cpt2) - 1
- cpt2 = cpt2 + 1
- Wend
- j = j + 1
- Wend
- End If
- End If
- End Sub
-
- Private Sub suppr_tous_Click()
-
- 'cette procedure remet les listes a leur etats initials
- Me.liste_disp.RowSourceType = "Table/Query"
- Me.liste_disp.RowSource = "sel_indi"
- liste_transfo
- Me.liste_sel.RowSource = ""
- End Sub
Private Sub ajout_sel_Click()
Dim items As String
Dim i As Long
Dim j As Integer
Dim cpt As Integer
Dim cpt2 As Integer
Dim tab_index(50) As Long
cpt = 0
If Me.liste_disp.RowSource <> vide Then 'si la liste des indicateurs disponibles n'est pas vide
If Me.liste_disp.ItemsSelected.Count <> vide Then 'si l utilisateur a pensé a selectionner des indicateurs
If Me.liste_sel.RowSource = "" Then
'on ajoute les en-tetes de colonnes si elle ne sont pas déjà là
Me.liste_sel.RowSource = Me.liste_disp.Column(0, 0) & ";" & Me.liste_disp.Column(1, 0) & ";"
End If
For i = 0 To Me.liste_disp.ListCount - 1
If Me.liste_disp.Selected(i) = True Then
items = items & Me.liste_disp.Column(0, i) & ";" & Me.liste_disp.Column(1, i) & ";"
'on stocke la valeur de l index dans un tableau
tab_index(cpt) = i
cpt = cpt + 1
End If
Next
Me.liste_sel.RowSource = Me.liste_sel.RowSource & items 'on ajoute les lignes selectionnées aux precedentes
j = 0
While tab_index(j) <> 0
'cette boucle sert à supprimmer les elements selectionnés dans la premiere liste
suppr_elem tab_index(j), Me.liste_disp
cpt2 = 0
'probleme : une fois un element supprimmé d une liste, l index des autres elements est decalé
'il faut donc décrementer les index contenus dans le tableau
While tab_index(cpt2) <> 0
tab_index(cpt2) = tab_index(cpt2) - 1
cpt2 = cpt2 + 1
Wend
j = j + 1
Wend
End If
End If
End Sub
Private Function suppr_elem(ind_elem As Long, l As ListBox)
'fonction utilisée pour la suppression d un element dans une liste donnée
Dim i As Long
Dim cpt As Integer
Dim ro_so2 As String
'en fait on reecrit le rowsource (contenu) de la liste en ommettant l element choisi
For i = 0 To l.ListCount - 1
If i <> ind_elem Then
ro_so2 = ro_so2 & l.Column(0, i) & ";" & l.Column(1, i) & ";"
End If
Next
l.RowSource = ro_so2
End Function
Private Sub ajout_tous_Click()
Dim items As String
Dim deb As Integer
If Me.liste_disp.RowSource <> vide Then 'on ne fait l ajout que lorsqu il y a des elements a ajouter
If Me.liste_sel.RowSource = "" Then
deb = 0 'si la liste de droite était vide, on ecrit les entetes de colonnes
Else
deb = 1
End If
For i = deb To Me.liste_disp.ListCount - 1
items = items & Me.liste_disp.Column(0, i) & ";" & Me.liste_disp.Column(1, i) & ";"
Next
Me.liste_sel.RowSource = Me.liste_sel.RowSource & items
Me.liste_disp.RowSource = vide 'on vide la premiere liste
End If
End Sub
Private Sub Form_Load()
'A chaque chargement du formulaire, les listes sont remises a zero
'la liste de gauche est rempli au moyan d une requete
Me.liste_disp.RowSourceType = "Table/Query"
Me.liste_disp.RowSource = "sel_indi"
Me.liste_sel.RowSource = "" 'tandis que la liste de droite est vidée
Me.liste_disp.Requery
liste_transfo 'puis la liste de gauche est transformée en liste de valeur
Me.liste_sel.Requery
End Sub
Private Function liste_transfo()
'cette fonction permet de transformer la nature de la liste de gauche
'au lieu d etre lie a une requete, elle devient une liste de valeur,
'ce qui la rend plus facile a manipuler
Dim str As String
For i = 0 To Me.liste_disp.ListCount - 1
str = str & Me.liste_disp.Column(0, i) & ";" & Me.liste_disp.Column(1, i) & ";"
Next
Me.liste_disp.RowSourceType = "Value List"
Me.liste_disp.RowSource = str
End Function
Private Sub suppr_sel_Click()
'cette procedure fonctionne avec le meme principe que la procedure ajout_sel_click()
'la seule difference est qu elle sert a deplacer les elements de droite a gauche au lieu de gauche a droite
Dim items As String
Dim i As Long
Dim j As Integer
Dim cpt As Integer
Dim cpt2 As Integer
cpt = 0
Dim tab_index(50) As Long
If Me.liste_sel.RowSource <> vide Then
If Me.liste_sel.ItemsSelected.Count <> vide Then
If Me.liste_disp.RowSource = "" Then
Me.liste_disp.RowSource = Me.liste_sel.Column(0, 0) & ";" & Me.liste_sel.Column(1, 0) & ";"
End If
For i = 0 To Me.liste_sel.ListCount - 1
If Me.liste_sel.Selected(i) = True Then
items = items & Me.liste_sel.Column(0, i) & ";" & Me.liste_sel.Column(1, i) & ";"
tab_index(cpt) = i
cpt = cpt + 1
End If
Next
Me.liste_disp.RowSource = Me.liste_disp.RowSource & items
j = 0
While tab_index(j) <> 0
suppr_elem tab_index(j), Me.liste_sel
cpt2 = 0
While tab_index(cpt2) <> 0
tab_index(cpt2) = tab_index(cpt2) - 1
cpt2 = cpt2 + 1
Wend
j = j + 1
Wend
End If
End If
End Sub
Private Sub suppr_tous_Click()
'cette procedure remet les listes a leur etats initials
Me.liste_disp.RowSourceType = "Table/Query"
Me.liste_disp.RowSource = "sel_indi"
liste_transfo
Me.liste_sel.RowSource = ""
End Sub
Conclusion
donc pour ceux qui ont eu le meme pb que moi avec vba et ces put1 de listes!
je pense que ça peut etre amelioré c'est pour ça que je le montre !
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
VB6 + GRAPHVIZVB6 + GRAPHVIZ par nouirayosra
Cliquez pour lire la suite par nouirayosra
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|