OVH Cloud OVH Cloud

VBA.Supprimer les macros

10 réponses
Avatar
Hubert
Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les macros de façon a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement

10 réponses

Avatar
Bruno LOUIS
Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse mes codes
:

Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le message de news:

Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les macros de façon
a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement


Avatar
Patrick BASTARD
Bonjour, *Bruno LOUIS*
J'ai lu ton post 41f60e4a$0$18836$ avec le plus
grand intéret :

Et cela m'ouvre des horizons insoupçonnés.

Saurais-tu comment modifier ton code de manière à exclure soit un module,
"Mod1" par exemple, soit une sub "sub1" par exemple, et ce où qu'elle soit
située ?

Une autre solution serait de faire valider ou invalider chaque suppression
(boîte de dialogue).

Bien cordialement,

Patrick.




Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse mes
codes



Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1,
.CountOfLines End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le message
de news:
Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les macros de
façon a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement




Avatar
Bruno LOUIS
Je te recommande le site de F. SIGONNEAU
http://frederic.sigonneau.free.fr/
Tu as pas mal d'exemple concernant la gestion des modules.

Bruno

"Patrick BASTARD" a écrit dans le
message de news:
Bonjour, *Bruno LOUIS*
J'ai lu ton post 41f60e4a$0$18836$ avec le plus
grand intéret :

Et cela m'ouvre des horizons insoupçonnés.

Saurais-tu comment modifier ton code de manière à exclure soit un module,
"Mod1" par exemple, soit une sub "sub1" par exemple, et ce où qu'elle soit
située ?

Une autre solution serait de faire valider ou invalider chaque suppression
(boîte de dialogue).

Bien cordialement,

Patrick.



Avatar
Hubert
Bonjour Bruno
Désolé mais ça ne marche pas, il y a un bug sur la 3eme ligne
With xlWkb.VBProject, et je n'ai pas suffisament de connaissance en VBA pour
resoudre ce problème. J'ai trouvé ça également (désolé c'est un peu long)
Sub SaveAsWithoutMacros()
Dim NomSource$, CheminDest$, NomDest$
Dim VBC As Object

NomSource = "EssaiSaveAs.xls" 'à adapter
CheminDest = "C:WindowsTemp" 'à adapter
NomDest = "Essai.xls" 'à adapter

Workbooks(NomSource).SaveAs CheminDest & NomDest

With ActiveWorkbook.VBProject
'cette partie du code est de Laurent Longre
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC 'LL
End With

Application.Quit
SendKeys "%O"

End Sub

mais j'ai un bug également sur "With ActiveWorkbook.VBProject"
Merci et à bientot
Hubert



"Bruno LOUIS" wrote:

Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse mes codes
:

Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le message de news:

Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les macros de façon
a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement







Avatar
Patrick BASTARD
Merci, *Bruno LOUIS*

Une référence !...

Bien cordialement,

Patrick.


Je te recommande le site de F. SIGONNEAU
http://frederic.sigonneau.free.fr/
Tu as pas mal d'exemple concernant la gestion des modules.



Avatar
Bruno LOUIS
Peux-tu me dire quel message d'erreur tu obtiens ?

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

Bonjour Bruno
Désolé mais ça ne marche pas, il y a un bug sur la 3eme ligne
With xlWkb.VBProject, et je n'ai pas suffisament de connaissance en VBA
pour
resoudre ce problème. J'ai trouvé ça également (désolé c'est un peu long)
Sub SaveAsWithoutMacros()
Dim NomSource$, CheminDest$, NomDest$
Dim VBC As Object

NomSource = "EssaiSaveAs.xls" 'à adapter
CheminDest = "C:WindowsTemp" 'à adapter
NomDest = "Essai.xls" 'à adapter

Workbooks(NomSource).SaveAs CheminDest & NomDest

With ActiveWorkbook.VBProject
'cette partie du code est de Laurent Longre
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC 'LL
End With

Application.Quit
SendKeys "%O"

End Sub

mais j'ai un bug également sur "With ActiveWorkbook.VBProject"
Merci et à bientot
Hubert



"Bruno LOUIS" wrote:

Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse mes
codes
:

Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le message de
news:

Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les macros de
façon
a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement









Avatar
Clément Marcotte
Bonjour,

Dans l'environnement de programmation:

Outils - Références et coche "Visual Basic for Applications
extensibility 5.3"


"Hubert" a écrit dans le message de
news:
Bonjour Bruno
Désolé mais ça ne marche pas, il y a un bug sur la 3eme ligne
With xlWkb.VBProject, et je n'ai pas suffisament de connaissance en
VBA pour

resoudre ce problème. J'ai trouvé ça également (désolé c'est un peu
long)

Sub SaveAsWithoutMacros()
Dim NomSource$, CheminDest$, NomDest$
Dim VBC As Object

NomSource = "EssaiSaveAs.xls" 'à adapter
CheminDest = "C:WindowsTemp" 'à adapter
NomDest = "Essai.xls" 'à adapter

Workbooks(NomSource).SaveAs CheminDest & NomDest

With ActiveWorkbook.VBProject
'cette partie du code est de Laurent Longre
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC 'LL
End With

Application.Quit
SendKeys "%O"

End Sub

mais j'ai un bug également sur "With ActiveWorkbook.VBProject"
Merci et à bientot
Hubert



"Bruno LOUIS" wrote:

Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse
mes codes


:

Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1,
.CountOfLines


End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le
message de news:



Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les
macros de façon



a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement









Avatar
Hubert
Bonjour
Je n'ai pas ça dans la liste, j'ai bien Visual basic for applications qui
apparait 4 fois, mais rien avec
"extensibility 5.3" (je travail avec office 2003).
Merci Cordialement
"Clément Marcotte" wrote:

Bonjour,

Dans l'environnement de programmation:

Outils - Références et coche "Visual Basic for Applications
extensibility 5.3"


"Hubert" a écrit dans le message de
news:
Bonjour Bruno
Désolé mais ça ne marche pas, il y a un bug sur la 3eme ligne
With xlWkb.VBProject, et je n'ai pas suffisament de connaissance en
VBA pour

resoudre ce problème. J'ai trouvé ça également (désolé c'est un peu
long)

Sub SaveAsWithoutMacros()
Dim NomSource$, CheminDest$, NomDest$
Dim VBC As Object

NomSource = "EssaiSaveAs.xls" 'à adapter
CheminDest = "C:WindowsTemp" 'à adapter
NomDest = "Essai.xls" 'à adapter

Workbooks(NomSource).SaveAs CheminDest & NomDest

With ActiveWorkbook.VBProject
'cette partie du code est de Laurent Longre
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC 'LL
End With

Application.Quit
SendKeys "%O"

End Sub

mais j'ai un bug également sur "With ActiveWorkbook.VBProject"
Merci et à bientot
Hubert



"Bruno LOUIS" wrote:

Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse
mes codes


:

Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1,
..CountOfLines


End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le
message de news:



Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les
macros de façon



a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement













Avatar
Hubert
Voici le message d'erreur
Erreur de compilation
Nom ambigu detecté: EffaceModules

Merci


"Bruno LOUIS" wrote:

Peux-tu me dire quel message d'erreur tu obtiens ?

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

Bonjour Bruno
Désolé mais ça ne marche pas, il y a un bug sur la 3eme ligne
With xlWkb.VBProject, et je n'ai pas suffisament de connaissance en VBA
pour
resoudre ce problème. J'ai trouvé ça également (désolé c'est un peu long)
Sub SaveAsWithoutMacros()
Dim NomSource$, CheminDest$, NomDest$
Dim VBC As Object

NomSource = "EssaiSaveAs.xls" 'à adapter
CheminDest = "C:WindowsTemp" 'à adapter
NomDest = "Essai.xls" 'à adapter

Workbooks(NomSource).SaveAs CheminDest & NomDest

With ActiveWorkbook.VBProject
'cette partie du code est de Laurent Longre
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC 'LL
End With

Application.Quit
SendKeys "%O"

End Sub

mais j'ai un bug également sur "With ActiveWorkbook.VBProject"
Merci et à bientot
Hubert



"Bruno LOUIS" wrote:

Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse mes
codes
:

Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le message de
news:

Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les macros de
façon
a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement














Avatar
Bruno LOUIS
Ce message survient lorsque plusieurs procédures, variables ou modules ont
le même nom.

Peux-tu t'assurer qu'aucun module, qu'aucune variable ou qu'aucune autre
procédure ne porte le nom "EffaceModules".

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

Voici le message d'erreur
Erreur de compilation
Nom ambigu detecté: EffaceModules

Merci


"Bruno LOUIS" wrote:

Peux-tu me dire quel message d'erreur tu obtiens ?

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

Bonjour Bruno
Désolé mais ça ne marche pas, il y a un bug sur la 3eme ligne
With xlWkb.VBProject, et je n'ai pas suffisament de connaissance en VBA
pour
resoudre ce problème. J'ai trouvé ça également (désolé c'est un peu
long)
Sub SaveAsWithoutMacros()
Dim NomSource$, CheminDest$, NomDest$
Dim VBC As Object

NomSource = "EssaiSaveAs.xls" 'à adapter
CheminDest = "C:WindowsTemp" 'à adapter
NomDest = "Essai.xls" 'à adapter

Workbooks(NomSource).SaveAs CheminDest & NomDest

With ActiveWorkbook.VBProject
'cette partie du code est de Laurent Longre
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC 'LL
End With

Application.Quit
SendKeys "%O"

End Sub

mais j'ai un bug également sur "With ActiveWorkbook.VBProject"
Merci et à bientot
Hubert



"Bruno LOUIS" wrote:

Salut Hubert,

J'ai déjà fait ça dans un contexte un peu différent. Je t'adresse mes
codes
:

Public Sub EffaceModules(xlWkb As Workbook)
Dim O As Object
With xlWkb.VBProject
For Each O In .VBComponents
Select Case O.Type
Case 1, 2
.VBComponents.Remove O
Case Else
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1,
.CountOfLines
End With
End Select
Next
End With
End Sub

Public Sub test()
Dim xlwk As Excel.Workbook
Set xlwk = Application.Workbooks("Classeur4")
EffaceModules xlwk
End Sub

Cordialement,

Bruno
"Hubert" a écrit dans le message de
news:

Bonjour !
A l'enregistrement d'un classeur je voudrais supprimer les macros de
façon
a
créer un classeur "mort", Est-ce réalisable ?
Merci d'avance
Cordialement