Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Demande d'info sur la, propriété "SORTED" d'une listbox [ Windows / Formulaire et Controls ] (nono78220)

lundi 18 juin 2007 à 23:13:20 | Demande d'info sur la, propriété "SORTED" d'une listbox

nono78220

Bonjour à tous,

J'ai une listbox contenant des titres sous forme de date + nom, se référant à des documents scannés. Ex:
15.06.2007
02.04.2005
03.04.2004
etc ...

Je voudrais trier ces dates de la plus ancienne à la plus récente, et que la plus récente apparaissent tout en haut de ma listbox.

PROBLEME:

1/ Si j'utilise "Sorted" les dates ne sont absolument pas triées, puisque "sorted" trie en fonction du 1er chiffre, en l'occurence ici les dates seront triées comme ceci: 02.04.2005 > 03.04.2004>15.06.2007
Donc ce n'est pas la bonne solution.

2/ si j'utilise ce code : "lstNono.AddItem DateScanne, 0" le dernier document scanné apparaitra tout en haut de ma listbox (génial !!) mais les dates ne seront pas triées correctement comme dans l'exemple 1/

3/ Si mes dates sont enregistrées de cette manières :
2007.06.15
2005.04.02
2004.04.03

etc ...
les dates sont correctement triées par "sorted", càd 2004.04.03>2005.04.02>2007.06.15 (ouais !!!) mais la date la plus récente est en bas de la listbox, ce qui est embêtant lorsqu'il y a plusieurs documents scannés, il faut utiliser le curseur pour visualiser le document le plus récemment scanné !!

4/L'idéal serait d'avoir des dates triées, avec la plus récente en haut de la listbox et de préférence sous ce format 15.06.2007 !!!!!

Quelqu'un aurait-il une idée ?

Merci d'avance pour vos réponses

Nono

lundi 18 juin 2007 à 23:56:44 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

yomm

Membre Club
Salut, rapidement, je peux te filer une astuce:

le plus simple est de créer une listbox qui a la propriété sorted = true et de la rendre visible false (appelons la List2)

le but est de faire une fonction qui prend les items de ta listbox, les formats de telle sorte qu'ils puissent être triés puis les restitue au bon format:

en gros, on copie tous les items dans un listbox tempon (ici List2)
les valeurs sont ajoutées au format YYYYMMDD afin de faire une comparaison numérique
avec la propriété Sorted=True les items sont triés dans l'ordre croissant
ensuite on vide la listbox d'origine
on prend le résulat obtenu par le trie
on recré les items dans la listbox d'origine avec le format souhaité:DD.MM.YYYY

en gros ça donne:
-----------------------------------------------------------------------------------------
Private Sub ListBoxSort(ByVal MyListBox As ListBox)
   
    Dim i As Long
   
   
    List2.Clear
    For i = 0 To MyListBox.ListCount - 1
        List2.AddItem Right(MyListBox.List(i), 4) & Mid(MyListBox.List(i), 4, 2) & Left(MyListBox.List(i), 2)
    Next
   
    MyListBox.Clear
    For i = 0 To List2.ListCount - 1
        MyListBox.AddItem Right(List2.List(i), 2) & "." & Mid(List2.List(i), 5, 2) & "." & Left(List2.List(i), 4)
    Next
   
End Sub
-----------------------------------------------------------------------------------------

c'est un peu barbare mais ça marche, bien évidemment il ne faut pas 500000 items...sinon c'est un peu long ;-)

en espérant que cela t'aide @+
   

Yomm

yommvb@free.fr

Et que la source soit avec toi!!!!!

lundi 18 juin 2007 à 23:58:49 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

yomm

Membre Club
PS: pour ma fonction je suis parti du format DD.MM.YYYY
je précise pour les lignes du genre : Right(MyListBox.List(i), 4) & Mid(MyListBox.List(i), 4, 2) & Left(MyListBox.List(i), 2)

re @+


Yomm

yommvb@free.fr

Et que la source soit avec toi!!!!!

mardi 19 juin 2007 à 07:08:19 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

Renfield

Administrateur CodeS-SourceS
Tu peux les insérer triées, c'est surement le plus simple...

Pour chaque element a a ajouter
     si la liste est vide, on l'ajoute
     si la liste n'est pas vide, on cherche ou l'ajouter :
          pour chaque element (ou par dichotomie, pour accelerer), on regarde s'il doit être placé avant notre nouvel item
                s'il doit etre placé avant, on continue a regarder les elements
                sinon, on place notre nouvel element, on a trouvé sa place

tu y gagnera, je pense, en rapidité (une seule insertion dans la liste). Et ca n'est pas très complexe a mettre en place.


Renfield
Admin CodeS-SourceS- MVP Visual Basic

mardi 19 juin 2007 à 08:19:54 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

jmfmarques

Membre Club

Bonjour,

Juste un rappel de l'aide en ligne (pour le cas où on voudrait retrier une listbox) :

L'aide en ligne précise que l'on peut forcer l'emplacement en faisant une insertion et en précisant l'index d'insertion ...

Donc (exemple) :

Private Sub Form_Activate()
  List1.AddItem "2005/04/02"
  List1.AddItem "2005/05/01"
  List1.AddItem "2007/06/15"
  List1.AddItem "2004/04/03"
End Sub


Private Sub Command1_Click()
  ReDim toto(List1.ListCount) As String
  comb = List1.ListCount - 1
  For i = comb To 0 Step -1
   toto(i) = Format(List1.List(comb - i), "dd/mm/yyyy")
  Next
  List1.Clear
  For i = 0 To comb
    List1.AddItem toto(i), i
  Next
End Sub

Rigolo, non ?


mardi 19 juin 2007 à 08:57:12 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

nono78220

Bonjour à tous,

Thanks pour vos réponses.
Je vais étudier vos propostitions durant la journée et je vous tiens au courant en cas de difficultés

Merci
Nono

mardi 19 juin 2007 à 09:43:04 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

yomm

Membre Club

re-Salut

Voici en gros ce que donnerai la proposition de Rey:

--------------------------------------------------------------------------------------------------

Private Sub Command1_Click()

    Call LstAddItem("15.06.2007")
    Call LstAddItem("03.04.2004")
    Call LstAddItem("02.04.2005")

End Sub

Private Sub LstAddItem(ByVal Texte As String)
   
    Dim i As Long
   
    For i = 0 To List1.ListCount - 1
        If Val(Right(List1.List(i), 4) & Mid(List1.List(i), 4, 2) & Left(List1.List(i), 2)) > Val(Right(Texte, 4) & Mid(Texte, 4, 2) & Left(Texte, 2)) Then
            Exit For
        End If
    Next
    List1.AddItem Texte, i

End Sub

---------------------------------------------------------------------------------------------------

avec cette fonction, chaque fois que tu ajoute un item il est automatiquement placé à la bonne place.

Contrairement à rey, je ne sais pas si tu y gagneras forcément, disons que c'est plus en fonction de ton appli.
Je m'explique : (Rey n'hésite pas à me contredire biensur)
1) ton appli charge un bonne fois pour toute une liste de dates :
         - là j'obterais pour ma solution. en effet au final tu remplies 3 fois une listbox (enfin 2+1) mais au moins tu ne la reparcours pas à chaque insertion.....donc ça peut etre plus rapide
2) ton appli ajoute des dates lorsque l'utilisateur utilise l'appli...en gros cela se fait au fur et à mesure :
         - là j'obterais pour la solution de Rey au moins l'item est directement classer.

===> Conclusion:
Combine les deux ;-)
Si tu dois charger des valeurs initiales appelle : ListBoxSort
Lorsque tu ajoutes un item par la suite appelle : LstAddItem

Quand penses tu Rey ?

@+



Yomm

yommvb@free.fr

Et que la source soit avec toi!!!!!


mardi 19 juin 2007 à 09:45:43 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

yomm

Membre Club
Quand Qu'en penses tu Rey ? (y en a d'autres mais je vais pas tout retaper)

@+

Yomm

yommvb@free.fr

Et que la source soit avec toi!!!!!

mardi 19 juin 2007 à 11:12:31 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

jmfmarques

Membre Club
Ouais...
Je trouve que vous vous compliquez bien la vie, moi...

Une listbox avec sa propriété Sorted = True et :

Private Sub Form_Activate()
  mf1 = "yyyy/mm/dd"
  mf2 = "dd/mm/yyyy"
  List1.AddItem Format("02/04/2005", mf1)
  List1.AddItem Format("03/05/2006", mf1)
  List1.AddItem Format("10/01/2002", mf1)
  List1.AddItem Format("30/03/2004", mf1)
  ReDim toto(List1.ListCount) As String
  comb = List1.ListCount - 1
  For i = 0 To comb
    List1.AddItem Format(List1.List(comb), mf2), i
    List1.RemoveItem comb + 1
  Next
End Sub

Etr voilà : classés par ordre décroissant et dans un format lisible
C'est tout !


mardi 19 juin 2007 à 12:08:19 | Re : Demande d'info sur la, propriété "SORTED" d'une listbox

yomm

Membre Club
en effet jmfmarques...mais comment tu ajoutes un item après coup ? de plus le format souhaité par nono était DD.MM.YYYY et la fonction format ne fonctionne pas dans ce cas (sauf si tu changes les paramètres régionaux biensûr)

;-)


Yomm

yommvb@free.fr

Et que la source soit avec toi!!!!!


1 2 3 4 5

Cette discussion est classé dans : listbox, dates, sorted, triées, récente


Répondre à ce message

Sujets en rapport avec ce message

listbox et base de donnee [ par vichenzo ] slt a tousj ai:- une base de donnee- une form avec une listbox et une textbox- un probleme....ds ma base de donnee g plusieurs chps dont un nomme "nom Fichier texte et listbox [ par lolokill666 ] Bonjour tout le monde, g un probleme, g bo chercher, je ne voit pas comment resoudre ce probleme.Je cherche a lire un fichier texte ligne par ligne af Rechercher texte !! :) [ par scoobydoos ] Salut,j'ai un TextBox, une command "OK" et une ListBox. Je voudrais faire une recherche de texte dans la ListBox avec le texte écrit dans le TextBox.. Rechercher texte !! :) [ par scoobydoos ] salut,j'ai tjrs un TextBox, un Command "OK" et une ListBox. J'arrive bien à faire une recherche de texte. Ceux que je veux maintenant c'est de pouvoi URGENT !!! concaténation avec alignement dans listbox [ par akhiro ] Bonjour,Comment faire pour concaténer des enregistrements de longueurs différents dans une listbox sans qu'il y ait de décallage d'une ligne à l'autre URGENT!!! Saisie de nombres dans une listbox ?? [ par akhiro ] Bonjour,Comment réaliser un controle sur la saisie de l'utilisateur dans un textbox qui ne doit contenir que des nombres (pas de lettres) mais qui ne Listbox [ par shaft107 ] je voudrai ajouter le resultat de ma requete sql (access) dans une listbox sous vb 6merci Listbox et recordset [ par jff27 ] Comment faire pour affecter le resultat d'une requette (Nom et prenom) dans 2 colonnes d'un controle listbox?D'avance merci. probleme de date entre VB et ACCESS [ par ptij ] J'utilise VB 6 pour faire une application qui utilise des dates.Je rentre ces dates dans une base de données access2000 pour pouvoir les utiliser plus Probleme de date entre VB6 et Access 2000 [ par pisko ] Salut,J'ai un soucis quant aux échanges de dates entre un prog VB6 et Access.J'ai une table qui contient des champs date au format "date abgrégée" don


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.