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 :

Problème pour Activation CommandButton


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut Problème pour Activation CommandButton
    Bonjour à tous

    J'ai créé un UserForm assez simple avec 2 zones de saisie (TextBox), 3 listes déroulantes (ComboBox) et un bouton de validation.

    Ce que j'aimerais faire (mais je n'y parviens pas):
    • Le bouton est désactivé au chargement du Userform (pas de souci à ce niveau)
    • Activer le bouton de validation (enable = true) lorsque tous les champs sont remplis (les 2 zones et les 3 listes déroulantes)
    • Le désactiver dès qu'il manque un champ

    Le problème est que je ne vois pas ou gérér l'événement "tous les champs sont complétés ou non"

    Ce que je fais pour contourner:
    • Je "simule" l'activation, désactivation via la propriété Locked et ForeColor:
      Descativé <=> locked =true et ForeColor en gris, Activé <=> locked= False et ForeColor en noir
    • Je gère le passage d'un état à un l'autre au niveau de la méthode MouseMouve de mon bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub ButtonCreerRub_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     
        'On "active" le bouton si l'ensemble des champs sont remplis
        Me.ButtonCreerRub.Locked = Not AreFieldsCompleted()
        Me.ButtonCreerRub.ForeColor = IIf(AreFieldsCompleted(), RGB(0, 0, 0), RGB(160, 160, 160))
     
    End Sub
     
    'Vérifie que l'ensemble des champs sont remplis
    Private Function AreFieldsCompleted() As Boolean
     
        AreFieldsCompleted = (Len(Me.TB_CodeRub.Text) <> 0) And (Len(Me.TB_LibRub.Text) <> 0) And Me.CB_ListRubP1.ListIndex <> -1 _
                            And Me.CB_ListRubP2.ListIndex <> -1 And Me.CB_ListRubP3.ListIndex <> -1
    End Function
    Mais, je ne pense pas que ce soit la bonne manière de faire.... Comme je débute avec les UF, j'aimerais partir du bon pied.

    Merci d'avance à tous.

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Perso je ne procéderais pas comme ça, je laisserais le bouton actif et je vérifierais les champs au moment du click sur le bouton
    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
    Private Sub CommandButton1_Click()
    Dim ctrl As Control, Verif As Boolean
     
    For Each ctrl In Me.Controls
        If TypeOf ctrl Is MSForms.TextBox Or TypeOf ctrl Is MSForms.ComboBox Then
            If ctrl.Value = "" Then Verif = True
        End If
    Next
     
    If Verif = True Then
        MsgBox "Veuillez compléter tous les champs"
    Else
        MsgBox "OK"
    End If
     
    End Sub

  3. #3
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Merci Fring,

    oui il y 'a effectivement la possibilité de laisser le bouton actif.
    J'aurais aimé le laisser inactif pour éviter trop de clics et donc messages (liés) intempestifs.
    Par contre je suis d'accord: ma méthode est assez saugrenue.

    Cordialement.

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Le problème avec un bouton inactif est que l'utilisateur risque de se demander pourquoi il ne peut pas cliquer. Avec un message tu peux spécifier de compléter tel ou tel champs.

  5. #5
    Membre éclairé Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Par défaut
    salut isso, salut fring

    Pour rester dans ton idée d'avoir le bouton locked et de tester si tous les champs sont remplis, tu peux mettre un test dans la fonction événementielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Tu affiches ton bouton si tous les champ sont remplis (sa tu y arrive déjà) et si le mec veux feinter et changer un champ pour ne pas le remplir, tu test la valeur à la sortie(je viens de penser que sa peut marcher avec la fonction Change)
    Je sais pas si j'ai été clair et je sais pas si sa peux marcher avec ton problème :\
    Bonne chance

  6. #6
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Fring, j'ai opté pour ta solution finalement. Encore merci

    Bonne soirée.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/03/2009, 16h33
  2. Réponses: 4
    Dernier message: 01/07/2008, 13h51
  3. Problème pour activer l'extension mhash
    Par Evocatii dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 10/08/2007, 14h36
  4. Réponses: 21
    Dernier message: 05/09/2005, 13h53

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