[VBA] Tableau dynamique avec clé

oniroiz Messages postés 4 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 9 mai 2008 - 8 mai 2008 à 16:19
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 9 mai 2008 à 11:20
Je cherche depuis un moment comment déclarer et utiliser un tableau dynamique avec clé.
Je désire que mon tableau n'ai pas des numero comme indice mais quelque chose que je définie moi.
Quelqu'un pourait m'éclairer sur le sujet ?

8 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
8 mai 2008 à 17:07
Salut,

tu peux utiliser les collections

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRON
0
oniroiz Messages postés 4 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 9 mai 2008
8 mai 2008 à 19:10
Tout d'abord merci d'avoir répondu à mon post.
Le problème que j'ai avec les collections c'est que je ne peux pas récupèrer la valeur des index et moi j'aurai besoin de connaître l'index et la valeur.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
8 mai 2008 à 19:30
Voilà un petit exemple avec les collections :

Private Const MyStr As String =  "Mon_Item"
Private Const MyKey As String = "Ma_Cle"

Sub test()
    Dim cCol            As Collection
    Dim i               As Long
    
Set cCol = New Collection

' Méthode Add
For i = 1 To 10
    cCol.Add MyStr & i, MyKey & CStr(i)
Next i

' Méthode de lecture par position numérique :
For i = 1 To cCol.Count
    Debug.Print "[Position " & i & "] " & cCol.Item(i)
Next i

' Méthode de lecture par Clé :
For i = 1 To cCol.Count
    Debug.Print "[MyKey" & CStr(i) & "] " & cCol.Item(MyKey & CStr(i))
Next i

Set cCol = Nothing
End Sub

~ <small> Mortalino ~ Colorisation automatique </small>

@++

<hr width ="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRON
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
8 mai 2008 à 19:31
Place ce code dans un module, fait F5 pour l'exécuter, puis regarde la fenêtre d'exécution (fenêtre Debug = [Ctrl + G])

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRON
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oniroiz Messages postés 4 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 9 mai 2008
8 mai 2008 à 22:57
Merci pour l'exemple.
Mais mon but est de pouvoir afficher la clé est la valeur.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
8 mai 2008 à 23:27
Le plus simple alors serait de créer 2 classes, une classe 'collection d'objets', et une classe Objet avec ses propriétés (donc clé et valeur) et chacun de ses objets que tu créeras à la volée seront à injecter dans la classes 'collection d'objets'

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA/STRON
0
oniroiz Messages postés 4 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 9 mai 2008
9 mai 2008 à 06:10
J'ai trouvé un autre objet. L'objet dictionary. Il permet de récupèrer les valeurs et les clés.

Sub items()
    Dim a, d, i       'Crée des variables
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "a", "Athènes"     'Ajoute des clés et des éléments.
    d.Add "b", "Belgrade"
    d.Add "c", "Le Caire"
    a = d.items        'Obtient les éléments
    For i = 0 To d.Count - 1 'Effectue une itération sur le tableau
        Debug.Print a(i)    'Imprime un élément
        ' Affiche Athènes, Belgrade et Le Caire
    Next
End Sub

Sub keys()
    Dim a, d, i       'Crée des variables
    Set d = CreateObject("Scripting.Dictionary")
    d.Add "a", "Athènes"     'Ajoute des clés et des éléments.
    d.Add "b", "Belgrade"
    d.Add "c", "Le Caire"
    a = d.keys        'Obtient les éléments
    For i = 0 To d.Count - 1 'Effectue une itération sur le tableau
        Debug.Print a(i)    'Imprime un élément
       ' Affiche a, b et c
    Next
End Sub

Mais je ne comprend juste pas pourquoi cette objet est initialisé de cette manière :
Set d = CreateObject("Scripting.Dictionary") ??
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 mai 2008 à 11:20
Le Dictionnary fait partie de la librairie (DLL) scrrun.dll (Microsoft Scripting Runtime)
Si tu connais le FileSystemObject, il fait aussi partie de cette librairie.

Il faut donc que tu crées une référence à cette librairie et que tu utilises le mot-clé NEW ou que tu utilises CreateObject sans créer de référence et sans déclarer ce NEW pour pouvoir utiliser ses fonctionnalités.

En créant une référence, ça te donne la possibilité de voir les méthodes et propriétés plus facilement avec l'Intellisense.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous