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

Annuler una macro par une macro

7 réponses
Avatar
Louis
Bonjour

cette macro me permet d'enregistrer le document jouet et d'éliminer le
bouton 3, mais j'aimerai pouvoir supprimer les macros une fois le document
enregistré à l'endroit souhaité.

est ce que quelq'un peux m'aider

Salutations

Sub Macro1()
'

ChDir "C:\"
ActiveWorkbook.SaveAs Filename:="C:\jouet.xls", FileFormat _
:=xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:= _
False, CreateBackup:=False
Windows("jouet.xls").Activate
ActiveSheet.Shapes("Button 3").Select
Selection.Delete
End Sub

7 réponses

Avatar
michdenis
Bonjour,

Voici 2 exemples.

Suppose que tu as une macro événementielle dans le ThisWorkbook.
La ligne de déclaration de cette macro est :
Private Sub Workbook_Open()

La procédure suivante supprime cette procédure du ThisWorkbook
Tu peux la modifier pour supprimer la procédure de ton choix situé
dans le module que tu spécifieras.

'-----------------------------------------------------
Sub ClearThisWorkbookCode()

Dim StartLine As Long, LineCount As Long
If ThisWorkbook.VBProject.Protection Then Exit Sub

On Error Resume Next
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
StartLine = .ProcStartLine("Workbook_Open", 0)
If StartLine Then
LineCount = .ProcCountLines("Workbook_Open", 0)
.DeleteLines StartLine, LineCount
End If
End With
End Sub
'-----------------------------------------------------

Cette procédure supprime tous les modules standards, formulaires (userform)
et tout le code contenu dans les modules Feuille, y compris la procédure
elle-même et son module, et ce, du classeur actif.

'-------------------------------------
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
'-------------------------------------
Avatar
Louis
Bonjour

j'ai installé les macro et elle bug toujours sur les lignes ci-dessous
mentionnées.
faut-il inclure le nom du document ouvert ?

Set VBComps = ActiveWorkbook.VBProject.VBComponents

If ThisWorkbook.VBProject.Protection Then

Salutations

"michdenis" a écrit :

Bonjour,

Voici 2 exemples.

Suppose que tu as une macro événementielle dans le ThisWorkbook.
La ligne de déclaration de cette macro est :
Private Sub Workbook_Open()

La procédure suivante supprime cette procédure du ThisWorkbook
Tu peux la modifier pour supprimer la procédure de ton choix situé
dans le module que tu spécifieras.

'-----------------------------------------------------
Sub ClearThisWorkbookCode()

Dim StartLine As Long, LineCount As Long
If ThisWorkbook.VBProject.Protection Then Exit Sub

On Error Resume Next
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
StartLine = .ProcStartLine("Workbook_Open", 0)
If StartLine Then
LineCount = .ProcCountLines("Workbook_Open", 0)
.DeleteLines StartLine, LineCount
End If
End With
End Sub
'-----------------------------------------------------

Cette procédure supprime tous les modules standards, formulaires (userform)
et tout le code contenu dans les modules Feuille, y compris la procédure
elle-même et son module, et ce, du classeur actif.

'-------------------------------------
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
'-------------------------------------

Avatar
michdenis
Voici un fichier Exemple: http://cjoint.com/?fCahNxbnXW

Avant d'appuyer sur le bouton, regarde dans le Thisworkbook
la petite procédure. C'est cette dernière que la procédure fera
disparaître.





"Louis" a écrit dans le message de groupe
de discussion :
Bonjour

j'ai installé les macro et elle bug toujours sur les lignes ci-dessous
mentionnées.
faut-il inclure le nom du document ouvert ?

Set VBComps = ActiveWorkbook.VBProject.VBComponents

If ThisWorkbook.VBProject.Protection Then

Salutations

"michdenis" a écrit :

Bonjour,

Voici 2 exemples.

Suppose que tu as une macro événementielle dans le ThisWorkbook.
La ligne de déclaration de cette macro est :
Private Sub Workbook_Open()

La procédure suivante supprime cette procédure du ThisWorkbook
Tu peux la modifier pour supprimer la procédure de ton choix situé
dans le module que tu spécifieras.

'-----------------------------------------------------
Sub ClearThisWorkbookCode()

Dim StartLine As Long, LineCount As Long
If ThisWorkbook.VBProject.Protection Then Exit Sub

On Error Resume Next
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
StartLine = .ProcStartLine("Workbook_Open", 0)
If StartLine Then
LineCount = .ProcCountLines("Workbook_Open", 0)
.DeleteLines StartLine, LineCount
End If
End With
End Sub
'-----------------------------------------------------

Cette procédure supprime tous les modules standards, formulaires
(userform)
et tout le code contenu dans les modules Feuille, y compris la procédure
elle-même et son module, et ce, du classeur actif.

'-------------------------------------
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
'-------------------------------------

Avatar
Patrednef
Bonjour Michdenis

En lisant le post, je le trouve très intéressant, mais j'ai une
question (depuis longtemps) à laquelle je ne trouve aucune solution,
je me tourne donc vers les "maîtres" de la chose.

Quand ce code s'effectue, il supprime tous les modules, MAIS si on
souhaite fermer le fichier, alors la question "voulez-vous
enregistrer...." arrive, et si on répond Oui (par la touche Enter)
alors le fichier se ferme et tous les modules ne sont plus la a
l'ouverture, ni même le message d'alerte macro.

Si j'ajoute thisworkbook.close True à la fin, cela ne change rien, il
ferme bien le fichier mais a l'ouverture les macros sont toujours
présentes...ainsi que l'alerte

Comment faire pour que la procédure du classeur efface tous les
modules + ferme en enregistrant ces modifications, et qu'à la ré
ouverture du fichier, il ne reste plus de modules, ni d'alerte macro

J'ai l'impression qu'il ne peut pas se tuer "tout seul" et enregistrer
l'effacement du code autrement qu'en le faisant manuellement

Je m'en remet donc aux meilleurs pour réussir à écrire un Sub qui
pourrait le faire

Je vous remercie d'avance de votre bienveillance,

Un admirateur de nos excellents contributeurs

DRPJ18
Avatar
michdenis
Bonjour,

Voici un fichier exemple : http://cjoint.com/?fCuTx0gLsN

En supposant que ce soit le seul fichier ouvert, il supprime
tout le code, supprime module est formulaire et s'enregistre
en sauvegardant les modifications et ferme Excel.

Évidemment, sauvegarde le code avant de cliquer sur le bouton.

Ce n'était que pour m'amuser... il y a sûrement d'autres façons de procéder!
;-))



"Patrednef" a écrit dans le message de groupe de
discussion :

Bonjour Michdenis

En lisant le post, je le trouve très intéressant, mais j'ai une
question (depuis longtemps) à laquelle je ne trouve aucune solution,
je me tourne donc vers les "maîtres" de la chose.

Quand ce code s'effectue, il supprime tous les modules, MAIS si on
souhaite fermer le fichier, alors la question "voulez-vous
enregistrer...." arrive, et si on répond Oui (par la touche Enter)
alors le fichier se ferme et tous les modules ne sont plus la a
l'ouverture, ni même le message d'alerte macro.

Si j'ajoute thisworkbook.close True à la fin, cela ne change rien, il
ferme bien le fichier mais a l'ouverture les macros sont toujours
présentes...ainsi que l'alerte

Comment faire pour que la procédure du classeur efface tous les
modules + ferme en enregistrant ces modifications, et qu'à la ré
ouverture du fichier, il ne reste plus de modules, ni d'alerte macro

J'ai l'impression qu'il ne peut pas se tuer "tout seul" et enregistrer
l'effacement du code autrement qu'en le faisant manuellement

Je m'en remet donc aux meilleurs pour réussir à écrire un Sub qui
pourrait le faire

Je vous remercie d'avance de votre bienveillance,

Un admirateur de nos excellents contributeurs

DRPJ18
Avatar
Louis
Bonjour

J'ai téléchargé le fichier, mais même ce code bug toujours sur la même ligne.

voici la ligne: If ThisWorkbook.VBProject.Protection Then

est ce que je dois changer le nom du fichier?

"michdenis" a écrit :

Voici un fichier Exemple: http://cjoint.com/?fCahNxbnXW

Avant d'appuyer sur le bouton, regarde dans le Thisworkbook
la petite procédure. C'est cette dernière que la procédure fera
disparaître.





"Louis" a écrit dans le message de groupe
de discussion :
Bonjour

j'ai installé les macro et elle bug toujours sur les lignes ci-dessous
mentionnées.
faut-il inclure le nom du document ouvert ?

Set VBComps = ActiveWorkbook.VBProject.VBComponents

If ThisWorkbook.VBProject.Protection Then

Salutations

"michdenis" a écrit :

> Bonjour,
>
> Voici 2 exemples.
>
> Suppose que tu as une macro événementielle dans le ThisWorkbook.
> La ligne de déclaration de cette macro est :
> Private Sub Workbook_Open()
>
> La procédure suivante supprime cette procédure du ThisWorkbook
> Tu peux la modifier pour supprimer la procédure de ton choix situé
> dans le module que tu spécifieras.
>
> '-----------------------------------------------------
> Sub ClearThisWorkbookCode()
>
> Dim StartLine As Long, LineCount As Long
> If ThisWorkbook.VBProject.Protection Then Exit Sub
>
> On Error Resume Next
> With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
> StartLine = .ProcStartLine("Workbook_Open", 0)
> If StartLine Then
> LineCount = .ProcCountLines("Workbook_Open", 0)
> .DeleteLines StartLine, LineCount
> End If
> End With
> End Sub
> '-----------------------------------------------------
>
> Cette procédure supprime tous les modules standards, formulaires
> (userform)
> et tout le code contenu dans les modules Feuille, y compris la procédure
> elle-même et son module, et ce, du classeur actif.
>
> '-------------------------------------
> 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
> '-------------------------------------
>
Avatar
michdenis
Bonjour,

Quelle est ta version d'Excel ?

À la limite, tu peux enlever cette ligne de code avec le End If
qui lui est associé.
En fait, elle vérifie si le projet VBA est verrouillé dans ce cas, il
est clair que l'on ne peut modifier le code sans déverrouiller le
code.

As-tu vérifié ce qui suit ?

Version Excel 2002 -2003
Barre des menus / outils / Macro / sécurité / Onglet Éditeurs approuvés /
tu dois cocher les 2 cases à cocher dans le bas de la fenêtre

Version Excel 2007
Menu développeur / Groupe : Code / commande Sécurité / et tu coches :
"Trust access to the VBA project object model" (en français)
(désolé, je suis sur une version anglaise)



"Louis" a écrit dans le message de groupe
de discussion :
Bonjour

J'ai téléchargé le fichier, mais même ce code bug toujours sur la même
ligne.

voici la ligne: If ThisWorkbook.VBProject.Protection Then

est ce que je dois changer le nom du fichier?

"michdenis" a écrit :

Voici un fichier Exemple: http://cjoint.com/?fCahNxbnXW

Avant d'appuyer sur le bouton, regarde dans le Thisworkbook
la petite procédure. C'est cette dernière que la procédure fera
disparaître.





"Louis" a écrit dans le message de
groupe
de discussion :
Bonjour

j'ai installé les macro et elle bug toujours sur les lignes ci-dessous
mentionnées.
faut-il inclure le nom du document ouvert ?

Set VBComps = ActiveWorkbook.VBProject.VBComponents

If ThisWorkbook.VBProject.Protection Then

Salutations

"michdenis" a écrit :

> Bonjour,
>
> Voici 2 exemples.
>
> Suppose que tu as une macro événementielle dans le ThisWorkbook.
> La ligne de déclaration de cette macro est :
> Private Sub Workbook_Open()
>
> La procédure suivante supprime cette procédure du ThisWorkbook
> Tu peux la modifier pour supprimer la procédure de ton choix situé
> dans le module que tu spécifieras.
>
> '-----------------------------------------------------
> Sub ClearThisWorkbookCode()
>
> Dim StartLine As Long, LineCount As Long
> If ThisWorkbook.VBProject.Protection Then Exit Sub
>
> On Error Resume Next
> With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
> StartLine = .ProcStartLine("Workbook_Open", 0)
> If StartLine Then
> LineCount = .ProcCountLines("Workbook_Open", 0)
> .DeleteLines StartLine, LineCount
> End If
> End With
> End Sub
> '-----------------------------------------------------
>
> Cette procédure supprime tous les modules standards, formulaires
> (userform)
> et tout le code contenu dans les modules Feuille, y compris la procédure
> elle-même et son module, et ce, du classeur actif.
>
> '-------------------------------------
> 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
> '-------------------------------------
>