Supprimer en VBA un module d'un autre classeur

  • Initiateur de la discussion Initiateur de la discussion jhofman
  • 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 !

jhofman

XLDnaute Occasionnel
Bonjour,


je souhaite supprimer tout code dans un fichier excel externe.
j'ai déjà le code suivant mais ne supprime pas le code associé à une feuille
Merci de votre aide

Code:
Sub Test()
MonFichier = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
If MonFichier = False Then Exit Sub
Workbooks.Open Filename:=MonFichier
Source = ActiveWorkbook.Name
    
Workbooks(Source).Sheets(1).Copy
Destination = ActiveWorkbook.Name
i = 0
For Each X In Workbooks(Source).Sheets
    i = i + 1
    'suppresion des sauts de pages manuels
    For J = 1 To X.HPageBreaks.Count
      X.HPageBreaks(J).Delete
    Next J
    
    If X.Name <> Workbooks(Source).Sheets(1).Name Then X.Copy After:=Workbooks(Destination).Sheets(Workbooks(Destination).Sheets.Count)
    ActiveSheet.Cells.Copy
    ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues
    ActiveSheet.Range("A1").Select
Next



End Sub
 
Re : Supprimer en VBA un module d'un autre classeur

Bonjour,

Je n'ai pas compris votre demande.
Vous voulez, dans un classeur externe, supprimer un module de code VBA ainsi
que le code évènementiel contenu dans ses feuilles ???

Si c'est bien cela, la macro que vous nous montrez n'atteindra pas cet objectif.

Merci de bien vouloir préciser votre volonté.

PMO
Patrick Morange
 
Re : Supprimer en VBA un module d'un autre classeur

Bonjour PMO2

Oui, je sais, je cherche à écrire un module qui à partir d'un fichier excel complexes (comportant des noms,des formules, des modules, des saut de pasges) constitue un fichier EXCEL (pas PDF) ayant la même structure mais sans aucune formules ou modules....

l'exemple ci-dessus réalise une partie du job.
j'ai ajouté un paragraphe pour supprimer les noms

il me manque la suppresion du code évènementiel ...

Merci


Code:
Sub Test()
MonFichier = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
If MonFichier = False Then Exit Sub
Workbooks.Open Filename:=MonFichier
Source = ActiveWorkbook.Name
   
   With Application
       .ScreenUpdating = False
       .DisplayAlerts = False
       .Calculation = xlManual
       .EnableEvents = False
    End With
    
Workbooks(Source).Sheets(1).Copy
Destination = ActiveWorkbook.Name
i = 0
For Each X In Workbooks(Source).Sheets
    i = i + 1
    'suppresion des sauts de pages manuels
    k = X.HPageBreaks.Count
    If k > 1 Then
    
        For J = 1 To X.HPageBreaks.Count
            X.HPageBreaks(J).Delete
        Next J
    End If
    If X.Name <> Workbooks(Source).Sheets(1).Name Then X.Copy After:=Workbooks(Destination).Sheets(Workbooks(Destination).Sheets.Count)
    ActiveSheet.Cells.Copy
    ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues
    ActiveSheet.Range("A1").Select
Next
SuppNom

   With Application
       .CutCopyMode = False
       .ScreenUpdating = True
       .DisplayAlerts = True
       .Calculation = xlManual
       .EnableEvents = True
    End With

End Sub

Sub SuppNom()
For Each n In ActiveWorkbook.Names
        n.Delete
Next
End Sub
 

Pièces jointes

Re : Supprimer en VBA un module d'un autre classeur

Bonsoir tous le monde,

Pour supprimer des macros par macro regarde cette discussion et notamment
la réponse de MichelXLD ==> ICI

Autrement si tu veux approfondir un peu, du même auteur ==> LA

Bonne soirée

A+
 
Re : Supprimer en VBA un module d'un autre classeur

Bonjour,

Une solution avec le code suivant à copier dans un module standard

Code:
'### A adapter (suffixe de la copie du classeur) ###
Const EXTENSION As String = "_Clean.xls"
'###################################################

Sub KillMacroFormuleNomSautPage()
Dim MonFichier
Dim var
Dim WB As Workbook
Dim S As Worksheet
Dim N As Name
Dim R As Range
Dim VBC As Object
Dim i&
Dim j&
Dim A$
Dim ErreurVBide As Boolean
MonFichier = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
If MonFichier = False Then Exit Sub
FileCopy MonFichier, MonFichier & EXTENSION
Set WB = Workbooks.Open(MonFichier & EXTENSION)
On Error GoTo Erreur
      '/// VBE ///
ErreurVBide = True
For i& = WB.VBProject.VBComponents.Count To 1 Step -1
  Set VBC = WB.VBProject.VBComponents(i&)
  If VBC.Type <> 100 Then
      '--- Supprime les modules (standard, classe) ---
    WB.VBProject.VBComponents.Remove VBC
  Else
      '--- Supprime le code associé à chaque feuille ---
    VBC.CodeModule.DeleteLines 1, VBC.CodeModule.CountOfLines
  End If
Next i&
      '/// EXCEL ///
ErreurVBide = False
  '--- Suppression des noms ---
For Each N In WB.Names
  N.Delete
Next
For Each S In WB.Sheets
  '--- Suppression des sauts de pages manuels ---
  For j& = S.HPageBreaks.Count - 1 To 1 Step -1
    S.HPageBreaks(j&).Delete
  Next j&
  '--- Suppression des formules ---
  Set R = S.UsedRange
  var = R
  R = var
Next S
Exit Sub
Erreur:
A$ = "Erreur " & Err.Number & vbCrLf & Err.Description
If ErreurVBide And Err = 1004 Then
  WB.Close savechanges:=False
  Set WB = Nothing
  Kill MonFichier & EXTENSION
  A$ = A$ & vbCrLf & vbCrLf
  A$ = A$ & "Le fichier " & MonFichier & " ne peut être traité. Ouvrez le et :"
  A$ = A$ & vbCrLf & vbCrLf
  A$ = A$ & "1) Affichez la barre d'outils ''Visual Basic'' " & _
     "(clic droit dans la barre de menus/Sélectionner ''Visual Basic'')" & vbCrLf & _
     "2) Faites Sécurité.../Editeurs approuvés et cochez ''Faire confiance au projet Visual Basic''"
End If
MsgBox A$
End Sub

CELA FAIT
1) Ouvre une boîte de dialogue dans laquelle on sélectionne un classeur.xls pour y supprimer
a) Les modules (de classe ou standard)
b) Les codes associés aux feuilles
c) Les sauts de pages
d) Les plages nommées
e) Les formules (remplacées par leur valeur)
2) Fait une copie du classeur avec l'extension "_Clean.xls" (que vous pouvez régler en adaptant la constante EXTENSION)
Ex : le classeur source est Toto.xls , le classeur traité sera Toto.xls_Clean.xls

A NOTER
Dans le cas où le VBE du classeur sélectionné n'est pas accessible, un message d'erreur explique ce qu'il faut faire.
En l'occurrence :
a) clic droit dans la barre de menu puis clic gauche sur Visual Basic
b) dans la barre d'outils de Visual Basic faire Sécurité…/Editeurs approuvés
c) cocher la case Faire confiance au projet Visual Basic

Cordialement.

PMO
Patrick Morange
 
- 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

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
465
Réponses
5
Affichages
929
  • Question Question
Microsoft 365 VBA Transpose
Réponses
11
Affichages
986
Retour