Copie d’un classeur : Supprimer seulement une des deux macros

Bonjour,

Dans le fichier ci-joint, il y a une ‘’Private Sub Worksheet_BeforeDoubleClick’’ et une ‘’Private Sub Worksheet_SelectionChange’’ sur la Feuil1.

Dans un module, j’ai une macro qui me permet de créer une copie de ce fichier de base mais - dans cette copie - je souhaiterais neutraliser la macro ‘’Private Sub Worksheet_SelectionChange’’.

Comment m’y prendre ?

Amicalement.

7demo-08-12.xlsm (21.68 Ko)

Bonsoir,

une solution qui a le défaut de devoir connaître le premier numéro de ligne à effacer et le dernier, ici dans l'exemple peut importe la Sub, cela efface de la ligne 2 et sur 5 ligne donc de la 2 à la 6 incluse (faire le test pour vérifier si ce n'est pas la 7ième....

Sub Supprimer_Code_Feuille()
    Dim NomFeuille As String
    NomFeuille = "Feuil2"
    With ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Sheets(NomFeuille).CodeName).CodeModule
    .DeleteLines 2, 5
    .CodePane.Window.Close
    End With
End Sub

@ bientôt

LouReeD

Après quelques recherches sur le net en partant du principe que le CodeName de la feuille considérée soit Feuil2 :

Sub Test()
    Dim Wb As Workbook
    Set Wb = Active.Workbooks
    SupprimerMacroPrecise Wb, "Feuil2", "Worksheet_SelectionChange"
End Sub

Sub SupprimerMacroPrecise(Wb As Workbook, Mdl As String, NomMacro As String)
    Dim Debut As Integer, Lignes As Integer
    With Wb.VBProject.VBComponents(Mdl).CodeModule
        Debut = .ProcStartLine(NomMacro, 0)
        Lignes = .ProcCountLines(NomMacro, 0)
        .DeleteLines Debut, Lignes
    End With
End Sub

Bonne fin de soirée.

@ bientôt

LouReeD

Salut LouReeD,

Merci pour tes réponses

Pour ton premier code, j’ai tenté de l’intégrer au mien, mais lorsque ça arrive sur la ligne .DeleteLines 10,12, ça me donne ce message d’erreur.

capture 1

Comme je ne savais pas trop comment intégrer ton deuxième code au mien, j’ai d’abord voulu le tester pour lui-même, tel que dans le fichier Essai 2 LouReeD ci-joint, mais j’ai tout d’abord dû mettre Option Explicit en veilleuse et ça bloque sur la ligne Set Wb = Active.Workbooks.

capture 2

Que faire, que faire ?

Désolé...

Set Wb = ThisWorkbook

avec Option Explicit

@ bientôt

LouReeD

Euh, c'est génial comme code, ça te ''tue'' une macro comme de rien

Un tout grand merci pour ton aide, je fais un bond de géant en avant grâce à toi

Je ne clos pas encore le sujet, car je vais encore devoir intégrer ce code à celui existant, mais je présume que ça ne doit pas être si compliqué.

Très bonne soirée.

Merci des remerciements, cela dit une recherche sur le net donne de bons résultats quelque fois...

@ bientôt

LouReeD

Salut LouReed,

Merci pour le conseil, mais c'est bien entendu la première chose que j'avais faite, selon la première image ci-dessous. Mais la plupart des codes trouvés supprimaient toutes les macros. J'en ai quand même trouvé un autre qui ne supprimait que la macro souhaitée, mais il aurait fallu installer une référence ''Extension .......'' que je n'ai pas trouvé dans ma liste, selon la deuxième image jointe.

Encore mille mercis pour ta collaboration

capture 3 capture 4

Re-bonjour,

Le problème est un peu plus compliqué que prévu

En réalité j’ai une constellation un peu spéciale : je dois régulièrement créer des listes de membres (appelons-les ‘’Fichier 3’’ et ‘’Fichier 4’’) avec certaines données précises pour deux entités différentes à l’aide d’une liste de membres de base (appelée ici ‘’Fichier 1’’). Ceci se fait par l’intermédiaire d’un ‘’Fichier 2’’, placé dans le même dossier que ‘’Fichier 1’’.

Jusqu’à maintenant, la création du ‘’Fichier 4’’ ne posait pas de problème. J’ouvrais le ‘’Fichier 1’’ et cliquais sur le bouton en place derrière lequel est placée la macro ‘’ Liste_pour_CdC_NEW'’. Celle-ci créait le ‘’Fichier 4’’ après avoir ouvert et refermé le ‘’Fichier 2’’ et refermait le ‘’Fichier 1’’. Ainsi, seul le ‘’Fichier 4’’ était encore ouvert à la fin du travail.

J’ai demandé de l’aide sur le Forum afin de pouvoir créer en plus le ‘’Fichier 3’’ dans lequel je voudrais supprimer cette macro. Mais en essayant d’appliquer ton idée, donc en complétant la macro ‘’ Liste_pour_CdC_NEW'’, ça bloque selon l’image ci-dessous.

capture 1

Je présume que ça vient de l’instruction ‘’Set Wb = ThisWorkbook’’ (soit le ‘’Fichier 1’’) alors que je voudrais que ça supprime la macro "Worksheet_BeforeDoubleClick" du ‘’Fichier 3’’.

J’ai bien essayé de remplacer ‘’Set Wb = ThisWorkbook’’ par ‘’Set Wb = ActiveWorkbook’’ – puisque c’est le ‘’Fichier 3’’ qui est alors ouvert à l’écran, mais ça bloque au même endroit.

Saurais-tu encore m’aider ?

6fichier-2.xlsm (125.84 Ko)
5fichier-1.zip (48.05 Ko)

et avec un truc du genre : ’Set Wb = Workbook("Fichier3")

Mais je ne connais pas trop la syntaxe....

@ bientôt

LouReeD

Une fois de plus merci pour ton aide,

J'ai essayé avec tout ce qui m'est passé par la tête, mais pas plus de succès

    Dim Wb As Workbook
    'Set Wb = ThisWorkbook
    'Set Wb = ActiveWorkbook
    'Set Wb = Workbook("Fichier 3")
    'Set Wb = Workbook("Fichier 3.xlsm")
    'Set Wb = Windows("Fichier 3.xlsm")
    SupprimerMacroPrecise Wb, "Liste des membres", "Worksheet_BeforeDoubleClick"

Quelqu'un à une autre idée ?

Bonjour,

C'est cette référence qu'il faut ajouter, me semble-t-il :

Microsoft Visual Basic for Applications Extensibilty 5.3

Cdlt.

Exact !

Et pour le reste c'est bon ou en passant par ceci :

Set Wb = Workbooks.Open("Fichier3.xlsm")

@ bientôt

LouReeD

Bonjour à tous deux,

Merci à LouReeD pour sa nouvelle contribution et à Jean-Eric d'intervenir sur ce fil.

J'ai maintenant activé la référence ‘’Microsoft Visual Basic for Applications Extensibilty 5.3’’ et inscrit la ligne ‘’Set Wb = Workbooks.Open("Fichier3.xlsm")’’.

Malheureusement ça bloque sur cette dernière ligne, alors que le ‘’Fichier 3’’ est ouvert à l’écran, comme on peut le voir sur l’image ci-dessous, avec le message d’erreur qui y précède.

Que puis-je encore essayer ?

capture 2 capture 1

Bonjour Yvouille, le forum,

je te propose d'essayer une de ces lignes :

  Set Wb = Workbooks("Fichier 3")
  Set Wb = Workbooks("Fichier 3.xlsm")

il manquait juste un s à Workbook ; si ça marche pas, essaye :

  Set Wb = Workbooks("Fichier3")
  Set Wb = Workbooks("Fichier3.xlsm")

(vérifier le nom du fichier )

dhany

(vérifier le nom du fichier )

En effet, sur vos images il y a Fichier 3, et dans le code proposé avec le "open" il y a Fichier3

@ bientôt

LouReeD

Merci à vous tous pour votre aide.

Le nom du nouveau ''Fichier 3'' est préparé 10 lignes plus haut, comme on le voit sur l'image jointe.

En dessous, en commentaire, tous mes essais infructueux.

D'autres idées de solution ?

Cordialement.

capture

Bonsoir,

il faut peut-être ajouter le chemin, car le classeur est sauvegardé sous le nom Fichier 3.xlsm mais est-il ouvert ?

Et pour l'ouvrir il faut peut-être le chemin d'accès.

@ bientôt

LouReeD

j'me trompe peut-être, mais du fait qu'tu as utilisé FileFormat:=xlOpenXMLWorkbookMacroEnabled : le fichier doit déjà être sauvegardé avec l'extension .xlsm (ce qui est bon) ; mais comme tu as mis FileName:=ThisWorkbook.Path & "\Fichier 3.xlsm" ça a peut-être créé une double extension .xlsm et ton fichier est en réalité : "Fichier 3.xlsm.xlsm" ?

dans une fenêtre de l'Explorateur de Windows, avec les extensions cachées, tu vois seulement "Fichier 3.xlsm" ; mais tu verras "Fichier 3.xlsm.xlsm" si tu affiches les extensions, ou si tu utilises dir dans une fenêtre d'invite de commande.

si c'est bien ça, alors ça expliquerait pourquoi le fichier n'est pas trouvé.

dhany

Salut LouReed,

Oui, le classeur ''Fichier 3'' est ouvert et visible à l'écran au moment où ça bloque. Je l'avais montré dans mon image de 13:11

Salut dhany,

J'avais créé ces deux lignes à l'aide de l'enregistreur de macro, le problème ne devrait donc pas venir de là. Mais sinon, quelle solution proposes-tu en fait ? Je ne sais pas ce que tu veux dire par : ou si tu utilises dir dans une fenêtre d'invite de commande.

Chaleureusement.

Rechercher des sujets similaires à "copie classeur supprimer seulement deux macros"