IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Dictionnaire dont l'item est une structure


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut Dictionnaire dont l'item est une structure
    Bonjour,

    je souhaite créer un dictionnaire dont l'item est une structure (et non un double ou une string).
    Voici ce que j'ai écrit à l'intérieur de ma classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Type InfoPhaseOut
        cad As String
        date As String
        tonnage As Double
        lb As String
    End Type
    et dans une fonction de la classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim tonnagePhaseOut As Object 'dictionnaire, la cle de recherche est la CAD, tonnagePhaseOut(cad) contient une structure InfoPhaseOut
     
    Set tonnagePhaseOut = CreateObject("Scripting.Dictionary")
    tonnagePhaseOut.comparemode = vbTextCompare 'on ignore la casse de la cle de recherche
    If Not tonnagePhaseOut.Exists("123456") Then tonnagePhaseOut.Add "123456", InfoPhaseOut 'initialisation
    tonnagePhaseOut("123456").cad = "123456"
    tonnagePhaseOut("123456").date = "201812"
    tonnagePhaseOut("123456").tonne = 12.5
    tonnagePhaseOut("123456").lb = "toto"
    le code plante à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tonnagePhaseOut("123456").cad = "123456"
    Savez-vous pour quelle raison ?

    D'avance merci bcp

    Bonne journée

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    J'ai trouvé une solution en passant par une classe, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If Not tonnagePhaseOut.Exists("123456") Then tonnagePhaseOut.Add "123456", New InfosPhaseOut 'initialisation
    tonnagePhaseOut("123456").create "123456", "201812", 12.5, "LB"

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    On peut utiliser un Array()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
      Type Personne
      Nom As String
      age As Integer
    End Type
     
    Sub essai()
      Set d = CreateObject("scripting.dictionary")
      Dim a(1 To 5) As Personne
      Dim temp As Personne
      Dim temp2 As Personne
      a(1).Nom = "Dupont": a(1).age = 40
      a(2).Nom = "Balu": a(2).age = 30
      a(3).Nom = "Charlie": a(3).age = 20
      a(4).Nom = "Durand": a(4).age = 25
      a(5).Nom = "Campas": a(5).age = 35
      For i = 1 To 5
        clé = a(i).Nom
        b = Array(a(i).Nom, a(i).age)
        d(clé) = b
      Next i
      MsgBox d.Item("Balu")(1)
      Tbl = Application.Transpose(Application.Transpose(d.items)) ' dictionnaire dans array b(1 to n,1 to 3)
      MsgBox Tbl(2, 2)
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Re,

    merci bcp pour cette super astuce de passer par un Array !

    Je garde ta solution dans mon aide-mémoire

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 20h39
  2. Réponses: 4
    Dernier message: 27/02/2009, 14h57
  3. Edit.OnChange dont le parent est une Grid
    Par GLBX2008 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 10/03/2008, 17h40
  4. VB6 Connection à une base de données dont la source est une adresse url
    Par yangoal25 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/11/2006, 18h47
  5. Instancier une classe dont le nom est une variable
    Par bendev dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 06h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo