Voici ce que dit le MSDN sur "Friend"
Propriétés et méthodes Friend
Outre le fait de les déclarer en tant que Public et Private, vous pouvez également déclarer les propriétés et les méthodes en tant que Friend. Pour les autres objets de votre projet, les membres Friend s'apparentent aux membres Public, comme s'ils appartenaient à l'interface d'une classe, ce qui n'est pas le cas.
Dans les composants ActiveX que vous pouvez créer à l'aide des Éditions Professionnelle et Entreprise de Visual Basic, les membres Friend jouent un rôle important. Ils ne font en fait pas partie de l'interface d'un objet et ne sont pas accessibles aux programmes qui utilisent les objets du composant. Mais les membres sont visibles de tous les autres objets du composant et permettent donc une communication interne en toute sécurité au sein du composant.
Important Les membres Friend ne faisant pas partie de l'interface publique d'un objet, ils ne sont pas accessibles par liaison tardive, c'est-à-dire par l'intermédiaire de variables déclarées comme As Object. Pour utiliser des membres Friend, vous devez déclarer les variables avec des liaisons précoces ; en d'autres termes, comme As classname.
Les projets EXE Standard ne peuvent pas être des composants ActiveX, car leurs modules de classe ne peuvent pas être Public ; ils ne peuvent donc pas être utilisés par d'autres applications. Par conséquent, toutes les communications entre les objets d'un projet EXE Standard sont privées et les membres Friend deviennent inutiles.
Cependant, les membres Friend présentent une fonctionnalité particulièrement utile. Ne faisant pas partie d'une interface ActiveX, ils peuvent servir à transmettre des types définis par l'utilisateur entre les objets sans les exposer publiquement. Supposez, par exemple, que vous disposiez du type défini par l'utilisateur suivant dans un module standard :
Public Type udtDemo
intA As Integer
lngB As Long
strC As String
End Type
Vous pouvez définir la variable privée et les membres Friend suivants dans Class1 :
Private mDemo As udtDemo
Friend Property Get Demo() As udtDemo
Demo = mDemo
End Property
' Remarquez que udtDemo doit être transmis par
' référence.
Friend Property Let Demo(NewDemo As udtDemo)
mDemo = NewDemo
End Property
Friend Sub SetDemoParts(ByVal A As Integer, _
ByVal B As Long, ByVal C As String)
mDemo.intA = A
mDemo.lngB = B
mDemo.strC = C
End Sub
Public Sub ShowDemo()
MsgBox mDemo.intA & vbCrLf _
& mDemo.lngB & vbCrLf & mDemo.strC
End Sub
Note Lorsque vous transmettez des types définis par l'utilisateur en tant qu'arguments de procédure Sub, Function et Property, vous devez les transmettre par référence (ByRef est la valeur par défaut pour les arguments de procédure).
Vous pouvez par conséquent écrire les lignes de code suivantes pour utiliser Class1 :
Private Sub Command1_Click()
Dim c1A As New Class1
Dim c1B As New Class1
c1A.SetDemoParts 42, 1138, "Bonjour"
c1B.Demo = c1A.Demo
c1B.ShowDemo
End Sub
La fenêtre de message affichera 42, 1138 et « Bonjour ».
Note Les procédures Friend ne faisant pas partie d'une interface de classe, elles ne sont pas incluses lorsque vous utilisez l'instruction Implements pour implémenter plusieurs interfaces, comme indiqué dans la section « Polymorphisme ».
Pour plus d'informations sur l'utilisation des membres Friend dans les composants, reportez-vous à la section « Communications privées entre les objets » du chapitre « Principes généraux de création des composants » du Guide des composants.
Christophe R.