Recherche
Posez votre question »

VBA et les collections d'objets.

Avril 2015


VBA et les collections d'objets


Quand plusieurs (beaucoup de) contrôles sont mis sur une feuille ou un Userform il est parfois fastidieux d'écrire du code dans chaque évènement des contrôles.
Ce Tuto vous permet de traiter vos contrôles comme s'ils étaient indexés, (mode VB6 avec index)



Préliminaires


Pour les tests et démos, ouvrez un nouveau classeur.
Incorporez, l'un en dessous de l'autre, dans la colonne C ...
OptionButton1 et OptionButton2 propriété GroupName = Feuil1A
OptionButton3 et OptionButton4 propriété GroupName = Feuil1B
CheckBox1, CheckBox2 et CheckBox3

Sauvez le classeur sous le nom Collections.xls

Dans un module


Option Explicit 
Public Collect As Collection 
Public CollectC As Collection 


Public Sub InitOption() 
Dim Obj As OLEObject 
Dim Cl As Classe1 
Set Cl = Nothing 
Set Collect = New Collection 
Workbooks("Collections.xls").Activate 
'boucle sur les objets de la Feuil1 
For Each Obj In Sheets("Feuil1").OLEObjects 
    'verifie s'il s'agit d'un OptionButton 
    If TypeOf Obj.Object Is MSForms.OptionButton Then 
         
        Set Cl = New Classe1 
        Set Cl.OptionButtonGroup = Obj.Object 
        Collect.Add Cl 
    End If 
Next Obj 

End Sub 

Public Sub InitCheck() 
Dim Obj As OLEObject 
Dim CO As Classe1 
Set CO = Nothing 
Set CollectC = New Collection 
Workbooks("Collections.xls").Activate 
'boucle sur les objets de la Feuil1 
For Each Obj In Sheets("Feuil1").OLEObjects 
    'verifie s'il s'agit d'une Checkbox 
    If TypeOf Obj.Object Is MSForms.CheckBox Then 
         
        Set CO = New Classe1 
        Set CO.CheckBoxGroup = Obj.Object 
        CollectC.Add CO 
    End If 
Next Obj 

End Sub


'Routine à appeler pour Initialiser ou Réinitialiser les collections.
'Nécessaire si le code VBA a été modifié.
Sub ActivationCollect() 
    InitOption 
    InitCheck 
End Sub

Dans un module de classe


Pour ouvrir un module de classe >> Insertion >> Module de classe.
Copiez ce code...

'-------------------------------------- 
'Dans un module de classe nommé "Classe1" 
' 
Option Explicit 

Public WithEvents OptionButtonGroup As MSForms.OptionButton 
Public WithEvents CheckBoxGroup As MSForms.CheckBox 


'Evenement Click sur les CheckBox de la feuille de calcul. 
Private Sub CheckBoxGroup_Click() 
     
    'Renvoie le nom et la valeur de la CheckBox cliquée 
    MsgBox CheckBoxGroup.Name & ": " & CheckBoxGroup.Value 
     
    'Exemple qui renvoie dans la colonne A, la valeur de CheckBox 
    Cells(CheckBoxGroup.TopLeftCell.Row, 1) = CheckBoxGroup.Value 
End Sub 

'Evenement Click sur les CheckBox de la feuille de calcul. 
Private Sub OptionButtonGroup_Click() 
     
    'Renvoie le nom et la valeur de l'OptionButton cliquée 
    MsgBox OptionButtonGroup.Name & ": " & OptionButtonGroup.GroupName 
     
    'Exemple qui renvoie dans la colonne A, la valeur de l'OptionButton 
    Cells(OptionButtonGroup.TopLeftCell.Row, 1) = OptionButtonGroup.Value 
End Sub

Et dans le module du classeur


Private Sub Workbook_Open() 
    InitOption 
    InitCheck 
End Sub


A l'ouverture du classeur les collections sont opérationnelles, mais si le code VBA est modifié, les collections seront désactivées, il faudra donc appeler la sub ActivationCollect soit en mettant le curseur au milieu de la sub et taper F5, soit en créant un raccourci.
Pour une lecture illimitée hors ligne, vous avez la possibilité de télécharger gratuitement cet article au format PDF :
Vba-et-les-collections-d-objets.pdf

Réalisé sous la direction de , fondateur de CommentCaMarche.net.

A voir également

Dans la même catégorie

VBA e coleções de objetos
Par pintuda le 12 avril 2010
Publié par lermite222. - Dernière mise à jour par spe2d
Ce document intitulé «  VBA et les collections d'objets.  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.