Téléchargement
illégal

VBA et les collections d'objets.


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.
Publié par lermite222 - Dernière mise à jour le 3 mai 2010 à 16:53 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.
Suggestions
  •  VBA et les collections d'objets.
  •  VBA - Un formulaire multilingue et collections d'objets » Fiches pratiques : Cette démo a comme base une enquête de satisfaction clients. Deux langues sont développées (Français et Anglais) mais il y a possibilité d'en ajouter (ou de les modifier) Pour avoir accès au code vous devez ouvrir le classeur avec les macros...
  •  VBA - Collections de classes et collections d'objets » Fiches pratiques : Cette démo emploi, comme le titre l'indique, des collections différentes. Elle ne comporte que deux séries de cinq contrôles mais peut en gérer beaucoup plus avec le même nombre de lignes de code. Introduction Les contrôles sur une feuille...
  •  PHP - Les classes » Articles : La notion de classe Php3 intègre un soupçon de caractéristiques empruntées aux langages orientés objet, c'est-à-dire la possibilité d'utiliser des objets, entités regroupant des données et des fonctions au sein d'une structure et rendant la...
  •  Javascript - l'objet Array » Articles : Les particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...
  •  Classe et instance d'objet » Articles : La notion de classe On appelle classe la structure d'un objet, c'est-à-dire la déclaration de l'ensemble des entités qui composeront un objet. Un objet est donc « issu » d'une classe, c'est le produit qui sort d'un moule. En réalité on dit qu'un...
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
VBA Un timer une seconde tout simple
Activer un onglet précis dans un classeur en contenant beaucoup