Combobox : trier des dates

Sympa74 Messages postés 85 Date d'inscription lundi 25 septembre 2006 Statut Membre Dernière intervention 18 décembre 2008 - 9 mars 2007 à 17:00
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 9 mars 2007 à 19:27
Bonjour,

Je dois mettre des dates dans un combobox et je veux que les dates soient affichées dans l'ordre décroissant, c'est à dire la date la plus récente en tête de liste et la date la plus ancienne à la fin.

La source qui doit remplir le combo est un fichier txt qui se présente comme suit :

nomduclient¤date au format aaaaMMjj¤date au format jj/MM/aaaa
ce qui donne par exemple :

TRUC alain¤20070214¤14/02/2007
TRUC alain¤20070301¤01/03/2007
TRUC alain¤20070321¤09/03/2007

le combo doit uniquement afficher la date au format jj/MM/aaaa et devrait donc se présenter ainsi :

09/03/2007
01/03/2007
14/02/2007

Moi j'ai fait en sorte de faire afficher le combo avec CbB1_dates.Sorted = True
mais de toute façon, cela trie uniquement le jour et pas le reste de la date et de toute façon pas dans l'ordre inverse.

je vous remercie de votre aide.

Philippe - Sympa 74
 

10 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2007 à 17:07
Utilise un tremplin pour trier sur le format aaaaMMjj, hyper facile à trier en ce qui concerne les dates, puis alimente ta Combo.

J'ignore maintenant si, sous VB.Net, tu as la possibilité d'avoir plusieurs colonnes dans une combo. Si oui : envoie dans une colonne COL1 visible les dates JJ/MM/AAAA et dans une colonne invisible (de largeur nulle, par exemple) COL2 tes dates au formar AAAAMMJJ et fait ton tri sur COL2.
0
Sympa74 Messages postés 85 Date d'inscription lundi 25 septembre 2006 Statut Membre Dernière intervention 18 décembre 2008 1
9 mars 2007 à 17:53
merci pour la piste.. .mais ben je vois pas comment faire deux colonnes dans un combobox et à priori, après une recherche rapide sur ce forum : combobox colonnes ... je vois qu'il y a plusieurs demandes sur le même sujet et pas de réponse concrète.
Personne ne semble savoir si c'est possible et comment le faire.

Mais toi... as tu peut-être une idée ? une piste ?

Philippe - Sympa 74
 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2007 à 18:20
Ben... sous VB6 (je n'ai pas VB.Net), par exemple, les Comboboxes n'ont qu'une colonne.
Pour faire face à ce genre de problème, j'utilise alors une ListView qui, elle, peut avoir plusieurs colonnes et qui offre également la possibilité de tri, tout simplement.

Si tu veux un exemple avec VB6 et une listview pour trier des dates, je te le fais et tu pourras adapter à VB.Net, si tu veux...

Tu dis...
0
Sympa74 Messages postés 85 Date d'inscription lundi 25 septembre 2006 Statut Membre Dernière intervention 18 décembre 2008 1
9 mars 2007 à 18:28
Oh je dis que c'est bien sympa... et je t'en remercie d'avance.
voila comment se présente mon fichier txt d'ou je prends les éléments...

TRUC alain¤20070321¤09/03/2007

le séparateur est donc  le ¤

et si j'ose... si tu sélectionnes une date dans la liste... est-ce que le fait de sélectionner ou de faire un double-clic sur la date choisie peut remplacer un bouton d'action et si oui comment on peut faire ca ?

Philippe - Sympa 74
 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2007 à 18:42
Attends !

On commence par ce fameux tri, d'abord et on voit le reeste après :

Transpose ceci (écrit en VB+) en VB.Net :

Une Form - une listview nommées ListView1 et un bouton de commande Command1

Private Sub Form_Activate()
    ListView1.ColumnHeaders.Add , , "Nom", ListView1.Width / 3
    ListView1.ColumnHeaders.Add , , "prénom ID", ListView1.Width / 3, lvwColumnCenter
    ListView1.ColumnHeaders.Add , , "date de naissance", ListView1.Width / 3
    ListView1.ColumnHeaders.Add , , "", 0
    Dim itmX As ListItem
    For i = 1 To 10
       Set itmX = ListView1.ListItems.Add(, , i)
       itmX.SubItems(1) = "a" & i
       If i Mod 2 = 0 Then
          itmX.SubItems(2) = "17/02/2000" ' date en format JJ/MM/AAAA
           itmX.SubItems(3) = "20000117"  ' date en format AAAAMMJJ
       Else
          itmX.SubItems(2) = "20/03/2002"
          itmX.SubItems(3) = "20020320"
       End If
    Next
End Sub


Private Sub Command1_Click()
  ListView1.SortOrder = lvwDescending
  ListView1.SortKey = 3
  ListView1.Sorted = True
End Sub

Tu lances et regardes : les dates sont mélangées.
Tu cliques sur Command1 et observes ...

Tu dis...
0
Sympa74 Messages postés 85 Date d'inscription lundi 25 septembre 2006 Statut Membre Dernière intervention 18 décembre 2008 1
9 mars 2007 à 18:47
juste pour être sûr ... listbox ou listview  ??

Philippe - Sympa 74
 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2007 à 18:49
Listview
!!!! (ne valide pas avant d'avoir transposé et essayé... la validation "réponse acceptée" n'est pas là pour faire plaisir mais pour être utile à d'autres qui chercheraient un jour ...)
0
Sympa74 Messages postés 85 Date d'inscription lundi 25 septembre 2006 Statut Membre Dernière intervention 18 décembre 2008 1
9 mars 2007 à 18:53
Ok Ok j'ai pas encore bien compris comment ca marche le réponse accepté... je pensais que c'était pour que tu recoives la réponse
bon alors j'essaie avec listview

Philippe - Sympa 74
 
0
Sympa74 Messages postés 85 Date d'inscription lundi 25 septembre 2006 Statut Membre Dernière intervention 18 décembre 2008 1
9 mars 2007 à 19:21
Hello jmfmarques,

bon j'ai un peu de mal à transposer le code en vb.net (puisque j'ai jamais programmé en vb6 avant).
y'a pas mal d'instructions qui changent à priori... j'ai pu adapter quelques lignes.. mais j'ai des messages d'erreurs... des trucs qui semblent incompatibles.
Je cherche de mon côté ce soir (dans mes bouquins de vb.net) et je te tiens au courant plus tard.
merci déjà pour tes réponses et tes pistes.

Philippe - Sympa 74
 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2007 à 19:27
Bon,

Je pense qu'un VB.Netiste passant par là pourra te transposer ce code de VB6 à VB.Net (ce ne devrait pas être très différent).

Je serais absent (restaurant) pendant quelque temps...
Voilà donc la suite (pour le click)

Private Sub ListView1_Click()
  Dim choisi As Integer
  choisi = ListView1.SelectedItem
  MsgBox "tu viens de double-cliquer sur la ligne " & choisi & vbCrLf & _
  " qui contient en sa 1ère colonne, le texte " & ListView1.SelectedItem.Text & vbCrLf & _
  " et en sa 3ème colonne, le texte " & ListView1.ListItems(choisi).SubItems(2) & vbCrLf & _
  "c'est là que tu peux injecter tes instructions à exécuter au lieu de cette msgbox"
End Sub

Attention, le click est toujours à faire sur une ligne de la 1ère colonne...


Tu peux bien évidemment faire la même chose avec le double-click au lieu du click.

A +
0
Rejoignez-nous