Rebonjour ceFil et le Forum
Tiens et puis il y avait Stef et Florian qui parlaient d'un problème pour effacer des macros évènementielles de Private Module de Feuille dans un nouveau classeur sauvé à partir d'une feuille copié d'un classeur Maitre (
Fil de discussion
Donc en plus de la Macro si dessus : "Destruction d'une macro contenue dans le Private Module de Sheet " j'ai pensé qu'il y avait une lacune dans ce fil pour ce cas de figure :
Voici comme faire pour détruire sélectivement une macro évènementielle contenue dans le private Module d'une feuille d'un autre classeur.
Destruction Sélective d'une Macro Evènementielles dans un Private Module de Feuille
Pour l'exemple le classeur distant se nomme "Facture.xls" et la l'onglet de Feuille en question se nomme "Facture"
Sub DeleteSubOtherWorkBookPrivateSheet()
Dim WB As Workbook
Dim Code As Object
Dim NomProc As String, NomFeuille As String
Dim DebCode As Integer, LongCode As Integer, VBext_Pk_Proc As Long
On Error GoTo FirstError
Set WB = Workbooks("Facture.xls")
NomProc = "Worksheet_SelectionChange"
NomFeuille = "Facture"
On Error GoTo SecondError
Set Code = WB.VBProject.VBComponents(WB.Sheets(NomFeuille).Co deName).CodeModule
DebCode = Code.ProcStartLine(NomProc, VBext_Pk_Proc)
LongCode = Code.ProcCountLines(NomProc, VBext_Pk_Proc)
Code.DeleteLines DebCode, LongCode
Exit Sub
FirstError:
If Err = 9 Then MsgBox "Classeur recherché pas ouvert"
Exit Sub
SecondError:
If Err = 9 Then MsgBox NomFeuille & " Private Module de Feuille non trouvé"
If Err = 35 Then MsgBox NomProc & " Macro pas trouvée"
End Sub
J'y ai ajouté un gestionnaire d'erraur au cas où, (c'est facile de planter quand on fait des trucs comme ceci... (lol)
Puis dans la Foulé :
Destruction Sélective d'une Macro Evènementielles dans le Private Module ThisWorkBook
Sub DeleteSubOtherWorkBook()
Dim WB As Workbook
Dim Code As Object
Dim NomProc As String, NomModule As String
Dim DebCode As Integer, LongCode As Integer, VBext_Pk_Proc As Long
On Error GoTo FirstError
Set WB = Workbooks("Facture.xls")
NomProc = "Workbook_BeforeClose"
NomModule = "ThisWorkBook"
On Error GoTo SecondError
Set Code = WB.VBProject.VBComponents(NomModule).CodeModule
DebCode = Code.ProcStartLine(NomProc, VBext_Pk_Proc)
LongCode = Code.ProcCountLines(NomProc, VBext_Pk_Proc)
Code.DeleteLines DebCode, LongCode
Exit Sub
FirstError:
If Err = 9 Then MsgBox "Classeur recherché pas ouvert"
Exit Sub
SecondError:
If Err = 9 Then MsgBox NomModule & " Module non trouvé"
If Err = 35 Then MsgBox NomProc & " Macro pas trouvée"
End Sub
A Noter que cette dernière macro sera la même pour détruire sélectivement une macro "normale" dans un module standard... Juste changer :
NomProc = "MaMacro"
NomModule = "ModuleX"
Voilà là je crois qu'on a fait le tour !!! lol
Bonne fin de Week End à tous et toutes
@+Thierry