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 :

Liste tous les objets (CodeName & Noms onglets), feuilles et les modules [XL-365]


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
    838
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 838
    Par défaut Liste tous les objets (CodeName & Noms onglets), feuilles et les modules
    Bonsoir,

    Voilà j'ai un bout de code qui liste tous les objets CodeName ainsi que le nom des Userform dans la première colonne et les modules dans la colonne adjacente du classeur actif.
    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
    28
    29
    30
    31
    32
    '====================================================================================================
        'Nécessite d'activer la référence "Microsoft Visual basic For Application Extensibility 5.3"
    '====================================================================================================
        Dim Ajout As Integer, VBCmp As VBComponent, cdMod As CodeModule, Wb As Workbook, Debut As Long, I, nomTableau
     
        'Indiquez le nom du classeur ouvert
        Set Wb = ThisWorkbook
     
        'Tester que Databodyrange existe ( => que le tableau n'est pas vide avant de le vider)
        If Not Range("ListeModulesProc").ListObject.DataBodyRange Is Nothing Then
            'Efface la liste des procédures
            Range("ListeModulesProc").ListObject.DataBodyRange.Delete
        End If
     
        Ajout = 2
        'Boucle sur tous les modules & les procédures du projet :
        For Each VBCmp In Wb.VBProject.VBComponents
            Set cdMod = VBCmp.CodeModule
            With cdMod
                Debut = .CountOfDeclarationLines + 1
                Do Until Debut >= .CountOfLines
                    Cells(Ajout + I, 1) = VBCmp.Name 'listage des modules dans la feuille active du classeur actif
                    Cells(Ajout + I, 2) = .ProcOfLine(Debut, vbext_pk_Proc) 'listage des procédures dans la feuille active du classeur actif
                    Debut = Debut + .ProcCountLines(.ProcOfLine(Debut, vbext_pk_Proc), vbext_pk_Proc)
                    Ajout = Ajout + 1
                Loop
            End With
        Next VBCmp
        ActiveSheet.Range("A:C").Columns.AutoFit
        nomTableau = "ListeModulesProc"
        Range(nomTableau).Sort key1:=Range(nomTableau & "[Nom Module]"), Header:=xlYes, order1:=xlAscending
        Range("E2").Select
    Je souhaiterai dans la première colonne concaténer le CodeName et le nom de l'onglet entre crochet ou lister le nom des onglets dans une troisième colonne.

    Malgré quelques recherches je n'ai pas trouvé de solution.

    Comment intégrer cette possibilité dans ma procédure.

    Pourriez-vous m'aider svp, merci d'avance.

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 171
    Billets dans le blog
    2
    Par défaut
    Bonsoir

    le nom de l'onglet entre crochet ou lister le nom des onglets dans une troisième colonne
    C'est quoi "le nom de l'onglet" ? pas sûr de ce à quoi ça fait référence

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 838
    Par défaut
    Bonsoir tototiti2008,

    Merci de vous intéresser à cette discussion.

    Il s'agit bien du nom de la feuille Excel.
    Nom : Capture d’écran 2021-12-06 212905.png
Affichages : 657
Taille : 77,2 Ko

  4. #4
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 171
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    à tester (ajout d'une ligne sur la partie centrale)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With cdMod
                Debut = .CountOfDeclarationLines + 1
                Do Until Debut >= .CountOfLines
                    Cells(Ajout + I, 1) = VBCmp.Name 'listage des modules dans la feuille active du classeur actif
                    If VBCmp.Type = vbext_ct_Document Then Cells(Ajout + I, 1) = Cells(Ajout + I, 1) & " (" & VBCmp.Properties("Name").Value & ")"
                    Cells(Ajout + I, 2) = .ProcOfLine(Debut, vbext_pk_Proc) 'listage des procédures dans la feuille active du classeur actif
                    Debut = Debut + .ProcCountLines(.ProcOfLine(Debut, vbext_pk_Proc), vbext_pk_Proc)
                    Ajout = Ajout + 1
                Loop
    End With

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 838
    Par défaut
    Super tototiti2008

    Ça répond exactement à ce que je souhaitais, sauf sur un point : si l'objet CodeName ne comporte pas au moins une ligne de code la ou les feuilles ne sont pas listées ?

    Cordialement Modus57.

    @+

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 838
    Par défaut
    Bien sûr en ajoutant simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    End Sub
    Les objets CodeName sont listés.

    C'est moyennement bon, je me contenterait de cette astuce ?

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 171
    Billets dans le blog
    2
    Par défaut
    Ah ben oui, c'est ce que fait le code original, il liste les éléments contenant des procédures

  8. #8
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 171
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Si tu veux autre chose que ça renvoie actuellement, va falloir prendre le temps de nous expliquer quoi
    Qu'est-ce qu'il doit écrire si la feuille est vide (de code) ?
    Qu'est-ce qu'il doit écrire si la feuille contient des procédures ?
    Qu'est-ce qu'il doit écrire pour les autres composants VB (Userform, Module de classe, Module...) ? s'il ne contiennent pas de code ou avec des procédures
    Bref sans exemple clair du résultat attendu, ça va être difficile de te proposer un code qui le produit magiquement

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 838
    Par défaut
    Bonjour,

    Si la feuille ou le ThisWorkbokk est vide (de code) : dans la première colonne le CodeName & le nom de l'onglet
    Si la feuille ou le ThisWorkbokk contient une ou des procédures : dans la première colonne le CodeName & le nom de l'onglet et dans la 2ème colonne le ou les noms des procédures.
    Pour les autres composants VB (Userform, Module de classe, Module...) s'il ne contiennent pas de code : nom du composant dans la première colonne.
    Pour les autres composants VB (Userform, Module de classe, Module...) s'il contiennent du code : nom du composant dans la première colonne et le ou les noms des procédures dans la 2ème colonne.

    Voici un montage d'image en exemple.
    Nom : exemple résultat souhaité.png
Affichages : 612
Taille : 22,3 Ko
    @+

  10. #10
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 171
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    à tester

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub ListObj()
     
    '====================================================================================================
        'Nécessite d'activer la référence "Microsoft Visual basic For Application Extensibility 5.3"
    '====================================================================================================
        Dim Ajout As Integer, VBCmp As VBComponent, cdMod As CodeModule, Wb As Workbook, Debut As Long, I, nomTableau, NbProc As Long, NomC As String
     
        'Indiquez le nom du classeur ouvert
        Set Wb = ThisWorkbook
     
        'Tester que Databodyrange existe ( => que le tableau n'est pas vide avant de le vider)
        If Not Range("ListeModulesProc").ListObject.DataBodyRange Is Nothing Then
            'Efface la liste des procédures
            Range("ListeModulesProc").ListObject.DataBodyRange.Delete
        End If
     
        Ajout = 2
        'Boucle sur tous les modules & les procédures du projet :
        For Each VBCmp In Wb.VBProject.VBComponents
            NbProc = 0
            Set cdMod = VBCmp.CodeModule
            With cdMod
                Debut = .CountOfDeclarationLines + 1
                NomC = VBCmp.Name
                If VBCmp.Type = vbext_ct_Document Then NomC = NomC & " (" & VBCmp.Properties("Name").Value & ")"
                Do Until Debut >= .CountOfLines
                    NbProc = NbProc + 1
                    Cells(Ajout + I, 1) = NomC 'listage des modules dans la feuille active du classeur actif
                    Cells(Ajout + I, 2) = .ProcOfLine(Debut, vbext_pk_Proc) 'listage des procédures dans la feuille active du classeur actif
                    Debut = Debut + .ProcCountLines(.ProcOfLine(Debut, vbext_pk_Proc), vbext_pk_Proc)
                    Ajout = Ajout + 1
                Loop
            End With
            If NbProc = 0 Then
                Cells(Ajout + I, 1) = NomC
                Ajout = Ajout + 1
            End If
        Next VBCmp
        ActiveSheet.Range("A:C").Columns.AutoFit
        nomTableau = "ListeModulesProc"
        Range(nomTableau).Sort key1:=Range(nomTableau & "[Nom Module]"), Header:=xlYes, order1:=xlAscending
        Range("E2").Select
     
    End Sub

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 838
    Par défaut
    Bonsoir tototiti2008 et encore

    Ça fonction nickel chrome du tonnerre de Zeus.

    Re merci et cordiales salutations.

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

Discussions similaires

  1. [XL-2007] Créer un objet disponible pour tous les modules et userform
    Par Neutthsch dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/01/2016, 17h30
  2. [VBA-E]Exporter / importer tous les modules et frm d'un projet
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 6
    Dernier message: 16/03/2013, 18h37
  3. Réponses: 1
    Dernier message: 24/02/2007, 12h53
  4. Programme qui liste tous les accès à Internet
    Par snoopy69 dans le forum Sécurité
    Réponses: 3
    Dernier message: 31/08/2006, 12h06
  5. Constante commune à tous les modules du projet
    Par Mors_Ubyte dans le forum Access
    Réponses: 1
    Dernier message: 19/07/2006, 14h48

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