VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "From"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
Attribute VB_Ext_KEY = "Top_Level" ,"No"
Attribute VB_Ext_KEY = "Collection" ,"CMailAddress"
Attribute VB_Ext_KEY = "Member0" ,"CMailAddress"
'programmed by ShareVB
'gestion de la liste des émetteurs

Option Explicit

'variable locale pour la collection
Private mCol As Collection

'ajoute une adresse à la collection
'========================================
'DisplayName : nom d'affichage de l'adresse
'Address     : email
'renvoie l'adresse créée
Public Function Add(DisplayName As String, Address As String) As CMailAddress
    On Error Resume Next
    'créer un nouvel objet
    Dim objNewMember As CMailAddress
    Set objNewMember = New CMailAddress

    'définir les propriétés passées à la méthode
    objNewMember.DisplayName = DisplayName
    objNewMember.Address = Address
    mCol.Add objNewMember, Address

    'renvoyer l'objet créé
    Set Add = objNewMember
    Set objNewMember = Nothing
End Function

'renvoie une adresse de la collection
'========================================
'vntIndexKey : index ou email de l'adresse à renvoyer
'renvoie l'adresse demandée
Public Property Get Item(vntIndexKey As Variant) As CMailAddress
Attribute Item.VB_UserMemId = 0
    'Utilisé pour référencer un élément dans la collection
    'vntIndexKey contient l'index ou la clé dans la collection
    'Il est donc déclaré en tant que Variant
    'Syntaxe: Set toto = x.Item(xyz) ou Set toto = x.Item(5)
  Set Item = mCol(vntIndexKey)
End Property

'renvoie le nombre d'adresses de la collection
Public Property Get Count() As Long
    'utilisée pour lire le nombre d'éléments dans la
    'collection. Syntaxe: Debug.Print x.Count
    Count = mCol.Count
End Property

'supprime une adresse de la collection
'==================================================
'vntIndexKey : index ou email de l'adresse à supprimer
Public Sub Remove(vntIndexKey As Variant)
    'utilisée lors de la suppression d'un élément de la collection
    'vntIndexKey contient l'index ou la clé, il est donc
    'déclaré en tant que Variant
    'Syntaxe: x.Remove(xyz)

    mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
    'Cette propriété vous permet d'énumérer
    'cette collection avec la syntaxe For...Each
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
    'Crée la collection lorsque cette classe est créée
    Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
    'Détruit la collection lorsque cette classe est détruite
    Set mCol = Nothing
End Sub

'analyse une liste d'adresses au format mail : "display name" <email>, "display name" <email>, ...
'===========================================================
'szAddresses : liste d'adresses au format mail
Public Sub Parse(szAddresses As String)
Dim lszAddress() As String 'tableau contenant chaque adresse
Dim x As Long              'index de parcourt dans le tableau
Dim ub As Long             'nombre d'adresse - 1
Dim addr As CMailAddress   'une adresse

'sépare la liste
lszAddress = Split(szAddresses, ",")

'pour chaque adresse
ub = UBound(lszAddress)
For x = 0 To ub
    'on crée un objet adresse
    Set addr = New CMailAddress
    'on lui demande d'analyser l'adresse passée
    addr.Parse lszAddress(x)
    'on l'ajoute à la collection
    mCol.Add addr, addr.Address
Next
End Sub

'crée une liste au format Mail à partir de la collection d'adresse
'=================================================================
'renvoie une liste au format Mail
Public Function Make() As String
Dim cnt As Long             'nombre d'adresses dans la collection
Dim x As Long               'index de parcourt de la collection
Dim addr As CMailAddress    'une adresse

'combien d'adresse ?
cnt = mCol.Count
's'il y a en a au moins une
If cnt Then
    'on parcours la collection sauf la dernière
    For x = 1 To cnt - 1
        'on lit une adresse
        Set addr = mCol(x)
        'on la formatte en liste séparée par une virgule
        Make = Make & addr.Make & ","
    Next
    'on ajoute la dernière sans virgule derrière
    Set addr = mCol(cnt)
    Make = Make & addr.Make
End If
End Function
