Trier une collection vba-excel

larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006 - 10 juil. 2006 à 12:24
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 10 juil. 2006 à 16:43
bon, on va essayer une approche différente de mon problème:
 soit la collection suivante:

(Dans class1:)
Public nom, prénom, age

(dans module1:)
Public Liste As New Collection
Dim machin As New Classe1

machin.nom = "CHRIST"
machin.prénom = "Jesus"
machin.age = 33
Liste.Add machin
Set machin = Nothing

machin.nom = "LUCAS"
machin.prénom = "GEORGES"
machin.age = 50
Liste.Add machin
Set machin = Nothing

machin.nom = "LUCAS"
machin.prénom = "Gérard"
machin.age = 50
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = 75
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = 73
Liste.Add machin
Set machin = Nothing

machin.nom = "DES BATIGNOLES"
machin.prénom = "Marie-thérese"
machin.age = 120
Liste.Add machin
Set machin = Nothing

Comment puis-je extraire une liste au chois des noms, ou prénom, ou ages pour pouvoir créer une form+listbox dynamique qui me permette de choisir les correspondances
(exemple:
on donne comme argument à une function "Liste" & "age", cela doit nous donner:
listeb(1)=33
listeb(2)=50
listeb(3)=73
listeb(4)=75
listeb(5)=120

--> form:
Veuillez choisir la selection d'age:
[] 33ans
[] 50ans
[] 73ans
[] 75ans
[] 120ans

JE NE DEMANDE PAS COMMENT FAIRE LA "FORM" (ca je sais), MAIS COMMENT TRIER LA COLLECTION "LISTE" pour en faire "listeb" en fonction d'arguments de choix de la propriété....

Ca fais une semaine que je patauge la dessus...
(voir mes précédentes questions toutes liées à ce problème...)

Merci d'avance !!
A voir également:

8 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 juil. 2006 à 13:26
Salut,

Je ne pense pas que en posant 4 fois la même question (juste pour qu elle soit dans les derniers messages du forum) soit la meilleure façon de procéder.

Si cela fait une semaine que tu essaie de faire quelque chose, peu être devrait tu penser à une autre solution .

Exemple: Une classe pouvant posséder une liste de classes Classe1 et possédant des fonctions permettant de te retourner une liste (de ce que tu veux).

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
10 juil. 2006 à 14:10
La classe Collection de VB6 ne comprend ni méthode de tri ni critère de filtre. Il te faudra donc l'enrichir (cf. adresse ci-dessous) pour répondre à tes besoins.

Méthodes de tri :
http://docvb.free.fr/vbplus/Tris/Tri.php

Fenêtres
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
10 juil. 2006 à 14:12
Désolé pour la répétition, mais ce ne sont pas les mêmes questions, même si au final, cela concerne le même sujet.
Les 2 premières question m'ont appris des choses, et la dernière devait me permettre de trouver effectivement si il était possible d'effectuer ma manip d'une autre manière.

D'ailleurs, pourrais-tu développer un tout petit peu ton exemple, car je n'arrive pas à comprendre de quoi tu parles :(

Je reste encore assez débutant en vb, et j'ai un peu de mal avec son champ lexical....
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
10 juil. 2006 à 14:16
@FENETRES:
c'est effectivement ce que j'ai essayé de faire, mais je bute sur des transferts d'items de collections, et de classes d'une sub à l'autre
(c'est pour ca que je métait un lien avec mes autres questions)

:(
0

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

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 juil. 2006 à 15:09
Salut,

Alors,

J'ai essayer de te faire un exemple. je n'ai pas eu le temps de le commenter (j'ai du taf quand même).

Essaie de regarder le fonctionnement peu être que cela pourra te donner des idées.

Alors.

Code D'un module de classe Appelé Personne
Option Explicit 

Public Nom As String 
Public Prenom As String 
Public Age As Integer 

Code D'un Module De classe Appelé Col_Personne

Option Explicit 
Public Enum StyleListe 
    By_Age =  1 
    By_Nom = 2 
    By_Prenom = 3 
End Enum 

Private Tab_Personne As New Collection 

Public Sub Add_Personne(Nom As String, Prenom As String, Age As Integer) 
Dim Tmp_Personne As New Personne 
    With Tmp_Personne 
        .Nom = Nom 
        .Prenom = Prenom 
        .Age = Age 
    End With 
    Call Tab_Personne.Add(Tmp_Personne) 
    Set Tmp_Personne = Nothing 
End Sub 

Public Function GetList(Typ As StyleListe, ReturnList()) As Integer 
ReDim ReturnList(Tab_Personne.Count - 1) 
Dim i As Integer 
Dim Tmp_C As Personne 

    i = 0 
    For Each Tmp_C In Tab_Personne 
        Select Case Typ 
            Case By_Age: ReturnList(i) = Tmp_C.Age 
            Case By_Nom: ReturnList(i) = Tmp_C.Nom 
            Case By_Prenom: ReturnList(i) = Tmp_C.Prenom 
        End Select 
        i = i + 1 
    Next 
    GetList =  UBound (ReturnList) 

End Function 

Et enfin pour finir Code pour tester

Option Explicit 

Dim P As New Col_Personne 
Dim Col() 
Dim i As Integer 

Private Sub Command1_Click() 
Call P.GetList(By_Age, Col) 
Call FillList 
End Sub 

Private Sub FillList() 
Call List1.Clear 
For i  = LBound(Col) To UBound(Col) 
    Call List1.AddItem(Col(i)) 
Next i 
End Sub 

Private Sub Command2_Click() 
Call P.GetList(By_Prenom, Col) 
Call FillList 
End Sub 

Private Sub Command3_Click() 
Call P.GetList(By_Nom, Col) 
Call FillList 
End Sub 

Private Sub Form_Load() 
    Call P.Add_Personne("CHRIST", "Jesus", 33) 
    Call P.Add_Personne("LUCAS", "GEORGES", 50) 
    Call P.Add_Personne("LUCAS", "Gérard", 50) 
    Call P.Add_Personne("DES BATIGNOLES", "Marie-thérese", 75) 
    Call P.Add_Personne("DES BATIGNOLES", "Marie-thérese", 73) 
    Call P.Add_Personne("DES BATIGNOLES", "Marie-thérese", 120) 
End Sub 

<small> Coloration syntaxique automatique [AFCK]</small>
       

NOTE: J ai fait cela avec VB6 mais il devrait fonctionner sous VBA

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
10 juil. 2006 à 15:43
Euh....
En tout cas, merci beaucoup, mais je crois que je vais passer le reste de l'après-midi à comprendre tout ca,
donc j'en dirais plus plus tard.
Ceci n'est plus (ou en tout cas à cette heure-ci) de mon niveau, il va falloir que je me derrouille un peu les neurones ;)

En tout cas merci beaucoup...
0
larsene67 Messages postés 18 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 8 novembre 2006
10 juil. 2006 à 16:40
Ok, je commence à comprendre ce que sont des classes ;)
En fait, ce que tu m'a donné ressemble assez à ce que j'avais fait, mis à part que je l'avais fait au travers de sub de module, et non de classes.
Toutefois, mon soucis reste encore:

Le resultat que j'essai d'obtenir à partir de la premiere collection est une autre collection dont j'utilise une des propriété pour mes optionbuttons, et les autres pour un traitement ultérieur en fonction de ceux cochés (en fait, un nettoyage du tableau excel dont sortent les infos de la premiere collection)
Cette deuxieme collection est dans mon code créé par une copie de la première, puis un nettoyage (enlevement de lignes) en fonction de conditions qui changent suivant les lancement de cette dernier sub.
C'est pourquoi j'essayais sans succès de passer cette condition à la sub qui doit me faire ce nettoyage.

Pfff...

En fait, plus j'essaie d'éxpliquer, plus j'ai l'impression que mes expliquations manquent de clarté.

Enfin, à défaut de pouvois envoyer le fichier excel complet, on va essayer de continuer comme ca ;)

En tout cas, je ne vois pas l'avantage que pourra me donner le traitement par classes pour mon traitement conditionnel...

Ou bien?
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
10 juil. 2006 à 16:43
[mailto:Epsylon9@gmail.com Epsylon9@gmail.com] c est mon adresse pour l'envoi du fichier excel.

C est vrai que tes explication manquent un peu de clarete... j ai absolument rien compris.

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
Rejoignez-nous