Public Function MaProcedure(obj As MonType, Argument As String) As Long Select Case Argument Case "DonneeA" MaProcedure = obj.DonneeA Case "DonneeB" MaProcedure = obj.DonneeB Case "DonneeC" MaProcedure = obj.DonneeC End Select End Function
Public Sub Test() Dim var As MonType var.DonneeA = 10 var.DonneeB = 20 var.DonneeB = 30 MsgBox MaProcedure(var, "DonneeB") End Sub
Option Explicit Private propertyTable() As Variant Private Sub Class_Initialize() 'Création d'une table contenant les noms des propriétés dans 'la première colonne et les valeurs dans la seconde ReDim propertyTable(2, 1) 'Initialisation des noms des propriétés propertyTable(0, 0) = "DonneeA" propertyTable(1, 0) = "DonneeB" propertyTable(2, 0) = "DonneeC" End Sub 'Accès direct à la proprété A Public Property Get DonneeA() As Long DonneeA = CLng(propertyTable(0, 1)) End Property Public Property Let DonneeA(value As Long) propertyTable(0, 1) = value End Property 'Accès direct à la proprété B Public Property Get DonneeB() As Long DonneeB = CLng(propertyTable(1, 1)) End Property Public Property Let DonneeB(value As Long) propertyTable(1, 1) = value End Property 'Accès direct à la proprété C Public Property Get DonneeC() As Long DonneeC = CLng(propertyTable(2, 1)) End Property Public Property Let DonneeC(value As Long) propertyTable(2, 1) = value End Property 'Récupération de la valeur d'une propriété par son nom Public Property Get Item(name As String) As Variant Dim index As Integer index = GetIndex(name) If index <> -1 Then Item = propertyTable(index, 1) Else Err.Raise vbObjectError + 10, , "La propriété " & name & " n'existe pas" End If End Property 'Affectation de la valeur d'une propriété par son nom Public Property Let Item(name As String, value As Variant) Dim index As Integer index = GetIndex(name) If index <> -1 Then propertyTable(index, 1) = value Else Err.Raise vbObjectError + 10, , "La propriété " & name & " n'existe pas" End If End Property 'Récupération de l'index de ligne d'une propriété (à améliorer par exemple avec une recherche dicotomique) Private Function GetIndex(name As String) As Integer Dim i As Integer For i = LBound(propertyTable, 1) To UBound(propertyTable, 1) If CStr(propertyTable(i, 0)) = name Then GetIndex = i Exit Function End If Next GetIndex = -1 End Function
Public Sub Test() Dim var As New PropertyList var.DonneeA = 10 var.DonneeB = 20 var.DonneeC = 30 MsgBox var.Item("DonneeB") End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question'Ecriture var.Item("DonneeA") = 10
'Lecture Msgbox var.Item("DonneeA")