Bonjour à tous,
Suite au suivie de plusieurs discutions je me suis rendu compte que mon complément pour excel (.xlam) que j'avais fait avais quelques failles. (impossible de poster désolé)
Sur chatGPT, j'ai trouvé un code qui fonctionne pour désactiver ce qui est dans le module "ThisWorkbook"
Le problème pour moi,
J'ai essayé de plusieurs façons mais sans succès, le modèle proposé fonctionne quand on a un fichier cible dont on connais le nom, mais moi, vu que c'est un complément je dois pour ouvrir n'importe quel fichier sans avoir à présisé le nom dans mon module.
Logiquement je pense que je dois faire un "ActiveWorkBook" ou "With ActiveWorkBook", mais j'arrive pas à le formuler, j'ai systématiquement une erreur au démarrage.
et voici le code que j'ai essayé
Merci à tous
Nico
Suite au suivie de plusieurs discutions je me suis rendu compte que mon complément pour excel (.xlam) que j'avais fait avais quelques failles. (impossible de poster désolé)
Sur chatGPT, j'ai trouvé un code qui fonctionne pour désactiver ce qui est dans le module "ThisWorkbook"
VB:
Sub DisableUserFormAndOpenWorkbook()
Dim wb As Workbook
Dim vbComponent As Object
Dim Code As String
' Ouvre le classeur cible sans exécuter le code
Application.EnableEvents = False
Set wb = Workbooks.Open("C:\chemin\vers\fichier_cible.xlsm")
Application.EnableEvents = True
' Accède au module "ThisWorkbook"
Set vbComponent = wb.VBProject.VBComponents("ThisWorkbook")
' Stocke le code existant
Code = vbComponent.CodeModule.Lines(1, vbComponent.CodeModule.CountOfLines)
' Désactive le code d'ouverture du UserForm
vbComponent.CodeModule.DeleteLines 1, vbComponent.CodeModule.CountOfLines
vbComponent.CodeModule.AddFromString "Private Sub Workbook_Open(): End Sub"
' Exécute vos tâches ici
' ...
' Rétablit le code d'origine
vbComponent.CodeModule.DeleteLines 1, vbComponent.CodeModule.CountOfLines
vbComponent.CodeModule.AddFromString Code
' Ferme le classeur cible
wb.Close SaveChanges:=True
End Sub
Le problème pour moi,
J'ai essayé de plusieurs façons mais sans succès, le modèle proposé fonctionne quand on a un fichier cible dont on connais le nom, mais moi, vu que c'est un complément je dois pour ouvrir n'importe quel fichier sans avoir à présisé le nom dans mon module.
Logiquement je pense que je dois faire un "ActiveWorkBook" ou "With ActiveWorkBook", mais j'arrive pas à le formuler, j'ai systématiquement une erreur au démarrage.
et voici le code que j'ai essayé
Code:
Sub DisableUserFormAndOpenWorkbook()
Dim wb As Workbook
Dim vbComponent As Object
Dim Code As String
Dim wbPath As String
' Ouvre le classeur cible sans exécuter le code
Application.EnableEvents = False
wbPath = ActiveWorkbook
Set wb = Workbooks.Open(wbPath)
Application.EnableEvents = True
' Accède au module "ThisWorkbook"
Set vbComponent = wb.VBProject.VBComponents("ThisWorkbook")
' Stocke le code existant
Code = vbComponent.CodeModule.Lines(1, vbComponent.CodeModule.CountOfLines)
' Désactive le code d'ouverture du UserForm
vbComponent.CodeModule.DeleteLines 1, vbComponent.CodeModule.CountOfLines
vbComponent.CodeModule.AddFromString "Private Sub Workbook_Open(): End Sub"
' Exécute vos tâches ici
' ...
' Rétablit le code d'origine
vbComponent.CodeModule.DeleteLines 1, vbComponent.CodeModule.CountOfLines
vbComponent.CodeModule.AddFromString Code
' Ferme le classeur cible
'wb.Close SaveChanges:=True
End Sub
Merci à tous
Nico