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 :

[VBA-E]Gestion de tableaux


Sujet :

Macros et VBA Excel

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut


    Ca ma l'air pas mal ces histoire de collection !
    V aller voir ca, sinon j'opterai pour le Ubound

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Me revoilà,

    alors j'ai lu dans l'aide à quoi servait une collection et ca à l'air de corresponre assez à ce que je veux faire. Par contre pour la manipulation je me perd un peu

    j'ai essayé de chercher dans l'aide mais le mot collection apparait partout donc niveau resultat j'ai trouvé qu'un seul exemple (peut etre qu'il n'y a que ca )

    enfin tout ca pour en venir à la question.

    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
     
    'initialisation
    Sub initfichier()
    MaColl.Add ("Hello")
    MaColl.Add ("autre fichier")
    End Sub
     
     
    Function RenvoiNom(index As Integer) As String
    'renvoi d'un index
    RenvoiNom = MaColl.Item(index)
    End Function
     
    Public Sub test()
        Debug.Print RenvoiNom(1)
    End Sub
    je testais le code de random mais j'ai quelques questions... par exemple MaColl.add("hello") ca donne quoi? enfin je sais que ca ajoute Hello à la collection mais comme le recuperer??

    j'ai essayé la fonction que j'ai renommé renvoinom mais elle ne marchait pas (ou alors je m'en sert mal peut etre ) donc j'ai tenté d'ajouté item qui me semblait etre juste apres avoir lu l'aide mais toujours une erreur dans mon test... "argument ou appel incorrect"

    ensuite comment dire quel sera l'element 1 de ma collection?? par exemple entre "hello" et "autre fichier" comment leur attribuerleur numéro? j'ai vu qu l'on pouvais ajouter [key] mais je n'arrive pas à m'en servir.. j'ai tenté ("hello",1) à tout hasard mais il a pas trop aimé

    voilà, désolé mais je connais rien aux collections

  3. #23
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    add ajoute un élément à la collection

    comment le récupérer ?
    un item d'une collection a deux méthodes d'accés:
    son index
    c'est à dire sa position dans la collection et sa clef si on a pris la peine
    de lui en attibuer une
    macoll(x) renvoie l'élément x tout comme mamatrice(X) renvoie l'élément
    X (j'utilise toujours option base 1)
    si on attribue une clef
    macoll.Add Item:="fichier", Key:="1"
    macoll("1") renverra fichier
    l'avantage de la collection c'est qu'elle est dynamique, supporte l'ajout, et aussi la suppression

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    merci bien

    je m'en sors deja mieux

    juste une derniere question (pour le moment )

    j'ai le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public MaColl As New Collection
    'initialisation
     
    Public Sub initfichier()
    MaColl.Add Item:="Hello", Key:="1"
    MaColl.Add ("autre fichier")
     Debug.Print MaColl("1")
    End Sub
    quand j'execute initfichier, je vois bien "hello" qui s'affiche.
    Mais lorsque je met le debug.print dans une autre procédure, il me remarque une erreur : "argument ou appel incorrect"
    pourquoi? on ne peut pas utiliser un element d'une collection qui a été ajouté dans une autre procédure?? ca me parait etrange mais bon..

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Euh...

    je viens de retester, meme code mais là tout va bien.... je comprends pas

    enfin j'ai plus de probleme pour le moment, je vais avancer un peu et si j'ai un souci je reviendrai

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Ah ca y'est ! je bloque (legerement)

    j'ai remarqué une chose, si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaColl.Add "Hello"
    debug.print MaColl(1)
    je lance, j'obtient bien "Hello"

    maintenant si je met hello2 puis je relance, j'obitent hello
    J'ai vu qu'en cliquant sur le carré "Réinitialiser" et en relancant, j'obtient hello2 ou en voulant afficher MaColl(2) car je présume qu'il ajoute à chaque execution un element dans la collection meme si il a le meme nom.
    D'où ma question : vaut-il mieux utiliser des clé?

    sinon j'aurais un autre conseil à demander, je voudrais que l'on puisse ajouter un nom de fichier sans aller dans le code (à partir d'un userform peut etre?) mais je voudrais que si l'utilisateur ajoute un nom, il soit gardé pour une utilisation future. Donc il faut forcement que ca écrive quelque par dans la macro le code "MaColl.Add nouveaunom"

    Non?? (Si il le faut, est ce possible? )

  7. #27
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    si tu avais lu tu aurais remarqué
    'démo d'ajout dynamique
    macoll.Add(inputbox("entrez un nom")

    il doit suffire d'ajouter une parenthèse qui fait courant d'air

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    si tu avais lu tu aurais remarqué
    'démo d'ajout dynamique
    macoll.Add(inputbox("entrez un nom")

    il doit suffire d'ajouter une parenthèse qui fait courant d'air
    ??

    j'essayerais de relire ca quand je serais mieux reveillé mais là je comprends pas de trop

    j'ai essayé macoll.add ("hello")
    mais, lorsque je modifie et reexecute sans faire reinintialiser, bah j'ai toujours hello

  9. #29
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Elstak
    ??

    mais, lorsque je modifie et reexecute sans faire reinintialiser, bah j'ai toujours hello
    ... bien c'est normal ...non ? ..
    le premier élément ajouté dans la collection à l'index 1..
    le 2é élément ajouté dans la collection à l'index 2...

    et ainsi de suite ...

  10. #30
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Yup,

    apres une revisite de l'aide, j'ai trouvé un ptit truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    MaColl.Add "hello"
    MaColl.Add ("autre fichier")
     
    Debug.Print MaColl(1)
     
    For i = 1 To MaColl.Count
        MaColl.Remove 1
    Next
    et hop, plus de souci.


    par contre pour ca :

    Citation Envoyé par Elstak
    sinon j'aurais un autre conseil à demander, je voudrais que l'on puisse ajouter un nom de fichier sans aller dans le code (à partir d'un userform peut etre?) mais je voudrais que si l'utilisateur ajoute un nom, il soit gardé pour une utilisation future. Donc il faut forcement que ca écrive quelque par dans la macro le code "MaColl.Add nouveaunom"

    Non??
    je veux toujours bien une réponse car je ne bloque plus q'uà cet endroit

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut


    ok t'as gagné le dodo, tu peux te moquer

    mais je comprends toujours pas, au risque de paraitre euh... je sais pas quoi (on va dire idiot? ) l'histoire de la parenthese va falloir m'expliquer mot à mot (il ne faut pas se fier au "membre confirmé" qui est sous mon nom !!) surtout que là vu le code y'a 2 parenthese d'ouvertes et 1 de fermée et ca mon editeur il aime pas trop !

    merci de m'expliquer

  12. #32
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Elstak[I
    sinon j'aurais un autre conseil à demander, je voudrais que l'on puisse ajouter un nom de fichier sans aller dans le code (à partir d'un userform peut etre?) mais je voudrais que si l'utilisateur ajoute un nom, il soit gardé pour une utilisation future. Donc il faut forcement que ca écrive quelque par dans la macro le code "MaColl.Add nouveaunom"

    Non??[/I]
    ben il faut voir combien as tu de nom de fichier différents...?

    tu peu par exemple stocker les éléments de ta collection dans un fichier texte ... fichier lu au lancement de l'application et écrit à la sortie..

  13. #33
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    T'as raté un épisode... Hier, 12h20, Random te donnais un exemple de saisie en dynamique dans lequel il y avait cette ligne :
    macoll.Add(inputbox("entrez un nom")
    Tu ne vois rien ?
    Et aujourd'hui tu demandes comment ajouter un nom de fichier... Toujours rien ? Faut arrêter les virées nocturnes...

    A+

  14. #34
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Oui,

    je pensais justement à un truc de ce genre.

    donc pour te répondre il y a pour le moment environ 50 noms (47 je crois) et ca ne depassera jamais 100.

    d'apres toi tous les noms de fichier conetnus dans ma fonction devraient etre mis dans un fichier texte donc? ca me semble une bonne idée...
    mais quelques question un peu technique avant de me lancer :

    je met un nom par ligne?

    pour recuperer il faudra simplement ajouter à la collection une ligne jusque la derniere?

    enfin, pour ajouter un nom, une simple zone de texte (dans un userform)devrait suffir non? par contre pour la suppression, j'ai vu le "combobox" qui liste les nom existants, c'est ce qu'il faudrait utiliser d'apres toi?

    merci des réponses

  15. #35
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par Tu
    si l'utilisateur ajoute un nom, il soit gardé pour une utilisation future
    La question qui se pose est : Cette utilisation "future" pourra-t-elle se produire après fermeture de l'appli, et ré-ouverture ou bien juste un peu plus loin dans l'appli ?
    Dans le premier cas, la solution de bbil paraît la meilleure, dans le second, la collection suffit
    Attention, si tu veux que ta collection soit vraiment Public, tu dois la déclarer dans un module, non dans le code de ta form.

    A+

  16. #36
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    tiens te revoilà mon dodo,

    ok là j'ai bien compris donc... le ".add" merci je l'avais vu !!

    Citation Envoyé par elstak
    mais je voudrais que si l'utilisateur ajoute un nom, il soit gardé pour une utilisation future
    c'est surtout le "utilisation future" qui m'interesse ! avec le inputbox je suis ok, on peut ajouter mais il faudra le ressaisir à chaque fois (non?).

    Je pense que bbil a bien compris ce que je cherchais à faire avec l'idée du fichier texte. Donc jvais suivre sa piste

    Ps : j'ai bien dormi cette nuit !!

  17. #37
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    tiens on se croise,

    donc future pour moi c'est apres fermeture de l'appli, car si c'est un peu plus loin (dejà c'est sur ca sera pas avant la saisie ) j'aurais aps insisté là dessus

    donc tu confirme bien que la solution de bbil convient le mieux !

    jvais aller dans ce sens

    Ps : oui on m'avais deja dit de mettre la collection dans un module, c'est fait (ou alors je l'ai lu dans l'aide je sais plus )


    Ps2 : jvien de relire ca :
    Citation Envoyé par bbil
    fichier lu au lancement de l'application et écrit à la sortie..
    pas mal, mais comment faire ?
    le lire ca devrait aller, mais "au lancement" suffit de mettre un truc dans "thisworkbook" ?

  18. #38
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu mets les noms de fichiers lus dans le txt dans un combo à l'ouverture de ta form et tu ajoutes les noms après saisie par l'utilisateur.
    Quand tu fermes, tu relis ton combo et place tout dans ton txt.

    Quelle est ta question ?

    A+

  19. #39
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Que vient faire "Thisworkbook" là-dedans ?

  20. #40
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    euh, je sais plus

    j'vais aller un peu travailler, car là c'est assez clair maintenant dans ma tete faut que je commence à produire !

    et je reviens en cas de probleme


    Ps : Le thisworkbook? j'en sais rien je voyais pas trop comment faire pour lire le fichier texte à l'ouverture et pour le moment toutes les actions que j'ai faite à 'louverture sont dans thisworkbook. Mais t'a répondu entre temps à la question (avec l'histoire du combobox)

Discussions similaires

  1. [VBA-E]Additionner des tableaux (matrices)
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/04/2006, 20h18
  2. [VBA-E] Gestion d'une erreur #N/A
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/04/2006, 20h17
  3. [VBA-E]Gestion d'erreur
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 07/04/2006, 20h05
  4. [VBA-E] gestion des fichiers ouverts ...
    Par SpaceFrog dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 20/01/2006, 17h10
  5. Réponses: 5
    Dernier message: 04/04/2003, 15h02

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