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 :

Définition de variables


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 33
    Par défaut Définition de variables
    Bonjour,

    j'aimerais créer un ensemble de variables indentées correspondant à des listes.

    Pour être plus clair je voudrais créer des variables A1, A2, ... avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim A1()
    dim A2()
    ...
    et pouvoir utiliser ensuite des boucles en utilisant de la concaténation pour pouvoir appeler chacune de mes variables de la même façon (du type A.i ou A&i ou ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i=1 to 30
    redim preserve A_i (ubound(A_i)+1)
    A_i(ubound(A_i))="boo"
    next
    mais je sais pas trop comment faire ...

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Tu ne peux te référer à une variable en utilisant une chaine de caractères.

    VB ne garde pas en mémoire interne la chaîne de caractères correspondant à une variable, mais une adresse-mémoire (et tu n'auras jamais accès, par une chaîne de caractères, à cette adresse mémoire).

    Tu vas vite comprendre : rien n'interdit, sous VB, d'attribuer un nom identique pour deux (ou plus) variables différentes, placées dans des procédures distinctes. Prenons alors l'exemple d'une variable toto dans la procédure proc1 et d'une vraiable toto dans la procédure proc2. A laquelle des deux pourrait bien se référer une variable que tu chercherais à pointer à l'aide de la chaîne de caractères "toto" ?

    Il te faudrait, pour y parvenir, constituer ta propre collection de correspondances, ce qui rendrait ton application assez lourde ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 33
    Par défaut
    çà veut dire que je ne peux pas ??

    et si je définissais les variables Ai au sein d'un tableau ?

    du style

    et chacune des varialbles Ai correspondrait à une cellule du tableau A
    je pourrais y faire référence en utilisant
    j'ai essayé mais j'ai des problèmes après utiliser les A(i) eux-mêmes commes des listes en utilisant dim et redim par ex ou pour faire référence aux éléments des A(i) : A(i)(1), A(i)(2) ???

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 33
    Par défaut
    çà revient à poser la question : peut-on faire des tableaux de tableaux ???

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    cela "revient" surtout à deux seuls mots :

    - collection
    - lourdeur ajoutée

    Tu fais ensuite comme tu l'entends.

    La réflexion est depuis longtemps terminée, en ce qui me concerne, dans ce domaine, mais rien ne t'interdit de tenter, comme tu l'entends, d'aller plus loin...

    Edit : si, nonobstant mon invite clarement faite à abandonner un tel cheminement, tu veux faire des "randonnées" : intéresse-toi alors au mot réservé VarPtr de VB (il est bel et bien présent, quoique non exposé)...

    Bonne chance dans cet exercice et cette randonnée, ami...

  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
    Par défaut
    Les tableaux de tableaux... si un exemple peut t'inspirer, test ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test1()
    Dim Montab, valeur1, valeur2, valeur3
    valeur1 = Array(6, 7, 8, 9, 10)
    valeur2 = Array("un", "deux", "trois", "quatre", "cinq")
    valeur3 = Array(11, 12, 13, 14, 15)
    Montab = Array(valeur1, valeur2, valeur3)
    MsgBox Montab(1)(4)
    Pour mieux comprendre, teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test2()
    Dim Montab, valeur1, valeur2, valeur3
    valeur1 = Array(0, 1, 2, 3, 4)
    valeur2 = Array(1, 2, 3, 4, 5)
    valeur3 = Array("un", "deux", "trois", "quatre", "cinq")
    Montab = Array(valeur1, valeur2, valeur3)
    MsgBox Montab(1)(3)
    End Sub
    Les tableaux commencent sur l'indice 0

  7. #7
    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
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Function test() As Boolean
    Dim tableau() As Variant
    '30 est le nombre de tableaux à gérer
    ' initialisé à huit lignes
    'la première dimension de tableau contient l'indice du tableau
    ReDim tableau(1 To 30, 1 To 8)
    'on remplit le tableau
    Dim ligne As Long
    Dim colonne As Long
    For ligne = 1 To 30
    For colonne = 1 To 8
    tableau(ligne, colonne) = ligne * colonne
    Next colonne
    Next ligne
    'on ajoute une colonne pour les 30 tableaux
    ligne = UBound(tableau, 2) + 1
    ReDim Preserve tableau(1 To 30, 1 To ligne)
    ' on va y loger "poo"
    For ligne = 1 To 30
    tableau(ligne, UBound(tableau, 2)) = "poo"
    Next ligne
    'on vérifie le résultat
    MsgBox (tableau(5, 9))
    test = True
    End Function

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 33
    Par défaut
    c'est pas bete cette idée de jouer sur la longueur des colonnes ...

  9. #9
    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
    Par défaut
    heu merci, je n'aurais pas l'outrecuidance de dire qi'il était bête de ne pas y penser.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 33
    Par défaut
    par contre je ne comprends pas un truc
    j'ai fait quelque chose comme ce que tu as indiqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim lgN
    lgN = UBound(TI, 1) + 1
     
    ReDim Preserve TI(lgN, 6)
    mais j'ai une erreur de type 9 : l'indice n'appartient pas à la sélection en surligant la ligen redim et je ne comprends pas pour quoi

  11. #11
    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
    Par défaut
    On ne peut pas modifier la première dimension d'un tableau, seulement la seconde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim lgN
    lgN = UBound(TI, 1) + 1
     
    ReDim Preserve TI(?, lgN)
    ou "?" est la valeur déclarée en premier lieu, dans le premier Redim.

  12. #12
    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
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    On ne peut pas modifier la première dimension d'un tableau, seulement la seconde.

    plus exactement seulement la dernière (qui peut aussi être la première).

Discussions similaires

  1. définition des variables
    Par ValWatt dans le forum C#
    Réponses: 7
    Dernier message: 20/07/2007, 09h21
  2. Définition des variable dans un fichier.m d'une interface graphique
    Par developpeur82 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 10/05/2007, 14h53
  3. définition de variables statiques
    Par kenny49 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/04/2007, 17h43
  4. [Tableaux] Erreur de définition de variable
    Par lifeisgood dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2006, 19h59
  5. [Système] Problème de définition des variables
    Par SLAM JACK dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2006, 19h53

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