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 :

Activer/désactiver contrôle dans formulaire mais conflit avec la propriété TAG [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Marketing
    Inscrit en
    Avril 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Marketing

    Informations forums :
    Inscription : Avril 2015
    Messages : 15
    Par défaut Activer/désactiver contrôle dans formulaire mais conflit avec la propriété TAG
    Bonjour le forum,

    J'ai un problème que je n'arrive pas à solutionner
    Sur un formulaire, j'ai :

    - 1 ComboBox
    - 1 ListBox
    - 1 TextBox

    En fonction de la valeur de la ComboBox, la ListBox OU la TextBox est visible. Ces deux dernières ont dans leurs propriétés TAG chacune le numéro de colonne dans laquelle elles doivent renvoyer la valeur saisie via le code suivant :
    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 CommandButton1_Click()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
     
    Set O = Worksheets("Général") 'définit l'ongle O
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
     
    Next CTRL 'prochain contrôle de la boucle
    'définit la ligne LI (première ligne vide de la colonne 2 (=B) de l'onglet O
    LI = O.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
        'si la propriété [Tag] du contrôle n'est pas vide renvoie sa valeur dans la ligne I colonne Tag du contrôle de l'onglet O
        If CTRL.Tag <> "" Then O.Cells(LI, CByte(CTRL.Tag)) = CTRL.Value
    Next CTRL 'prochaine contrôle de la boucle
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    MsgBox "Les données ont été enregistrées avec succés" 'message
    Unload Me 'vide et ferme l'UserForm
    End Sub
    Problème : c'est toujours la ListBox qui renvoie sa valeur même quand je la désactive avec ListBox.Enabled = False et ListBox.Visible = False

    Je voudrais pouvoir réellement récupérer la valeur de l'un OU de l'autre.
    Le code (sûrement un peu sale...) :

    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
    21
    22
     
    Private Sub ComboBox4_Change() 
     
    If ComboBox4 = "Commande" Or ComboBox4 = "Réservation" Then
     
    ListBox1.Enable = False
    ListBox1.Visible = False
    TextBox11.Visible = True
    TextBox11.Enabled = True
     
    End If
     
    If ComboBox4 = "Commande sur réservation" Then
     
    ListBox1.Visible = True
    ListBox1.Enabled = True
    TextBox11.Enabled = False
    TextBox11.Visible = False
     
    End If
     
    End Sub
    Si une bonne âme pouvait passer par là
    Merci !!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Pourquoi tu testes seulement CTRL.Tag et pas CTRL.Visible ?
    D'ailleurs pourquoi boucler sur tous les contrôles alors que tu connais les 2 à utiliser ?
    eric

  3. #3
    Membre actif
    Homme Profil pro
    Marketing
    Inscrit en
    Avril 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Marketing

    Informations forums :
    Inscription : Avril 2015
    Messages : 15
    Par défaut
    Je suis démasqué... Ce n'est pas mon code sur la partie déclaration et variables. J'apprends petit à petit et les boucles je n'ai pas encore abordé. Donc si je suis la même logique que les TAG dans la boucle avec les contrôles visibles, c'est un début de piste ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si tu cherches la valeur parmi deux contrôles, avec le postulat qu'un seul des deux est visible, tu peux procéder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Me
        If .ListeBox1.Visible = True Then
            ' la valeur de listbox1 car il est visible
        Else
            ' la valeur de textbox1 car il est visible
        End If
    End With
    a adapter dans ton code

    si problème indique nous ta difficulté

  5. #5
    Membre actif
    Homme Profil pro
    Marketing
    Inscrit en
    Avril 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Marketing

    Informations forums :
    Inscription : Avril 2015
    Messages : 15
    Par défaut
    Salut Joe,

    Tu veux dire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Me
        If .ListBox1.Visible = True Then
           ListBox1.Value ' la valeur de listbox1 car il est visible
        Else
            TextBox1.Value' la valeur de textbox1 car il est visible
        End If
    End With
    ce qui ne fonctionne pas des masses, il faut peut-être que je ramène dans ce If ce qui se passe après dans le code 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
    15
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
     
    Set O = Worksheets("Général") 'définit l'ongle O
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
     
    Next CTRL 'prochain contrôle de la boucle
    'définit la ligne LI (première ligne vide de la colonne 2 (=B) de l'onglet O
    LI = O.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'UserForm
        'si la propriété [Tag] du contrôle n'est pas vide renvoie sa valeur dans la ligne I colonne Tag du contrôle de l'onglet O
        If CTRL.Tag <> "" Then O.Cells(LI, CByte(CTRL.Tag)) = CTRL.Value
    Next CTRL 'prochaine contrôle de la boucle
    Je suis un peu paumé là bien que j'arrive à comprendre petit à petit la syntaxe du VBA !

    Merci du coup de pouce

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    si tu n'as que trois contrôles sur ton userform, on a pas besoin de faire une boucle sur tous les contrôles

    voici un exemple (non testé) dans lequel tu n'as pas besoin de masquer ou désactiver des contrôles

    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
    21
    22
    23
    24
    25
    Private Sub CommandButton1_Click()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
     
    Set O = Worksheets("Général") 'définit l'ongle O
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
     
    If ComboBox4.Value = "Commande" Or ComboBox4.Value = "Réservation" Then
        Set CTRL = Textbox11
    ElseIf ComboBox4.Value = "Commande sur réservation" Then
        Set CTRL = Listbox1
    Else
        MsgBox "Valeur de Combobox4 erronée"
        Exit Sub
    End If
     
    'définit la ligne LI (première ligne vide de la colonne 2 (=B) de l'onglet O
    LI = O.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
    If CTRL.Tag <> "" Then O.Cells(LI, CByte(CTRL.Tag)) = CTRL.Value
     
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    MsgBox "Les données ont été enregistrées avec succés" 'message
    Unload Me 'vide et ferme l'UserForm
    End Sub

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

Discussions similaires

  1. [Toutes versions] Mise à jour contrôle dans formulaire
    Par Castel15 dans le forum IHM
    Réponses: 10
    Dernier message: 27/02/2011, 15h04
  2. [XL-2003] Activer/Dsactiver un bouton suivant valaur d'un TextBos dans un formulaire.
    Par jeff1494 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/10/2010, 21h39
  3. désactiver/activer un bouton dans un formulaire
    Par hammag dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/06/2009, 15h27
  4. Réponses: 11
    Dernier message: 19/11/2007, 20h17
  5. Activer/désactiver bouton dans menu perso
    Par electrosat03 dans le forum VBA Access
    Réponses: 12
    Dernier message: 21/09/2007, 17h22

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