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 Discussion :

Définition dynamique de variables


Sujet :

VBA

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Définition dynamique de variables
    Bonjour, j'ai crée un Type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Type nomType
     prop1 As ..
     prop2() As ..
     ..
    End Type
    J'ai besoin de définir un certain nombre de variables de ce type, autant que l'indique la variable Nbre. Donc je voudrais les nommer avec un indice pour les différencier, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To Nbre
     Dim "nomType"&i As nomType
    Next i
    Mais ça marche pas. Vous comprendrez bien que la partie en rouge est archi fausse, mais je ne sais pas comment y remédier. Peut être avez vous d'autres idées en définissant un tableau de type et appeler un indice pour accéder à un Type, je ne sais pas...

  2. #2
    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 546
    Points
    15 546
    Par défaut
    Tu aurais peut-être une solution avec Collection. Regarde dans l'aide, les explications et l'exemple seront toujours mieux que ce que pourrais t'en dire.
    A tout hasard.
    Sinon, tu as le tableau de tableau. Mais tu devras déclarer l'un et l'autre en début de procédure et éventuellement les redimensionner en cours de code.
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour
    essaye en declarant
    nomtype(i) as ...

  4. #4
    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 546
    Points
    15 546
    Par défaut
    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
    Sub ExempleAvecCollection()
    Dim Laligne As String, LeTableau
    Dim i As Long, j As Long
        Laligne =  "Un objet Collection est un jeu d'éléments indexés " & _
        "auxquels il peut être fait référence comme s'ils " & _
        "constituaient un ensemble unique."
        LeTableau = Split(Laligne, " ") 'n'est là que pour créer une collection
     
        Dim Val1 As New Collection
        For i = 0 To UBound(LeTableau)
            Val1.Add LeTableau(i)
        Next
        For i = 0 To UBound(LeTableau)
            MsgBox Val1(i + 1) '+1 -> l'index commence à 1
        Next
    End Sub
    Je ne sais pas si ça peut te servir en adaptant mais voilà toujours

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Pour les tableaux, j'ai essayé, oui en effet, il faudrait le redimensionner à chaque fois. Je vais travailler l'idée sur les collections. A voir !

  6. #6
    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 546
    Points
    15 546
    Par défaut
    Tu peux corriger la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 1 To Val1.Count
            MsgBox Val1(i)
        Next

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci pour ta réponse si rapide. Je viens de reprendre ton exemple avec Collection, réadaptée à mon cas.
    Du coup quand on ajoute un élément à la collection, LeTableau(i), pas besoin de spécifier son type ?
    Ca m'a l'air génial !

  8. #8
    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 546
    Points
    15 546
    Par défaut
    Regarde les propriétés de Collection, tu peux modifier un item avec Remove... enfin, regarde

Discussions similaires

  1. Définition dynamique de variable
    Par Nehmé dans le forum SL & STL
    Réponses: 7
    Dernier message: 15/01/2009, 18h02
  2. [VBA-E] Utilisation dynamique de variables
    Par zlavock dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 10/06/2006, 17h35
  3. Réponses: 2
    Dernier message: 15/05/2006, 11h11
  4. Réponses: 1
    Dernier message: 21/12/2005, 19h08
  5. [Language]Nom dynamique de Variable
    Par brooks dans le forum Langage
    Réponses: 13
    Dernier message: 14/12/2005, 18h09

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