Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

J’ai tourné en vain mon problème dans tous les sens et me résouds à vous soumettre ma question :


Je n'arrive pas à réaliser - ou du moins à coder - ce qui suit :

Dans un même fichier .xlsm
à partir d'une macro à placer en module 2 [ex : Sub Supprimer()]
supprimer une macro enregistrée dans le module 1 [ex : Macro_à_supprimer()]

(en fait peu importe l'emplacement des macros, je fais le distingo uniquement pour une question de lisibilité, d’ailleurs si c'est plus simple en terme de code de dire "je supprime tout le module_n", alors autant se simplifier la vie )

Quand j'utilise l'enregistreur, rien ne s'enregistre. Et quand je veux écrire en direct, je ne sais pas comment pointer sur le module en question.

Quelqu’un a-t-il une idée comment réaliser ça ?

Merci d’avance pour vos lumières
 
Re : Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

Hello Sebast.

En fouillant un peu je suis tombé sur cette macro :

Code:
Sub suppression()
    Dim Debut As Integer, Lignes As Integer
    With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
      Debut = .ProcStartLine("macro_module_1", 0)
      Lignes = .ProcCountLines("macro_module_1", 0)
      .DeleteLines Debut, Lignes
    End With
End Sub
Tu places la macro "suppression" où tu le souhaites ; elle se charge de virer la macro intitulée "macro_module_1" qui elle se doit d'être placée dans ton Module1.
 
Re : Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

Bonjour à tous et désolé pour ma réponse tardive, j'ai un accès wifi déplorable depuis mon lieu de vacances …
(et il est probable que ce soit la même chose demain, ne serait-ce que pour consulter vos réponses !)

Merci beaucoup pour vos suggestions, mais je rencontre les difficultés suivantes
Quand je mets en œuvre le code suppression() de Matichoux j'obtiens le message d'erreur suivant (voir pièce jointe)

1) si je mets la macro dans un autre module (ici suppression2())
Erreur d'exécution '1004'
La méthode VBProject de l'objet Workbook a echoué
ou
2) Si je mets ma macro dans le même module (ici suppression())
Erreur d'exécution '1004'
L'accès au programme par Visual Basic n'est pas fiable

A titre d'exemple, je joins un fichier très simple montrant le souci (fichier macro_purge.xlsm)
Quelqu'un a-t-il une idée de ce qui manque ?
"Quand je lis la proposition de Gibi je vois qu'elle 'Nécéssite d'activer la référence 'Visual basic For Application Extensibility 5.3'
Est-ce peut-être ce qui cloche chez moi (Add-in ?) car le code testé dans suppression() parait assez proche

Encore merci pour votre aide et vos lumières
 

Pièces jointes

Re : Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

Bonsoir à tous et au forum,

Sebast pour ce qui est de votre problème 2) , il faut cocher une case dans les options Excel.
Centre de gestion de la confidentialité, ensuite, Paramètres du Centre de gestion de la confidentialité, puis, Paramètres des Macros et pour finir, cocher Accès approuvé au modèle d'objet du VBA. 🙂

A+ Stéfan
 
Re : Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

Bonsoir Stefan373,

merci beaucoup pour ta réponse rapide et efficace : ça marche impeccable ! Ca vaut pour les deux cas de figure, donc ou que soit la sub(), quelque soit le module.

Sais-tu comment s'appelle le paramètre en question, si je devais le mettre via du code sur une quelconque machine (c'est à dire le positionner à ... = true) ? {un peu comme on met Application.ScreenUpdating = False pour que l'écran soit "calme"].

Encore merci pour ton aide
Sebast
 
Re : Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

Re-bonjour le fil.

Il n'y a pas de paramètres en VBA permettant d'autoriser "l'accès approuvé au modèle d'objet du projet VBA".
Cela voudrait tout simplement dire que ton programme peut désactiver une sécurité prévue initialement pour l'empêcher d'accepter n'importe quoi. C'est une stratégie de sécurité, elle ne servirait à rien si on peut l'enlever dynamiquement via le code.

Bon cela étant dit il doit sûrement y avoir une méthode pour contourner le souci...
 
Re : Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

Bonjour,
concernant le fait de prévenir l'utilisateur de la nécessité d'autoriser "l'accès approuvé au modèle d'objet du projet VBA", modifier le code comme suit en intégrant une gestion d'erreur :
Code:
Sub suppression()
On Error GoTo erreur
Dim Debut As Integer, Lignes As Integer
With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
    Debut = .ProcStartLine("macro_module_1", 0)
    Lignes = .ProcCountLines("macro_module_1", 0)
    .DeleteLines Debut, Lignes
End With
Exit Sub
erreur:
Select Case Err.Number
Case Is = 1004
    MsgBox "Vous devez cocher ""Accès approuvé au modèle d'objet VBA""dans " & vbCrLf & _
    "Options/Centre de gestion de la confidentialité/Paramètres du centre de gestion de la confidentialité/Paramètres des macros"
Case Else
    MsgBox "Erreur inconnue."
End Select
End Sub

S'il s'agit de régler le niveau de sécurité par macro, voir l'utilisation de Application.AutomationSecurity et de l'exemple fourni à ce sujet dans l'aide d'Excel (touche F1).
A+
 
Dernière édition:
Re : Comment effacer une Sub() à partir d’une autre Sub() dans le même fichier ?

Bonjour Matichoux et David84,

désolé pour ce délai de réponse, j'ai dû revenir de vacances pour accéder enfin au réseau, le WIFI des vacances étant vraiment pourri ...

Merci beaucoup pour vos réponses très instructives :
Matichoux : je subodorais que pour des raisons de sécurité, on ne pouvais pas intervenir sur ce paramètre via du code.
David84 : merci pour ce code, il permet effectivement de cerner le problème et d'orienter l'utilisateur dans la marche à suivre.

Encore merci à vous deux

Sebast
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…