OVH Cloud OVH Cloud

suppression macro

6 réponses
Avatar
jeclephi
Bonjour,
En début d'année j'archive mes fichiers de gestion de compte (en changeant
leur nom) et, aprés cette opération, subsiste une macro "Private Sub
Workbook_Open()" qui n'est plus utile et qui est même génante quand j'ouvre
le fichier archivé. J'ai automatisé l'archivage et je supprime manuellement
cette macro. Je voudrais bien sur automatiser cela aussi mais là j'ai
atteint ma limite. Est ce que quelqu'un connait une solution?
Merci
Jcp

6 réponses

Avatar
michdenis
Bonjour Jeclephi,

Essaie ceci : Évidemment le classeur où est
situé la macro à supprimer doit être ouvert.

'---------------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Sub Workbook_Open"
'Le module où est la macro
ModuleName = "ThisWorkbook"
'Le classeur où est la procédure
Set Wk = Workbooks("Classeur2")

SupprimerProcédure Wk, DeleteSubName, ModuleName
End Sub
'---------------------------------
Sub SupprimerProcédure(Wk As Workbook, _
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 Wk.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
'---------------------------------


Salutations!





"jeclephi" a écrit dans le message de news: %
Bonjour,
En début d'année j'archive mes fichiers de gestion de compte (en changeant
leur nom) et, aprés cette opération, subsiste une macro "Private Sub
Workbook_Open()" qui n'est plus utile et qui est même génante quand j'ouvre
le fichier archivé. J'ai automatisé l'archivage et je supprime manuellement
cette macro. Je voudrais bien sur automatiser cela aussi mais là j'ai
atteint ma limite. Est ce que quelqu'un connait une solution?
Merci
Jcp
Avatar
jeclephi
salut Michdenis,

Je suis ennuyé mais je n'arive pas à lancer ta macro, en effet je n'ai pas
compris certains termes
J'arrive à lancer "sub effacerprocedure" mais la ligne
"With Wk.VBProject.VBComponents(SonModule).CodeModule" de la sub
"supprimerprocédure" me donne la migraine
est ce que je dois mettre les termes mêmes de ton écrits ou bien les
remplacer par une valeur
spécifique?
Je te remercie par avance pour tes éclaircissements sur cela mais j'ai un
autre ennui: mon antivirus qui à l'analyse de l'email n'a rien
dit se déchaine quand je veux refermer, aprés essai, le module où je mets
ta macro, j'ai regardé le paramétrage de l'antivirus mais je n'ai rien
trouvé qui puisse empécher cette action.
Cordialement
Jcp
.
"michdenis" a écrit dans le message de news:

Bonjour Jeclephi,

Essaie ceci : Évidemment le classeur où est
situé la macro à supprimer doit être ouvert.

'---------------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Sub Workbook_Open"
'Le module où est la macro
ModuleName = "ThisWorkbook"
'Le classeur où est la procédure
Set Wk = Workbooks("Classeur2")

SupprimerProcédure Wk, DeleteSubName, ModuleName
End Sub
'---------------------------------
Sub SupprimerProcédure(Wk As Workbook, _
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 Wk.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
'---------------------------------


Salutations!





"jeclephi" a écrit dans le message de
news: %
Bonjour,
En début d'année j'archive mes fichiers de gestion de compte (en changeant
leur nom) et, aprés cette opération, subsiste une macro "Private Sub
Workbook_Open()" qui n'est plus utile et qui est même génante quand
j'ouvre
le fichier archivé. J'ai automatisé l'archivage et je supprime
manuellement
cette macro. Je voudrais bien sur automatiser cela aussi mais là j'ai
atteint ma limite. Est ce que quelqu'un connait une solution?
Merci
Jcp





Avatar
michdenis
Bonjour Jeclephi,

Tu copies les 2 procédures dans un module standard,
et tu lances l'exécution avec cette procédure, tu n'as aucune
modification à faire pour la seconde procédure.

Les seules variables à renseigner sont dans cette procédure.
Évidemment, le classeur où tu veux supprimer une procédure
doit être ouvert.

'-------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Sub Workbook_Open"
'Quel est le nom du module où est la macro
ModuleName = "ThisWorkbook"
'Quel est le nom du classeur où est la procédure
Set Wk = Workbooks("Classeur2")

SupprimerProcédure Wk, DeleteSubName, ModuleName
End Sub
'-------------------------



Si tu préfères, tu peux utiliser cette variante....
avec un code plus concis ! ;-)
'-------------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Workbook_Open"
'Le module où est la macro
'ne pas inclure dans le nom de la procédure le mot "Sub"
ModuleName = "ThisWorkbook"
'Le classeur où est la procédure
Set Wk = Workbooks("Classeur2")
ClearCode Wk, DeleteSubName, ModuleName

End Sub
'-------------------------------
Sub ClearCode(Wk As Workbook, _
SonNom As String, SonModule As String)

If Wk.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next
With Wk.VBProject.VBComponents(SonModule).CodeModule
StartLine = .ProcStartLine(SonNom, 0)
If StartLine Then
LineCount = .ProcCountLines(SonNom, 0)
.DeleteLines StartLine, LineCount
End If
End With

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



Salutations!





"jeclephi" a écrit dans le message de news: %
salut Michdenis,

Je suis ennuyé mais je n'arive pas à lancer ta macro, en effet je n'ai pas
compris certains termes
J'arrive à lancer "sub effacerprocedure" mais la ligne
"With Wk.VBProject.VBComponents(SonModule).CodeModule" de la sub
"supprimerprocédure" me donne la migraine
est ce que je dois mettre les termes mêmes de ton écrits ou bien les
remplacer par une valeur
spécifique?
Je te remercie par avance pour tes éclaircissements sur cela mais j'ai un
autre ennui: mon antivirus qui à l'analyse de l'email n'a rien
dit se déchaine quand je veux refermer, aprés essai, le module où je mets
ta macro, j'ai regardé le paramétrage de l'antivirus mais je n'ai rien
trouvé qui puisse empécher cette action.
Cordialement
Jcp
.
"michdenis" a écrit dans le message de news:

Bonjour Jeclephi,

Essaie ceci : Évidemment le classeur où est
situé la macro à supprimer doit être ouvert.

'---------------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Sub Workbook_Open"
'Le module où est la macro
ModuleName = "ThisWorkbook"
'Le classeur où est la procédure
Set Wk = Workbooks("Classeur2")

SupprimerProcédure Wk, DeleteSubName, ModuleName
End Sub
'---------------------------------
Sub SupprimerProcédure(Wk As Workbook, _
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 Wk.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
'---------------------------------


Salutations!





"jeclephi" a écrit dans le message de
news: %
Bonjour,
En début d'année j'archive mes fichiers de gestion de compte (en changeant
leur nom) et, aprés cette opération, subsiste une macro "Private Sub
Workbook_Open()" qui n'est plus utile et qui est même génante quand
j'ouvre
le fichier archivé. J'ai automatisé l'archivage et je supprime
manuellement
cette macro. Je voudrais bien sur automatiser cela aussi mais là j'ai
atteint ma limite. Est ce que quelqu'un connait une solution?
Merci
Jcp





Avatar
jeclephi
C'est encore moi,
Bonsoir Michdenis
Je te remercie pour tes différentes réponses mais "mon excel" (2002) semble
allergique à la proprièté Vbaproject et me dit "erreur 1004"
'l'accés par programme au code VBa n'est pas fiable' (quelque chose dans ce
goût là). J'ai trouvé le dévérouillage de cette protection dans le menu
Outils->Macro->sécurité->Onglets "sources fiables", cocher "faire confiance
au projet visual basic".
Mai j'ai toujours un problème , je n'arrive pas à rentrer dans la boucle

With Wk.VBProject.VBComponents(SonModule).CodeModule
StartLine = .ProcStartLine(SonNom, 0)
If StartLine Then
LineCount = .ProcCountLines(SonNom, 0)
.DeleteLines StartLine, LineCount
End If
End With


probablement que mes variables sont fausses car startline est toujours égal
à 0.

Je pense que je trouverai avant l'archivage 2007
Bonne soirée
Jeclephi



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

Bonjour Jeclephi,

Tu copies les 2 procédures dans un module standard,
et tu lances l'exécution avec cette procédure, tu n'as aucune
modification à faire pour la seconde procédure.

Les seules variables à renseigner sont dans cette procédure.
Évidemment, le classeur où tu veux supprimer une procédure
doit être ouvert.

'-------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Sub Workbook_Open"
'Quel est le nom du module où est la macro
ModuleName = "ThisWorkbook"
'Quel est le nom du classeur où est la procédure
Set Wk = Workbooks("Classeur2")

SupprimerProcédure Wk, DeleteSubName, ModuleName
End Sub
'-------------------------



Si tu préfères, tu peux utiliser cette variante....
avec un code plus concis ! ;-)
'-------------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Workbook_Open"
'Le module où est la macro
'ne pas inclure dans le nom de la procédure le mot "Sub"
ModuleName = "ThisWorkbook"
'Le classeur où est la procédure
Set Wk = Workbooks("Classeur2")
ClearCode Wk, DeleteSubName, ModuleName

End Sub
'-------------------------------
Sub ClearCode(Wk As Workbook, _
SonNom As String, SonModule As String)

If Wk.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next
With Wk.VBProject.VBComponents(SonModule).CodeModule
StartLine = .ProcStartLine(SonNom, 0)
If StartLine Then
LineCount = .ProcCountLines(SonNom, 0)
.DeleteLines StartLine, LineCount
End If
End With

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



Salutations!




Avatar
michdenis
Bonjour jeclephi,

Tu copies les 2 procédures suivantes dans un module Standard.

La seule procédure à exécuter est : EffacerProcédure.
Dans cette dernière, il y a quelques variables que tu dois
définir selon ton application. C'est tout.

Je ne vois pas ce que je pourrais ajouter !!


'-------------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Workbook_Open"
'Le module où est la macro
'ne pas inclure dans le nom de la procédure le mot "Sub"
ModuleName = "ThisWorkbook"
'Le classeur où est la procédure
Set Wk = Workbooks("Classeur2")
ClearCode Wk, DeleteSubName, ModuleName

End Sub
'-------------------------------
Sub ClearCode(Wk As Workbook, _
SonNom As String, SonModule As String)

If Wk.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next
With Wk.VBProject.VBComponents(SonModule).CodeModule
StartLine = .ProcStartLine(SonNom, 0)
If StartLine Then
LineCount = .ProcCountLines(SonNom, 0)
.DeleteLines StartLine, LineCount
End If
End With

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


Salutations!
Avatar
jeclephi
Bonjour MichDenis,

Merci pour ces renseignements et pour ta partience
Bonne journée
Jeclephi




"michdenis" a écrit dans le message de news:
%
Bonjour jeclephi,

Tu copies les 2 procédures suivantes dans un module Standard.

La seule procédure à exécuter est : EffacerProcédure.
Dans cette dernière, il y a quelques variables que tu dois
définir selon ton application. C'est tout.

Je ne vois pas ce que je pourrais ajouter !!


'-------------------------------
Sub EffacerProcédure()
Dim DeleteSubName As String
Dim ModuleName As String
Dim Wk As Workbook

'Nom de la procédure à effacer
DeleteSubName = "Workbook_Open"
'Le module où est la macro
'ne pas inclure dans le nom de la procédure le mot "Sub"
ModuleName = "ThisWorkbook"
'Le classeur où est la procédure
Set Wk = Workbooks("Classeur2")
ClearCode Wk, DeleteSubName, ModuleName

End Sub
'-------------------------------
Sub ClearCode(Wk As Workbook, _
SonNom As String, SonModule As String)

If Wk.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next
With Wk.VBProject.VBComponents(SonModule).CodeModule
StartLine = .ProcStartLine(SonNom, 0)
If StartLine Then
LineCount = .ProcCountLines(SonNom, 0)
.DeleteLines StartLine, LineCount
End If
End With

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


Salutations!