trier une listbox - VB/VBA/VBS - Programmation
Marsh Posté le 02-08-2006 à 15:06:21
ma listbox est rempli par une plage de données rempli par des dates
j'affiche ensuite cette listbox dans un userform, et j'aimerai que les dates apparaissent dans l'ordre
Marsh Posté le 02-08-2006 à 15:10:11
GillooZ a écrit : ma listbox est rempli par une plage de données rempli par des dates |
tri à bulles (comment ca j'ai déjà proposé ca ce matin à quelqu'un d'autre....
Marsh Posté le 02-08-2006 à 15:16:00
ya un départ de code pour ca dans le post ou tu as repondu ca ?
Marsh Posté le 02-08-2006 à 15:17:18
non, mais sur ce topic ci oui : http://forum.hardware.fr/hardwaref [...] 0738-1.htm
Marsh Posté le 04-08-2006 à 10:49:26
Jai modifié le code du tri pour l'adapter à mon code, sachant que je cherche à trier une listbox contenant des dates.
mais il me fait une erreur de compatibilité
Voila mon code :
Dim k As Integer
Dim x As Date
Randomize
For i = 1 To ListDateDebut.ListCount - 1
j = i
For k = j + 1 To ListDateDebut.ListCount - 1
If ListDateDebut.Column(0, k) <= ListDateDebut.Column(0, j) Then
j = k
End If
Next k
If i <> j Then
x = ListDateDebut.Column(0, j)
ListDateDebut.Column(0, j) = ListDateDebut.Column(0, i)
ListDateDebut.Column(0, i) = x
End If
Next i
Marsh Posté le 04-08-2006 à 11:29:29
il ne me met pas de ligne, il me met l'erreur en msgbox seulement
Marsh Posté le 04-08-2006 à 11:30:13
je vais balancer tout le code de mon initialisation peut etrre que cela vous aidera (pour m'aider lol)
Private Sub UserForm_Initialize()
ListCli.MultiSelect = fmMultiSelectExtended
'initialisation de la multi selection de la listbox client
OptionButtonPPM.Value = False
OptionButtonPPDM.Value = False
On Error Resume Next
'mise a vide des boutons indicateurs PPM et PPDM
Dim Cell As Range, Valeur As Range
Dim Unique As New Collection
Dim j As Byte
On Error Resume Next
For Each Cell In Range("enr_incidents!Customers" )
Unique.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0
For Each Valeur In Unique
ListCli.AddItem Valeur
Next Valeur
'alimentation de la listbox client en enlevant les redondances
ListBoxResp.MultiSelect = fmMultiSelectExtended
'initialisation de la multi selection de la listbox client
Dim Cell2 As Range, Valeur2 As Range
Dim Unique2 As New Collection
For Each Cell2 In Range("enr_incidents!ResponsabiliteZ" )
Unique2.Add Cell2, CStr(Cell2)
Next Cell2
On Error GoTo 0
For Each Valeur2 In Unique2
ListBoxResp.AddItem Valeur2
Next Valeur2
'alimentation de la listbox responsabilité en enlevant les redondances
Dim Cell3 As Range, Valeur3 As Range
Dim Unique3 As New Collection
Dim i As Byte
On Error Resume Next
For Each Cell3 In Range("enr_incidents!Date" )
Unique3.Add Cell3, CStr(Cell3)
Next Cell3
On Error GoTo 0
For Each Valeur3 In Unique3
ListDateDebut.AddItem Valeur3
ListDateFin.AddItem Valeur3
Next Valeur3
Dim k As Integer
Dim x As Date
Randomize
For i = 1 To ListDateDebut.ListCount - 1
j = i
For k = j + 1 To ListDateDebut.ListCount - 1
If ListDateDebut.Column(0, k) <= ListDateDebut.Column(0, j) Then
j = k
End If
Next k
If i <> j Then
x = ListDateDebut.Column(0, j)
ListDateDebut.Column(0, j) = ListDateDebut.Column(0, i)
ListDateDebut.Column(0, i) = x
End If
Next i
ListBoxCost.MultiSelect = fmMultiSelectExtended
'initialise tous les objets contenus dans le UserForm concernant les indicateurs
End Sub
Marsh Posté le 07-08-2006 à 23:03:54
A Adapter
|
Marsh Posté le 08-08-2006 à 08:44:13
erf en fait le mec pour qui je programme ca m'a dit : on s'en fou des dates de la plage, tu me mets toutes les dates du calendriers trié.
ya pas une fonction qui permet d'alimenter directement une listbox avec ca ?
Marsh Posté le 08-08-2006 à 11:51:21
Non mais en mettant toutes les dates du millenaire cela devrait laisser de la marge
Marsh Posté le 08-08-2006 à 12:56:16
j'ai adapté ton algo kiki :
Sub AjoutDate(DateLue As Date, LB As ListBox)
Dim i As Integer
For i = 1 to LB.ListCount - 1
If LB.List(i) > DateLue Then
Exit For
End If
Next i
End Sub
et dans ma fonction d'alimentation, je vire les doublons à l'aide de :
Dim Cell3 As Range, Valeur3 As Range
Dim Unique3 As New Collection
Dim i As Byte
On Error Resume Next
For Each Cell3 In Range("enr_incidents!Date" )
Unique3.Add Cell3, CStr(Cell3)
Next Cell3
On Error GoTo 0
For Each Valeur3 In Unique3
AjoutDate Valeur3, ListeDateDebut
ListDateFin.AddItem Valeur3
Next Valeur3
et la j'ai une erreur : type d'argument ByRef incompatible
avec le valeur3 surligné
Marsh Posté le 08-08-2006 à 15:08:25
j'ai vu qu'il existait une propriete Sort, peut on l'utiliser pour trier des dates dans une listebox ?
Marsh Posté le 08-08-2006 à 18:41:24
Essaie mais tu verras que si l'ordre julien des dates doit être conservé cela fout le bazar dans ta liste
En fait quand j'ai à trier des dates je garde dans une colonne adjacente invisible ou ailleurs
dans un tableau etc une référence sur la laquelle je fait le tri
dans disons cette référence cachée les dates sont par exemple sous la forme Quantième de l'année Année ou AAAAmmJJ avec 4 digits pour l'année 2 pour le mois et 2 pour les jours.
Soit par exemple pour aujourd'hui en julien 2202006 ou en AAAAmmJJ 20060808
pour le quantieme de l'année
Private Function JourJulien(Optional Valeur As Date = 0) As Integer
If Valeur <= 0 Then Valeur = Date
JourJulien = DatePart("y", Valeur)
End Function
Marsh Posté le 08-08-2006 à 19:43:10
A Adapter : Une année complète ... pour alimentation
|
Marsh Posté le 08-08-2006 à 20:14:53
Apres un test rapide cela semble fonctionner correctement
|
Marsh Posté le 09-08-2006 à 08:57:46
merci beaucoup à tous en tout cas ca va bien m'aider et merci a toi kiki pour tes algos ^^
bonne journée à tous
Marsh Posté le 09-08-2006 à 13:32:50
j'ai bien mis la fonction AjoutDateListBox et j'ai rajouter le code de AjoutAnneeEntiere dans ma partie initialize mais quand je lance mon userform la listbox est vide
Marsh Posté le 02-08-2006 à 14:57:01
Bonjour à tous, ca faisait longpts ke je n'etais pas venu vous déranger !
alors voia lje crée une listbox que j'alimente avec une plage de donnée sur mon fichier Excel avec des dates.
Je vire les redondances dans l'alimentation
Mais comment peut on trier cette listbox pour qu'a l'affichage tout soit dans l'ordre ?
car j'ai deja cherché ailleurs mais soit il n'y avait pas de réponse soit les fichiers que j'ai téléchargé avec les soi disantes réponses etaient illisible
Voila sinon l'alimentation de ma listbox :
Dim Cell3 As Range, Valeur3 As Range
Dim Unique3 As New Collection
Dim i As Byte
On Error Resume Next
For Each Cell3 In Range("enr_incidents!Date" )
Unique3.Add Cell3, CStr(Cell3)
Next Cell3
On Error GoTo 0
For Each Valeur3 In Unique3
ListDateDebut.AddItem Valeur3
ListDateFin.AddItem Valeur3
Next Valeur3
Merci à tous !