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 :

Lister tous les noms des UserForm et les noms de ses contrôles d'un classeur [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 842
    Par défaut Lister tous les noms des UserForm et les noms de ses contrôles d'un classeur
    Bonsoir à toutes et à tous.

    Dans un classeur qui comporte plusieurs UserForm et plusieurs objets LlistBox, TexBbox, Label, CommandButton …), je souhaiterai lister tous les UseForm et tous ses contrôle dans une feuille.

    J'arrive à créer cette liste sur une seule colonne voici mon code :
    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
    Sub ListeUSF_Controle()
        Dim VBCmp As VBComponent
        Dim Ctrl As Control
        i = 2
        For Each VBCmp In ThisWorkbook.VBProject.VBComponents
            If VBCmp.Type = 3 Then
                Cells(i - 1, 1) = VBCmp.Name
                ActiveCell.Interior.Color = 49407
                For Each Ctrl In clients.Controls
                    Worksheets("Liste contrôles").Cells(i, 1).Value = Ctrl.Name
                    i = i + 1
                Next Ctrl
            End If
        Next VBCmp
        Activesheet. Cells.EntireColumn.AutoFit 
    End Sub
    Mais j'aimerai lister dans la première colonne le nom du premier UserForm et les noms de ses contrôles, dans la deuxième colonne le nom du deuxième UserForm et les noms de ses contrôles, ainsi de suite …

    Je n'y arrive pas, cela ne doit pas être très compliqué pour les experts de ce forum.

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Ceci, non testé
    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
    Sub ListeUSF_Controle()
        Dim VBCmp As VBComponent
        Dim Ctrl As Control
        i = 2
        Col = 1
        For Each VBCmp In ThisWorkbook.VBProject.VBComponents
            If VBCmp.Type = 3 Then
                Cells(i - 1, Col) = VBCmp.Name
                ActiveCell.Interior.Color = 49407
                For Each Ctrl In clients.Controls
                    Worksheets("Liste contrôles").Cells(i, Col).Value = Ctrl.Name
                    i = i + 1
                Next Ctrl
                Col = Col + 1
            End If
        Next VBCmp
        ActiveSheet.Cells.EntireColumn.AutoFit
    End Sub
    Cdlt

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 842
    Par défaut
    Bonjour ARTURO83.

    Merci pour ta réponse.

    Petite remarque les listes se mettent bien dans les colonnes suivantes mais pas à la première ligne.

    J'ai une petite coquille dans mon code il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ctrl In clients.Controls
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ctrl In VBCmp.Designer.Controls

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Petite remarque les listes se mettent bien dans les colonnes suivantes mais pas à la première ligne.
    il faut réinitialiser la variable i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        For Each VBCmp In ThisWorkbook.VBProject.VBComponents
            If VBCmp.Type = 3 Then
                Cells(i - 1, Col) = VBCmp.Name
                ActiveCell.Interior.Color = 49407
                For Each Ctrl In VBCmp.Designer.Controls
                    Worksheets("Liste contrôles").Cells(i, Col).Value = Ctrl.Name
                    i = i + 1
                Next Ctrl
                Col = Col + 1
                i = 2
            End If
    Cdlt

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 842
    Par défaut
    Re.

    Je suis pas à l'aise avec les boucles un peu complexe.

    Et pour faire un simple tri ascendant de toutes les colonnes ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonsoir,

    Votre code complet
    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
    26
    27
    Sub ListeUSF_Controle()
        Dim VBCmp As VBComponent
        Dim Ctrl As Control
        Dim f1 As Worksheet
     
        Set f1 = Sheets("Liste contrôles")
        i = 2
        Col = 1
        For Each VBCmp In ThisWorkbook.VBProject.VBComponents
            If VBCmp.Type = 3 Then
                f1.Cells(i - 1, Col) = VBCmp.Name
                f1.Cells(i - 1, Col).Interior.Color = 49407
                For Each Ctrl In VBCmp.Designer.Controls
                    f1.Cells(i, Col).Value = Ctrl.Name
                    i = i + 1
                Next Ctrl
                Col = Col + 1
                i = 2
            End If
        Next
        DerCol = f1.Range("XFD1").End(xlToLeft).Column
        For c = 1 To DerCol
            DerLig = f1.Cells(1, c).End(xlDown).Row
            f1.Range(Cells(2, c), Cells(DerLig, c)).Sort Cells(1, c), 1
        Next c
        f1.Cells.EntireColumn.AutoFit
    End Sub
    Cdlt

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

Discussions similaires

  1. Lister tous les raccourcis clavier qui lancent des macros
    Par bruxmu dans le forum Contribuez
    Réponses: 5
    Dernier message: 09/05/2015, 15h17
  2. Réponses: 0
    Dernier message: 01/02/2010, 14h51
  3. lister tous les fichiers avec des différences entre deux répertoires.
    Par contremaitre dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/03/2008, 15h24
  4. Réponses: 3
    Dernier message: 10/03/2008, 22h04
  5. Réponses: 4
    Dernier message: 29/08/2006, 18h02

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