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

Suppression de code par VBA

6 réponses
Avatar
BEAUCHAND
Bonjour à tous,

Je travaille avec Excel 2000.

Est-t-il possible par VBA de supprimer le code qui est sur la propriété
CLICK d'un bouton?
Est-t-il également possible de supprimer le code qui est sur ACTIVATE d'une
feuille?

Merci à l'avance!

6 réponses

Avatar
michdenis
Bonjour Beauchand,

Voici un exemple comme supprimer la procédure
"Private Sub Worksheet_Activate()" de la Feuil1

Pour supprimer la procédure événementielle "Click" d'un bouton
tu remplaces dans cette procédure :
A ) Feuil1 par le codename de la feuille où ton ta procédure
B ) Le nom de la procédure "Worksheet_Activate" par
le nom du bouton : Bouton1_Click

'---------------------------
Sub SupprimerUneSub()

If ThisWorkbook.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Feuil1").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

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


Salutations!



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

Bonjour à tous,

Je travaille avec Excel 2000.

Est-t-il possible par VBA de supprimer le code qui est sur la propriété
CLICK d'un bouton?
Est-t-il également possible de supprimer le code qui est sur ACTIVATE d'une
feuille?

Merci à l'avance!
Avatar
BEAUCHAND
Bonjour Michdenis,

Merci, ceci répond exactement à mes besoins.

Juste un hic, je supprime le code de certaines feuilles pour créer un
nouveau "workbook" dans lequel je copie ces feuilles, mais à l'ouverture du
nouveau "workbook" j'ai quand même un message me demandant si je veux
exécuter les macros même si celles-ci n'existe plus.
J'ai fait un test et j'ai supprimé manuellement les espaces vides qui reste
dans chaque procédure "worksheet_Activate" et je ne reçois plus le message
par la suite.
Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Merci à l'avance!

"michdenis" wrote:

Bonjour Beauchand,

Voici un exemple comme supprimer la procédure
"Private Sub Worksheet_Activate()" de la Feuil1

Pour supprimer la procédure événementielle "Click" d'un bouton
tu remplaces dans cette procédure :
A ) Feuil1 par le codename de la feuille où ton ta procédure
B ) Le nom de la procédure "Worksheet_Activate" par
le nom du bouton : Bouton1_Click

'---------------------------
Sub SupprimerUneSub()

If ThisWorkbook.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Feuil1").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

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


Salutations!



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

Bonjour à tous,

Je travaille avec Excel 2000.

Est-t-il possible par VBA de supprimer le code qui est sur la propriété
CLICK d'un bouton?
Est-t-il également possible de supprimer le code qui est sur ACTIVATE d'une
feuille?

Merci à l'avance!





Avatar
michdenis
| Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Pour éviter d'avoir ce message à l'ouverture du classeur, le classeur
en plus de n'avoir aucune macro, il ne soit pas y avoir de module
standard, module de classe ou de formulaire (userform).

La suppression du code n'est pas suffisante !

Voici une macro que tu peux utiliser pour supprimer tout le code et
les modules d'un classeur :

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

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = ActiveWorkbook.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
'---------------------------------------


Salutations!


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

Bonjour Michdenis,

Merci, ceci répond exactement à mes besoins.

Juste un hic, je supprime le code de certaines feuilles pour créer un
nouveau "workbook" dans lequel je copie ces feuilles, mais à l'ouverture du
nouveau "workbook" j'ai quand même un message me demandant si je veux
exécuter les macros même si celles-ci n'existe plus.
J'ai fait un test et j'ai supprimé manuellement les espaces vides qui reste
dans chaque procédure "worksheet_Activate" et je ne reçois plus le message
par la suite.
Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Merci à l'avance!

"michdenis" wrote:

Bonjour Beauchand,

Voici un exemple comme supprimer la procédure
"Private Sub Worksheet_Activate()" de la Feuil1

Pour supprimer la procédure événementielle "Click" d'un bouton
tu remplaces dans cette procédure :
A ) Feuil1 par le codename de la feuille où ton ta procédure
B ) Le nom de la procédure "Worksheet_Activate" par
le nom du bouton : Bouton1_Click

'---------------------------
Sub SupprimerUneSub()

If ThisWorkbook.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Feuil1").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

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


Salutations!



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

Bonjour à tous,

Je travaille avec Excel 2000.

Est-t-il possible par VBA de supprimer le code qui est sur la propriété
CLICK d'un bouton?
Est-t-il également possible de supprimer le code qui est sur ACTIVATE d'une
feuille?

Merci à l'avance!





Avatar
BEAUCHAND
Bonjour michdenis,
J'ai essayé ton code mais j'ai quand même le message.

Bonne fin de journée!

"michdenis" wrote:


| Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Pour éviter d'avoir ce message à l'ouverture du classeur, le classeur
en plus de n'avoir aucune macro, il ne soit pas y avoir de module
standard, module de classe ou de formulaire (userform).

La suppression du code n'est pas suffisante !

Voici une macro que tu peux utiliser pour supprimer tout le code et
les modules d'un classeur :

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

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = ActiveWorkbook.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
'---------------------------------------


Salutations!


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

Bonjour Michdenis,

Merci, ceci répond exactement à mes besoins.

Juste un hic, je supprime le code de certaines feuilles pour créer un
nouveau "workbook" dans lequel je copie ces feuilles, mais à l'ouverture du
nouveau "workbook" j'ai quand même un message me demandant si je veux
exécuter les macros même si celles-ci n'existe plus.
J'ai fait un test et j'ai supprimé manuellement les espaces vides qui reste
dans chaque procédure "worksheet_Activate" et je ne reçois plus le message
par la suite.
Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Merci à l'avance!

"michdenis" wrote:

Bonjour Beauchand,

Voici un exemple comme supprimer la procédure
"Private Sub Worksheet_Activate()" de la Feuil1

Pour supprimer la procédure événementielle "Click" d'un bouton
tu remplaces dans cette procédure :
A ) Feuil1 par le codename de la feuille où ton ta procédure
B ) Le nom de la procédure "Worksheet_Activate" par
le nom du bouton : Bouton1_Click

'---------------------------
Sub SupprimerUneSub()

If ThisWorkbook.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Feuil1").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

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


Salutations!



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

Bonjour à tous,

Je travaille avec Excel 2000.

Est-t-il possible par VBA de supprimer le code qui est sur la propriété
CLICK d'un bouton?
Est-t-il également possible de supprimer le code qui est sur ACTIVATE d'une
feuille?

Merci à l'avance!










Avatar
michdenis
Bonjour.,

| Juste un hic, je supprime le code de certaines feuilles pour créer un
| nouveau "workbook"

La procédure que je t'ai donnée supprime tout le code associé au
classeur actif. Si tu fermes le classeur en l'enregistrant, il n'y a aucune
raison pour que cette question te soit posée.

Lorsque tu ouvres ce classeur, est-ce qu'il y a la présence d'un bout
de code dans la fenêtre VBE (visual basic editor) dans ton classeur ?
Est-ce qu'il y a la présence d'un module Standard ou module de classse ? même vide ?
Est-ce que ce classeur possède un formulaire (userform) ?

Si tu réponds "Non" à toutes ces questions...Tu devras donner plus de détails
sur ce que tu fais... car c'est là un comportement "anormal" d'excel.


Salutations!



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

Bonjour michdenis,
J'ai essayé ton code mais j'ai quand même le message.

Bonne fin de journée!

"michdenis" wrote:


| Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Pour éviter d'avoir ce message à l'ouverture du classeur, le classeur
en plus de n'avoir aucune macro, il ne soit pas y avoir de module
standard, module de classe ou de formulaire (userform).

La suppression du code n'est pas suffisante !

Voici une macro que tu peux utiliser pour supprimer tout le code et
les modules d'un classeur :

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

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = ActiveWorkbook.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
'---------------------------------------


Salutations!


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

Bonjour Michdenis,

Merci, ceci répond exactement à mes besoins.

Juste un hic, je supprime le code de certaines feuilles pour créer un
nouveau "workbook" dans lequel je copie ces feuilles, mais à l'ouverture du
nouveau "workbook" j'ai quand même un message me demandant si je veux
exécuter les macros même si celles-ci n'existe plus.
J'ai fait un test et j'ai supprimé manuellement les espaces vides qui reste
dans chaque procédure "worksheet_Activate" et je ne reçois plus le message
par la suite.
Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Merci à l'avance!

"michdenis" wrote:

Bonjour Beauchand,

Voici un exemple comme supprimer la procédure
"Private Sub Worksheet_Activate()" de la Feuil1

Pour supprimer la procédure événementielle "Click" d'un bouton
tu remplaces dans cette procédure :
A ) Feuil1 par le codename de la feuille où ton ta procédure
B ) Le nom de la procédure "Worksheet_Activate" par
le nom du bouton : Bouton1_Click

'---------------------------
Sub SupprimerUneSub()

If ThisWorkbook.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Feuil1").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

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


Salutations!



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

Bonjour à tous,

Je travaille avec Excel 2000.

Est-t-il possible par VBA de supprimer le code qui est sur la propriété
CLICK d'un bouton?
Est-t-il également possible de supprimer le code qui est sur ACTIVATE d'une
feuille?

Merci à l'avance!










Avatar
BEAUCHAND
Bonjour Michdenis,
Je dois répondre NON à toutes tes questions.
Voici en détail ce que je fais:
Je copie 3 feuilles dans un nouveau "Workbook" puis je garde seulement les
valeurs du contenu des cellules.
Ensuite je supprime le code d'un bouton qui est dans chaque feuille puis le
code qui est dans "Worksheet_Activate" de chaque feuille.
Je supprime aussi le bouton qui est dans chaque feuille.
Je sauvegarde sous un nouveau nom et je ferme le nouveau "workbook".
Voici le code utilisé:

Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
'Déactivation des macros de worksheet
Application.EnableEvents = False

Dim pathstr As String
'date du cashbook
Dim D
D = Sheets("Menu").Range("LaDate")

'Le chemin du nouveau workbook
pathstr = "G:BalancingCashbooksLBC CASHBOOK - NEW VERSIONSMASTERLBC
CB E-Mail"

'Copie l'info de 3 worksheets dans le nouveau workbook
Sheets(Array("Sundry", "Proof", "CCIN")).Select
Sheets("CCIN").Activate
Sheets(Array("Sundry", "Proof", "CCIN")).Copy


'Enlève les fonctions et garde seulement la valeur des cellules
Sheets("Sundry").Unprotect
Sheets("Sundry").Select
Sheets("Sundry").Range("A1:E23").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False

'suppression du code du bouton MENU et du code de la worksheet
If ThisWorkbook.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Sheet2").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

With ActiveWorkbook.VBProject.VBComponents("Sheet2").CodeModule
StartLine = .ProcStartLine("CommandButton1_Click", 0)
If StartLine Then
LineCount = .ProcCountLines("CommandButton1_Click", 0)
.DeleteLines StartLine, LineCount
End If
End With
'suppression du bouton MENU
ActiveSheet.Shapes("CommandButton1").Select
Selection.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Sheets("Proof").Unprotect
Sheets("Proof").Select
Sheets("Proof").Range("A1:E16").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False

'suppression du code du bouton MENU et du code de la worksheet
If ThisWorkbook.VBProject.Protection Then Exit Sub
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Sheet3").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

With ActiveWorkbook.VBProject.VBComponents("Sheet3").CodeModule
StartLine = .ProcStartLine("CommandButton1_Click", 0)
If StartLine Then
LineCount = .ProcCountLines("CommandButton1_Click", 0)
.DeleteLines StartLine, LineCount
End If
End With

'suppression du bouton MENU
ActiveSheet.Shapes("CommandButton1").Select
Selection.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Sheets("CCIN").Unprotect
Sheets("CCIN").Select
Sheets("CCIN").Range("A1:E17").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False

'suppression du code du bouton MENU et du code de la worksheet
If ThisWorkbook.VBProject.Protection Then Exit Sub
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Sheet10").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

With ActiveWorkbook.VBProject.VBComponents("Sheet10").CodeModule
StartLine = .ProcStartLine("CommandButton1_Click", 0)
If StartLine Then
LineCount = .ProcCountLines("CommandButton1_Click", 0)
.DeleteLines StartLine, LineCount
End If
End With

'suppression du bouton MENU
ActiveSheet.Shapes("CommandButton1").Select
Selection.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

'Réactivation des macros de workshet
Application.EnableEvents = True

'Remise de la méthode de calcul à automatique
'et sauvegarde du nouveau workbook avec la date ajoutée au nom
On Error Resume Next
With Application
.Calculation = xlAutomatic
End With
ActiveWorkbook.SaveAs Filename:=pathstr & "BMO Cdn " & Format(D, "mmm dd
yyyy")

'Fermeture du nouveau workbook
ActiveWorkbook.Close

'Sélection de la worksheet "MENU"
Sheets("Menu").Select
End Sub

"michdenis" wrote:

Bonjour.,

| Juste un hic, je supprime le code de certaines feuilles pour créer un
| nouveau "workbook"

La procédure que je t'ai donnée supprime tout le code associé au
classeur actif. Si tu fermes le classeur en l'enregistrant, il n'y a aucune
raison pour que cette question te soit posée.

Lorsque tu ouvres ce classeur, est-ce qu'il y a la présence d'un bout
de code dans la fenêtre VBE (visual basic editor) dans ton classeur ?
Est-ce qu'il y a la présence d'un module Standard ou module de classse ? même vide ?
Est-ce que ce classeur possède un formulaire (userform) ?

Si tu réponds "Non" à toutes ces questions...Tu devras donner plus de détails
sur ce que tu fais... car c'est là un comportement "anormal" d'excel.


Salutations!



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

Bonjour michdenis,
J'ai essayé ton code mais j'ai quand même le message.

Bonne fin de journée!

"michdenis" wrote:


| Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Pour éviter d'avoir ce message à l'ouverture du classeur, le classeur
en plus de n'avoir aucune macro, il ne soit pas y avoir de module
standard, module de classe ou de formulaire (userform).

La suppression du code n'est pas suffisante !

Voici une macro que tu peux utiliser pour supprimer tout le code et
les modules d'un classeur :

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

Dim VBComp As Object
Dim VBComps As Object

Set VBComps = ActiveWorkbook.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
'---------------------------------------


Salutations!


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

Bonjour Michdenis,

Merci, ceci répond exactement à mes besoins.

Juste un hic, je supprime le code de certaines feuilles pour créer un
nouveau "workbook" dans lequel je copie ces feuilles, mais à l'ouverture du
nouveau "workbook" j'ai quand même un message me demandant si je veux
exécuter les macros même si celles-ci n'existe plus.
J'ai fait un test et j'ai supprimé manuellement les espaces vides qui reste
dans chaque procédure "worksheet_Activate" et je ne reçois plus le message
par la suite.
Y-a-t-il un moyen de supprimer complètement ces espaces vides?

Merci à l'avance!

"michdenis" wrote:

Bonjour Beauchand,

Voici un exemple comme supprimer la procédure
"Private Sub Worksheet_Activate()" de la Feuil1

Pour supprimer la procédure événementielle "Click" d'un bouton
tu remplaces dans cette procédure :
A ) Feuil1 par le codename de la feuille où ton ta procédure
B ) Le nom de la procédure "Worksheet_Activate" par
le nom du bouton : Bouton1_Click

'---------------------------
Sub SupprimerUneSub()

If ThisWorkbook.VBProject.Protection Then Exit Sub
Dim StartLine As Long, LineCount As Long
On Error Resume Next

'Feuil1 = CodeName de la feuille
'Nom de l'objet "Feuil" dans la fenêtre VBE et non
'l'onglet de la feuille
With ActiveWorkbook.VBProject.VBComponents("Feuil1").CodeModule
StartLine = .ProcStartLine("Worksheet_Activate", 0)
If StartLine Then
LineCount = .ProcCountLines("Worksheet_Activate", 0)
.DeleteLines StartLine, LineCount
End If
End With

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




Merci!


Salutations!



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

Bonjour à tous,

Je travaille avec Excel 2000.

Est-t-il possible par VBA de supprimer le code qui est sur la propriété
CLICK d'un bouton?
Est-t-il également possible de supprimer le code qui est sur ACTIVATE d'une
feuille?

Merci à l'avance!