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 :

Formulaire verrouillage txtbox selon optionbutton [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Par défaut Formulaire verrouillage txtbox selon optionbutton
    Bonjour à tous,

    Déjà je tenais à vous féliciter une nouvelle fois pour ce forum et les tutos qui sont toujours très utiles. Surtout quand on débute.

    Dans mon userform, je cherche à verrouiller les entrées dans une textbox, sauf dans le cas où un des 6 optionbutton d'un frame ne soit coché.

    J'ai réussi à faire ça assez facilement en me cresant la cervelle (ne vous marrez pas je débute).
    Propriétés>> txtNvFnr locked = true

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub OptionButton2_Click()
    If OptionButton2.Value = True Then txtNvFnr.Locked = False Else txtNvFnr.Locked = True
    End Sub
    Mais j'ai rencontré un problème lors du test du formulaire.
    Si je sélectionne une fois l'optionbutton2, la txtNvFnr reste active même lorsque je sélectionne un autre optionbutton.

    Je souhaiterai que le fait de sélectionner un autre bouton désactive la textbox et annule la saisie dans cette textbox.

    Merci pour votre aide

  2. #2
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Bonjour,
    Ta macro ne se déclenche que lors d'un click sur le bouton.
    Si tu cliques sur un autre bouton, le prmier se décoche mais ta macro n'est pas appelée.

    Il faut que tu mettes soit une macro par bouton, soit une macro qui teste tous les cas et qui sera appelée par chaque bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub OptionButton1_Click()
         Macro_Test
    End Sub 
    Private Sub OptionButton2_Click()
         Macro_Test
    End Sub 
    Sub Macro_Test()
         Là tu mets tous tes tests
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Par défaut
    Ok je te remercie.
    Je vais essayer de faire la macro inverse pour les 5 autres boutons. Le problème c'est que je ne pense pas que ça annule la saisie.

    Imagine que l'utilisateur choisisse le bouton 2, ça active la textbox et il rentre des infos.
    Il change d'avis (peu probable mais je préfère prévoir), la textbox sera désactivée mais le contenu toujours présent non?

    Je test ça et je te tiens au courant.

    Sinon je pense que ça doit pouvoir se régler facilement en mettant dans la macro des autres contrôles une commande pour effacer le contenu de la textbox.

  4. #4
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Pour effacer une textbox, tu mets:


  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Par défaut
    Oui merci ça je connaissais.
    J'ai donc testé ta solution à savoir faire une macro par bouton. Ca marche mais comme prévu ça n'efface pas le contenu.

    Alors désolé pour les puristes si ce n'est pas très beau mais je procède comme suit avec 2 étapes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub OptionButton1_Click()
    If OptionButton1.Value = True Then txtNvFnr.Value = ""
    If OptionButton1.Value = True Then txtNvFnr.Enabled = False
     
    End Sub
    Merci à toi pour ton aide

  6. #6
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    Excusez l'incruste...
    Il y a également une solution en utilisant les modules de classe.
    Elle n'est pas forcément aisée à comprendre pour un novice, mais tellement efficace qu'il convient de la connaître.
    Je t'ai bricolé un exemple que tu peux télécharger ici. Si tu souhaites des indications et/ou commentaires sur ce code pour l'adapter éventuellement à tes besoins, n'hésite surtout pas.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Par défaut
    Je te remercie pour l'exemple.

    J'ai plusieurs questions, à quoi sert la commande Option explicit en haut de ton code?

    Donc si j'ai bien compris tu fais une macro qui initialise la textbox et la colore en gris (utilie, je voulais le faire pour la mienne aussi) à chaque fois que tu sors de la textbox?

    A quoi sert la deuxième étape sur le usf_initialize?

  8. #8
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par jbelleng Voir le message
    Je te remercie pour l'exemple.
    De rien...

    J'ai plusieurs questions, à quoi sert la commande Option explicit en haut de ton code?
    L'Option explicit, comme son nom l'indique est une option sous VBA. Elle permet à ton code d'être explicite en obligeant la déclaration de toutes tes variables. Elle peut être placée par défaut dans chacun de tes codes en utilisant le menu visual basic : Outils/Options onglet "Editeurs" cocher : "Déclaration des variables obligatoire".
    Je recommande vivement cette option aux débutants.
    Un superbe lien pour illustrer mon propos.
    Donc si j'ai bien compris tu fais une macro qui initialise la textbox et la colore en gris (utilie, je voulais le faire pour la mienne aussi) à chaque fois que tu sors de la textbox?
    Oui tout à fait! grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    question 2 :
    A quoi sert la deuxième étape sur le usf_initialize?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call InitialiseOptionButton
    lance le code InitialiseOptionButton contenu dans le module Module1 :
    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
    Public Collect As Collection
     
    Public Sub InitialiseOptionButton()
    Dim Ctrl As Control
    Dim Clss As Classe1
     
    Set Clss = Nothing
    Set Collect = New Collection
    'boucle sur chaque controle de l'userform
    For Each Ctrl In UserForm1.Controls
        'si c'est un optionbutton
        If TypeOf Ctrl Is MSForms.OptionButton Then
            Set Clss = New Classe1
            Set Clss.OptionButtonGroup = Ctrl
            'on enregistre les "données" de l'optionbutton dans une collection
            Collect.Add Clss
        End If
    Next Ctrl
    End Sub

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/04/2007, 23h36
  2. [Formulaire]Verrouillage selon un champ
    Par delcroixf dans le forum IHM
    Réponses: 3
    Dernier message: 14/04/2007, 10h01
  3. Réponses: 11
    Dernier message: 30/03/2007, 13h16
  4. [Formulaire] verrouillage des touches clavier suite
    Par Frenchguy dans le forum IHM
    Réponses: 3
    Dernier message: 28/10/2006, 14h41
  5. [Formulaire]:Verrouillage Tableau croisé dynamique
    Par nicou50 dans le forum Access
    Réponses: 3
    Dernier message: 09/09/2006, 16h57

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