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 :

[E-00] Parcourir une collection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Par défaut [E-00] Parcourir une collection
    Bonjour, j'utilise Excel 2000 et j'ai un ptit souci.
    Comment faire pour vérifier qu'un elem existe dans la collection ?

    J'utilise mais il me dit :
    Propriété ou méthode non géré
    .

    Ok.

    Et si je veux tester les éléments un par un, je n'arrive pas à utiliser le FOR NEXT, si qqun a un exemple !

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Tu programmes ton code en considérant que l'élément existe, et tu ajoute une routine de gestion d'erreur pour gérer les cas où ton élément n'existe pas.

    Mais sans exemple, ça va être difficile de t'expliquer comment faire. Si on pouvait au moins savoir de quel type est coll, et avoir le code de la classe s'il s'agit d'une classe que tu as créé.

    Petit exemple tout bête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Property Get Contains(ByVal NomElement As String) As Boolean
        On Error GoTo erreur
        Contains = True
        ' Ton programme provoquera une erreur ici si ton élément n'existe pas
        MaCollection.Item (NomElement)
        Exit Property
    erreur:
        Contains = False
    End Property

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Par défaut
    Je te copie tout le code, c'est juste des fonctions de test pour apprendre à utiliser, donc cela ne sert à rien

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub Test()
    Start:
     
    Dim coll As New Collection
    Dim number As Object
    Dim i As Integer
    i = 0
     
    While (coll.Count < 8)
     
    random = Randomisation(8)
    If coll.Contains(random) Then
    i = 1
    Else: coll.Add random
    End If
     
    Wend
     
     
    i = 0
     
    While (i < 8)
    MsgBox coll.Item(i)
    Wend
     
     
     
     
     
    End Sub
     
    Function Randomisation(nb As Integer)
       Dim aleatoire As Integer
     
       Randomize
       Randomisation = Int(Rnd * nb) + 1
     
    End Function

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Ton code ne fonctionne pas pour la simple et bonne raison que Contains n'est pas une propriété d'un objet de type Collection.

    Ceci dit, tu peux toujours utiliser une routine de gestion d'erreur à l'intérieur de ton code pour voir si ton objet coll(i) existe.

    Si tu veux savoir si un objet existe en faisant coll.Contains(i), tu devras créer une classe (avec un module de classe donc) contenant un champ privé de type Collection et une propriété "Property Get Contains" ressemblant plus ou moins à celle que je t'ai donné.

    Bref, tu fais comme tu veux c'est toi qui vois, mais perso je préfère utiliser une classe contenant une collection pour pouvoir y ajouter des propriétés et des méthodes.

    Je pense que ce tuto de Michel Blavin te sera très utile si tu souhaite travailler avec une classe, ou juste pour ta culture VB/VBA. Il est à la base pour Access, mais ça vaut tout aussi bien pour Excel ou VB:
    http://sinarf.developpez.com/access/vbaclass/

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Par défaut
    Merci, je vais lire ça.
    Et aurais tu un exemple de For Next pour parcourir la collection ?

    Merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub Bidon()
    Dim coll As New Collection, total As Integer, i As Integer
        total = coll.Count
        For i = 1 To total
            ' Ton code ici travaillera sur l'élément de collection coll(i)
        Next
    End Sub
    Sachant que le tableau de la collection commence à l'indice 1 et que la propriété Count d'une collection renvoie le nombre total d'éléments.

    Tu peux aussi utiliser une structure For Each:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub Bidon()
    Dim coll As New Collection, elem_coll As Variant
        For Each elem_coll In coll
            ' Ton code ici travaillera sur l'élément de collection elem_coll
        Next
    End Sub

Discussions similaires

  1. Parcourir une collection
    Par feldi dans le forum VB.NET
    Réponses: 4
    Dernier message: 10/06/2011, 21h18
  2. Parcourir une Collection de Bouton en C# et ASP.NET
    Par PatStan17 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 27/05/2009, 15h20
  3. parcourir une collection en javascript
    Par john_wili dans le forum Struts 1
    Réponses: 0
    Dernier message: 03/05/2009, 11h27
  4. Parcourir et modifier une collection/generique
    Par kaervas dans le forum Débuter
    Réponses: 5
    Dernier message: 24/04/2008, 14h38
  5. [VBA Excel]Comment parcourir une collection ?
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/10/2006, 12h52

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