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 :

Sélectionner tous les contrôles d'un userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 179
    Par défaut Sélectionner tous les contrôles d'un userform
    Bonjour,

    je dispose d'un userform où j'ai disposé de boutons de commandes, de combo, de listbox...

    A un moment donné, je cherche à pouvoir sélectionner tous les contrôles de type listbox et combobox afin de pouvoir les places en .Enabled=false

    Est-il possible de sélectionner tous ces éléments ? Et si oui de quelle manière ?

    Par avance merci pour votre aide.

    sat478

  2. #2
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    En général sélectionner est une mauvaise idée, cela ne sert qu’à ralentir les traitements !

    On peut lire ou modifier une propriété sans sélectionner l’objet concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Ctrl As Control
            For Each Ctrl In Controls
                    If TypeOf Ctrl Is MSForms.ComboBox Or TypeOf Ctrl Is MSForms.ListBox Then
                        Ctrl.Enabled = False
                    End If
            Next

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Un exemple rapide à met5tre dans le module d'un UserForm quelconque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Click()
        Dim ctl As Control
     
        For Each ctl In Me.Controls
            If TypeOf ctl Is ListBox Or TypeOf ctl Is ComboBox Then
                ctl.Enabled = False
            End If
        Next ctl
    End Sub

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 179
    Par défaut
    Merci beaucoup pour vos réponses c'est exactement ce que je recherchais d'autant plus que je savais pas pour le ralentissement des traitements.

    Pour autant, il n'est pas possible de mettre les valeurs à vide ? Autrement dit de dire value="" ou .clear ?

    Afin de pouvoir mettre tous mes contrôles à vide ? Je n'ai pas trouvé ces options là lorsque j'utilise le with ctrl1...

  5. #5
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonsoir,

    Bien sûr,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Ctrl As Control
            For Each Ctrl In Controls
                    If TypeOf Ctrl Is MSForms.ComboBox Or TypeOf Ctrl Is MSForms.ListBox Then
                        Ctrl.Enabled = False
                        Ctrl.ListIndex = -1
                    End If
            Next
    laissera affiché le contenu des listes, mais désélectionnera tout élément précédemment sélectionné

    NB - Ne fonctionne que pour les Combo et les ListBoxes avec une seule colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Ctrl As Control
            For Each Ctrl In Controls
                    If TypeOf Ctrl Is MSForms.ComboBox Or TypeOf Ctrl Is MSForms.ListBox Then
                        Ctrl.Enabled = False
                        Ctrl.Cleat
                    End If
            Next
    effacera le contenu de toutes les lstes.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 179
    Par défaut
    Bonjour Bigalo,

    les options ".clear" ou ".ListIndex = -1" me donnent une erreur :

    Erreur d'exécution 438
    Propriété ou méthode non gérée par cet objet

    Je suis en excel 2002.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Pour déboguer, tu pourrais te créer deux variables, une de type ListBox et l'autre de type ComboBox, auxquelles tu pourrais assigner l'objet Control dans la boucle avant d'utiliser les méthodes mentionnées. Tu peux alors voir un peu plus ce qui se passe dans ta boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim ctl As Control
    Dim lb As ListBox
    Dim cb As ComboBox
     
    For Each ctl In Me.Controls
        If TypeOf ctl Is ListBox Then
            Set lb = ctl
            lb.ListIndex = -1
        ElseIf TypeOf ctl = ComboBox Then
            Set cb = ctl
            cb.Clear
        End If
        ctl.Enabled = False
    Next ctl

  8. #8
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    Citation Envoyé par sat478 Voir le message
    les options ".clear" ou ".ListIndex = -1" me donnent une erreur
    Cela me paraît très surprenant. Es-tu sûr de ne pas avoir modifié mes tests ?

    Peux-tu indiquer ton code ?

Discussions similaires

  1. Boucler pour renommer tous les contrôles d'un UserForm
    Par c.piette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2015, 15h31
  2. Réponses: 2
    Dernier message: 01/06/2005, 12h13
  3. Réponses: 1
    Dernier message: 27/10/2004, 15h36
  4. Sélectionner tous les entiers dans une fourchette
    Par ludo.guy dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/07/2004, 09h15
  5. Sélectionner tous les id renvoyés par une 1ère requête
    Par Prof Vince dans le forum Requêtes
    Réponses: 5
    Dernier message: 29/11/2003, 19h46

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