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 :

"case à cocher" chargement formulaire


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut "case à cocher" chargement formulaire
    Bonjour,

    Je rencontre une difficulté avec la mise en place de "case à cocher" dans un formulaire afin d'activer d'autres controles. Je me suis inspiré du tutoriel "recherche multi-critères".
    Mon problème est à l'execution de ma procedure au chargement du formulaire ou je souhaite initialiser mes controles. Tout fonctionne pour les controles autres que ceux "des cases à cocher" dont le nom commence par "chk".
    Dans mon code j'utilise une variable objet "ctrl" (pour mes controles). Voici un exemple de mon code

    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
     
    Private Sub Form_Load()
     
    Dim ctrl As Control
     
    For Each ctrl In Me.Controls
     
        Select Case Left (ctrl.Name, 3)
     
                Case "chk"
                ctrl.Value = -1 
                ' meme avec la valeur= 0 ca ne marche pas  
     
     
                Case "cmb"
                ctrl.Visible = False
     
        End Select
    Next ctrl
    End Sub
    L'erreur apparait donc au chargement avec ce type de message : "Erreur execution '438' " "Propriété ou méthode non gérée par cet objet".

    J'ai essayé plusieurs tentatives sans résultat... Avez vous une idée pour résoudre cette erreur (je voudrais si possible conserver le "For Each " et le "Select Case"...) Je vous remercie pour votre précieuse aide

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    tu dois avoir un contrôle dont le nom commence par "chk" et qui n'est pas une case à cocher.
    Voir du côté des étiquettes qui n'ont pas de membre "Value".

    cette petite modif ajoute une vérification supplémentaire sur le type du contrôle et affiche le nom du coupable
    dans la fenêtre d'exécution (Ctlr+G dans VB)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Case "chk"
                If ctl.ControlType = AcControlType.acCheckBox Then
                   ctl.Value = -1
                Else
                   Debug.Print ctl.Name
                End If
    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup, ca marche !

    J'ai quelque soucis pour l'histoire du "coupable" !

    Si j'ai bien compris le raisonnement du code, on teste pour identifier la présence des controles de type "case à cocher" et on leurs affecte la valeur choisie.
    Le "Debug print" permettrait donc de reveler un autre type controle (le coupable !) dont le nom commencerait par "chk". Je n'arrive pas à l'afficher dans la fenetre execution de VB... Je suis débutant en la matière, et me pose la question comment tester cette sub ? J'ai essayé : " ? nom de ma sub" mais çà ne donne rien... Si tu pouvais me dire comment faire ce serait super sympa... Merci

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Si j'ai vu juste, à l'ouverture du formulaire le code doit passer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Else
                   Debug.Print ctl.Name
    pour le contrôle dont le nom commence par "chk" mais qui n'est pas du type acCheckBox.

    Debut.Print écrit une ligne dans la fenêtre d'exécution avec ctl.Name

    On ne peut pas exécuter une sub d'un formulaire avec "? NomSub".
    Ça fontionne seulement si le formulaire est ouvert et que la sub est déclarée Public.
    Dans ce cas "Forms![NomDuFormulaire].NomSub" exécute NomSub
    Le "?" se met devant quelquechose qui retourne une valeur (nom de variable ou de fonction par exemple)
    Pour une Sub on a pas besoin de "?" puisque par définition ça ne retourne rien.

    Ce qui me surprends c'est que la fenêtre d'exécution soit vide.
    A moins que ...
    J'ai fait un copier/coller d'un de mes formulaires.
    J'utilise une variable nommée ctl et toi c'est ctrl.
    As-tu remplacé ctl par ctrl ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Case "chk"
                If ctrl.ControlType = AcControlType.acCheckBox Then
                   ctrl.Value = -1
                Else
                   Debug.Print ctrl.Name
                End If
    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut [Résolu]
    Merci pour tes infos concernant l'utilisation de Debug.Print et l'utilisation des fonctions et procédures à travers la fenêtre exécution.

    En ce qui concerne la variable, j'ai fait un copier coller de ton code donc j'ai récupéré ton "ctl" que j'ai mis à jour sur les autres "cases". Mais, quand j'ai testé je n'ai rien vu au niveau de la fenêtre exécution (suite au debug print)... L'essentiel est que ca fonctionne, de plus ca me donne aussi des astuces supplémentaires pour mon apprentissage en VBA !

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    ça fonctionne peut-être mais ce n'est pas logique.
    Si le If ... Then résoud ton problème, on doit retrouver dans le Else le contrôle qui posait problème.

    juste pour voir, remplace
    par
    A+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    Tu avais raison, il fallait aller jusqu'au bout ! Le coupable est tombé !
    La message m'a renvoyé un nom commencant par un "chk_" qui était en fait affecté à un de mes labels d'une checkbox. J'avais pourtant vérifié... Mais la machine fut bien plus pertinente que moi ! J'ai donc renommé cette étiquette, enlevé la condition "if then" . J'ai donc remplacé le code comme je voulais le faire au départ et ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select Case Left(ctl.Name, 3)
            Case "chk"
            ctl.Value = 0
        End Select
    Merci beaucoup à toi.

    Je vais revenir sur le forum car j'essaye de mettre en place des requêtes muti critères sur ma base à partir de ces contrôles. Faut l'avouer, je suis un peu perdu... Je m'inspire du tutoriel mais je voudrais l'adapter un peu autrement (remplir un formulaire à partir de ces requêtes)...

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

Discussions similaires

  1. case à cocher dans un formulaire
    Par 4rn0_o dans le forum IHM
    Réponses: 2
    Dernier message: 30/08/2007, 08h16
  2. Case à cocher dans un formulaire access
    Par romulus34 dans le forum IHM
    Réponses: 10
    Dernier message: 23/01/2007, 15h42
  3. Cocher toutes les cases à cocher d'un formulaire
    Par petitloup71 dans le forum Access
    Réponses: 12
    Dernier message: 14/09/2006, 10h37
  4. cases à cocher dans un formulaire
    Par juliette2 dans le forum Access
    Réponses: 4
    Dernier message: 06/04/2006, 22h27

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