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 :

Appeler une variable par son nom


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut Appeler une variable par son nom
    Bonjour,
    Je cherche le code qui me permet de faire appel à une variable par son nom
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim trm1 As String
    Dim trm2 As String
    Dim p As Integer
    trm1 = "Premier Trimestre"
    trm2 = "Deuxième Trimestre"
                    For p = 1 To 2
                        If  rst!Période = "trm" & p Then
                        MsgBox "hi"
                    Next p
    Ça ne marche pas
    je me demande si c'est possible !

  2. #2
    Membre régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut
    Non ce n'es pas possible par contre ce que tu peut faire c'est faire un tableau et appeler ta variable comme cela trm[p]

    Déclaration d'un tableau:
    Dim trm[50] as integer;

    Pour un tableau de 50 entier par exemple.
    Le premier indice d'un tableau est 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim trm[3] As String
    Dim p As Integer
     
    trm[0]= "Premier Trimestre"
    trm[1] = "Deuxième Trimestre"
                    For p = 0 To 1
                        If  rst!Période = trm[p] Then
                        MsgBox "hi"
                    Next p

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Tu peux le faire comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rst!Période = eval("trm" & p)
    mais sincèrement je recommande plus cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    dim trm as variant:trm=array("Premier Trimestre", "Deuxième Trimestre")
     
    dim p as integer: for p=lbound(trm) to ubound(trm)
     
      If  rst!Période = trm(p) Then
        MsgBox "hi"
        exit for :'Vu qu'on a trouvé ce qu'on cherche on peut arréter le parcours de la boucle, non ?
      end if
     
    next p
    et encore plus de stocker "Premier Trimestre", "Deuxième Trimestre" dans une table et de stocker la clefPeriode plutôt que le libellé correspondant.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut
    C'est plus propre avec un jolie tableau.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Oui et plus sécuritaire, Eval() peut éxécuter n'importe quelle fonction. Comme tous les outils puissant c'est donc à minipuler avec précautions.
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup les gars ça marche, vous ne pouvez savoir comment j’ai merdé là-dessus.
    marot
    Peux-tu expliquer ton code
    Array ?
    Lbound et Ubound ?
    Finalement j’ai adopté la solution avec le tableau.

  7. #7
    Membre régulier Avatar de Attrox
    Profil pro
    Concepteur
    Inscrit en
    Mars 2009
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Concepteur

    Informations forums :
    Inscription : Mars 2009
    Messages : 119
    Points : 112
    Points
    112
    Par défaut
    Oui vaut mieux le tableau plus sécuritaire plus propre.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Ma solution est aussi avec un tableau mais la déclaration de la dimension est implicite.

    Array crée un tableau de X éléments en fonction des paramêtres qui lui sont passés (ici 2).

    Lbound() donne l'indice du 1er élément (ici 0), uBound() donne l'indice du dernier élément (ici 1).

    Ce code a l'avantage que si tu décides d'ajouter un élément, tu as juste à ajouter l'élément dans Array() et tout le reste du code reste inchangé.

    Dans la solution de Attrox, si tu décides d'ajouter un élément il faut que :
    • tu changes la dimension du tableau
    • tu modifies la fin de ta boucle.


    De plus quand tu mets des valeurs en dur dans du code, tu ne sais pas trop à quoi elles réfèrent. Ici 2, si tu ne regardes que la ligne de la boucle c'est quoi ? L'indice max du tableau, le nombre de tes enfants ou un chiffre chanceux au loto ? :-)

    Si tu lis UBound(trm), tu sais immédiatement que c'est le dernier indice de ton tableau.

    Je t'accorde que dans du code aussi simple c'est un peu 'overkilling' mais dans du code plus complex cela le rend plus lisible. Imagine juste un instant que ta déclaration de tableau soit 50 lignes plus haut.

    Aussi traditionnelement pour les boucles for next on utilise les indices i, j, k, m, n.

    Un truc encore quand tu ne connais pas une instruction, tu sélectionnes le texte et tu appuis sur F1, généralement cela ouvre l'aide sur l'instruction sélectionnée.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Appel d'une variable par son nom (string)
    Par Wini29 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/02/2013, 20h43
  2. Appeler une méthode par son nom sans utiliser eval
    Par rambc dans le forum Général Python
    Réponses: 5
    Dernier message: 30/10/2009, 16h05
  3. [POO] Appeler une fonction par son nom dans une variable
    Par whitespirit dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2008, 11h23
  4. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 14h33
  5. [VB6] Appeler une procedure par son nom.
    Par kenn dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/05/2006, 09h29

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