Suppression de macros à partir d’une macro (Microsoft Excel)
Gene a demandé un moyen de supprimer les macros d’une macro. Il a une grande feuille de calcul qui utilise des macros pour créer une ordre d’achat.
À la dernière étape, la macro supprime les données d’origine qui ne sont plus nécessaires pour la commande d’achat terminée. Ce classeur épuré est ensuite enregistré sous un nouveau nom. Gene a besoin de la macro, juste avant l’enregistrement, pour supprimer une macro stockée dans le gestionnaire d’événements SelectionChange.
Cela pourrait être géré de plusieurs manières. Une façon est d’éviter d’avoir à faire la suppression tous ensemble. Au lieu de cela, demandez à votre macro de créer un nouveau classeur, puis de transférer, vers ce classeur, une copie des données dont vous avez besoin. Vous pouvez ensuite découper et découper les données dans le nouveau classeur et l’enregistrer en tant que bon de commande. Les macros du classeur existant ne sont jamais copiées dans le nouveau classeur pendant le processus, vous n’avez donc pas à vous soucier de les supprimer.
La copie de toutes les feuilles de calcul du classeur actuel vers un nouveau classeur est très simple. La macro suivante montre comment cela est fait:
Sub CopyThisWorkbook() Dim CopiedWB As String CopiedWB = "Copy of " & ActiveWorkbook.Name Sheets.Copy ActiveWorkbook.SaveAs Filename:=CopiedWB, _ FileFormat:=xlNormal End Sub
La méthode Copy, lorsqu’elle est appliquée à la collection Sheets, copie toutes les feuilles de calcul du classeur actif dans un nouveau classeur et rend le nouveau classeur actif. La commande finale enregistre le nouveau classeur sous un nouveau nom.
Bien sûr, si vous avez besoin que certaines de vos macros soient dans le nouveau classeur, mais pas toutes (comme le gestionnaire d’événements SelectionChange), il est probablement préférable de supprimer ce dont vous n’avez pas besoin et d’enregistrer simplement sous un nouveau Nom. L’exemple de macro suivant montre comment supprimer le gestionnaire d’événements SelectionChange du code de feuille de calcul pour Sheet1.
Sub DeleteProcedure() Dim VBCodeMod As CodeModule Dim StartLine As Long Dim HowManyLines As Long Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule With VBCodeMod StartLine = .ProcStartLine("Worksheet_SelectionChange", _ vbext_pk_Proc) HowManyLines = .ProcCountLines("Worksheet_SelectionChange", _ vbext_pk_Proc) .DeleteLines StartLine, HowManyLines End With End Sub
Une fois la macro terminée, le classeur peut être enregistré et la macro souhaitée ne sera pas dans le fichier enregistré. Cette macro est adaptée des informations fournies sur le site Web de Chip Pearson, auxquelles vous devez vous référer si vous avez besoin d’informations supplémentaires sur cette technique:
http://www.cpearson.com/excel/vbe.aspx
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (3073) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.