Dictionary et objets

mécano41

XLDnaute Accro
Bonjour à tous,

J'utilise les dictionnaires pour les listes en cascades (merci Boisgontier) mais je voudrais savoir s'il est possible de les utiliser pour des objets (en l'occurrence, des contrôles). Je m'explique :

- une boîte de dialogue
- des coches (Checkbox - beaucoup d'éléments)
- tous les contrôles ont un Tag (nombre)

Peut-on imaginer un accès aléatoire permettant de changer l'état de certaines coches en désignant les contrôles par leur Tag? Actuellement, je le fais par : For Each Coche in Userform1.Controls...jusqu'à trouver le bon Tag, mais je trouve ça un peu lourdingue et j'aurais voulu savoir si quelque chose dans ce genre serait envisageable :

Code:
Sub EtablitDico()
Dim DicoTag As Object
Dim Contr As Control
Set DicoTag = CreateObject("Scripting.Dictionary")
For Each Contr In Me.Controls
    If TypeName(Contr) = "CheckBox" Then
        DicoTag.Item(????) = Contr.Tag                   
    End If
Next Contr
End Sub

Sub UtiliseDico()
    DicoTag.Item(13).Value = True
    DicoTag.Item(32).Value = False
End Sub

Pas vu d'exemple. Si quelqu'un a une idée...merci d'avance. Si ce n'est pas possible, merci quand même ;)

Cordialement
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Dictionary et objets

Bonjour mécano41

Une suggestion (non testée)

Code:
Public DicoTag
Sub EtablitDico()
Dim DicoTag As Object
Dim Contr As Control
Set DicoTag = CreateObject("Scripting.Dictionary")
For Each Contr In Me.Controls
        DicoTag(Contr.Tag) = Contr.Name
Next Contr
End Sub
Sub UtiliseDico()
    Controls(DicoTag(Tag1)) = True
    Controls(DicoTag(Tag2)) = True
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Dictionary et objets

Bonsoir.
Vous devriez pouvoir faire :
VB:
DicoTag.Add Contr.Tag, Contr
Et plus loin :
VB:
DicoTag(Tag1).Value = True
Toujours penser à stocker et utiliser les objets eux mêmes plutôt que leurs noms !
 

Efgé

XLDnaute Barbatruc
Re : Dictionary et objets

Bonjour mécano41, pierrejean, Dranreb

Si je puis me permettre de "phagocyter" le fil de mécano41 ...

VB:
DicoTag.Add Contr.Tag, Contr

La possibilité de mettre en Dictionnaire des objets m'était inconnue. Merci Dranreb

Par contre je ne comprends pas comment sont gérés les propriétés de l'objet
VB:
DicoTag(Tag1).Value = True

D'où viens le
VB:
DicoTag(Tag1).Value

Par avance merci de m'excuser de l'intrusion pour mécano41 et de la réponse pour Dranreb :)

Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Dictionary et objets

Par contre je ne comprends pas comment sont gérés les propriétés de l'objet
Inévitablement, hélas, par une liaison tardive, forcément.
Les items d'un Dictionnary, tout comme les membres d'une collection sont des Variant, par définition susceptibles de contenir n'importe quoi, y compris des objets, et des tableaux. J'utilise beaucoup cette dernière possibilité dans OutIdx. Les objets aussi du reste puisque j'y construit des dictionnaires de … dictionnaires de dictionnaires de listes de lignes !
 
Dernière édition:

mécano41

XLDnaute Accro
Re : Dictionary et objets

Bonjour,

Oui, comme l'a dit Dranreb, dans mon USF, les contrôles ont tous été affectés manuellement d'un Tag à la construction. Par ex. : CheckBox1.Tag=22.

C'est par ce Tag que je reconnais le contrôle dont je veux modifier la valeur ou autre chose en partant de valeurs placées dans des cellules. Ces cellules contenant par exemple les CheckBoxN.Caption, sont placées sur une ligne et la ligne au-dessus (cachée) contient les CheckBoxN.Tag ; la correspondance est simple.

Pour atteindre un contrôle et modifier son Caption (en fonction d'une modif faite dans une cellule contenant un Caption par l'utilisateur), je peux trouver directement le contrôle adéquat par son Tag. Je fais même cela au niveau Designer pour certains contrôles car la modif est peu fréquente et vu le nombre de contrôles dans l'USF (il y a un Multipages) je ne veux pas le faire à chaque initialisation de l'USF.

Voilà la raison de ma demande. Je voulais bien mettre les objets dans un dico. mais je n'y arrivais pas... Encore merci.

Cordialement
 

Discussions similaires

Réponses
6
Affichages
353

Statistiques des forums

Discussions
312 517
Messages
2 089 242
Membres
104 075
dernier inscrit
christophe.lienard.974