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

VBA Access Discussion :

Tableaux associatifs ?


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut Tableaux associatifs ?
    voila, je suis nouveau ici, et j'ai essayé de trouver par mes propres moyens la réponse à ma question, mais sans résultat. Je ne suis pas féru de recherche aussi peut-être ai-je mal fouillé, toujours est-il que ma question reste sans réponses. Je débute dans la programmation en VB, code que j'emploi à l'heure actuel au cours d'un stage dans lequel je dois débuger un outil codé en vb sous Access 97 (je connais pas la version de vb utilisée). Je voulais savoir si, comme dans d'autres langages, il existe en VB le system de tableau associatif. Je sais pas si ce sont nos profs qui ont inventés ce mot ou si les tableaux associatifs sont connus de tous, néanmoins j'explique ce que j'entend par tableau associatif. J'aurais besoin d'un tableau T qui prend en valeur des entiers par rapport à des clefs. Genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T["babar"] = 4
    T["chien"] = 7
    et ensuite une méthode genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each entier in T
          msgbox "la clef est : " & T.key & ", contenant : " & entier
    next entier
    ce qui donnerait une msgbox avec
    "la clef est babar, contenant 4"
    et une autre
    "la clef est chien, contenant 7"

    je sais pertinament que la syntaxe que je présente n'existe surement pas en VB mais j'immagine qu'il doit y avoir possibilité d'avoir des équivalence vu qu'elle existe en d'autres langages.

    Voila merci encore si quelqu'un peut me répondre.

    Lyxthe
    tout le monde est différent sauf moi

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    salut,

    c'est l'objet Collection

  3. #3
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut collection c'est recordset?
    collection c'est recordset? parce que c'est bien ce que j'ai pensé au début mais je ne parviens pas à l'utiliser de la façon dont je l'entend
    tout le monde est différent sauf moi

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Non que collection et pas recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oC As New Collection
    oC.Add "bonjour", "mot1"
    oC.Add "Au revoir", "mot2"
    MsgBox oC("mot1")

  5. #5
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut merci
    ok je v me lancer la dedans. Merci pour tout
    tout le monde est différent sauf moi

  6. #6
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut aide sur les collections ?
    encore navré de demander cela ici, je ne sais même pas si c'est toléré, mais bon, qui ne tente rien n'a rien. Après une petite heure à rechercher de l'aide sur l'utilisation des collections, je rentre bredouille. Donc quelqu'un connait-il l'emplacement d'un tuto ou d'une aide ou d'une source sur l'utilisation des collections ? encore désolé et merci aux éventuels réponses
    tout le monde est différent sauf moi

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il n'y a pourtant rien de compliquer.

    oC.Add element,clé

    Ajoute un élément à la collection. La clé correspond à ce qu'il y a dans les crochets d'un tableau associatif.

    oC.remove clé

    Supprime l'élement dont la clé est passée en paramètre

    oC(clé)

    retourne l'élément dont la clé est passée en paramètre


  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pour reprendre ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim oC As New Collection
    Dim element As Variant
    oC.Add 4, "babar"
    oC.Add 7, "chien"
    For Each element In oC
        MsgBox element
    Next
    À me relire, je me rends compte que ça ne correspond pas entièrement. On ne parvient pas à retrouver la clé de l'élément. Pour avoir quelque chose de plus proche, il faudrait l'utiliser avec un classe d'objet élément

  9. #9
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut effectivement jusque là aucun soucis
    pour l'instant ça va, mon problème est que je n'arrive pas à tester si une clef est déjà présente dans le tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNull(lo_test(ls_str)) Then
    avec lo_test la collection et ls_str la clef, je voudrais tester si lo_test contient déjà une case avec la clef ls_str, mais isnull n'est pas une méthode applicable sur la collection visiblement .
    Je vois bien la solution de parcourir entierement tout le tableau à la recherche de la clef en passant un test à 1 si elle est présente, mais c'est plutot laborieux. donc j'immagine qu'il y a une méthoe search ou find qui renvoit 1 si elle trouve la clef ou 0 sinon mais impossible de connaitre la syntaxe exacte. J'ai pas trop de soucis quant à l'algoritmie nécessaire, si je demande s'il existe un tuto ce sont plutot pour connaitre les méthodes associées et la syntaxe pour les écrire. parce que je sais pertinemment que des questions à la....... comme ça j'en aurais d'autres :p
    tout le monde est différent sauf moi

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Les dictionnary de la référence Microsoft Scripting runtime sont mieux

    Ils offrents les deux collections clés et valeurs

    Dim oD As New Dictionary
    Dim element
    oD.Add "babar", 4
    oD.Add "Chien", 7
    For Each element In oD
    MsgBox element & ":" & oD(element)
    Next
    Ils permettent en plus de trier

  11. #11
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut je te montre ce que je voudrais avoir au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    dim lo_test as collection
    dim lo_test3 as variant
    dim li_h2 as integer
    dim ls_str as string
     
     If IsNull(lo_test(ls_str)) Then
          lo_test.Add Item:=li_h2, Key:=ls_str
     Else
          lo_test(ls_str) = CInt(lo_test(ls_str)) + li_h2
     End If
     
    For Each lo_test3 In lo_test
            msgbox "la clef est : " & lo_test3.key & ", et la valeur est :  "  & lo_test3
    Next lo_test3
    en gros je voudrais avoir un truc un peu comme ça.
    tout le monde est différent sauf moi

  12. #12
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut dictionary
    dictionary ça a l'air interessant, mais mon vb d'access 97 l'a pas l'air de connaitre :'(
    tout le monde est différent sauf moi

  13. #13
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Dictionnary fait partie de la référence Microsoft Scripting runtime.

    Pour les test de clés, ça n'existe pas dans les collection, il te faut gérer les erreurs en cas de doublons.

    Par contre, les dictionnary propose une fonction Exists

  14. #14
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut ok
    donc visiblement dictionary a l'air vraiment interessant merci je continue sur cette voix alors....peut etre à dans peu de temps pour d'autres questions
    tout le monde est différent sauf moi

  15. #15
    Membre régulier Avatar de lyxthe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 90
    Points
    90
    Par défaut c'est bon
    ben pour te remercier j'ai réussi à obtenir ce que je voulais
    tout le monde est différent sauf moi

  16. #16
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Citation Envoyé par Tofalu Voir le message

    [Dans une collection,] On ne parvient pas à retrouver la clé de l'élément.

    Entre-temps, Arkham46 a proposé une solution ici : http://www.developpez.net/forums/d56...e/#post3338674
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

Discussions similaires

  1. Définition "inline" de tableaux associatifs.
    Par Blustuff dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/03/2010, 13h49
  2. Tableaux associatifs et requêtes
    Par LFC dans le forum SGBD
    Réponses: 5
    Dernier message: 28/06/2006, 11h11
  3. Réponses: 9
    Dernier message: 13/06/2006, 21h52
  4. [8i] tableaux associatifs de VARCHAR2
    Par Magnus dans le forum Oracle
    Réponses: 2
    Dernier message: 26/01/2006, 16h41
  5. [Collections]Tableaux associatifs
    Par sheura dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 18/12/2005, 14h10

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