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 :

remplacer le nom d'un Control (listbox) par une variable pour agir sur ses propriétés


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
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut remplacer le nom d'un Control (listbox) par une variable pour agir sur ses propriétés
    Bonjour la communauté,
    J'ai bien cherché dans les forums, mais je n'ai pas trouvé ma réponse.
    J'explique :
    J'ai dans une feuille excel des listbox (8 en tout) qui commence toutes par le même préfixe ( en l’occurrence" Liste_OP_").
    A l'ouverture de la feuille je souhaite rendre toutes ces listbox invisibles.
    Hormis le fait de toutes les passer en revue une par une à l'activation de la feuille et de mettre visible à faux, je me posais la question d'une boucle qui les passe en revue et qui ferait la même chose.
    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to 8
         Me.Liste_OP_ & "nomdemaliste(i)".Visible = False ' avec nomdemaliste qui change pour chaque i (les différents noms pourraient se trouver dans un tableau de valeur par exemple...)
    Next i
    D'ou ma question : Peut-on remplacer le nom d'un control (listbox, textbox...) par une variable?
    Merci pour vos idées et peut-être solutions...
    jppouma.

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Attention, lorqu'on utilise une variable, on ne met pas de " ". Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim maVariable As Integer
    maVariable = 5
    MsgBox maVariable     'renvoie 5
    MsgBox "maVariable"  'renvoie maVariable
    Donc ta boucle devrait être sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to 8
        Me.Liste_OP_ & nomdemaliste(i).Visible = False  
    Next i

  3. #3
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour,

    Pour acceder aux controls d'un UF via leurs noms (propriété Name), il faut utiliser la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm.Controls("NomduControl")
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm1.Controls("ListBox1")

    Donc pour agir avec une boucle sur plusieurs controls, je commencerais pas les lister dans une chaine de caractères ensuite convertie en tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Private Const tabCtrl = "ListBox1//ListBox3"
     
    Private Sub CommandButton1_Click()
        Dim i&, t$(): t = Split(tabCtrl, "//")
        For i = LBound(t) To UBound(t)
            Me.Controls(t(i)).Visible = Not Me.Controls(t(i)).Visible
        Next i
    End Sub
    Cette procédure va afficher ou masquer les ListBox nommées ListBox1 et ListBox3 sur clic du bouton nommé CommandButton1.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Si les listbox sont sur une feuille (et non pas un Userform), la syntaxe est différente.
    Il faudrait aussi savoir de quel type de listbox il s'agit... formulaire ou ActiveX

  5. #5
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut
    Merci à tous pour vos réponses...

    Parmi, effectivement mes listbox sont sur une feuille et non pas dans un UserForm.
    Et pour le coup les listbox que j'ai créées sont du style formulaire (et j'avoue que la différence entre les 2 formats - formulaire ou ActiveX, m'échappe quel que peu !)
    Voila si tu as une idée sur le sujet, je suis preneur.

    Antony, j'aurai besoin d’éclaircissements sur, d'une part la déclaration de constante (pourquoi les 2 slash "//"? ), et d'autre part sur les déclarations des variables i& et t$ (la aussi je suis perplexe sur l'écriture de cette déclaration !!!).

    Pour tout vous dire je suis loin d'être un expert en VBA. Je travail plutôt sur le développement de bases 4D, et les syntaxes sont loin d'être les mêmes... ce qui explique peut-être cela!!!

    Merci en tout cas pour vos aides précieuses.

    jppouma

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    déclarations des variables i& et t$ (la aussi je suis perplexe sur l'écriture de cette déclaration !!!).
    C'est une façon abrégée de déclarer les variables, les 2 lignes suivantes sont équivalentes :
    Pour plus d'infos, voir : http://silkyroad.developpez.com/VBA/LesVariables/
    la déclaration de constante (pourquoi les 2 slash "//"?
    C'est pour utiliser la fonction Split : https://msdn.microsoft.com/en-us/lib...=vs.90%29.aspx
    Antony aurait pu utiliser d'autres signes (un seul / ou une virgule ou...). C'est un repère entre 2 noms de listbox. Ensuite avec la fonction Split, on peut découper la chaine de caractère par rapport à se repère.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Split("ListBox1//ListBox2", "//")(0)       'renvoie ListBox1
    Split("ListBox1//ListBox2", "//")(1)       'renvoie ListBox2

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/02/2014, 11h13
  2. Réponses: 0
    Dernier message: 16/02/2014, 22h30
  3. Réponses: 8
    Dernier message: 11/09/2013, 18h20
  4. Comment remplacer le nom d'un controle par une chaine ?
    Par roico dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/04/2007, 11h49
  5. Réponses: 3
    Dernier message: 11/12/2005, 11h15

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