Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/05/2011, 18h30   #1
Futur Membre du Club
 
Grégory MARTIN
Inscription : mars 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : Grégory MARTIN

Informations forums :
Inscription : mars 2010
Messages : 72
Points : 17
Points : 17
Par défaut Comparer l'adresse de 2 objets

Bonjour,

Si j'ai 2 classes VBA : A,B

A:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private sText As String
Public Property Get Text() As String
    Attribute Text.VB_UserMemId = 0
    Text = sText
End Property
 
Public Property Let Text(s As String)
    sText = s
End Property
 
Public Function Equals(o As Object)
    Equals = False
    If Not TypeOf o Is A Then Exit Function
    If o.Text = Me.Text Then Equals = True
End Function
B:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private sText As String
Private iLength As Integer
Public Property Get Text() As String
    Attribute Text.VB_UserMemId = 0
    Text = sText
End Property
 
Public Property Let Text(s As String)
    sText = s
End Property
 
Public Property Get Length() As Integer
    Length = iLength
End Property
 
Public Property Let Length(i As Integer)
    iLength = i
End Property
 
Public Function Equals(o As Object) As Boolean
    Equals = False
    If Not TypeOf o Is B Then Exit Function
    If o.Text = Me.Text And o.Length = Me.Length Then Equals = True
Enf Function
Mes fonctions Equals me permettent de comparer les valeurs des propriétés de mes objets. Je pourrais aussi renvoyer un Integer < 0 si Me < o ou > 0 si Me > o ou = 0 si Me = o.

Comment faire si je veux comparer les adresses plutôt que les valeurs des propriétés ?

Pour ma culture générale, j'aimerais aussi savoir si c'est possible de définir un membre par défaut en écriture avec mes Property Let.

On aurait donc :
Code :
1
2
3
4
5
Sub Test()
    Dim oa As A
    oa = "Salut !"
    Debug.Print oa
End Sub
au lieu de
Code :
1
2
3
4
5
Sub Test2()
    Dim oa As A
    oa.Text = "Salut !"
    Debug.Print oa.Text
End Sub
sunlover est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 18h49   #2
Futur Membre du Club
 
Grégory MARTIN
Inscription : mars 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : Grégory MARTIN

Informations forums :
Inscription : mars 2010
Messages : 72
Points : 17
Points : 17
Je précise pourquoi je souhaite comparer les adresses, ce qui n'est pas intéressant d'habitude.

Je crée mes objets, puis je les ajoute à un objet Collection, parfois avec des clés d'index.

Code :
1
2
3
4
5
6
7
8
9
Private list As New Collection
Sub Add() 
    Dim oA As New A
    oA.Text = "a1"
    list.Add oA, key:= "a1"
    Set oA = New A
    oA.Text = "a1"
    list.Add oA  
End Sub
Ici, il y a dans ma collection 2 objets qui contiennent le texte "a1".

Je voudrais être sûr d'agir sur l'objet list("a1"), éventuellement le remplacer par un autre objet en l'enlevant puis .

Or, en faisant une recherche avec mes méthodes Equals, s'il y a plusieurs objets avec le même texte, je ne suis pas sûr de remplacer list("a1").

Quand je dis remplacer, je veux dire à la même position.

Merci.
sunlover est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h48.


 
 
 
 
Partenaires

Hébergement Web