XL 2016 Vérifier présence Evènement dans un module de code feuille

Pounet95

XLDnaute Occasionnel
Bonjour,
Via code VBA je créé une feuille de classeur dans laquelle, toujours en VBA, je créé l'évènement Worksheet_Change.
Comment, dans le cas de modifications, vérifier que cette procédure n'est pas déjà présente ?

J'essaie de lister les composants avec le code ci-joint. Mon souci est que pour un composant type 100 ( feuille ), je ne trouve pas comment récupérer son CodeName.
Exemple dans la copie d'écran : pour la feuille nommée Feuil12 (2_Liste_Clubs), j'aimerais récupérer le 2_Liste_Clubs car il ne sera pas toujours associé à Feuil12

Merci de votre aide
Claude alias Pounet95

Capture Liste Composants.PNG

VB:
Sub ListeComponents()
Dim comp As Variant
Dim response As Integer

With ActiveWorkbook.VBProject
  For Each comp In .vbcomponents
        debug.print comp.type, comp.name
    Next comp
  End With
End Sub
 
Solution
Bonjour Pounet,
Ci dessous un essai :
VB:
Public NomFeuilles()
Sub ParcourtFeuilles2()
Dim Sh As Worksheet, i As Integer
ReDim NomFeuilles(ActiveWorkbook.Sheets.Count)
i = 0
For Each Sh In ActiveWorkbook.Sheets
    NomFeuilles(i) = Sh.Name
    i = i + 1
Next Sh
End Sub
L'array NomFeuilles contient tous les noms de feuilles présentes dans le classeur.
Le fait que cet array soit en public il est disponible pour toutes les autres macros.
A la fin il est redimensionné juste pour le nombre de feuilles donc vous pouvez faire un Ubound(NomFeuilles) pour avoir le nombre de feuilles présentes.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pounet,
Ci dessous un essai :
VB:
Public NomFeuilles()
Sub ParcourtFeuilles2()
Dim Sh As Worksheet, i As Integer
ReDim NomFeuilles(ActiveWorkbook.Sheets.Count)
i = 0
For Each Sh In ActiveWorkbook.Sheets
    NomFeuilles(i) = Sh.Name
    i = i + 1
Next Sh
End Sub
L'array NomFeuilles contient tous les noms de feuilles présentes dans le classeur.
Le fait que cet array soit en public il est disponible pour toutes les autres macros.
A la fin il est redimensionné juste pour le nombre de feuilles donc vous pouvez faire un Ubound(NomFeuilles) pour avoir le nombre de feuilles présentes.
 
Dernière édition:

Pounet95

XLDnaute Occasionnel
Bonsoir Sylvanu et tout le monde
C'était pourtant simple de récupérer le CodeName ! Merci Sylvanu de m'avoir remis dans le bon chemin ( droit ? )
Pour arriver à ce que je voulais faire, à savoir supprimer l'évènement ( ici le Worksheet_Change ), je procède de la façon dont code joint :

Si ça peut servir !!!!
Bonne soirée
Claude alias Pounet95
VB:
Sub Suppression_Evènement_Feuille()
    Dim shNom       As String           'nom de la feuille version Utilisateur
    Dim shCode      As String           'CodeName de la feuille
    Dim strEvent    As String           'Libellé de l'évènement
    Dim debut       As Integer          'numéro ligne début de l'évènement
    Dim fin         As Integer          'nombre de ligne de la procédure
    
    On Error Resume Next
    shNom = "Composants"
    shCode = Sheets(shNom).CodeName
    strEvent = "Worksheet_Change"
    
    With ThisWorkbook.VBProject.VBComponents(shCode).CodeModule
        debut = .ProcStartLine(strEvent, 0)
        If Err > 0 Then Exit Sub
        fin = .ProcCountLines(strEvent, 0)
        .DeleteLines debut, fin
    End With
End Sub
 

Pounet95

XLDnaute Occasionnel
Re,
Désolé si je me suis mal fait comprendre !
Ce que je voulais c'était l'association des 2 car, sauf erreur, dans le VBE c'est le CodeName qui est utilisé pour le nom de module.
Comme cette association change en fonction de l'ordre de création de la feuille, de ses éventuelles suppressions et créations, j'avais besoin de la récupérer pour la vérifier la présence/absence d'un évènement pour éviter qu'il soit en double notamment.

Est-ce plus clair ?
Bonne soirée
Claude alias Pounet95
 

Discussions similaires

Statistiques des forums

Discussions
314 655
Messages
2 111 604
Membres
111 217
dernier inscrit
aladinkabeya2