Collections

Résolu
prince4878 Messages postés 149 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 3 avril 2010 - 22 nov. 2008 à 11:11
prince4878 Messages postés 149 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 3 avril 2010 - 25 nov. 2008 à 01:38
Salut tout le monde, j'ai un petit souci a propos des collections avec VB6, cc'est que je ne sais pas vraiment pourquoi les utilise t-on.
Pout quelqu'un m'expliquer le POURQUOI ??
Merci

8 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2008 à 03:20
salut,

non, pas pour "créer" des méthodes...
éventuellement y donner accès, donc d'un autre objet.
encore que comme indiqué, çà dépend du contexte...

quand on peut éviter de l'utiliser (la collection), on fait sans.
si dans ton code le but est simplement et uniquement de... t'éviter de vérifier le ubound d'un tableau, alors c'est que la conception de ton code est à revoir.

si tu as besoin d'avoir 10 éléments, mais parfois 5 ou 15...., la collection n'a aucune utilité

si tu veux faire un usercontrol comme une listbox, alors la collection peut avoir certains avantages

exemple rapide (sans vérification ou presque, et sans accessoire...), tu veux pouvoir ajouter (et donc écrire) des lignes une à une, et pouvoir en supprimer, çà donnerait :

DANS UN USERCONTROL, PAR DéFAUT





Option Explicit


Dim 
oColl 
As 
New Collection




Public Sub 
AddItem(
ByVal 
sStr 
As String
)

    oColl.Add sStr
    Me.Refresh
End Sub

Public Sub RemoveItem(ByVal Index As Integer)
    If (Index < 1) Or (Index > oColl.Count) Then
        Err.Raise vbInteger Or vbObjectError, , "l'Index indiqué
n'existe pas"
    Else
        oColl.Remove Index
        Me.Refresh
    End If
End Sub

Public Sub Clear()
    Do While oColl.Count
        oColl.Remove 1
    Loop
    Me.Refresh
End Sub

Public Sub Refresh()
    UserControl.Cls
    
    Dim v As Variant
    
    For Each v In oColl
        UserControl.Print CStr(v)
    Next v
End Sub

Private Sub UserControl_Initialize()
    UserControl.BackColor =  vbBlue
    UserControl.BorderStyle = vbBSSolid
    UserControl.FontName = "Courier
New"
    UserControl.ForeColor = vbWhite
End Sub

Private Sub UserControl_Terminate()
    Me.Clear
    Set oColl = Nothing
End Sub

<small>[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]</small>








DANS UNE FORM, PAR DéFAUT, POSE l'UC (nommé donc UserControl11) ET 2 BOUTONS







Option Explicit


Private Sub 
Form_Load()

    Command1.Caption  = "ajoute
heure"
    Command2.Caption =  "supprime"
End Sub

Private Sub Command1_Click()
    UserControl11.AddItem CStr(Time)
End Sub

Private Sub Command2_Click()
    On Error Resume Next
    UserControl11.RemoveItem Val(InputBox("Saisissez le numéro de l'item à supprimer", , "1"))
    If Err.Number Then MsgBox Err.Number & " : " & Err.Description, vbExclamation, "Erreur du Usercontrol"
End Sub





<small>
[../code.aspx?ID= 39466 Coloration VB6, VBA,
VBS]
</small>









VISUELLEMENT POUR LES CURIEUX













bref ce n'est qu'un exemple, ici il aurait été de supprimer uniquement tableau.
pas impossible bien sûr, mais dans ce cas précis, la collection est préférable (pour répondre à ta première question ^^)

c'est à force d'utilisation que tu sauras faire le choix "collection ou autre".
en attendant si çà peut t'aider, décris-nous peut-être ton besoin...., on saura te dire comme t'en passer
++

<hr size ="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
3
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
22 nov. 2008 à 12:18
On peut, par exemple, facilement énumérer des fichiers sans devoir définir un tableau de X éléments.
Ce qui rend évidemment plus facile d'utilisation
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
22 nov. 2008 à 16:14
salut,

l'utilisation la plus fréquente est en effet d'ajouter un élément (une chaine par exemple) comme dans un tableau, sans avoir à le redimensionner et donc à connaître ses limites....
dim c as new collection
c.add "s1"
c.add "s2"
c.add "s3"
...

un autre intérêt est de pouvoir associer des clés à chaque valeurs
c.add "s4", clef (voir F1)

aussi de pouvoir récupérer l'élément tant par sa position que sa valeur ou sa clé
x = c.items(clef)

et de pouvoir jouer facilement avec d'autres instances de classes
dim v as maclass
for each v in c
  debug.? v.une_de_mes_proprietes
next v

NB : la collection a donc beaucoup d'avantages, mais consomme énormément de ressources. il faut donc bien réfléchir à son utilité (dans le contexte) avant de commencer à coder...
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
22 nov. 2008 à 21:12
Bonjour

Autre avantage, les membres d'une collection ne doivent pas nécessairement avoir le même type de données.

J'ai vu sur Internet une utilisation pratique de l'objet collection, comme dictionnaire de données pour la compression et la décompression d'images GIF.

Par exemple, pour reprendre l'exemple donné par PCPT, on peut chercher si le string clef est dans le dictionnaire par :

On Error Resume Next
x = c.items(clef)                              ' est-ce que clef est dans le dictionnaire ?
If Err <> 0 Then ...                           ' clef n'est pas dans le dictionnaire
       c.Add c.count + 257, clef          ' ajoute clef dans le dictionnaire

Mais je pense pour ma part qu'il est souvent préférable d'écrire soi-même un algo de tri, pour les raisons de performances données par PCPT.

Cordialement
0

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

Posez votre question
prince4878 Messages postés 149 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 3 avril 2010
24 nov. 2008 à 01:56
Salut
Merci beaucoups pour les explications de proffessionnels, maintenant c'est 1000 fois plus clair :P
MAIS
je vouderai savoir pour quel but utilise t-on cette technique pour les applications des BDD ?
merci
0
prince4878 Messages postés 149 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 3 avril 2010
24 nov. 2008 à 01:58
Oups, une autre question.
donc si j'ai bien compris, cette technique ne sert qu'a creer des methods et des proprietes, et rien d'autre de plus ???
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 nov. 2008 à 03:27
ps : pour une BDD, tu n'aurais pas besoin de collection....
ton RS t'en renvoie déjà une, celle des FIELDS. donc aucun besoin.
et si tu voulais récupérer tous les enregistrements d'un champ par exemple, un tableau, redimentionné sur le recordcount, et rempli à la volée
donc pas besoin de collection dans la majeure partie des cas ;)
++
0
prince4878 Messages postés 149 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 3 avril 2010
25 nov. 2008 à 01:38
Salut
bein PCPT, je ne sais vraiment pas quoi te dire apres avoir ( et vu    -j'en fais partie-)
merci beaucoup pout toutes ses explications


Boncourage
0
Rejoignez-nous