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 :

Une question sur le nom des contrôles


Sujet :

VBA Access

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Points : 188
    Points
    188
    Par défaut Une question sur le nom des contrôles
    Bonjour,

    j'ai une question toute bête à poser, mais qui a son intérêt.
    Je m'explique:
    J'ai un formulaire qui permet de faire des extractions de données.
    L'utilisateur a donc la possibilité de cocher des checkbox, afin de choisir quels champs exporter, et aussi la possibilité d'ajouter/supprimer un critère.

    Donc en gros, j'ai un truc un peu comme ça:

    ChkBox Label BtnAjoutCritère BtnSuppCritère
    ChkBox Label BtnAjoutCritère BtnSuppCritère
    ChkBox Label BtnAjoutCritère BtnSuppCritère
    ChkBox Label BtnAjoutCritère BtnSuppCritère

    J'ai nommé chaque contrôle de façon à pouvoir les reconnaître facilement.
    mais voilà donc ma question:
    Je fais régulièrement appel à des contrôles dans mon code.
    Par exemple, si je coche une ChkBox, je voudrais que le Label et les boutons soient accessibles (ils sont grisés si la ChkBox n'est pas cochée).
    Prenons cet exemple:

    Type de Contrôle | Nom du Contrôle
    ChkBox | ChkUoCode
    Label | LabUoCode
    BtnAjoutCritère | AddCritUoCode
    BtnSuppCritère | DelCritUoCode

    Comme vous pouvez le constater, on retrouve systématiquement UoCode pour ces contrôles.

    Le problème, c'est que pour effectuer des actions en VBA sur chacun de ces contrôles, je passe à chaque fois par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim UneVariable as string
    UneVariable = UoCode
    For each Ctrl in me.Controls
       If Right(Ctrl.name, (Len(Ctrl.name) - 7)) = UneVariable then
          'Je lance une procédure
       End If
    Next Ctrl
    Cela prend beaucoup de temps à chaque fois de regarder chaque contrôle.

    Je voulais savoir si on n'avait pas la possibilité de faire ce genre de choses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UneVariable = AddCritUoCode
    Me.UneVariable.Enabled = True
    En gros, je voulais savoir si on pouvait stocjer le nom d'un contrôle dans une variable, et le réutiliser comme cité précédemment, sans systématiquement passer par un For Each et une comparaison du nom du contrôle avec une variable.

    J'espère avoir été assez claire.

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Ben, pourquoi ne pas faire simplement un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Activer(CtrlName as string, Optional Actif as boolean=True)
        On error resume next
        With CodeContextObject
            .Controls("chk" & CtrlName).enabled=Actif
            .Controls("lbl" & CtrlName).enabled=Actif
            .Controls("cmd" & CtrlName).enabled=Actif
            .Controls("opt" & CtrlName).enabled=Actif
            .Controls("txt" & CtrlName).enabled=Actif
            .Controls("cdr" & CtrlName).enabled=Actif
            .Controls("tgl" & CtrlName).enabled=Actif
            '...
        End With
    End Sub

  3. #3
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Points : 188
    Points
    188
    Par défaut
    Ah, mais ça m'a l'air super tout ça !

    Par contre, à quoi correspond le CodeContextObjet ?
    Au formulaire ?
    je pourrais mettre un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With Me
    .controle(gna gna gna).enabled = true
    Par exemple, comment réécrire un code de ce style là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each Ctrl2 In Me.Controls
                        If TypeOf Ctrl2 Is TextBox Then
                            If Ctrl2.name = "crit" & Ctrl.name Then
                                If Ctrl2.Value <> "" Then
                                    'Debug.Print Ctrl2.Value
                                    Call CreaWhere(Where, Ctrl2.Value, Right(Ctrl.name, Len(Ctrl.name) - 2))
                                    'Debug.Print Where
                                End If
                            End If
                        End If
                    Next Ctrl2

  4. #4
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par mouaa Voir le message
    Par contre, à quoi correspond le CodeContextObjet ?

    La touche F1 devrait t'aider normalement !



    Bon, sinon, c'est la référence à l'objet appelant cette procédure.
    Cela signifie que tu pourrais mettre cette procédure dans un module standard, et l'appeler depuis n'importe quel formulaire

  5. #5
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 337
    Points : 188
    Points
    188
    Par défaut
    m'ci !


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

Discussions similaires

  1. Question sur le nom des fichiers
    Par bilal_sayed1 dans le forum Débuter
    Réponses: 9
    Dernier message: 16/02/2010, 17h50
  2. Réponses: 2
    Dernier message: 15/07/2008, 14h43
  3. Une question sur les « Names » des objets.
    Par phdnet dans le forum W4 Express
    Réponses: 7
    Dernier message: 04/12/2007, 08h54
  4. Une question sur le stockage des variables
    Par UnReveDeCryptomeria dans le forum C
    Réponses: 10
    Dernier message: 08/06/2006, 23h37
  5. Réponses: 2
    Dernier message: 22/04/2006, 18h18

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