OVH Cloud OVH Cloud

Alleger un classeur

6 réponses
Avatar
Michael
Salut tout le monde !

Une question (encore!) j'ai dans mon classeur des (tonnes de) macros qui
servent
en fait à remplir automatiquement un dossier.
Une fois le dossier rempli, toutes ces macros, userform etc... pesent quand
meme
assez lourd dans mon fichier.
Je souhaiterais donc, apres un évenement BeforeSave, supprimer tous les
modules,
userforms voire meme si possible absolument tout le code y compris celui
des worksheets pour n'en faire plus qu'un classeur "mort".

Une idée ? une piste ?
Merci d'avance !

6 réponses

Avatar
FxM
Michael wrote:

Salut tout le monde !

Une question (encore!) j'ai dans mon classeur des (tonnes de) macros qui
servent
en fait à remplir automatiquement un dossier.
Une fois le dossier rempli, toutes ces macros, userform etc... pesent quand
meme
assez lourd dans mon fichier.
Je souhaiterais donc, apres un évenement BeforeSave, supprimer tous les
modules,
userforms voire meme si possible absolument tout le code y compris celui
des worksheets pour n'en faire plus qu'un classeur "mort".

Une idée ? une piste ?
Merci d'avance !



Bonjour,


Au final, ne serait-il pas plus facile de copier les données et la mise
en page dans un autre classeur ?

@+
FxM

Avatar
Michael
En effet l'idée n'est pas mauvaise mais assez compliquée je pense

1- Faire un nouveau classeur du meme nom (toto.xls)
2- Copier toutes les feuilles
3- Fermer le classeur en cours
4- Enregistrer le nouveau Toto.xls qui doit remplacer l'autre...

Sachant que je cherche à avoir le moins de manips et d'avertissements
possible pour l'utilisateur Dur Dur je pense...à moins que tu ne me prouve
le contraire...

Merci qd meme !
Avatar
FxM
Michael wrote:

En effet l'idée n'est pas mauvaise mais assez compliquée je pense
Moui :o)


1- Faire un nouveau classeur du meme nom (toto.xls)
Excel va hurler avec deux classeurs du même nom


2- Copier toutes les feuilles
tss, tss, le contenu et la mise en forme


3- Fermer le classeur en cours
Arggh ... le code va s'arrêter


4- Enregistrer le nouveau Toto.xls qui doit remplacer l'autre...
Si tu remplaces le fichier, plus de fichier original ! et donc plus de code.


Sachant que je cherche à avoir le moins de manips et d'avertissements
possible pour l'utilisateur Dur Dur je pense...à moins que tu ne me prouve
le contraire...


OK, enlever tout ce qu'il ne faut pas :
- Parcourir toutes les pages pour enlever le code VBA
- Enlever le ou les modules, sans oublier ThisWorkbook
- Enlever les userforms
- Enregistrer le fichier (même remarque pour le nom)

Le tout avec :
- un anti-virus qui va hurler constamment que CodeModule est une
instruction hyper-risquée,
- le risque de plantage du code et donc de dommages au fichier original.

... c'est toi qui vois.

Merci qd meme !
Yapadmal :o)


@+
FxM qui n'a plus rien à prouver

Avatar
Michael
Désolé, j'ai trouvé des exemples à la pelle...

Pour ceux que ça interesse...

http://frederic.sigonneau.free.fr/VBE.htm
Avatar
Michael
ptdr merci qd meme pour ton post FxM
Avatar
michdenis
Bonjour Michael,

Pour supprimer toute trace de ligne de code, formulaire, module standard ou de classe, ceci devrait être suffisant :


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



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

Salut tout le monde !

Une question (encore!) j'ai dans mon classeur des (tonnes de) macros qui
servent
en fait à remplir automatiquement un dossier.
Une fois le dossier rempli, toutes ces macros, userform etc... pesent quand
meme
assez lourd dans mon fichier.
Je souhaiterais donc, apres un évenement BeforeSave, supprimer tous les
modules,
userforms voire meme si possible absolument tout le code y compris celui
des worksheets pour n'en faire plus qu'un classeur "mort".

Une idée ? une piste ?
Merci d'avance !