Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sup Macro

20 réponses
Avatar
Manu
Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu

10 réponses

1 2
Avatar
Manu
Bonsoir,
J'ai du mal à m'en sortir...
Pour être plus clair,
Ma macro se situe sur un modele xlt et le but entre autre de cette macro est
de faire une copie du fichier actuel avec un autre nom et dans un autre
dossier, mais le soucis est que ce nouveau fichier conserve toujours les
macros et ca, je ne le souhaites pas, je veux que cette copie soit exempt de
toutes macros.

Merci

Manu

"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu



Avatar
MichDenis
Pour supprimer n'importe quelle procédure d'un module quelconque, tu appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu
Avatar
MichDenis
Cette procédure détruit tout le code contenu dans un classeur.
Ceci signifie :
A ) enleve le code contenu dans les modules des feuilles
B ) supprime tous les modules standard et les modules de Classe
C ) supprime tous les formulaires.
D ) supprime le code dans le ThisWorkbook du classeur.

Le classeur doit être ouvert dont tu veux enlever le code doit être
ouvert. Il ne te reste plus qu'à le mentionner dans la présente
procédure en remplaçant "NomDuClasseur.xls" par le nom
dudit classeur.


'--------------------------------
Sub SupprimeToutCodeEtFormulaire()

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp

End Sub
'--------------------------------



"Manu" a écrit dans le message de news:
%
Bonsoir,
J'ai du mal à m'en sortir...
Pour être plus clair,
Ma macro se situe sur un modele xlt et le but entre autre de cette macro est
de faire une copie du fichier actuel avec un autre nom et dans un autre
dossier, mais le soucis est que ce nouveau fichier conserve toujours les
macros et ca, je ne le souhaites pas, je veux que cette copie soit exempt de
toutes macros.

Merci

Manu

"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu



Avatar
Manu
Merci,
En fait mon fichier porte une variable "fichier" que dois je lui dire ?
Ce que tu as mis :
Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents
Ce que j'essais :
Set VBComps = ActiveWorkbook = fichier.VBProject.VBComponents

Mais ca ne fonctionne evidemment pas
Que puis je faire ?

"MichDenis" a écrit dans le message de news:
eiKjf$
Pour supprimer n'importe quelle procédure d'un module quelconque, tu
appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu





Avatar
MichDenis
J'ai ajouté une variable à partir de laquelle tu peux définir
le nom du fichier que tu désires.


'-----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
Dim Fichier As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
Fichier = ThisWorkbook.Name
SupprimerProcédure Fichier, DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(NomFichier As String, _
SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With Workbooks(NomFichier).VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub







"Manu" a écrit dans le message de news:

Merci,
En fait mon fichier porte une variable "fichier" que dois je lui dire ?
Ce que tu as mis :
Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents
Ce que j'essais :
Set VBComps = ActiveWorkbook = fichier.VBProject.VBComponents

Mais ca ne fonctionne evidemment pas
Que puis je faire ?

"MichDenis" a écrit dans le message de news:
eiKjf$
Pour supprimer n'importe quelle procédure d'un module quelconque, tu
appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu





Avatar
Manu
Est ce que cela concerne le : Sub SupprimeToutCodeEtFormulaire()
Car c'est celle ci qui m'interesse
Manu

"MichDenis" a écrit dans le message de news:

J'ai ajouté une variable à partir de laquelle tu peux définir
le nom du fichier que tu désires.


'-----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
Dim Fichier As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
Fichier = ThisWorkbook.Name
SupprimerProcédure Fichier, DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(NomFichier As String, _
SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With Workbooks(NomFichier).VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub







"Manu" a écrit dans le message de news:

Merci,
En fait mon fichier porte une variable "fichier" que dois je lui dire ?
Ce que tu as mis :
Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents
Ce que j'essais :
Set VBComps = ActiveWorkbook = fichier.VBProject.VBComponents

Mais ca ne fonctionne evidemment pas
Que puis je faire ?

"MichDenis" a écrit dans le message de news:
eiKjf$
Pour supprimer n'importe quelle procédure d'un module quelconque, tu
appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu










Avatar
MichDenis
Si c'est cette procédure qui t'intéresse :

Et tu l'appelles de cette façon avec ta variable nommée fichier
SupprimeToutCodeEtFormulaire fichier


'--------------------------------
Sub SupprimeToutCodeEtFormulaire(NomFichier As string)

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(NomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp

End Sub
'--------------------------------




"Manu" a écrit dans le message de news:

Est ce que cela concerne le : Sub SupprimeToutCodeEtFormulaire()
Car c'est celle ci qui m'interesse
Manu

"MichDenis" a écrit dans le message de news:

J'ai ajouté une variable à partir de laquelle tu peux définir
le nom du fichier que tu désires.


'-----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
Dim Fichier As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
Fichier = ThisWorkbook.Name
SupprimerProcédure Fichier, DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(NomFichier As String, _
SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With Workbooks(NomFichier).VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub







"Manu" a écrit dans le message de news:

Merci,
En fait mon fichier porte une variable "fichier" que dois je lui dire ?
Ce que tu as mis :
Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents
Ce que j'essais :
Set VBComps = ActiveWorkbook = fichier.VBProject.VBComponents

Mais ca ne fonctionne evidemment pas
Que puis je faire ?

"MichDenis" a écrit dans le message de news:
eiKjf$
Pour supprimer n'importe quelle procédure d'un module quelconque, tu
appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu










Avatar
Manu
En fait, mon fichier se crée comme ca :
Repertoire = "C:Documents and SettingsAdministrateur"
fichier = "zaza" & _
" - " & Cells(11, 2).Value & "-" & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"
et par consequent je souhaite supprimer toutes les macros de ce fichier
(mais ce n'est jamais le meme nom)

Ais je été clair ?


"MichDenis" a écrit dans le message de news:

J'ai ajouté une variable à partir de laquelle tu peux définir
le nom du fichier que tu désires.


'-----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
Dim Fichier As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
Fichier = ThisWorkbook.Name
SupprimerProcédure Fichier, DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(NomFichier As String, _
SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With Workbooks(NomFichier).VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub







"Manu" a écrit dans le message de news:

Merci,
En fait mon fichier porte une variable "fichier" que dois je lui dire ?
Ce que tu as mis :
Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents
Ce que j'essais :
Set VBComps = ActiveWorkbook = fichier.VBProject.VBComponents

Mais ca ne fonctionne evidemment pas
Que puis je faire ?

"MichDenis" a écrit dans le message de news:
eiKjf$
Pour supprimer n'importe quelle procédure d'un module quelconque, tu
appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu










Avatar
Manu
Impossible ! je pense que c'est parce que j'insere ton code dans un un
workbooks beforeclose et qu'il ne peut se supprimer car il est encore
ouvert.

Peut-etre une autre idée, est t'il possible de supprimer toutes les macros
de divers fichiers dans le meme dossier ?

Merci

Manu

"MichDenis" a écrit dans le message de news:

Si c'est cette procédure qui t'intéresse :

Et tu l'appelles de cette façon avec ta variable nommée fichier
SupprimeToutCodeEtFormulaire fichier


'--------------------------------
Sub SupprimeToutCodeEtFormulaire(NomFichier As string)

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(NomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp

End Sub
'--------------------------------




"Manu" a écrit dans le message de news:

Est ce que cela concerne le : Sub SupprimeToutCodeEtFormulaire()
Car c'est celle ci qui m'interesse
Manu

"MichDenis" a écrit dans le message de news:

J'ai ajouté une variable à partir de laquelle tu peux définir
le nom du fichier que tu désires.


'-----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
Dim Fichier As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
Fichier = ThisWorkbook.Name
SupprimerProcédure Fichier, DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(NomFichier As String, _
SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With Workbooks(NomFichier).VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub







"Manu" a écrit dans le message de news:

Merci,
En fait mon fichier porte une variable "fichier" que dois je lui dire ?
Ce que tu as mis :
Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents
Ce que j'essais :
Set VBComps = ActiveWorkbook = fichier.VBProject.VBComponents

Mais ca ne fonctionne evidemment pas
Que puis je faire ?

"MichDenis" a écrit dans le message de news:
eiKjf$
Pour supprimer n'importe quelle procédure d'un module quelconque, tu
appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme
fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu















Avatar
MichDenis
'----------------------
Sub TaSub()

Dim Repertoire as String
Dim Fichier As string

Repertoire = "C:Documents and SettingsAdministrateur"

fichier = "zaza" & _
" - " & Cells(11, 2).Value & "-" & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

'Enregistre le fichier en cours sous son nouveau nom
ThisWorkbook.Saveas Repertoire & fichier

'Cette ligne appelle la procédure qui détruira toutes tes procédures.
SupprimeToutCodeEtFormulaire fichier

'Enregistre ton fichier après avoir effacé le code.
Workbooks(fichier).Save

End Sub
'----------------------


'--------------------------------
Sub SupprimeToutCodeEtFormulaire(NomFichier As string)

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(NomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp

End Sub
'--------------------------------




"Manu" a écrit dans le message de news:
%
En fait, mon fichier se crée comme ca :
Repertoire = "C:Documents and SettingsAdministrateur"
fichier = "zaza" & _
" - " & Cells(11, 2).Value & "-" & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"
et par consequent je souhaite supprimer toutes les macros de ce fichier
(mais ce n'est jamais le meme nom)

Ais je été clair ?


"MichDenis" a écrit dans le message de news:

J'ai ajouté une variable à partir de laquelle tu peux définir
le nom du fichier que tu désires.


'-----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
Dim Fichier As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
Fichier = ThisWorkbook.Name
SupprimerProcédure Fichier, DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(NomFichier As String, _
SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With Workbooks(NomFichier).VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub







"Manu" a écrit dans le message de news:

Merci,
En fait mon fichier porte une variable "fichier" que dois je lui dire ?
Ce que tu as mis :
Set VBComps = Workbooks("NomDuClasseur.xls").VBProject.VBComponents
Ce que j'essais :
Set VBComps = ActiveWorkbook = fichier.VBProject.VBComponents

Mais ca ne fonctionne evidemment pas
Que puis je faire ?

"MichDenis" a écrit dans le message de news:
eiKjf$
Pour supprimer n'importe quelle procédure d'un module quelconque, tu
appelles la
procédure "Effacer procédure" et tu renseignes les 2 variables :

A ) le nom de la procédure à effacer
B ) le nom du module où elle est située.

Ces 2 Procédures sont à copiées dans un module Standard.

'----------------------------------
Sub EffacerProcédure()

Dim DeleteSubName As String
Dim ModuleName As String
'Variable à renseigner
DeleteSubName = "Sub Workbook_Open"
ModuleName = "ThisWorkbook"
SupprimerProcédure DeleteSubName, ModuleName

End Sub
'----------------------------------
Sub SupprimerProcédure(SonNom As String, SonModule As String)

Dim Début As Integer, Fin As Integer
Dim A As Integer, B As Integer, Nb As Integer
Dim Comp As Object

With ThisWorkbook.VBProject.VBComponents _
(SonModule).CodeModule
Nb = .CountOfLines
For A = 1 To Nb
If InStr(1, .Lines(A, 1), SonNom, _
vbTextCompare) <> 0 Then
Début = A
For B = A + 1 To Nb
If InStr(1, .Lines(B, 1), "End Sub", _
vbTextCompare) <> 0 Then
Fin = B - Début + 1
Exit For
End If
Next
If Fin <> 0 Then
.DeleteLines Début, Fin
Exit Sub
End If
End If
Next
End With
End Sub

'----------------------------------






"Manu" a écrit dans le message de news:

Est t'il possible dans une macro d'en supprimer d'autres du meme fichier,
voir meme d'auto supprimer automatiquement une macro lorsqu'elle à fini
son
boulot.

Sub test()
-----
etc -----
----
-----
Sup cette macro en cours

Merci

Manu










1 2