Bonjour,
je cherche comment je peux supprimer tous Codes, Modules, Macro de toutes les feuilles d'un classeur fermé.... à partir d'un autre classeur...
Est es ce que quelqu'un à une idée?
Cordialement
Bonjour,
je cherche comment je peux supprimer tous Codes, Modules, Macro de toutes les feuilles d'un classeur fermé.... à partir d'un autre classeur...
Est es ce que quelqu'un à une idée?
Cordialement
Bonjour
Un début avec http://silkyroad.developpez.com/VBA/VisualBasicEditor/
Tu peux essayer ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Sub SupprimeToutCodeEtFormulaire() Dim VBComp As Object Dim VBComps As Object ChDir "C:\temp" Workbooks.Open Filename:="C:\temp\Classeur2.xls" 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
Bonjour,
n'y a-t-il vraiement pas moyen de faire ça sur un classeur fermé?
Pour l'histoire, j'utilise un classeur avec plein de macro et de codes, que je sauvegarde sur le réseau du boulot...
Le but de la manip c'est de supprimer tous Codes, Modules, Macro de toutes les feuilles du fichier qui est mis sur le réseau.
Pourquoi?---> le fichier qui est sur le réseau, est un fichier qui ne sert qu'a la consultation pour les autres collégues et mon chef... ils n'ont pas a avoir les macros qui mettraient le bazard sur le réseau et leur PC...
Bonjour,
Pour faire, ce genre de manip dans un classeur fermé, je ne peux pas t'aider et je serais intéressé aussi de savoir si c'est possible.
En attendant,si c'est la consultation des macros qui pose problème: tu peux verrouiller leur accès par mot de passe
Sinon tu l'enregistres en tant que classeur sans macro sur ton réseau.
et comment fait-on pour "enregistrer en tant que classeur sans macro", je n'ai pas trouvé cette option....
salut,
la notion de "classeur sans macro" apparait dans la version 2007 d'Excel. Comme tu ne nous a pas donné la version sur laquelle tu travailles, pas évident de proposer LA solution
En quoi la proposition de Questvba ne te convient-elle pas ?
Reste une solution de recopie intégrale des feuilles dans un nouveau classeur vierge et de l'écrasement du fichier vierge de code en fin de processus.
Plus tu nous en dis sur tes contraintes, moins on passera de temps à te proposer des choses qui ne sont pas "faisables" dans ton environnement, et plus la solution apportée sera la plus adéquate à ta problématique.
Merci pour nous
Sous 2010:
- Enregistrer sous: Classeur Excel .xslx
- Une boite de dialogue apparait :"....Voulez vous enregistrer en tant que classeur sans macro?": choisir oui
Et voilou
@ jpcheck
Ta remarque est fort juste, la version d'excel est de 2003.
elle ne me convient pas parce que le fichier doit être ouvert... et dans mon fichier, il y a des macros à l'ouverture (sauvegarde, mise à jour, etc...) et ces macros de sauvegarde stoppe tout et mettent un peu le bazard car il me semble qu'excel ne peut pas exécuter 2 macro en même temps...
Ta proposition de céer un nouveau fichier excel (et d'écraser l'ancien), de copier les contenus des feuilles ainsi que leurs noms est une excellente solution de remplacement... Je prend... et je pense que c'est plus simple...
Comme, je suis nul en programmation et que je fais des plagias... bref que je copie tous ce que je peux en l'adaptant tant bien que mal à mes besoins...
Es ce que tu pourrais me donner un exemple de création de fichier excel (et d'écraser l'ancien), de copier les contenus des feuilles ainsi que leurs noms...
ça serait super sympa de ta part...
Cordialement
Concernant les bouts de code qui se lanceraient à l'ouverture de ton fichier, tu as toujours la solution proposée dans la
http://excel.developpez.com/faq/inde...ctiveEvenement
Re-,
Pourquoi ne mettrais-tu pas un macro qui se lancerait à l'ouverure du fichier consultation par tes collègues et qui détruirait tous les codes vba style:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Sub Auto_Open() 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
Qui t'insulte ?
La création d'un classeur vierge, tu as plein d'exemples en cherchant dans la
http://excel.developpez.com/faq
Bon, je vais arreter de vouloir ré-inventer le fils à couper le beurre...
les insultes que j'avais c'etait pour la fiabilité des projets VBA (j'ai trouvé l'option à activer)....
j'ai utilisé le code de "QuestVba" en l'adaptant avec un autre à mes besoins ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub OuvSuppDesact() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim titre As String 'Chemin complet du classeur fermé titre = ThisWorkbook.Path & "\" & "2.xls" 'Sans Macro " & Environ("username") & " " & ThisWorkbook.Name Application.EnableEvents = False Workbooks.Open (titre), Visible = False Application.Run "2.xls!CopieSansMacro.SuppAllVb" Application.EnableEvents = True Workbooks("2.xls").Close Savechanges:=True End SubEn fait le fichier "2.xls" est un clone de mon fichier de travail (nommé ainsi pour des raisons de feignantise et de rapidité d'écriture)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Sub SuppAllVb() Dim VbComp As Object Dim VbComps As Object Set VbComps = ThisWorkbook.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
la lignefonctionne bien à un détails près....
Code : Sélectionner tout - Visualiser dans une fenêtre à part Application.Run "2.xls!CopieSansMacro.SuppAllVb
Le module "CopieSansMacro" dans le classeur "2.xls" ne s'auto-détruit pas car il est utilisé par le mon fichier de travail par la commande "Application.Run".
Y a-t-il moyen de palier à ce problème?
Pourquoi, j'ai utilisé "Application.Run" tout simplement, moyennant adaptation qui je pense être simple, me permettra de détruire de manière automatique à partir de mon fichier de travail tout les autres modules VB des autres fichiers Excel, sauvegardes etc... se situant dans le bon dossier sur le réseau....
Salut,
il n'est pas possible de demander à un code de s'auto-détruire (même si l'agence niera avoir connaissance de tes actes ).
Il te faut passer par un classeur qui supprimera le code d'un autre classeur
Tu peux par exemple adapter ton code et passer à ta fonction un paramètre du style path du fichier "à nettoyer"
1)
Tu m'as mis le doute.... je viens de faire le test, je ne sais pas comment, mais le code peut s'autodétruire.
Pourquoi il ne s'autodétruit pas quand il est lancé par "Application.Run "2.xls!CopieSansMacro.SuppAllVb" ça je ne sais pas...
2)
es ce que tu pourrais me donner un exemple de (paramètre du style path du fichier "à nettoyer") ?
Merci
Ben un bete procédure avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Sub MaProc(strPathFile As String) 'code qui ouvre le fichier placé à strPathFile ' comme par exemple "C:\monfichierxls.xls" End Sub
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager